加载动画、Hero 标题卡与自定义光标(圆点、圆环与约 700px 环境光晕)构成开场体验
Portfolio-Template-12 — Rails 作品集模板
作者 Muhammad112233-creator
Netflix 风格的开发者作品集模板,用 React、Vite、Tailwind CSS、GSAP 与 Framer Motion 实现加载动画、3D 技能弧、海报式项目网格和自定义光标。
看看你的网站会是什么样
浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。
全部页面与视图 2
截图用于了解视觉与布局,交互效果请以实际项目为准。
值得关注的模板亮点
从已有项目资料中,快速了解它的特点。
Skills 区域在桌面端固定滚动约 500% 视口高度,将六张卡片沿 1800px 半径的 3D 弧线展开,移动端改为滑动吸附轨道
Projects 区域以洗牌海报堆入场,随后展开为 3×3 网格,并配有浮动控制条
About 与 Expertise 使用 bento 面板、指针跟随的红色聚光以及卡片堆叠、缩小、模糊等滚动效果
所有文案、链接、技能与项目数据集中在 src/data/content.js,便于替换为个人内容
附带 site/ 预构建静态目录与 GitHub Pages、Netlify、Vercel 部署配置
模板详细介绍
这是一个以 Netflix 流媒体界面为视觉参照的开发者个人作品集模板。页面按“剧集”组织内容:加载动画、Hero、About、Expertise、Skills、Projects、Contact 与 Footer 依次呈现,滚动过程中包含卡片堆叠、技能卡片沿 3D 弧线展开、项目封面从洗牌状态展开为 3×3 网格等动效,桌面端与移动端分别采用固定滚动与滑动吸附两种交互。
技术栈为 React、Vite、Tailwind CSS、GSAP(含 ScrollTrigger)与 Framer Motion。样式以工具类为主,动效参数(技能弧半径、固定滚动长度、网格间距、动画时长与缓动)集中在对应组件中。
内容与配置集中在 src/data/content.js,包括品牌名、姓名、邮箱、地点、标语、导航、社交链接、About、Expertise、Skills、Projects、Contact 与 Footer 数据。头像位于 src/assets/picture.png,建议使用约 640×780 的 4:5 竖版图片。联系表单默认只在控制台输出并弹出提示,需要接入 Formspree 或 Web3Forms 等表单端点才能真实发送邮件。模板附带 site/ 预构建静态目录以及 GitHub Pages、Netlify、Vercel 的部署配置。
限制方面:构建产物不能以 file:// 方式直接打开,需通过本地服务器预览;首次部署到 GitHub Pages 可能需要等待 1–2 分钟并强制刷新;低端设备上固定滚动区域可能影响流畅度,移动端会自动回退为简单轨道布局。
适合你的项目吗?
适用场景
- 开发者或工程师搭建个人作品集网站,希望以流媒体界面风格展示项目与技能
- 需要滚动驱动动效(固定滚动、3D 卡片弧、海报展开)作为主要视觉表达的展示型页面
- 作为 React + Vite + Tailwind CSS + GSAP 动效实践的学习或二次开发起点
- 部署到 GitHub Pages、Netlify 或 Vercel 的静态站点,用于个人品牌展示
适合人群
- 熟悉 React 与 Vite、能够修改 JSX 组件和内容数据文件的开发者
- 希望作品集具有强视觉动效而非传统简历式布局的个人
- 需要 MIT 许可下可自由修改与商用的模板使用者
- 计划使用静态托管并自行配置表单服务端点的用户
上手与定制指南
结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。
- 1
需要 Node.js 18 或更高版本;在项目目录执行 npm install 后运行 npm run dev,默认访问 http://localhost:5173
- 2
构建使用 npm run build,产物输出到 ./site;本地预览构建结果使用 npm run preview(默认 http://localhost:4173)
- 3
不要直接双击打开 site/index.html,浏览器会因 ES 模块限制而显示空白;请通过本地服务器访问,例如 cd site && npx serve .
- 4
替换头像时准备约 640×780(4:5)的图片并保存为 src/assets/picture.png,然后重新构建
- 5
联系表单默认不发送邮件,需在 src/components/Contact.jsx 中接入 Formspree 或 Web3Forms 等端点;演示图片、字体、图标等第三方素材需单独核对许可
授权与来源资料
使用条件与限制
免费使用 · 保留许可声明本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。
使用时需要遵守
- 允许免费使用、修改、商用和分发该版本代码。
- 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
- 代码按现状提供;担保与责任限制以原许可证及适用法律为准。
额外费用与待核对事项
- 联系表单默认仅在控制台输出并弹出提示,不会真实发送邮件;如需真实收信,必须自行注册并接入 Formspree 或 Web3Forms 等第三方表单服务端点,并替换 Contact.jsx 中的 handleSubmit。
- 构建产物不能以 file:// 方式直接双击打开,浏览器会因 ES 模块限制显示空白;必须通过本地服务器(如 npm run preview 或 npx serve site)访问。
- 首次部署到 GitHub Pages 后可能需要等待 1–2 分钟并强制刷新才能看到页面,属于部署流程限制。
- 低端设备上固定滚动与 3D 动效可能影响流畅度,移动端会自动回退为简单轨道布局,视觉与交互效果与桌面端不一致。
- README 提及 Formspree 表单服务;真实提交需配置服务端点,其使用额度与费用需单独核对。
- 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
- 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
查看原文依据
Permission is hereby granted, free of charge
许可证原文
create a free form endpoint (for example [Formspree](https://formspree.io) or [Web3Forms](https://web3forms.com))
README 原文
Opening `site/index.html` by double-clicking it (a `file://` URL) will **not** work
README 原文
Wait 1–2 minutes for the first deploy, then hard-refresh
README 原文
https://github.com/Muhammad112233-creator/Portfolio-Template-12/blob/main/LICENSEhttps://github.com/Muhammad112233-creator/Portfolio-Template-12/blob/main/README.mdOn low-end phones the layout automatically falls back to simple rails.
README 原文
DeepSeek 根据仓库许可证和 README 整理 ·2026-10-03。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。
项目核对记录与介绍依据
模板资料
- 来源平台
- GitHub
- 资料与维护参考分
- 资料较完整 · 85 / 100
- 技术栈
- Rails · Vite · React
- 网站类型
- 作品集
这个分数如何计算
本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。
这个项目需要核对什么
- 记录的仓库更新时间
- 2026-10-03
- 截图检查日期
- 2026-10-03
已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。
目录记录的主要技术栈是 Rails。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。
查看具体选型方法 →介绍的制作与核对状态
介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。
审核声明: [email protected] · 2026-10-04
查看当时使用的来源资料
SHA-256: 3c0252db1760a26c284efee8f638ea3fd505dbe2835d8ec1d59e912185ffb9cd
2026-10-03T14:59:03.623Z
来源文件 / 仓库<div align="center">
# 🎬 Netflix-Style Developer Portfolio
**A cinematic, Netflix-inspired personal portfolio template.**
Sticky 3D skill rails · a poster stack that unfolds into a 3 × 3 hub · custom red cursor · GSAP + Framer Motion throughout.
Built with **React 19 · Vite · Tailwind CSS v4 · GSAP · Framer Motion**
[Setup](#-quick-start) · [Preview](#-how-do-i-see-the-preview) · [Customise](#-make-it-yours) · [Troubleshooting](#-troubleshooting)
</div>
---
## ✨ What's inside
| Section | What happens |
| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| **Loader** | A red ping dot and the brand name blur in, punch out, curtain fades. |
| **Hero** | Red marquee rail, pointer-reactive 3D portrait card, custom cursor trio (dot + ring + 700px ambient glow). |
| **Episode 01 — About** | Three bento panels that rise on scroll, each with a pointer-tracked red spotlight. |
| **Episode 02 — Expertise** | Four sticky "director's cut" cards that stack; the ones underneath shrink, lift and blur. |
| **Skills** | Desktop: the section pins for **500% of scroll** and deals six cards around an 1800px 3D arc. Mobile: swipeable snap rail. |
| **ORIGINALS — Projects** | Eight covers fly in as a shuffled deck, then unfold into a 3 × 3 streaming hub above a floating console bar. Mobile: swipe rail. |
| **Episode 04 — Contact** | A giant outlined `CONTACT` word drifts on scroll, glass form sheet slides up from the bottom edge. |
| **Footer** | Series metadata, socials, season line. |
### Tech stack
- **React 19** + **Vite 5** — dev server and bundler
- **Tailwind CSS v4** (`@tailwindcss/vite`) — all styling is utility classes, no config file needed
- **GSAP 3** (+ ScrollTrigger, `matchMedia`, `quickTo`) — scroll pinning, the 3D fan, the poster deck
- **Framer Motion** — contact section scroll transforms and reveal animations
### Project structure
```
netflix-portfolio-template/
├── public/
│ ├── favicon.svg # browser tab icon
│ └── .nojekyll # stops GitHub Pages from ignoring _-prefixed files
├── src/
│ ├── assets/
│ │ └── picture.png # ⬅ REPLACE THIS with your own portrait (640×780)
│ ├── components/
│ │ ├── Loader.jsx # intro curtain
│ │ ├── Cursor.jsx # custom cursor + ambient glow
│ │ ├── Hero.jsx # header + opening title card
│ │ ├── About.jsx # Episode 01
│ │ ├── Expertise.jsx # Episode 02
│ │ ├── Skills.jsx # pinned 3D skill fan
│ │ ├── Projects.jsx # ORIGINALS poster deck
│ │ ├── Contact.jsx # Episode 04
│ │ └── Footer.jsx
│ ├── data/
│ │ └── content.js # ⬅ ALL text, links, skills and projects live here
│ ├── index.css # Tailwind import + marquee/dropBounce keyframes
│ ├── App.jsx
│ └── main.jsx
├── site/ # ✅ pre-built static site — drag this to GitHub Pages
├── .github/workflows/deploy.yml
├── .gitignore
├── index.html
├── package.json
├── vite.config.js
├── netlify.toml
├── vercel.json
└── LICENSE
```
---
## 🚀 Quick start
You need **Node.js 18 or newer** ([download](https://nodejs.org)).
```bash
cd netflix-portfolio-template
npm install # only once
npm run dev # opens http://localhost:5173
```
Other commands:
```bash
npm run build # rebuilds the static site into ./site
npm run preview # serves the built ./site at http://localhost:4173
```
---
## 👀 How do I see the preview?
There are **four** ways — use whichever suits you.
### 1. Live preview in this chat (fastest)
If you are reading this inside the Arena workspace, the preview panel already shows the running site.
Press the **Portfolio preview** tab. Nothing to install.
### 2. Local dev server (live reload — best for editing)
```bash
cd netflix-portfolio-template
npm install
npm run dev
```
Open the printed address, normally **http://localhost:5173**.
Every save hot-reloads the page instantly.
### 3. Preview the production build
```bash
npm run build # writes ./site
npm run preview # serves it at http://localhost:4173
```
Always do this before publishing — it is the same file set GitHub Pages will serve.
> ⚠️ Opening `site/index.html` by double-clicking it (a `file://` URL) will **not** work — browsers block ES modules loaded from the local disk. Serve it instead:
>
> ```bash
> cd site && npx serve .
> ```
---
## 🎨 Make it yours
Almost everything lives in **one file**: `src/data/content.js`.
```js
export const profile = {
brand: "HAMZA", // navbar + loader + footer wordmark
fullName: "Hamza Raza",
email: "[email protected]",
location: "LAHORE, PK",
headlineTop: "HAMZA", // hero line 1 (solid white)
headlineAccent: "DEV.ENGINE", // hero line 2 (red gradient)
tagline: "TOP 1%",
role: "Software Engineer & Systems Architect",
stats: ["99.9% Uptime", "TypeScript • Node.js", "PostgreSQL & AWS"],
rails: [
/* the big red marquee lines */
],
nav: [
/* header + footer navigation */
],
socials: [
/* GitHub / LinkedIn / LeetCode links */
],
};
```
Then `about`, `expertise`, `skills`, `projects`, `contact` and `footer` — same idea, plain arrays.
### Swap the portrait
1. Prepare your photo at roughly **640 × 780 px** (4:5, portrait).
2. Save it as `src/assets/picture.png`.
3. Rebuild: `npm run build`.
The card crops with `object-cover`, so any 4:5-ish photo works.
### Change the accent colour
The template uses Netflix red `#E50914`. Find and replace it in:
- `src/index.css` → `::selection` background
- `src/components/Cursor.jsx` → the two RGBA glows and the dot shadow
- `src/components/Hero.jsx` → the hero glow gradient
- `src/components/About.jsx`, `Expertise.jsx`, `Skills.jsx`, `Projects.jsx` → the spotlight `radial-gradient(...)` values
- Any `bg-red-600` / `text-red-500` utility class you want to shift
### Change the browser-tab icon
Edit `public/favicon.svg` (plain SVG), or drop in your own `.svg`/`.png` with the same filename.
### Wire up the contact form
`src/components/Contact.jsx` currently logs to the console and shows an alert. To send real email, create a free form endpoint (for example [Formspree](https://formspree.io) or [Web3Forms](https://web3forms.com)) and replace `handleSubmit`:
```js
const handleSubmit = async (event) => {
event.preventDefault();
if (!form.permission)
return alert("Please accept the contact permission checkbox.");
await fetch("https://formspree.io/f/YOUR_FORM_ID", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(form),
});
setForm(emptyForm);
};
```
### Useful knobs
| What | Where |
| -------------------------------- | ------------------------------------------------------------ |
| Skill arc width / spacing | `Skills.jsx` → `const radius = 1800`, `angle = offset * 18` |
| Pin length of the skills section | `Skills.jsx` → `end: '+=500%'` |
| Poster grid gaps | `Projects.jsx` → the `+ 40` in the `x` / `y` tweens |
| Card reveal timing | `About.jsx` / `Projects.jsx` → `duration`, `stagger`, `ease` |
| Marquee speed | `index.css` → `animation: marquee 35s linear infinite` |
---
## 🛠 Troubleshooting
| Symptom | Fix |
| ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Blank page on GitHub Pages | Make sure `index.html` and the `assets/` folder sit at the **published root**. Using Option B, the Pages folder must be `/site`, not `/ (root)`. |
| **404** on `…github.io/repo-name/` | Wait 1–2 minutes for the first deploy, then hard-refresh (**Ctrl ⇧ R** / **⌘ ⇧ R**). |
| `npm run build` fails after editing | Check for a missing comma or bracket in `src/data/content.js` — it is the file people edit most. |
| Portrait looks stretched or cropped oddly | Supply a ~**640 × 780** (4:5) image. |
| Animations feel sluggish | Close other heavy tabs; the pinned sections do real work. On low-end phones the layout automatically falls back to simple rails. |
| `file://` preview is blank | Expected — ES modules need a server. Use `npm run preview` or `npx serve site`. |
| Fonts look "off" | The template uses the system UI font stack (plus Impact/Bebas for the giant `CONTACT` word). Add a `@font-face` in `src/index.css` if you prefer a webfont. |
---
## 📄 License
MIT — free for personal and commercial use. Attribution is welcome but not required.
See [LICENSE](./LICENSE).
<div align="center">
**If this template helped you, a ⭐ on the repo goes a long way.**
`STREAMING WORLDWIDE • BUILT WITH REACT & GSAP`
</div>
<div align="center">
**`STREAMING WORLDWIDE • BUILT WITH REACT & GSAP`**
</div>
看看同类模板
对比同技术栈与用途的模板,找到更适合的视觉与内容结构。

Portfolio-Template-20
A handcrafted creative-studio portfolio template with sky-blue styling, responsive motion, project rails, pric…
Rails · 作品集

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

react-portfolio-template
React powered portfolio website template for developers
React · 作品集

yashitanamdeo.github.io
yashitanamdeo.github.io 是一个基于 Gatsby 和 React 构建的个人作品集网站模板,源自开发者 Yashita Namdeo 的第一版个人主页。
Gatsby · 作品集

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

personal-website-react
personal-website-react 是一个面向开发者的个人作品集单页模板,由 React 和 Material-UI 构建,并通过 Create React App 初始化。
React · 作品集
