Skip to main content
Roadmap progress—
intermediatePage 33 of 36

Stage 9 — Ship a real portfolio

Turn your Next.js capability into a polished, public portfolio you'd actually want to share — the kind that gets you interviews.

Stage 9 — Ship a real portfolio

Time budget: ~1–2 weeks

In one line: Turn your Next.js capability into a polished, public portfolio you'd actually share — no new technology, just deliberate effort.

By now you've shipped a Next.js site (Stage 8). This stage is about turning that capability into a polished, public portfolio you'd actually want to share — the kind that gets you interviews. There's no new technology here; just deliberate effort applied to what you already know.

For the wider "solo developer" mindset and process this fits into, see Solo / Personal workflow.

1. What goes on a portfolio​

  • Who you are — one paragraph. Name, what you do, what you're interested in. No life story.
  • What you've built — your best 3–5 projects, with for each one: a screenshot, 1–3 sentences of what it does and what was hard, a link to live demo and source.
  • How to reach you — email, GitHub, LinkedIn. A working contact form is a flex.
  • Optional: a short blog, a "what I'm currently learning" section, a CV download.

What not to put on a portfolio: tutorials you followed, every tiny exercise, "I know React" badges without projects. Show, don't tell.

2. The bar to aim for​

  • Loads in under 1 second on a 4G connection.
  • Looks correct on a 360px-wide phone and a 1440px monitor.
  • Lighthouse score (Chrome DevTools → Lighthouse tab) ≥ 95 in all four categories.
  • No console errors. No 404s.
  • Works without JavaScript (Next.js gives you this for free with server components).
  • Accessible: every image has alt, every input has a label, colour contrast passes WCAG AA.

3. Polish moves that punch above their weight​

  • A custom domain. Buy yourname.dev or .com from Namecheap or Cloudflare for ~$10/year. Point it at Vercel (their docs walk you through it). Looking professional without one is hard.
  • Decent typography. One sans-serif (Inter is a safe default), good line-height (1.5–1.7), generous spacing. Most amateur sites look amateur because the typography is cramped, not because of anything code-related.
  • One detail that surprises. A subtle hover animation, a dark/light toggle, a console easter-egg. Doesn't need to be impressive — just shows you cared.
  • Real screenshots, not placeholders. Use shots.so or just a clean Chrome screenshot for project thumbnails.

4. SEO and metadata​

// app/layout.tsx
import { Metadata } from "next";

export const metadata: Metadata = {
title: "Tony Yu — Web Developer",
description: "I build web apps that ship. Recent work in AI-driven interviewing and full-stack TypeScript.",
openGraph: {
title: "Tony Yu",
description: "Web developer building AI-driven tools.",
images: [{ url: "/og.png", width: 1200, height: 630 }],
},
};

The OpenGraph image is what shows up when your link is shared on Twitter, LinkedIn, Discord. Worth 30 minutes in Figma to make a nice one.

5. Track who visits (optional)​

Add Plausible or PostHog for basic analytics. Knowing whether anyone visits your site is morale. Both have generous free tiers.

Where to look for inspiration​

Deeper in this guide​

  • Solo / Personal workflow — the broader process around shipping personal projects: project types, planning, stack selection.

Project​

Project — Your portfolio, deployed at a custom domain

Build it with Next.js + Tailwind. Include at least three projects you've built in earlier stages. Buy a domain. Deploy to Vercel. Run Lighthouse — fix every issue until you have a 95+ in every category. Add basic analytics. Share the link with at least one person who'll give honest feedback, and iterate based on what they say.

Common mistakes​

Where people commonly trip up
  • Listing tutorials as projects. "Built a Todo MVC following a tutorial" reads as "I can copy code." A recruiter wants to see something you shaped — even a small project with your own idea beats a polished clone of a tutorial. Show, don't tell.
  • Endless polish, never deploys. Tweaking the hover animation for a week while the live URL doesn't exist is the inverse of the goal. Deploy on day one with placeholder content, then iterate in public.
  • Cramped typography. The single biggest "this site looks amateur" tell isn't code — it's tight line-height, dense paragraphs, and 14px body text. Use ~16–18px, line-height 1.5–1.7, and generous margins. One pass on typography matters more than three frameworks.
  • No OpenGraph image. Every share on Twitter, LinkedIn, or Discord becomes a sad text link without one. Thirty minutes in Figma to make a 1200×630 PNG punches well above its weight in how the site is received.

Page checkpoint​

Checkpoint Quiz

Did Stage 9 stick?

Required

→ Next: Stage 10 — Backend basics · Back to Part I overview