品牌、身份、联系方式与社交链接集中在 src/config/Identity.ts,组件中不含个人数据
fiqtor.com — Vite 作品集模板
作者 FIQTOR
基于 Vite 与 React 的单页作品集模板,品牌、身份与 SEO 元数据由配置文件驱动,可作为可复用模板使用。
看看你的网站会是什么样
浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。
全部页面与视图 3
截图用于了解视觉与布局,交互效果请以实际项目为准。
值得关注的模板亮点
从已有项目资料中,快速了解它的特点。
构建时由 src/config/Head.ts 生成 head 元数据、JSON-LD、sitemap.xml 与 robots.txt
使用 vite-plugin-pages 实现 src/pages/*.tsx 文件式路由,页面逻辑位于 src/modules/
内置 AI 助手组件,支持流式聊天、Web Speech API 语音听写与附件类型选择
内容数据按项目、经历、证书、技能、服务等拆分在 src/data/ 目录,便于替换
提供 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/ 部分。
适合你的项目吗?
适用场景
- 搭建个人作品集单页站点,展示项目、经历、证书与技能
- 以现有配置结构为基础,改造成他人或团队可复用的作品集模板
- 需要构建时生成 SEO 元数据、sitemap 与 robots.txt 的静态站点
- 在作品集中集成联系表单、GitHub/WakaTime 统计与 AI 助手等交互模块
适合人群
- 熟悉 React 与 TypeScript、愿意通过编辑配置文件定制站点的开发者
- 需要可复用作品集模板并自行准备后端接口的个人或小团队
- 接受以代码文件而非后台界面维护内容与身份信息的用户
上手与定制指南
结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。
- 1
需要 Node.js 24.x 与 npm,安装后复制 .env.example 为 .env 并填写取值
- 2
运行前需启动后端(默认 http://localhost:4000),并让 VITE_API_BASE_URL 与之匹配
- 3
所有 VITE_* 变量都会进入公开浏览器包,密钥类信息应放在后端
- 4
reCAPTCHA 使用站点密钥,secret 密钥不要放在前端
- 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 原文
https://github.com/FIQTOR/fiqtor.com/blob/master/LICENSEhttps://github.com/FIQTOR/fiqtor.com/blob/master/README.mdNode.js **24.x**, npm
README 原文
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.
看看同类模板
对比同技术栈与用途的模板,找到更适合的视觉与内容结构。

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 · 作品集

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

HackFolio
A high-performance, SEO-optimized hacker-themed portfolio website tailored for for ethical hackers, penetratio…
Vite · 作品集
