diff --git a/app/about/page.tsx b/app/about/page.tsx index bcaf19f..8f065bb 100644 --- a/app/about/page.tsx +++ b/app/about/page.tsx @@ -15,12 +15,12 @@ export const metadata: Metadata = { const strengths = [ { title: "Full-stack engineering", - description: "I can set up the backend, design the database, build the API, and ship the frontend. I've also handled infra, deployments, and compliance logic — whatever the project needs.", + description: "I can set up the backend, design the database, build the API, and ship the frontend myself. I've also handled infra, deployments, and compliance logic when a project needed it.", icon: "⚙️", }, { title: "Frontend that feels right", - description: "Most of my frontend work is in React and Next.js. I care about performance, accessibility, and getting the details right, not just making it work.", + description: "Most of my frontend work is in React and Next.js. Getting a feature working is the easy part. Once it works, most of my time goes into performance and accessibility.", icon: "🎨", }, { @@ -30,7 +30,7 @@ const strengths = [ }, { title: "Getting it in front of people", - description: "I've worked on onboarding flows, technical SEO, analytics, and acquisition tooling. Shipping something that nobody uses isn't really shipping.", + description: "I've worked on onboarding flows and technical SEO at Fubo and Winuall, plus analytics and acquisition tooling at FactoStack. Shipping something nobody uses isn't really shipping.", icon: "📈", }, ]; @@ -74,25 +74,25 @@ const techCategories = [ const experienceSummaries: Record = { fubo: { - summary: "Working on frontend features, playback, and technical SEO for Fubo and Molotov. One navigation refactor cleared over 50,000 broken URLs from Google Search Console.", + summary: "I work on frontend features, video playback, and technical SEO for Fubo and Molotov. One navigation refactor I shipped cleared over 50,000 broken URLs from Google Search Console.", highlights: [ - "Rebuilt Molotov navigation — cleared 50,000+ broken URLs", + "Rebuilt Molotov navigation, clearing 50,000+ broken URLs", "AI-powered live sports highlights for NBA games", "Frame-accurate seeking in VideoJS for HLS/DASH", "Structured data & SEO for program listing pages", ], }, winuall: { - summary: "Built storefronts, learning products, onboarding flows, and shared frontend components across a platform used by over 2,000 tutors.", + summary: "I built storefronts, learning products, onboarding flows, and shared frontend components for a platform used by more than 2,000 tutors.", highlights: [ "Online Store enabling 2,000+ tutors to sell products", "Onboarding system for 3,000+ paying users", "30% performance boost via code splitting", - "Migrated legacy app to SSR — 60% SEO improvement", + "Migrated legacy app to SSR, improving SEO score by 60%", ], }, teal: { - summary: "Worked on a consumer product, built a Gatsby and Ghost publishing site, and wrote end-to-end tests.", + summary: "I worked on a consumer product, built a Gatsby and Ghost publishing site, and wrote end-to-end tests.", highlights: [ "Built Tealcheck B2C product from scratch", "Deployed Regcheck with Ghost CMS and Gatsby", @@ -100,7 +100,7 @@ const experienceSummaries: Record

About

-

I build things end-to-end — and I've been doing it for five years.

+

I build things end to end, and I've been doing it for five years.

Right now I'm a Software Engineer 2 at Fubo, and I'm also building FactoStack on the side. The two are pretty different, and I think that's made me a better engineer.

@@ -137,10 +137,10 @@ export default function AboutPage() { Engineering at scale, and from scratch.

- At Fubo I work on a large team with real engineering constraints — performance budgets, accessibility standards, SEO at scale. One navigation refactor I shipped cleared over 50,000 broken URLs from Google Search Console. This is what disciplined, production-grade engineering looks like. + At Fubo I work on a large team with real constraints: performance budgets, accessibility bars to clear, SEO that has to hold up at scale. One navigation refactor I shipped cleared over 50,000 broken URLs from Google Search Console. That's most of what the job actually looks like.

- FactoStack is where I own everything — product decisions, architecture, compliance logic, deployments, and customer conversations. No handoffs, no product manager. Building both has sharpened my instincts in ways that neither alone could. + FactoStack is the opposite. There's no product manager and nobody to hand things off to, so product decisions, architecture, and customer conversations are all mine. Doing both jobs at once has sharpened my instincts more than either one alone would have.

@@ -163,7 +163,7 @@ export default function AboutPage() {

Tech stack

What I build with.

-

These are the tools I reach for day-to-day — not a résumé keyword list, but the actual stack I've shipped production software with.

+

These are the tools I actually reach for day to day, not a résumé keyword list.

{techCategories.map(({ category, items }) => ( @@ -189,7 +189,7 @@ export default function AboutPage() {

Experience

Where I've worked.

-

Five years across streaming, education, consumer products, and internal operations.

+

Five years split mostly between streaming and education, plus a consumer product and internal tooling early on.

{experiences.map((experience) => { @@ -209,7 +209,7 @@ export default function AboutPage() { )}
- {experience.period.start} — {experience.period.end} + {experience.period.start} – {experience.period.end}
{experience.roles && ( @@ -232,7 +232,7 @@ export default function AboutPage() { )}

- {role.start} — {role.end} + {role.start} – {role.end}

diff --git a/app/layout.tsx b/app/layout.tsx index 76cdcf0..5b904d9 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -17,22 +17,22 @@ const playfairDisplay = Playfair_Display({ export const metadata: Metadata = { metadataBase: new URL("https://sudharsangs.in"), - title: "Sudharsan GS — Full-Stack Engineer | Fubo · FactoStack · Winuall", - description: "Full-stack product engineer with 5 years across Fubo, FactoStack, and Winuall. I take operations-heavy problems to production end to end — ERP, SaaS, streaming, and technical SEO.", + title: "Sudharsan GS, Product Engineer | Fubo · FactoStack · Winuall", + description: "Product engineer with five years across Fubo, FactoStack, and Winuall. I build operations-heavy software end to end, from a manufacturing ERP to streaming interfaces, and handle the technical SEO that gets it found.", authors: [{ name: "Sudharsan GS" }], creator: "Sudharsan GS", openGraph: { type: "website", locale: "en_IN", url: "/", - title: "Sudharsan GS — Full-Stack Engineer | Fubo · FactoStack · Winuall", - description: "Full-stack product engineer with 5 years across Fubo, FactoStack, and Winuall. I take operations-heavy problems to production end to end — ERP, SaaS, streaming, and technical SEO.", + title: "Sudharsan GS, Product Engineer | Fubo · FactoStack · Winuall", + description: "Product engineer with five years across Fubo, FactoStack, and Winuall. I build operations-heavy software end to end, from a manufacturing ERP to streaming interfaces, and handle the technical SEO that gets it found.", siteName: "Sudharsan GS", }, twitter: { card: "summary_large_image", - title: "Sudharsan GS — Full-Stack Engineer | Fubo · FactoStack · Winuall", - description: "Full-stack product engineer with 5 years across Fubo, FactoStack, and Winuall. I take operations-heavy problems to production end to end — ERP, SaaS, streaming, and technical SEO.", + title: "Sudharsan GS, Product Engineer | Fubo · FactoStack · Winuall", + description: "Product engineer with five years across Fubo, FactoStack, and Winuall. I build operations-heavy software end to end, from a manufacturing ERP to streaming interfaces, and handle the technical SEO that gets it found.", creator: "@sudharsangs", }, }; diff --git a/app/opengraph-image.tsx b/app/opengraph-image.tsx index 74748c6..68d7b26 100644 --- a/app/opengraph-image.tsx +++ b/app/opengraph-image.tsx @@ -1,7 +1,7 @@ import { ImageResponse } from "next/og"; export const runtime = "edge"; -export const alt = "Sudharsan GS — Full-Stack Engineer"; +export const alt = "Sudharsan GS, Product Engineer"; export const size = { width: 1200, height: 630 }; export const contentType = "image/png"; @@ -58,7 +58,7 @@ export default function OGImage() { maxWidth: "860px", }} > - Full-stack product engineer — Fubo · FactoStack · Winuall + Five years shipping production software at Fubo, FactoStack, and Winuall
QuickPicks — create a pick in 30 seconds diff --git a/app/projects/independent/unlocker/page.tsx b/app/projects/independent/unlocker/page.tsx index 029d2a7..8c9c9af 100644 --- a/app/projects/independent/unlocker/page.tsx +++ b/app/projects/independent/unlocker/page.tsx @@ -35,8 +35,8 @@ export default function UnlockerPage() { "Stripe Connect integration for marketplace payments with direct payouts to experts", "JWT authentication with role-based access control for users, experts, and admins" ], - problemStatement: "The sports betting advisory industry suffers from fake claims, cherry-picked results, and zero accountability. Bettors lack verification methods for expert claims, while legitimate experts struggle to build sustainable businesses with difficulty proving legitimacy and no professional monetization platform.", - solution: "A transparent marketplace where every pick, result, and performance metric is publicly tracked and verified. Experts build reputations through provable consistent results, enabling trust-driven conversions and sustainable recurring revenue.", + problemStatement: "The sports betting advisory industry runs on fake claims, cherry-picked results, and zero accountability. Bettors have no way to verify an expert's track record, and the legitimate experts have no real platform to build a business on.", + solution: "A marketplace where every pick, result, and performance metric is public and verified. Experts build a track record they can actually point to, which is what gets someone to subscribe and keep subscribing.", challenges: [ { title: "Stripe Connect Integration", @@ -77,7 +77,7 @@ export default function UnlockerPage() {
Unlocker marketplace — all experts listing diff --git a/app/projects/page.tsx b/app/projects/page.tsx index d40698e..216ee20 100644 --- a/app/projects/page.tsx +++ b/app/projects/page.tsx @@ -17,7 +17,7 @@ const groups = [ eyebrow: "Full-time work", navLabel: "Fubo and Winuall", title: "Work at Fubo, Molotov, and Winuall", - description: "Frontend and product work across streaming, video, education, e-commerce, onboarding, and technical SEO.", + description: "Frontend and product work at Fubo, Molotov, and Winuall, spanning streaming video, e-commerce, and onboarding.", projects: pick(["molotov-program-list-pages", "molotov-navbar-redesign", "molotov-evergreen-program-pages", "winuall-apps"]), }, { @@ -50,7 +50,7 @@ export default function ProjectsPage() {

Projects

-

Frontend, full-stack, and product work.

+

Full-stack and product work.

A selection of things I’ve built at work, for clients, and on my own.

diff --git a/app/projects/personal/factostack-platform/page.tsx b/app/projects/personal/factostack-platform/page.tsx index bcf3b83..fd4996c 100644 --- a/app/projects/personal/factostack-platform/page.tsx +++ b/app/projects/personal/factostack-platform/page.tsx @@ -54,7 +54,7 @@ const highlights = [ { title: "Built around real MSME constraints", description: - "The product engineering work goes beyond generic ERP screens. The implemented routes cover Indian factory issues such as MSME payment deadlines, ITC risk, GST exports, receivables aging, and lender-style credit scoring.", + "I didn't want generic ERP screens, so the routes are built around actual Indian factory problems: MSME payment deadlines, ITC risk, GST exports, receivables aging, and lender-style credit scoring.", }, { title: "Operator and owner workflows in one app", @@ -69,7 +69,7 @@ const highlights = [ ]; const results = [ - "The product is still early-stage, so I describe it as a platform in validation rather than claiming scaled business impact that does not exist yet.", + "The product is still early. I'd rather call it a platform in validation than inflate numbers that aren't there yet.", "Mapped six factory workflow domains into one product without copying generic ERP patterns. The scope came from real constraints: GST exports, MSME payment deadlines, ITC tracking, receivables aging.", "Built a tenant-aware architecture so different factory configurations can onboard without rebuilding core flows.", "Validated that Indian MSME compliance requirements need product-level design decisions, not just UI implementation.", @@ -106,7 +106,7 @@ export default function FactoStackPlatformPage() { return (

Indian MSMEs often run core factory work across Excel sheets, - WhatsApp messages, paper slips, and separate accounting tools. In - the platform repo, that pain shows up in the workflows I chose to - build: WIP tracking, QR job cards, material variance, MSME payment - compliance, ITC verification, receivables aging, GST exports, and - owner dashboards. + WhatsApp messages, paper slips, and separate accounting tools. + FactoStack covers WIP tracking, QR job cards, material variance, + MSME payment compliance, ITC verification, receivables aging, and + GST exports, with a dashboard the owner can actually check.

diff --git a/app/projects/personal/factostack-website/page.tsx b/app/projects/personal/factostack-website/page.tsx index bbeb3a5..eba1cce 100644 --- a/app/projects/personal/factostack-website/page.tsx +++ b/app/projects/personal/factostack-website/page.tsx @@ -77,7 +77,7 @@ export default function FactoStackWebsitePage() { return (

- The problems I like best are messy and operations-heavy — the kind where the requirements are unclear and someone has to figure it out. I've been doing that for five years, usually without a large team behind me. + The problems I like best show up without a clear spec. Requirements are half-written, priorities shift mid-project, and someone has to sit down and figure out what to actually build. I've been that person for five years, mostly without a big team behind me.

diff --git a/components/modules/hero.tsx b/components/modules/hero.tsx index d93cbe6..6808d5f 100644 --- a/components/modules/hero.tsx +++ b/components/modules/hero.tsx @@ -38,7 +38,7 @@ export default function Hero() { I ship full-stack products, end to end.

- Five years across Fubo, Winuall, and FactoStack — shipping streaming interfaces, SaaS platforms, and an ERP I built solo from the first line of code. If you need someone who can own a real scope, not just a ticket queue, I'm worth talking to. + Five years across Fubo, Winuall, and FactoStack. At Fubo I build streaming interfaces for a large product. At FactoStack I built the whole ERP myself, starting from nothing. I'd rather own a project end to end than work off a ticket queue. Get in touch if that's the kind of help you need.