Five full-viewport sections: Hero, Stack, Principles, Featured Work, Contact
portfolio-template (Nuu-maan) — Next.js Portfolio Template
By Nuu-maan
A Y2K-style personal portfolio template built on Next.js App Router, React, Tailwind CSS, and motion, with copy and data managed centrally in a single config file, portfolio.config.ts.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Actual screenshot captured by the server browser.
All pages & views 2
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
All editable copy and data centralized in a single file, portfolio.config.ts
Original SVG mascots and sticker components with replaceable path or color attributes
Scroll parallax and whileInView reveal animations implemented with motion
Brand colors controlled uniformly via CSS custom properties in globals.css
README lists ten known UI defects, including FOUT layout shift and blank sections without JavaScript
Template Details
The template provides five full-viewport sections: Hero, Stack, Principles, Featured Work, and Contact, and includes original SVG mascots, scroll parallax and reveal animations, striped shadow text, halftone and checkerboard patterns, sticker drop shadows, and project cards styled as retro browser windows. All editable copy and data are centralized in portfolio.config.ts at the repository root; after edits, the development server hot-reloads. Brand colors are controlled via CSS custom properties in src/app/globals.css, and the mascots are plain SVG components under src/app/_components/, where path or color attributes can be replaced. The README also lists ten known UI defects, including FOUT layout shift on the hero heading, floor character overlap at 480–639px window widths, blank sections when JavaScript is disabled, project card text wrapping on very narrow phones, the pink floor band taking up too much space on short screens, a seam on the marquee's first frame, scroll jank on low-power devices, striped shadow text extending beyond the baseline, reduced motion only covering CSS keyframes, and bg-checker color bleed in older Safari. The README does not provide performance benchmarks, production deployment steps, or detailed browser compatibility testing notes.
Is it right for your project?
Use Cases
- Building a Y2K-visual personal portfolio page for an individual developer or designer
- Scenarios requiring centralized management of copy and data to avoid editing multiple files
- Projects where mascots and stickers are replaced with original SVG components
- As a reference for integrating motion scroll animations in a Next.js App Router project
Suitable For
- Front-end developers familiar with Next.js, React, Tailwind CSS, and TypeScript
- Personal portfolio needs that accept Y2K high-saturation colors and sticker-style visuals
- Users willing to adjust or fix issues themselves based on the README's known defects
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
After cloning the repository, run npm install, then npm run dev to start the development server
- 2
Edit portfolio.config.ts at the repository root to change identity, social links, tech stack, principles, services, projects, and copy
- 3
Modify CSS custom properties in src/app/globals.css to change brand colors
- 4
Replace SVG paths in Mascot.tsx and Stickers.tsx under src/app/_components/ to change mascots
- 5
The README lists ten known UI defects; before use, check each one to see whether it affects your target scenario
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis entry covers the free version in the public repository under the MIT license; the free scope is the code of this version and does not mean external services or third-party assets are free.
Must comply with when using
- Free use, modification, commercial use, and distribution of this version's code are permitted.
- When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
- The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.
Additional costs & items to verify
- Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses and cannot be judged solely by the code's MIT license.
- External services such as domains, hosting, databases, payments, or AI may incur separate charges.
View Original Text Basis
https://github.com/Nuu-maan/portfolio-template/blob/main/LICENSEhttps://github.com/Nuu-maan/portfolio-template/blob/main/README.mdPermission is hereby granted, free of charge
Original License Text
Compiled by DeepSeek based on repository license and README ·2026-10-14. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.
Project checks & description sources
Template Information
- Source platforms
- GitHub
- Documentation and maintenance reference score
- More documented · 88 / 100
- Technologies
- Next.js · React
- Website type
- Portfolio
How this score is calculated
Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.
What to verify for this project
- Repository update recorded
- 2026-05-24
- Screenshot last checked
- 2026-10-14
A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.
The catalog identifies Next.js as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.
Use a selection guide →How this description was prepared
AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.
Review declaration: codex-user-requested-batch-review-20261015 · 2026-10-15
Inspect the recorded source material
SHA-256: d0ecd6c01362289c292f026ac8ba8075c841409cf296c366affc6e695206823e
2026-10-14T17:10:48.737Z
Source file / repository<div align="center">
<img src="assets/banner.svg" alt="Portfolio Template — y2k cute animated banner" width="100%"/>
# ⌘ portfolio-template
**A loud, cute, Y2K-flavored personal-portfolio template.**
Five full-viewport sections, original SVG mascots, scroll-linked parallax — and one config file you edit to make it yours.
[](LICENSE)
[](https://nextjs.org)
[](https://react.dev)
[](https://tailwindcss.com)
[](https://motion.dev)
</div>
---
## ✨ what's inside
- 🎨 **5 dense, full-viewport sections** — Hero, Stack, Principles, Featured Work, Contact
- 🐣 **Original SVG mascots** drawn from scratch — no clipart, no Lottie payloads
- 🌊 **Scroll-linked parallax** + reveal animations powered by [`motion`](https://motion.dev)
- 🌈 **Stripe-shadow chunky text**, halftone & checker patterns, sticker drop-shadows
- 🪟 **Retro browser-window chrome** for project tiles
- 📱 **Responsive** — `clamp()` titles, mobile-first character counts, `prefers-reduced-motion` honored
- 📦 **One config file** holds every piece of editable copy & data (`portfolio.config.ts`)
- 🚀 Built on **Next.js 16 App Router**, **React 19**, **Tailwind v4**, **TypeScript strict**
---
## 🚀 getting started
```bash
git clone https://github.com/Nuu-maan/portfolio-template.git my-portfolio
cd my-portfolio
npm install
npm run dev
```
Open [http://localhost:3000](http://localhost:3000) — refresh on save, no rebuild needed.
```bash
npm run build # production build
npm run start # serve the build
npm run lint # lint with eslint
```
---
## 🎀 make it yours
**Open [`portfolio.config.ts`](portfolio.config.ts) at the repo root.** Everything the site shows lives there:
```ts
export const config: PortfolioConfig = {
identity: {
name: "NUMAN", // huge hero wordmark
fullName: "Numan Khan", // metadata + footer
role: "Full Stack Developer",
tagline: "FULL STACK × SHIPS FAST",
bio: "Self-taught full-stack developer...",
location: "New Delhi, India",
timezone: "IST · UTC+5:30",
availability: "OPEN TO WORK",
},
social: {
email: "[email protected]",
githubHandle: "yourhandle",
githubUrl: "https://github.com/yourhandle",
// ...
},
stack: {
languages: ["Python", "TypeScript", "Rust", "C++", "SQL · Bash"],
chips: {
Frontend: ["React", "Next.js", "Tailwind"],
Backend: ["Node", "FastAPI"],
// ...
},
},
principles: [ /* sticker cards on "How I Work" */ ],
services: [ /* what you build */ ],
projects: [ /* the 6 tiles on Featured Work */ ],
marquees: { stack: [...], work: [...], contact: [...] },
copy: { /* every section heading + blurb */ },
};
```
Save the file → the dev server hot-reloads → the whole site re-skins.
### swap colors
Brand colors are CSS custom properties in [`src/app/globals.css`](src/app/globals.css):
```css
:root {
--pink-hero: #ff6f9c;
--blue-sky: #b9d8ff;
--lavender: #cdb6ff;
--yellow-sun:#ffd24c;
--ink: #1a1a2e;
--cream: #fff6e3;
/* ... */
}
```
Change a value, every section that uses that token shifts together.
### swap mascots
The mascots are plain SVG components in [`src/app/_components/`](src/app/_components/):
| File | What it draws |
| --- | --- |
| `Mascot.tsx` | Round bean creature + `Star` / `Sparkle` / `Flower` |
| `Stickers.tsx` | `Cloud`, `Daisy`, `GlobeBuddy`, `HandSticker`, `SpeechBubble`, `BadgeCorner`, `BrowserWindow` |
Each accepts color props — replace the SVG paths to drop in your own art.
---
## 🏗 tech stack
| Layer | Choice | Why |
| --- | --- | --- |
| Framework | **Next.js 16** (App Router, Turbopack) | RSC by default, fast HMR |
| UI runtime | **React 19** + react-compiler | Auto-memoization, less manual `useMemo` |
| Styling | **Tailwind CSS v4** | `@theme inline` design tokens, zero config files |
| Type display | **Lilita One** via `next/font` | Chunky rounded display |
| Body | **Sora** via `next/font` | Clean modern UI text |
| Motion | **`motion`** (Framer Motion v11+) | `whileInView`, `useScroll` parallax |
| Type safety | **TypeScript strict** | Config + props are fully typed |
No external icon libraries. No clipart. No tracking.
---
## 📁 project structure
```
.
├─ assets/
│ └─ banner.svg ← animated README banner (SMIL)
├─ portfolio.config.ts ← ✦ edit me ✦
├─ src/
│ └─ app/
│ ├─ layout.tsx ← fonts + metadata (reads config)
│ ├─ page.tsx ← stacks the 5 sections
│ ├─ globals.css ← tokens, patterns, keyframes
│ └─ _components/
│ ├─ Mascot.tsx ← base SVG primitives
│ ├─ Stickers.tsx ← cloud, daisy, hand, browser-window, ...
│ ├─ Reveal.tsx ← scroll-in reveal wrapper
│ ├─ Parallax.tsx ← scroll-linked drift wrapper
│ ├─ Marquee.tsx ← looping ticker
│ └─ sections/
│ ├─ Hero.tsx ← NUMAN
│ ├─ Stack.tsx ← MY STACK
│ ├─ Principles.tsx ← HOW I WORK
│ ├─ Work.tsx ← FEATURED WORK
│ └─ Contact.tsx ← SAY HELLO
├─ LICENSE ← MIT
└─ tsconfig.json ← @config alias → portfolio.config.ts
```
---
## 🐞 known UI bugs
Honest list — these are real, you may hit them. PRs welcome.
| # | Bug | Where | Notes |
| - | --- | ----- | ----- |
| 1 | **FOUT layout shift on hero title** — `text-stripe`'s shadow ladder is sized to the rendered text height, so when `Lilita One` swaps in, the title height jumps a few px and pulls the rest of the hero with it | `Hero.tsx`, `globals.css` `.text-stripe` | `next/font` reserves layout, but the stripe-shadow ladder still shifts. Acceptable but visible on slow connections. |
| 2 | **Floor characters can overlap in the 480–639px window** | `Hero.tsx`, `Contact.tsx` floor mascots | Absolute `left-[%]` positions are tuned for mobile and sm+, the in-between viewport sometimes packs two characters too close. |
| 3 | **No-JS users see blank sections** | every section (`Reveal.tsx`) | `motion`'s `initial: { opacity: 0 }` never resolves without JS. Fix: ship a `<noscript>` style override or fall back to CSS-only reveals. |
| 4 | **Project tile text wraps awkwardly on very narrow phones** | `Work.tsx` `<BrowserWindow>` tiles | The fixed `h-36`/`h-44` tile clips a 2-line `sub` line on widths < 360px. |
| 5 | **Pink floor band can eat >30% of viewport on very short screens** | `Hero.tsx`, `Contact.tsx` | Floor is `h-[22-26%]`. On <600px-tall screens (landscape phones) it crowds the title. |
| 6 | **Marquee shows a 1-frame seam on first paint** | `Marquee.tsx` | The looped track is duplicated `[items, ...items]`, but the animation starts after first commit — you may see the join briefly. |
| 7 | **Heavy drop-shadow filters can cause scroll jank on low-power devices** | `globals.css` `.sticker` | Every sticker has a `drop-shadow(...)` filter; on Hero/Contact there are 6–8 stacked. Consider `will-change: filter` selectively, or downgrade to `box-shadow` for static stickers. |
| 8 | **Stripe-shadow text extends ~38px below baseline** | `globals.css` `.text-stripe` | If you remove the `pb-12` / `pb-6` next to a `text-stripe` title, the shadow ladder clips the following element. |
| 9 | **Reduced-motion only kills CSS keyframes, not `motion` tweens** | `motion` components | `Reveal` checks `useReducedMotion()` and skips, but `whileInView` opacity reveals on motion.div elsewhere still run. Tighten in those components if you need full a11y. |
| 10 | **`bg-checker` uses `currentColor` + opacity** — color leakage between stacked overlays in Safari < 16 | every section | Modern Safari renders fine; old Safari can show a faint tint where overlays meet. |
If you fix one, open a PR with a 1-line repro. Issues with screenshots especially welcome.
---
## 💛 credits
- Type display: [**Lilita One**](https://fonts.google.com/specimen/Lilita+One) (OFL)
- Body type: [**Sora**](https://fonts.google.com/specimen/Sora) (OFL)
- Motion: [**Framer Motion / `motion`**](https://motion.dev) (MIT)
- All illustrations / SVGs in this repo are **original** to this project — feel free to redraw, remix, or replace.
Built by [**Numan Khan**](https://nuu-maan.com) · [@nuu-maan](https://github.com/nuu-maan) · [@Numankhannnnn](https://x.com/Numankhannnnn)
---
## 📦 license
[MIT](LICENSE) — do whatever, just keep the notice.
If you ship something with it, a star ★ on the repo makes my day.
<div align="center">
`★ NK-FS/DEV — NO.001 · built with attention, shipped with chaos · ★`
</div>
Explore similar templates
Compare previews and descriptions within the same stack and category.

react-resume-template
A personal resume website template for software developers, built with Next.js, React, and TypeScript and styled with Tailwind CSS. Site content is driven by a single data file at /src/data/data.tsx, with types in dataDef.ts and images in src/images/.
Next.js · Portfolio

nxt-lnk
nxt-lnk is a Next.js-based bio link page template that manages personal information and links via BioData.js and LinksData.js, positioned as a self-hosted alternative to Linktree. It groups links by type, supports enabling/disabling individual links, and offers hexagonal or oval avatars.
Next.js · Portfolio

sylph
Sylph is a minimal portfolio and blog template built on Next.js, supporting MDX/Markdown writing, light/dark themes, and automatic OG image generation. It includes sitemap, robots.txt, metadata, and syntax highlighting, with automatic blog timestamps.
Next.js · Portfolio

sleek-portfolio
A modern, responsive portfolio template built with Next.js 15, TypeScript, Tailwind CSS, and Shadcn UI. It includes an MDX blog, project showcase, work experience timeline, and a contact form that receives messages via Telegram Bot.
Next.js · Portfolio

research-website-template
A React + Next.js template for research personal websites, aimed at PhD students and researchers. It centralizes publications, projects, and other content in src/data as arrays of objects, with optional fields automatically generating UI components.
Next.js · Portfolio

shadcn-portfolio
A developer portfolio template built with Next.js 15, shadcn/ui, Tailwind CSS, and Framer Motion, featuring an MDX blog, light and dark modes, responsive design, and SEO meta tags.
Next.js · Portfolio
