Skip to content
WebDev Path

Developer portfolio

Your personal site: who you are, your projects with case studies, and a way to contact you.

  • Next.js
  • TypeScript
  • Tailwind CSS

The project for module 4, TypeScript and Next.js. It proves: next.js, typescript, seo and your personal brand.

Who it's for

  • As a recruiter, I see your best work in 30 seconds
  • As a client, I can read how you solved a real problem
  • As anyone, I can contact you from any page

Pick your version

Choose one theme, or your own idea. Same skills, but your portfolio won't look like everyone else's.

  1. Option A

    Classic: about, projects, contact

  2. Option B

    Case-study first: 3 deep project write-ups

  3. Option C

    Portfolio plus a small blog of what you're learning

Warm up first

Two short builds that practise the skills this project needs. About 3.5 hours in total.

Typed blog with dynamic routes

2 h

A blog with a list page and a page per post, built from a typed array.

  1. Define a Post type and an array of 3 posts
  2. List posts on /blog with links
  3. Build /blog/[slug] with generateStaticParams
  4. Return notFound() for unknown slugs and add metadata per post

Done when: Each post has its own URL and title, and a wrong URL shows a 404.

  • TypeScript types
  • Dynamic routes
  • Metadata

Contact form with a Server Action

1.5 h

A contact form that validates on the server and shows a success or error message.

  1. Write a Server Action that reads the form data
  2. Validate name, email and message with Zod
  3. Return field errors and show them next to the inputs with useActionState
  4. Disable the button while sending

Done when: Bad input shows clear errors without a page reload, and good input shows a thank-you message.

  • Server Actions
  • Zod
  • Form states

Build plan

7 steps in order. Each one ends with a clear check, so you always know when to move on.

  1. Write before you build

    Write a 2-line intro, pick your 3 best projects, and for each one write the problem, what you built and what you learned.

    Done when: A text file with all the words is done.

    Stuck? Show a hint

    Lead with what you build for people, not a list of technologies.

  2. Create the Next.js app

    Start a Next.js app with TypeScript and Tailwind, and add the home, projects and contact routes.

    Done when: All routes load and share one layout with a nav.

    Stuck? Show a hint

    Put shared header and footer in app/layout.tsx.

  3. Type your content

    Store projects in a typed array (title, slug, problem, stack, links) and render cards from it.

    Done when: Adding a project means adding one object, nothing else.

    Stuck? Show a hint

    Define a Project type first. TypeScript will then tell you if a card is missing a field.

  4. Project case-study pages

    Build /projects/[slug] pages with generateStaticParams.

    Done when: Every project has its own URL and a 404 for unknown slugs.

    Stuck? Show a hint

    Call notFound() from next/navigation when the slug doesn't match.

  5. SEO and sharing

    Add metadata for each page and an Open Graph image.

    Done when: Pasting your link in a chat app shows a title and preview image.

    Stuck? Show a hint

    Use generateMetadata on dynamic pages so each project gets its own title.

  6. Speed check

    Use next/image and next/font, then run PageSpeed Insights.

    Done when: Performance scores 90 or more on mobile.

    Stuck? Show a hint

    Large images are the usual problem. Give next/image a width and height.

  7. Ship it

    Deploy on Vercel and add the link to your GitHub profile, LinkedIn and CV.

    Done when: The link is live in all three places.

    Stuck? Show a hint

    A custom domain is cheap and looks more professional than a .vercel.app link.

Requirements

Tick each one when it's done. Saved to your account.

Go further

Optional. One of these makes your project stand out from the tutorial version.

  • Blog with MDX
  • Contact form with a Server Action

Starter kit

Free APIs, tools and docs for this project.

Submit

Tick the 5 remaining requirements to submit.