ViteReact作品集

fiqtor.com — Vite 作品集模板

作者 FIQTOR

基于 Vite 与 React 的单页作品集模板,品牌、身份与 SEO 元数据由配置文件驱动,可作为可复用模板使用。

看看你的网站会是什么样

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

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

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

全部页面与视图 3

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

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

值得关注的模板亮点

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

01

品牌、身份、联系方式与社交链接集中在 src/config/Identity.ts,组件中不含个人数据

02

构建时由 src/config/Head.ts 生成 head 元数据、JSON-LD、sitemap.xml 与 robots.txt

03

使用 vite-plugin-pages 实现 src/pages/*.tsx 文件式路由,页面逻辑位于 src/modules/

04

内置 AI 助手组件,支持流式聊天、Web Speech API 语音听写与附件类型选择

05

内容数据按项目、经历、证书、技能、服务等拆分在 src/data/ 目录,便于替换

06

提供 Vercel 部署配置,SPA 重写同时保留 sitemap.xml 与 robots.txt

模板详细介绍

这是一个 React + TypeScript + Vite 单页作品集应用,同时被设计为可复用模板:品牌名称、个人身份、联系方式、社交链接、简历路径、站点源地址与分析 ID 等集中在 src/config/Identity.ts,组件代码中不写个人数据。SEO 相关部分由 src/config/Head.ts 在构建时生成 <head>、OpenGraph、Twitter、JSON-LD,以及 sitemap.xml 和 robots.txt,并通过 vite.config.ts 中的 htmlHeadPlugin 注入;index.html 只是带占位标记的最小外壳,不应直接编辑。

内容层面,项目、工作经历、证书、技能、服务、导航与社交链接分别放在 src/data/ 下的对应文件,替换示例数据即可。路由采用 vite-plugin-pages 的文件式路由,src/pages/*.tsx 作为薄包装,实际页面模块位于 src/modules/。样式使用 Tailwind CSS 与 Framer Motion 动画,支持深色/浅色主题。

仓库还包含一个 AI 助手组件,提供流式聊天、基于 Web Speech API 的语音听写,以及图片/视频/文档附件选择(上限 4.5MB,支持拖拽),并可通过 VITE_ENABLE_AI 开关控制。联系表单使用 reCAPTCHA,GitHub/WakaTime 统计与加密货币行情由后端接口提供,前端不放置第三方 API 密钥。

使用限制方面:README 说明运行需要 Node.js 24.x 与 npm,并需先启动后端(默认 http://localhost:4000)且让 VITE_API_BASE_URL 与之匹配;所有 VITE_* 变量都会进入公开浏览器包,不能存放密钥;reCAPTCHA secret 应放在后端。演示图片、字体、图标等第三方素材需单独核对许可。仓库根 README 提供全栈配置,前端 README 仅覆盖 frontend/ 部分。

ViteReact作品集

适合你的项目吗?

适用场景

  • 搭建个人作品集单页站点,展示项目、经历、证书与技能
  • 以现有配置结构为基础,改造成他人或团队可复用的作品集模板
  • 需要构建时生成 SEO 元数据、sitemap 与 robots.txt 的静态站点
  • 在作品集中集成联系表单、GitHub/WakaTime 统计与 AI 助手等交互模块

适合人群

  • 熟悉 React 与 TypeScript、愿意通过编辑配置文件定制站点的开发者
  • 需要可复用作品集模板并自行准备后端接口的个人或小团队
  • 接受以代码文件而非后台界面维护内容与身份信息的用户

上手与定制指南

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

  1. 1

    需要 Node.js 24.x 与 npm,安装后复制 .env.example 为 .env 并填写取值

  2. 2

    运行前需启动后端(默认 http://localhost:4000),并让 VITE_API_BASE_URL 与之匹配

  3. 3

    所有 VITE_* 变量都会进入公开浏览器包,密钥类信息应放在后端

  4. 4

    reCAPTCHA 使用站点密钥,secret 密钥不要放在前端

  5. 5

    index.html 为最小外壳,head 由构建注入,应修改 src/config/Identity.ts 或可选的 VITE_DOMAIN

查看仓库使用说明

授权与来源资料

使用条件与限制

免费使用 · 保留许可声明

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

使用时需要遵守

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

额外费用与待核对事项

  • 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
  • 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
  • 运行前端前必须自行启动后端服务(默认 http://localhost:4000),并让 VITE_API_BASE_URL 与之匹配,否则相关数据接口不可用。
  • 配置以代码文件为主,仅少量取值通过环境变量设置,定制身份与品牌需直接编辑源码并重新构建。
  • 所有 VITE_* 变量都会进入公开浏览器包,禁止在其中放置 API 密钥或私有令牌,密钥必须保留在后端。
  • 联系表单使用 reCAPTCHA,站点密钥在前端,secret 密钥必须放在后端,不能出现在前端。
  • 加密货币行情与社交统计依赖后端接口(/api/v1/crypto、/api/v1/social/stats)提供数据,前端不自带这些数据源。
  • AI 助手功能由 VITE_ENABLE_AI 开关控制,需显式设为 TRUE 才启用。
  • 部署到 Vercel 时需导入 frontend/ 目录并设置 VITE_API_BASE_URL(可选 VITE_DOMAIN),并非开箱即用。
  • 运行环境要求 Node.js 24.x 与 npm,版本不符可能无法正常安装或构建。
查看原文依据

Permission is hereby granted, free of charge

许可证原文

Make sure the backend is running (`http://localhost:4000`) and `VITE_API_BASE_URL` matches it.

README 原文

Only a handful of values remain in env — everything else is code-based.

README 原文

**Every `VITE_*` variable is embedded in the public browser bundle.** Never put secrets (API secrets, private tokens) behind a `VITE_` variable — keep those on the backend.

README 原文

reCAPTCHA **secret** key belongs on the backend, never here.

README 原文

Crypto prices (`/api/v1/crypto`) and social stats (`/api/v1/social/stats`) are fetched from the backend, which serves static data.

README 原文

`VITE_ENABLE_AI` | `TRUE` / `FALSE` to toggle AI features

README 原文

Import the `frontend/` folder, set `VITE_API_BASE_URL` (and optionally `VITE_DOMAIN`), and deploy.

README 原文

Node.js **24.x**, npm

README 原文
https://github.com/FIQTOR/fiqtor.com/blob/master/LICENSEhttps://github.com/FIQTOR/fiqtor.com/blob/master/README.md

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

项目核对记录与介绍依据

模板资料

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

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

这个项目需要核对什么

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

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

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

查看具体选型方法 →

介绍的制作与核对状态

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

审核声明: [email protected] · 2026-10-08

查看当时使用的来源资料

SHA-256: ddbd1afdfcca305984ab538c33a9905d714ec9b729164897b053c6f8a50e6f77

2026-10-08T02:06:36.757Z

来源文件 / 仓库
# 🎨 Frontend — Portfolio SPA

React 19 + TypeScript + Vite single-page app for the portfolio. Branding, identity and SEO metadata are configuration-driven (code in `src/config/`, plus a few env vars), so the project doubles as a reusable template.

> 🔗 See the [root README](../README.md) for full-stack setup and configuration.

## ✨ Features

- ⚡ **Vite + React 19** with TypeScript (strict) and HMR.
- 🎨 **Tailwind CSS v4** (`@tailwindcss/vite`) + Framer Motion animations, dark/light theme.
- 🧭 **File-based routing** via `vite-plugin-pages` (`src/pages/*.tsx`).
- 🔍 **Config-driven SEO** — `<head>`, OpenGraph, Twitter, JSON-LD, `sitemap.xml`, and `robots.txt` are **generated at build time** from `src/config/Head.ts` + `src/config/Identity.ts`.
- 🤖 **AI Assistant (`src/components/AIHelper.tsx`)** — streaming chat with:
  - 🎙️ **Voice dictation** — Web Speech API transcribes speech straight into the composer textarea (append mode, auto-stops on close).
  - 📎 **Attachment type picker** — a popup to choose **Image / Video / Document** before opening the file dialog (max 4.5MB; drag-and-drop also supported).
  - A 4-bar equalizer animation while listening, copy & regenerate actions, and a dimmed + blurred backdrop (with a width-stable scroll lock) while the panel is open.
- 🖼️ **Interactive widgets** — contact form (reCAPTCHA), live GitHub/WakaTime stats, crypto widget.
- 🌐 **Fully configurable** — no personal data in component code; identity comes from `src/config/Identity.ts` and only a few `VITE_*` env vars.
- 🔐 **No secrets in the bundle** — crypto prices and social stats are fetched from *our backend* (static data); integration usernames live in `src/config/*.ts`. No third-party API key ever reaches the browser.

## 🛠 Tech Stack

- React 19, TypeScript, Vite, Tailwind CSS v4
- Framer Motion, GSAP, `react-helmet-async`, `react-router-dom`
- `ogl` (WebGL line waves), `animejs`, `lottie-web`
- Axios, `react-google-recaptcha`
- Icons: `react-icons`

## ✅ Prerequisites

- Node.js **24.x**, npm

## 📦 Installation

```bash
cd frontend
npm install
cp .env.example .env    # then edit .env with your values
```

## ▶️ Running

```bash
npm run dev       # dev server at http://localhost:5173
npm run build     # type-check + production build
npm run preview   # preview the production build
npm run lint      # ESLint
```

Make sure the backend is running (`http://localhost:4000`) and `VITE_API_BASE_URL` matches it.

## ⚙️ Configuration

### Environment Variables (`frontend/.env`)

Only a handful of values remain in env — everything else is code-based. See [`.env.example`](.env.example).

> ⚠️ **Every `VITE_*` variable is embedded in the public browser bundle.** Never put secrets (API secrets, private tokens) behind a `VITE_` variable — keep those on the backend.

| Variable | Purpose |
|----------|---------|
| `VITE_DOMAIN` | Optional site-origin override (defaults to `SITE_ORIGIN` in `src/config/Identity.ts`) |
| `VITE_API_BASE_URL` | Backend API base URL |
| `VITE_RECAPTCHA_SITE_KEY` | reCAPTCHA **site** key (never the secret) |
| `VITE_ENABLE_AI` | `TRUE` / `FALSE` to toggle AI features |

### Identity & branding (`src/config/Identity.ts`)

> ℹ️ Branding, owner identity, contact info, social URLs, resume paths, the company/business brand, the site origin and the Google Analytics ID are **code-based** (NOT env vars). Edit [`src/config/Identity.ts`](src/config/Identity.ts) and rebuild.

| Export | Controls |
|--------|----------|
| `BRAND_NAME`, `OWNER_NAME`, `OWNER_ALIAS`, `JOB_TITLE`, `HEADLINE` | Names / role / tagline |
| `YEARS_OF_EXPERIENCE`, `COUNTRY`, `COUNTRY_CODE`, `LANGUAGES` | Profile facts |
| `CONTACT_EMAIL`, `BUSINESS_EMAIL`, `CONTACT_PHONE`, `WHATSAPP_NUMBER`, `TWITTER_HANDLE` | Contact info |
| `SOCIAL_LINKS`, `RESUME`, `PORTRAIT_IMAGE` | Socials, resumes, portrait |
| `COMPANY` | Company/business brand (services & linktree) |
| `SITE_ORIGIN`, `GA_MEASUREMENT_ID` | Canonical origin & analytics |

> 🔐 **No API keys here.** Crypto prices (`/api/v1/crypto`) and social stats (`/api/v1/social/stats`) are fetched from the backend, which serves static data. Integration usernames also live in source, not env:
>
> | File | Controls |
> |------|----------|
> | `src/config/Github.ts` | GitHub username (profile link) |
> | `src/config/Wakatime.ts` | WakaTime username (profile link) |
>
> Social handles (Instagram, TikTok, YouTube, LinkedIn, GitHub) come from `SOCIAL_LINKS` in `src/config/Identity.ts`.

### Content (`src/data/`)

Replace the sample content with your own:

| File | Controls |
|------|----------|
| `projects.ts` | Project portfolio |
| `career.ts` | Work experience timeline |
| `certificate.ts` | Certificates & awards |
| `skills.ts` / `services.ts` | Skills & services |
| `menu.ts` | Navigation |
| `social.ts` | Social links (wired to `Identity.ts`) |

### Integration usernames (`src/config/`)

Public usernames are kept out of env and live in source, since they're not secrets and are edited far less often than env vars: `Github.ts`, `Wakatime.ts`. Social handles live in `SOCIAL_LINKS` inside `src/config/Identity.ts`. Secrets for those integrations stay on the **backend**.

### `<head>` / SEO generation

- `src/config/Head.ts` builds the `<head>` (title, meta, OG, Twitter, JSON-LD, GA) **and** `sitemap.xml` + `robots.txt`.
- The `htmlHeadPlugin` in `vite.config.ts` injects them at dev/build time.
- `index.html` is a minimal shell with a `<!--vite-html-head-->` marker — **don't edit it directly**; change `src/config/Identity.ts` (or the optional `VITE_DOMAIN`) instead.
- Origin defaults to `SITE_ORIGIN` in `src/config/Identity.ts`, optionally overridden via `VITE_DOMAIN`.

### Styling & layout notes

- **No horizontal scroll:** `html, body { overflow-x: clip }` in `src/index.css` guards against page-wide horizontal scroll from full-bleed / off-screen decorative elements. Use `w-full` (not `w-screen` / `100vw`, which includes the scrollbar width).
- **Stable layout width:** `html { scrollbar-gutter: stable }` permanently reserves the scrollbar space, so opening overlays that lock scrolling (e.g. the AI panel) never causes a layout shift.
- **Voice-input types:** the Web Speech API typings live in `src/vite-env.d.ts` (not in the default TS DOM lib).

## 📂 Project Structure

```
frontend/
├── public/            # static assets (img, pdf, favicon) — sitemap/robots are generated
├── src/
│   ├── components/    # shared UI components (incl. AIHelper.tsx, Footer.tsx)
│   ├── config/        # Identity, Metadata, Head, Github/Wakatime
│   ├── context/       # React contexts (theme, container, welcome)
│   ├── data/          # 📝 your content (projects, career, certificates…)
│   ├── layouts/       # layout wrappers
│   ├── modules/       # feature modules — page = folder
│   │   ├── home/      #   ├── sections/  (header, about, skills…) + components/ + index.tsx
│   │   ├── career/    #   └── components/ (CareerView.tsx)
│   │   ├── certification/  # certificates grid
│   │   ├── contact/   # contact form, recaptcha, response message
│   │   ├── linktree/  # linktree box
│   │   └── projects/  # projects grid
│   ├── pages/         # file-based routes (thin wrappers around modules)
│   ├── App.tsx
│   └── main.tsx
├── index.html         # minimal shell (head injected at build)
├── vite.config.ts     # htmlHeadPlugin (head + sitemap + robots)
└── .env.example
```

> 🧹 **Naming conventions:** shared `components/` and module files use **PascalCase** (`CareerView.tsx`); module sub-folders are `sections/` (page blocks) and `components/` (domain pieces); each page-module has an `index.tsx` entry.

## 🚢 Deployment

Vercel-ready (`vercel.json`, SPA rewrite that preserves `sitemap.xml` / `robots.txt`). Import the `frontend/` folder, set `VITE_API_BASE_URL` (and optionally `VITE_DOMAIN`), and deploy.

## 🔒 Security

- Never commit `.env` (gitignored) — only `.env.example` is tracked.
- `VITE_*` values are **public**; no secrets in the frontend.
- reCAPTCHA **secret** key belongs on the backend, never here.
- **No third-party API keys on the client.** Crypto/social data comes from the backend (static), and integration usernames live in `src/config/*.ts`. If you add a live provider later, proxy it through the backend.
- No hardcoded credentials in source — secrets live only in env on the backend; public identity lives in `src/config/`.

## 📄 License

ISC.
反馈内容错误

看看同类模板

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