ViteReact作品集博客

portfolio-template (Boy-Offi9) — Vite 作品集模板

作者 Boy-Offi9

一个由单一配置文件驱动的开发者作品集模板,内容全部集中在 src/config/site.js,无需改动组件代码即可替换姓名、简介、项目、技能和链接。

看看你的网站会是什么样

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

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

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

全部页面与视图 2

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

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

值得关注的模板亮点

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

01

所有内容集中在 src/config/site.js,替换该文件即可完成个性化,无需修改组件代码

02

项目图片支持三级回退:自定义图片路径或 URL、GitHub 仓库社交预览卡、基于首字母和强调色的渐变占位块

03

头像支持自定义图片或自动生成的首字母渐变头像,与强调色联动

04

明暗主题切换持久化到 localStorage,首次加载遵循系统偏好,并通过内联脚本避免主题闪烁

05

强调色只需修改一个 RGB 三元组,即可联动按钮、悬停状态、占位渐变和液态背景

06

联系对话框通过 mailto: 链接提交,没有后端收集数据;README 说明可替换为 Formspree 或 EmailJS 的 fetch POST

模板详细介绍

该模板将站点内容集中到 src/config/site.js 一个文件中,包括姓名、角色、标语、简介、邮箱、链接、技能、项目列表以及强调色。项目图片支持三级回退:本地路径或完整 URL、GitHub 仓库社交预览卡(格式为 owner/name,无需 API 密钥)、以及基于项目标题首字母和强调色生成的渐变占位块;头像也采用类似的生成式回退。界面包含明暗主题切换(首次加载遵循系统偏好,选择持久化到 localStorage)、导航栏和项目展开面板的玻璃拟态效果、由强调色驱动的液态动画背景,以及各区块的滚动显现动画,且均遵循 prefers-reduced-motion。联系对话框通过 mailto: 链接提交,不涉及后端收集。构建产物为静态站点,可部署到 Vercel、Netlify、GitHub Pages 或 Cloudflare Pages。README 未提供性能指标或生产就绪程度的说明。

ViteReact作品集博客

适合你的项目吗?

适用场景

  • 开发者希望快速搭建个人作品集,且不想深入组件代码进行定制
  • 需要明暗主题切换和滚动显现动画的静态个人站点
  • 项目展示希望自动使用 GitHub 仓库预览卡,而不手动准备截图
  • 部署到 Vercel、Netlify、GitHub Pages 或 Cloudflare Pages 等静态托管平台

适合人群

  • 具备 React 和 Vite 基础、愿意通过编辑配置文件来定制站点的开发者
  • 需要单页作品集展示项目、技能和联系方式的个人
  • 偏好静态站点部署、不要求后端表单收集的开发者

上手与定制指南

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

  1. 1

    运行 npm install 安装依赖,然后运行 npm run dev 启动开发服务器

  2. 2

    编辑 src/config/site.js,替换示例内容为个人信息、项目、技能和链接

  3. 3

    项目图片可通过 image 字段设置本地路径或完整 URL,或通过 repo 字段设置 owner/name 以使用 GitHub 社交预览卡;两者留空则生成渐变占位块

  4. 4

    头像通过 avatar 字段设置本地路径或 URL,留空则生成首字母渐变头像

  5. 5

    运行 npm run build 生成静态站点,可部署到 Vercel、Netlify、GitHub Pages 或 Cloudflare Pages

查看仓库使用说明

授权与来源资料

使用条件与限制

免费使用 · 保留许可声明

本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。

使用时需要遵守

  • 允许免费使用、修改、商用和分发该版本代码。
  • 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
  • 代码按现状提供;担保与责任限制以原许可证及适用法律为准。

