Stop 11 · Next.jsProjects · 1/4

Portfolio

Part of the Frontend Developer Roadmap

In short

Your portfolio is the first thing a recruiter clicks. Rebuilding it in Next.js gives you fast pages, proper link previews and a real deployed project to talk about in interviews.

A personal portfolio rebuilt in Next.js — practice for the App Router, metadata, image optimization and deploying a real production site.

The jaadu arranges three framed project pictures in a bright shop window as someone stops to look.

Think of it like this

A shop's front window

People decide whether to walk into a shop from the window display alone. Your portfolio is that window. A few of your best projects, nicely lit, fast to see, and a clear way to contact you.

Watch it happen

Your portfolio's app/ folder

app/
layout.tsx
page.tsx
projects/
page.tsx
[slug]/
page.tsx
contact/
page.tsx

1/4The home page shows your intro and best three projects, inside the shared layout.

The big ideas

What you need to know

App Router structure

Home, /projects, /projects/[slug] and /contact, sharing one layout with your navbar.

Optimised screenshots

Use next/image for project screenshots so the page stays light on mobile.

Metadata per project

Each project page gets its own title, description and Open Graph image.

Deployed with a nice URL

Put it on Vercel, and add a custom domain if you can.

How it works

Build plan

  1. 1

    Write your data

    Put projects in a projects.ts array with slug, title, stack and image.

  2. 2

    Layout and home

    Navbar, footer and a short intro with your best three projects.

  3. 3

    Project pages

    A dynamic [slug] route with generateStaticParams and generateMetadata.

  4. 4

    Contact and deploy

    Add a contact form with a Server Action, then deploy.

See it in code

Walk through the code

ts
1// lib/projects.ts2export type Project = {3  slug: string;4  title: string;5  summary: string;6  stack: string[];7  image: string;8  liveUrl?: string;9  repoUrl?: string;10};11 12export const projects: Project[] = [13  { slug: "movie-app", title: "Movie App", summary: "Search films with the TMDB API",14    stack: ["React", "TanStack Query"], image: "/projects/movie.png" },15];

1/3Every project has a slug for its URL, a title, a summary, a stack and a screenshot.

Keep content in one typed file. Pages read from it, so adding a project is just adding one object.

Save yourself the pain

Common mistakes

Oops

Listing 15 half-finished tutorial clones.

Do this instead

Show three or four projects you can explain deeply, each with a live link and the code.

Oops

Huge uncompressed screenshots that take ages to load on phone data.

Do this instead

Use next/image with proper sizes. Recruiters often open links on their phones.

Your mission

Milestone 1: home and one project

~45 min

Quick check

Your project pages are built from a fixed array. Which rendering fits them best?

Go deeper

  1. 1Use SSG for your project pages since the content rarely changes.
  2. 2Add proper metadata and Open Graph tags for link previews.
  3. 3Deploy it live on Vercel with a custom domain if you have one.

More projects at this stop

Stuck on this topic? Ask an Insider

Get 1:1 guidance from people who've walked this exact path — on the InsideEdge app.

Download
InsideEdge