五个全视口区块:Hero、Stack、Principles、Featured Work、Contact
portfolio-template (Nuu-maan) — Next.js 作品集模板
作者 Nuu-maan
一个 Y2K 风格的个人作品集模板,基于 Next.js App Router、React、Tailwind CSS 与 motion 构建,通过单一配置文件 portfolio.config.ts 集中管理文案与数据。
看看你的网站会是什么样
浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。
全部页面与视图 2
截图用于了解视觉与布局,交互效果请以实际项目为准。
值得关注的模板亮点
从已有项目资料中,快速了解它的特点。
所有可编辑文案与数据集中在 portfolio.config.ts 一个文件
原创 SVG 吉祥物与贴纸组件,可替换路径或颜色属性
使用 motion 实现滚动视差与 whileInView 揭示动画
品牌颜色通过 globals.css 中的 CSS 自定义属性统一控制
README 列出十项已知 UI 缺陷,包括 FOUT 布局偏移与无 JS 空白
模板详细介绍
该模板提供五个全视口区块:Hero、Stack、Principles、Featured Work 与 Contact,并包含原创 SVG 吉祥物、滚动视差与揭示动画、条纹阴影文字、半调与棋盘格图案、贴纸投影以及复古浏览器窗口样式的项目卡片。所有可编辑的文案与数据集中在根目录的 portfolio.config.ts 中,修改后开发服务器会热重载。品牌颜色通过 src/app/globals.css 中的 CSS 自定义属性控制,吉祥物为 src/app/_components/ 下的普通 SVG 组件,可替换路径或颜色属性。README 同时列出十项已知 UI 缺陷,包括英雄标题的 FOUT 布局偏移、480–639px 窗口下地板角色重叠、无 JavaScript 时区块空白、极窄手机上项目卡片文字换行、矮屏下粉色地板带占比过大、跑马灯首帧接缝、低功耗设备滚动卡顿、条纹阴影文字超出基线、减少动态效果仅覆盖 CSS 关键帧以及旧版 Safari 中 bg-checker 颜色渗漏。README 未提供性能基准、生产环境部署步骤或浏览器兼容性测试的详细说明。
适合你的项目吗?
适用场景
- 为个人开发者或设计师搭建 Y2K 视觉风格的作品集页面
- 需要集中管理文案与数据、避免分散修改多个文件的场景
- 希望以原创 SVG 组件替换吉祥物与贴纸的项目
- 在 Next.js App Router 项目中集成 motion 滚动动画的参考
适合人群
- 熟悉 Next.js、React、Tailwind CSS 与 TypeScript 的前端开发者
- 接受 Y2K 高饱和色彩与贴纸风格视觉的个人作品集需求
- 愿意根据 README 已知缺陷自行调整或修复的使用者
上手与定制指南
结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。
- 1
克隆仓库后执行 npm install,再运行 npm run dev 启动开发服务器
- 2
编辑根目录 portfolio.config.ts 修改身份、社交链接、技术栈、原则、服务、项目与文案
- 3
在 src/app/globals.css 中修改 CSS 自定义属性以更换品牌颜色
- 4
在 src/app/_components/ 下替换 Mascot.tsx 与 Stickers.tsx 中的 SVG 路径以更换吉祥物
- 5
README 列出十项已知 UI 缺陷,使用前建议逐项确认是否影响目标场景
授权与来源资料
使用条件与限制
免费使用 · 保留许可声明本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。
使用时需要遵守
- 允许免费使用、修改、商用和分发该版本代码。
- 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
- 代码按现状提供;担保与责任限制以原许可证及适用法律为准。
额外费用与待核对事项
- 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
- 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
查看原文依据
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
许可证原文
DeepSeek 根据仓库许可证和 README 整理 ·2026-10-14。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。
项目核对记录与介绍依据
模板资料
- 来源平台
- GitHub
- 资料与维护参考分
- 资料较完整 · 88 / 100
- 技术栈
- Next.js · React
- 网站类型
- 作品集
这个分数如何计算
本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。
这个项目需要核对什么
- 记录的仓库更新时间
- 2026-05-24
- 截图检查日期
- 2026-10-14
已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。
目录记录的主要技术栈是 Next.js。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。
查看具体选型方法 →介绍的制作与核对状态
介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。
审核声明: codex-user-requested-batch-review-20261015 · 2026-10-15
查看当时使用的来源资料
SHA-256: d0ecd6c01362289c292f026ac8ba8075c841409cf296c366affc6e695206823e
2026-10-14T17:10:48.737Z
来源文件 / 仓库<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>
看看同类模板
对比同技术栈与用途的模板,找到更适合的视觉与内容结构。

react-resume-template
A personal resume website template built with React.js, Typescript, Next.js, and styled with Tailwind css
Next.js · 作品集

nxt-lnk
Custom bio links for creatives who love coding. A perfect custom alternative for linktree, bio and other short…
Next.js · 作品集

sylph
A minimal portfolio template.
Next.js · 作品集

sleek-portfolio
sleek-portfolio 是一个面向开发者个人品牌展示的现代作品集模板,基于 Next.js 15、TypeScript、Tailwind CSS 和 Shadcn UI 构建。
Next.js · 作品集

research-website-template
React + Next.js template for research websites (for PhD students, researchers, etc)
Next.js · 作品集

shadcn-portfolio
shadcn-portfolio 是一个面向开发者的作品集模板,技术栈为 Next.js 15、shadcn/ui、Tailwind CSS 和 Framer Motion。
Next.js · 作品集