额外费用与待核对事项

  • README 提及 Formspree 表单服务;真实提交需配置服务端点,其使用额度与费用需单独核对。
  • 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
  • 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
  • 项目图片的 GitHub 预览卡依赖 GitHub 的 opengraph.githubassets.com 服务,属于外部服务;README 说明无需 API 密钥或认证。
  • 若希望不依赖访客邮件客户端收集消息,README 建议改用 Formspree 或 EmailJS 等外部表单服务,需自行注册并配置。
  • 默认联系对话框通过 mailto: 提交,不涉及后端收集;实际能否送达取决于访客是否配置了邮件客户端。
  • README 声明 MIT 许可,可自由使用、fork 并作为自己的项目发布;署名被感谢但非必需(以随附 MIT 许可证文本为准)。
查看原文依据

Permission is hereby granted, free of charge

许可证原文

2. **`repo`** — a GitHub repo in `"owner/name"` form. Pulls that repo's

README 原文

for a `fetch` POST to a form service — [Formspree](https://formspree.io) or

README 原文

visitor's name, email, and message — there's no backend collecting anything.

README 原文

MIT — use it, fork it, ship it as your own. Credit is appreciated but not

README 原文
https://github.com/Boy-Offi9/portfolio-template/blob/main/LICENSEhttps://github.com/Boy-Offi9/portfolio-template/blob/main/README.md

DeepSeek 根据仓库许可证和 README 整理 ·2026-10-17。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。

项目核对记录与介绍依据

模板资料

来源平台
GitHub
资料与维护参考分
资料较完整 · 88 / 100
技术栈
Vite · React
网站类型
作品集 · 博客
这个分数如何计算

本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。

这个项目需要核对什么

记录的仓库更新时间
2026-08-19
截图检查日期
2026-10-17

已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。

目录记录的主要技术栈是 Vite。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。

查看具体选型方法 →

介绍的制作与核对状态

介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。

审核声明: codex-user-requested-batch-review-20261018 · 2026-10-18

查看当时使用的来源资料

SHA-256: 4968ecbe47c84f25299f2858b160083fb2f78000a03a38200256b44c2c40e8d7

2026-10-17T10:38:08.432Z

来源文件 / 仓库
# Portfolio Template

A config-driven developer portfolio. Edit one file, get your own site — no
component code required to personalize it.

**[Live Demo](https://portfolio-template-rho-nine.vercel.app/)**

## Why this one

Most portfolio templates make you hunt through five files to change your
name. This one doesn't — everything content-wise lives in
[`src/config/site.js`](./src/config/site.js): your name, bio, projects,
skills, links, and even the accent color. Swap that file, keep the
components untouched.

No image assets are required to get a working site — projects without an
`image` field render a generated gradient block with their initials instead,
and the avatar works the same way. See "Images" below for the full fallback
chain, including automatic GitHub repo preview cards.

**Also included:** a light/dark theme toggle (persists across visits, respects
system preference on first load), glassmorphism on the nav bar and expanded
project panels, an animated liquid-blob background derived from your accent
color, and scroll-reveal animations on every section — all of it respects
`prefers-reduced-motion`.

## Quick Start

```bash
npm install
npm run dev
```

Then open `src/config/site.js` and replace the example content with yours.

### Build for Production

```bash
npm run build
```

Deploys as a static site — Vercel, Netlify, GitHub Pages, Cloudflare Pages,
all work with zero extra config.

## Customizing

### Content

Everything in `src/config/site.js`:

```js
export const site = {
  name: "Your Name",
  role: "Your Title",
  tagline: "One line about what you do.",
  bio: "A few sentences for the About section.",
  accentColor: "79 70 229", // "R G B", no commas
  email: "[email protected]",
  links: [{ label: "GitHub", url: "https://github.com/you" }],
  skills: ["TypeScript", "React", "..."],
  projects: [
    {
      title: "Project Name",
      role: "Your role on it",
      year: "2025",
      description: "What it does and what you built.",
      tags: ["Node.js", "PostgreSQL"],
      url: "https://...",
      image: "",  // local path or full URL, see "Images" below
      repo: "",   // or "yourname/project-repo" for an automatic GitHub preview
    },
  ],
};
```

### Color

Change `accentColor` — one value, reskins the whole site (buttons, hover
states, the availability dot, project placeholder gradients). It's an RGB
triplet so it can plug into Tailwind's alpha-value opacity syntax.

```js
accentColor: "79 70 229",   // indigo (default)
accentColor: "16 130 92",   // green
accentColor: "190 60 40",   // rust
accentColor: "190 24 93",   // pink
```

The liquid background blobs, avatar/project placeholder gradients, and hover
states all derive from this one value — nothing else to touch.

### Avatar

Set `avatar` in the config to an image path or URL. Leave it `null` for a
generated initials avatar (same gradient logic as the project placeholders,
so it always matches your accent color).

### Images

Each project's picture comes from a three-tier fallback, first match wins.
Set `image`/`repo` to `""` (the default) to skip a tier — no need to comment
anything out:

1. **`image`** — a local path (`/assets/projects/name.png`) or a **full
   image URL** (`https://...`), both work exactly the same way.
2. **`repo`** — a GitHub repo in `"owner/name"` form. Pulls that repo's
   social-preview card straight from GitHub (`opengraph.githubassets.com`)
   with no image file, API key, or auth needed. If the repo doesn't exist
   or the image fails to load, it falls through to tier 3 automatically.
3. **Both empty** — a generated gradient block using the project title's
   initials, tinted from your `accentColor`.

Avatars follow the same idea minus the repo tier: set `avatar` to a local
path, a full URL, or leave it `""` for a generated initials avatar. See
[`public/assets/README.md`](./public/assets/README.md) for folder
conventions and recommended image sizes.

### Theme

The toggle in the nav switches `data-theme` on `<html>` between `light` and
`dark`, persisted to `localStorage` under the key `portfolio-theme`. A small
inline script in `index.html` sets it before first paint so there's no
flash of the wrong theme on load. To change the dark-mode palette, edit the
`[data-theme="dark"]` block in `src/index.css`.

### Layout

The "numbered index" project list (`src/components/ProjectRow.jsx`) is the
signature layout choice — click a row to expand it. If you'd rather have a
card grid, that's the one component to rewrite; everything else reads from
the same `site.projects` array regardless of how you render it.

### Contact Dialog

"Get in touch" (nav) and "Send a message" (footer) both open a glass modal
(`src/components/ContactDialog.jsx`) instead of jumping straight to your
email client. Submitting it opens a `mailto:` link pre-filled with the
visitor's name, email, and message — there's no backend collecting anything.

If you'd rather capture messages without relying on the visitor's email
client being configured, swap the `handleSubmit` body in `ContactDialog.jsx`
for a `fetch` POST to a form service — [Formspree](https://formspree.io) or
[EmailJS](https://www.emailjs.com) both work with a single call and have
free tiers.

To add the dialog trigger anywhere else, wrap any label in it:

```jsx
<ContactDialog className="your-classes-here">Say hello</ContactDialog>
```

## Project Structure

```
public/
  assets/
    avatar/               your profile photo goes here
    projects/               your project screenshots go here
src/
  config/
    site.js              ← edit this
  components/
    Nav.jsx
    Hero.jsx
    ProjectsIndex.jsx      renders the list
    ProjectRow.jsx          single expandable row
    ProjectPlaceholder.jsx  image → GitHub repo preview → gradient fallback chain
    Avatar.jsx               generated fallback avatar (or your image)
    ThemeToggle.jsx           light/dark switch
    ContactDialog.jsx         glass contact modal (mailto-based)
    LiquidBackground.jsx     animated blob background
    Reveal.jsx                scroll-reveal wrapper
    About.jsx
    Footer.jsx
  hooks/
    useTheme.js            theme state + persistence
  utils/
    placeholder.js         shared initials/hue helpers
  App.jsx                 applies accentColor as a CSS variable on load
```

## Tech Stack

Vite + React + Tailwind. No backend, no database, no build step beyond
`vite build`.

## License

MIT — use it, fork it, ship it as your own. Credit is appreciated but not
required.
反馈内容错误

看看同类模板

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