预加载器包含真实图片与字体预加载、0 到 100 计数以及旋转字母环散开动画
Portfolio-Template-27 — Vite 作品集模板
作者 Muhammad112233-creator
Portfolio-Template-27 是一个基于 React 18、GSAP、Lenis、Three.js 与 Vite 的创意开发者作品集模板,包含 3D 主视觉、滚动动画、案例研究与两步联系表单,全部文本集中在 src/data/content.js 中修改。
看看你的网站会是什么样
浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。
全部页面与视图 2
截图用于了解视觉与布局,交互效果请以实际项目为准。
值得关注的模板亮点
从已有项目资料中,快速了解它的特点。
3D 主视觉使用 React Three Fiber 构建程序化石堆,跟随鼠标并在滚动时下沉
滚动驱动的宣言区块逐字点亮,签名自行绘制,里程表同步跳动
作品列表为之字形布局,封面图带惯性与倾斜跟随光标
页面过渡以鼠尾草色幕布逐字母拼出目标页面名称
联系表单为两步式,含校验、预算胶囊按钮与发送完成页,但默认不发送邮件
模板详细介绍
该模板面向创意开发者,提供一套带丰富滚动动效的作品集页面。README 说明其技术栈为 React 18、GSAP + ScrollTrigger、@gsap/react、Lenis、Three.js + React Three Fiber、Swiper、Vite 与 Fontsource 自托管字体(Bebas Neue、Archivo)。页面结构包含 Home、About、Case、Sent 与 404,组件涵盖 Loader、Header、Cursor、Footer 与按钮,区块包括 Hero、Statement、About、Awards、Works 与 Expertise。
功能方面,README 列出预加载器、3D 石堆主视觉、随滚动点亮的宣言、字母散落动画、奖项表格、之字形作品列表、页面过渡、自定义光标、滚动按钮、两步表单、复制邮箱、案例研究页、响应式布局与 prefers-reduced-motion 支持。联系表单目前只做校验并跳转到 /sent,不会真正发送邮件,需按 README 接入 Formspree 才能接收消息。
定制入口明确:所有文本、链接、项目、奖项、技能与关于页内容集中在 src/data/content.js;图片替换 src/assets/img/ 下同名文件(portrait.jpg、work-1.jpg 至 work-6.jpg);颜色令牌在 src/styles/base.css 顶部;3D 对象在 src/three/Cairn.jsx 的 STONES 数组中调整。README 未说明模板的生产就绪程度、浏览器兼容范围或性能表现。
适合你的项目吗?
适用场景
- 为创意开发者或设计师搭建个人作品集网站
- 展示项目案例,每个项目有独立页面与 Swiper 滑块
- 在作品集中加入 3D 主视觉与滚动叙事动效
- 通过 GitHub Pages 部署静态作品集站点
适合人群
- 熟悉 React 与 Vite 的前端开发者
- 希望快速定制文本与图片、不深入动效代码的创作者
- 需要案例研究页与联系表单的作品集使用者
- 接受自行接入表单服务以接收消息的开发者
上手与定制指南
结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。
- 1
需要 Node.js 18 或更高版本
- 2
安装依赖:npm install;本地运行:npm run dev(默认 http://localhost:5173)
- 3
生产构建:npm run build,输出到 /dist;预览构建:npm run preview(默认 http://localhost:4173)
- 4
联系表单默认不发送邮件,需在 src/components/ContactForm.jsx 的 send() 中接入 Formspree 等服务的 fetch 请求
- 5
文本与项目数据集中在 src/data/content.js,图片替换 src/assets/img/ 下同名文件,颜色令牌在 src/styles/base.css 顶部
授权与来源资料
使用条件与限制
免费使用 · 保留许可声明本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。
使用时需要遵守
- 允许免费使用、修改、商用和分发该版本代码。
- 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
- 代码按现状提供;担保与责任限制以原许可证及适用法律为准。
额外费用与待核对事项
- README 提及 Formspree 表单服务;真实提交需配置服务端点,其使用额度与费用需单独核对。
- 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
- 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
- 联系表单默认只做校验并跳转到 /sent,不会真正发送邮件;如需接收消息必须自行接入第三方表单服务。
- 要接收表单消息需在 formspree.io 创建免费表单,并在 ContactForm.jsx 的 send() 中替换为对应的 fetch 请求,即依赖外部服务。
- 模板中的肖像与项目封面为 AI 生成的占位图,需替换为自己的作品后再使用。
查看原文依据
Permission is hereby granted, free of charge
许可证原文
The form validates and goes to `/sent`, but it doesn't send email yet.
README 原文
To receive messages, create a free form at [formspree.io](https://formspree.io), then in `src/components/ContactForm.jsx` replace the comment inside `send()` with:
README 原文
https://github.com/Muhammad112233-creator/Portfolio-Template-27/blob/main/LICENSEhttps://github.com/Muhammad112233-creator/Portfolio-Template-27/blob/main/README.md- Code, copy and imagery are original to this template; the portrait and project covers are AI-generated placeholders, so replace them with your own work.
README 原文
DeepSeek 根据仓库许可证和 README 整理 ·2026-10-15。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。
项目核对记录与介绍依据
模板资料
- 来源平台
- GitHub
- 资料与维护参考分
- 资料较完整 · 85 / 100
- 技术栈
- Vite · React
- 网站类型
- 作品集
这个分数如何计算
本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。
这个项目需要核对什么
- 记录的仓库更新时间
- 2026-10-15
- 截图检查日期
- 2026-10-15
已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。
目录记录的主要技术栈是 Vite。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。
查看具体选型方法 →介绍的制作与核对状态
介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。
审核声明: codex-user-requested-batch-review-20261017 · 2026-10-16
查看当时使用的来源资料
SHA-256: a00c4a727d3953ded848e4b4d8ea5bb40feb298dd137abeb450e0f7f9a536ec0
2026-10-15T13:48:23.929Z
来源文件 / 仓库<div align="center">
<img src="docs/readme/hero.svg" alt="Monochrome Folio — animated banner" width="100%" />
<img src="docs/readme/typing.svg" alt="features ticker" width="100%" />
<p>
<img src="https://img.shields.io/badge/React-18-10120f?style=for-the-badge&logo=react&logoColor=61DAFB" alt="React" />
<img src="https://img.shields.io/badge/GSAP-3-10120f?style=for-the-badge&logo=greensock&logoColor=88CE02" alt="GSAP" />
<img src="https://img.shields.io/badge/Lenis-smooth_scroll-10120f?style=for-the-badge&logoColor=white" alt="Lenis" />
<img src="https://img.shields.io/badge/Three.js-R3F-10120f?style=for-the-badge&logo=threedotjs&logoColor=white" alt="Three.js" />
<img src="https://img.shields.io/badge/Vite-5-10120f?style=for-the-badge&logo=vite&logoColor=FFD62E" alt="Vite" />
</p>
<p>
<img src="https://img.shields.io/badge/license-MIT-c2cabb?style=flat-square" alt="MIT" />
<img src="https://img.shields.io/badge/responsive-320px_→_4K-c2cabb?style=flat-square" alt="Responsive" />
<img src="https://img.shields.io/badge/deploy-GitHub_Pages-c2cabb?style=flat-square&logo=github" alt="GitHub Pages" />
<img src="https://img.shields.io/badge/PRs-welcome-c2cabb?style=flat-square" alt="PRs welcome" />
</p>
**A quiet, motion-rich portfolio template for creative developers.**
<br/>
Sage and charcoal tones, condensed type, and scroll that tells a story.
[Live demo](https://Muhammad112233-creator.github.io/Portfolio-Template-27/) ·
[Quick start](#-quick-start) ·
[Customize](#-customize) ·
[Deploy](#-deploy)
</div>
<img src="docs/readme/divider.svg" width="100%" alt="" />
<img src="docs/readme/h-preview.svg" width="100%" alt="Preview" />
<table>
<tr>
<td width="66%"><img src="docs/readme/shot-hero.jpg" alt="3D hero" /></td>
<td width="34%" rowspan="2" align="center"><img src="docs/readme/shot-mobile.jpg" alt="Mobile" width="90%" /></td>
</tr>
<tr>
<td><img src="docs/readme/shot-about.jpg" alt="About section" /></td>
</tr>
<tr>
<td><img src="docs/readme/shot-works.jpg" alt="Works list with hover preview" /></td>
<td><img src="docs/readme/shot-awards.jpg" alt="Awards" /></td>
</tr>
</table>
<img src="docs/readme/divider.svg" width="100%" alt="" />
<img src="docs/readme/h-features.svg" width="100%" alt="Features" />
| | Feature | What it does |
| :-: | -------------------- | --------------------------------------------------------------------------------------------------------- |
| ◐ | **Preloader** | Real image and font preloading, a 0 → 100 counter, and a rotating ring of letters that scatters on finish |
| ▲ | **3D hero** | A procedural pebble cairn (React Three Fiber) that follows the mouse and sinks as you scroll |
| ▤ | **Pinned manifesto** | Letters brighten one by one with scroll, a signature draws itself, and an odometer ticks along |
| ✺ | **Letter scatter** | Loose glyphs fly in from across the screen and land as a sentence |
| ⓘ | **Awards table** | The counter rolls up, lines draw in, and parallax hills drift underneath |
| ⌖ | **Works list** | Zig-zag project list; the cover image follows the cursor with inertia and tilt |
| ↻ | **Page transitions** | A sage curtain spells out the destination letter by letter |
| ● | **Custom cursor** | Dot + lagging ring; grows on links, shows “view” on projects, hidden on touch devices |
| ⇅ | **Rolling buttons** | Pill buttons and nav links whose letters roll up on hover |
| ✉ | **Two-step form** | Validation, then CONFIRM turns into SEND; budget pills; a “sent” page |
| ⧉ | **Copy email** | Click the footer email to copy it, with an animated confirmation |
| ▢ | **Case studies** | One page per project with a Swiper slider and a “next case” link |
| 📱 | **Responsive** | Tuned at 1100 / 950 / 768 / 650 / 450 px, with a full-screen mobile menu |
| ♿ | **Reduced motion** | Respects `prefers-reduced-motion` |
<img src="docs/readme/divider.svg" width="100%" alt="" />
<img src="docs/readme/h-stack.svg" width="100%" alt="Tech stack" />
```text
React 18 UI + routing (react-router, HashRouter → works on GitHub Pages)
GSAP + ScrollTrigger every timeline, pin and scrub
@gsap/react useGSAP() for automatic cleanup
Lenis inertial smooth scrolling, synced to the GSAP ticker
Three.js + R3F the 3D cairn in the hero
Swiper case-study slider
Vite dev server + production build
Fontsource self-hosted Bebas Neue + Archivo (variable width)
```
<img src="docs/readme/divider.svg" width="100%" alt="" />
<img src="docs/readme/h-structure.svg" width="100%" alt="Project structure" />
```text
monochrome-folio/
├─ .github/workflows/deploy.yml ← auto-build & publish to GitHub Pages
├─ docs/readme/ ← animated SVGs + screenshots for this README
├─ public/ ← favicon, social share image
├─ src/
│ ├─ assets/img/ ← portrait + project covers (swap these)
│ ├─ data/content.js ← ✎ ALL TEXT LIVES HERE
│ ├─ components/ ← Loader, Header, Cursor, Footer, buttons…
│ ├─ sections/ ← Hero, Statement, About, Awards, Works, Expertise
│ ├─ pages/ ← Home, About, Case, Sent, 404
│ ├─ three/Cairn.jsx ← procedural 3D scene
│ ├─ hooks/ ← Lenis scroll + page-transition providers
│ └─ styles/ ← base / sections / pages CSS
├─ index.html
├─ vite.config.js
└─ package.json
```
<img src="docs/readme/divider.svg" width="100%" alt="" />
<img src="docs/readme/h-start.svg" width="100%" alt="Quick start" />
> Requires **Node.js 18+** ([download](https://nodejs.org)).
```bash
# 1. install
npm install
# 2. run locally → http://localhost:5173
npm run dev
# 3. production build → /dist
npm run build
# 4. preview the build → http://localhost:4173
npm run preview
```
<img src="docs/readme/divider.svg" width="100%" alt="" />
<img src="docs/readme/h-customize.svg" width="100%" alt="Customize" />
<details open>
<summary><b>1 · Text, links, projects</b></summary>
Open **`src/data/content.js`**. Name, role, email, socials, statement, awards, projects, skills and the about page are all in this one file. Add or remove items in any array and the layout adapts.
</details>
<details>
<summary><b>2 · Images</b></summary>
Replace files in `src/assets/img/` and keep the same names (`portrait.jpg`, `work-1.jpg` … `work-6.jpg`), or import new ones at the top of `content.js`.
Recommended sizes: portrait **1000×1250**, covers **1600×1000**, JPG at around 80% quality.
</details>
<details>
<summary><b>3 · Colours & fonts</b></summary>
Edit the tokens at the top of `src/styles/base.css`:
```css
--ink: #10120f; /* near-black */
--sage: #c2cabb; /* main light tone */
--olive: #3b4039; /* secondary text */
```
</details>
<details>
<summary><b>4 · Contact form</b></summary>
The form validates and goes to `/sent`, but it doesn't send email yet.
To receive messages, create a free form at [formspree.io](https://formspree.io), then in `src/components/ContactForm.jsx` replace the comment inside `send()` with:
```js
await fetch("https://formspree.io/f/YOUR_ID", {
method: "POST",
headers: { "Content-Type": "application/json", Accept: "application/json" },
body: JSON.stringify({ ...f, budget: contact.budgets[budget] }),
});
```
</details>
<details>
<summary><b>5 · 3D object</b></summary>
`src/three/Cairn.jsx` → edit the `STONES` array (size, colour, roughness) or swap in your own mesh.
</details>
<img src="docs/readme/divider.svg" width="100%" alt="" />
<img src="docs/readme/h-credits.svg" width="100%" alt="Credits & license" />
- Code, copy and imagery are original to this template; the portrait and project covers are AI-generated placeholders, so replace them with your own work.
- Fonts: [Bebas Neue](https://fonts.google.com/specimen/Bebas+Neue) and [Archivo](https://fonts.google.com/specimen/Archivo), both under the SIL Open Font License.
- Released under the **MIT License**. Use it, ship it, sell client work with it. A star ⭐ is appreciated.
<div align="center">
<br/>
<img src="docs/readme/divider.svg" width="60%" alt="" />
<br/>
<sub>Made slowly, by hand · <b>Arin Vale</b> · Lahore</sub>
</div>
<div align="center">
## 🌟 Support the Project
If you find this template useful, please consider giving it a star! It helps others discover the repository and supports future development.
</div>
<img src="docs/readme/divider.svg" width="100%" alt="" />
看看同类模板
对比同技术栈与用途的模板,找到更适合的视觉与内容结构。

Resumify
Free, privacy-first resume builder — 6 ATS-friendly templates, full customization, JSON import/export. No sign…
Vite · 作品集

showlit
✨ Showlit - A modern and clean template for creating a personal website
Vite · 作品集

folium
Professional developer portfolio boilerplate (React • TypeScript • Tailwind • Vite) with simple content custom…
Vite · 作品集

kurizu-discord
A Discord themed website built using React & Vite
Vite · 作品集

cv-educornelsen
Production portfolio with a streaming AI chatbot (Gemini + SSE), containerized via Docker, deployed to Google …
Vite · 作品集

about-me-personal-portfolio-website-template
Simple Personal Website Template, built with bootstrap and vite js project.
Vite · 作品集
