RailsViteReact作品集

Portfolio-Template-12 — Rails 作品集模板

作者 Muhammad112233-creator

Netflix 风格的开发者作品集模板,用 React、Vite、Tailwind CSS、GSAP 与 Framer Motion 实现加载动画、3D 技能弧、海报式项目网格和自定义光标。

看看你的网站会是什么样

浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。

2 个预览视图
桌面端首页1 / 2
桌面端截图首屏预览

由服务器浏览器实际访问页面后截取。

全部页面与视图 2

截图用于了解视觉与布局,交互效果请以实际项目为准。

采集于 2026-10-03查看来源

值得关注的模板亮点

从已有项目资料中,快速了解它的特点。

01

加载动画、Hero 标题卡与自定义光标(圆点、圆环与约 700px 环境光晕)构成开场体验

02

Skills 区域在桌面端固定滚动约 500% 视口高度,将六张卡片沿 1800px 半径的 3D 弧线展开,移动端改为滑动吸附轨道

03

Projects 区域以洗牌海报堆入场,随后展开为 3×3 网格,并配有浮动控制条

04

About 与 Expertise 使用 bento 面板、指针跟随的红色聚光以及卡片堆叠、缩小、模糊等滚动效果

05

所有文案、链接、技能与项目数据集中在 src/data/content.js,便于替换为个人内容

06

附带 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 分钟并强制刷新;低端设备上固定滚动区域可能影响流畅度,移动端会自动回退为简单轨道布局。

RailsViteReact作品集

适合你的项目吗?

适用场景

  • 开发者或工程师搭建个人作品集网站,希望以流媒体界面风格展示项目与技能
  • 需要滚动驱动动效(固定滚动、3D 卡片弧、海报展开)作为主要视觉表达的展示型页面
  • 作为 React + Vite + Tailwind CSS + GSAP 动效实践的学习或二次开发起点
  • 部署到 GitHub Pages、Netlify 或 Vercel 的静态站点,用于个人品牌展示

适合人群

  • 熟悉 React 与 Vite、能够修改 JSX 组件和内容数据文件的开发者
  • 希望作品集具有强视觉动效而非传统简历式布局的个人
  • 需要 MIT 许可下可自由修改与商用的模板使用者
  • 计划使用静态托管并自行配置表单服务端点的用户

上手与定制指南

结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。

  1. 1

    需要 Node.js 18 或更高版本;在项目目录执行 npm install 后运行 npm run dev,默认访问 http://localhost:5173

  2. 2

    构建使用 npm run build,产物输出到 ./site;本地预览构建结果使用 npm run preview(默认 http://localhost:4173)

  3. 3

    不要直接双击打开 site/index.html,浏览器会因 ES 模块限制而显示空白;请通过本地服务器访问,例如 cd site && npx serve .

  4. 4

    替换头像时准备约 640×780(4:5)的图片并保存为 src/assets/picture.png,然后重新构建

  5. 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 原文

On low-end phones the layout automatically falls back to simple rails.

README 原文
https://github.com/Muhammad112233-creator/Portfolio-Template-12/blob/main/LICENSEhttps://github.com/Muhammad112233-creator/Portfolio-Template-12/blob/main/README.md

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>
反馈内容错误

看看同类模板

对比同技术栈与用途的模板,找到更适合的视觉与内容结构。