SamarthDevkar/samarth-devkar-portfolio
GitHub: SamarthDevkar/samarth-devkar-portfolio
一位专注于检测工程和威胁狩猎的安全工程师的静态个人作品集网站,使用 Next.js 16 和 React 19 构建,强调性能、可访问性和内容与代码分离。
Stars: 0 | Forks: 0
# Samarth Devkar — 个人作品集
一名从事检测工程和威胁狩猎的安全工程师的个人作品集网站。
**生产环境:** https://samarthdevkar.vercel.app
## 技术
| 层级 | 选择 | 原因 |
| --- | --- | --- |
| 框架 | Next.js 16.2 (App Router) | 对全部 14 个路由进行静态预渲染,具备一流的元数据和 OG 图像生成功能 |
| UI | React 19.2 | 默认使用 Server Components;仅在存在真实交互时使用客户端代码 |
| 语言 | TypeScript (严格模式) | 内容模型是强类型的,因此缺失数据会导致编译错误,而不是页面空白 |
| 样式 | Tailwind CSS v4 | 设计 token 在 `@theme` 中统一定义,并按语义使用 |
| 图标 | lucide-react | 统一的图标集 |
| 测试 | Playwright + axe-core | 76 项测试:可访问性、响应式、键盘操作、SEO、headers |
| 审计 | Lighthouse | 在默认节流条件下对生产环境构建运行 |
**无动画库。** 真正需要 JavaScript 的两个动画 —— 一个滚动进度条和一个数字递增动画 —— 仅用了各约 15 行的 `requestAnimationFrame` 和 `IntersectionObserver`。其余全部依赖 CSS。移除动画库减少了 28 KiB 的无用 JavaScript。
**无后端。** 没有 API 路由,没有 server actions,没有数据库,没有运行时环境变量,没有机密信息。
## 本地设置
要求 **Node.js ≥ 20.9**(基于 24.18.1 LTS 构建和测试)。
```
npm install
npm run dev
```
然后打开 http://localhost:3000。
## 命令
```
npm run dev # dev server (Turbopack)
npm run build # production build
npm run start # serve the production build
npm run typecheck # tsc --noEmit
npm run lint # eslint
npm run verify # typecheck + lint + build
npm test # Playwright suite (builds, serves on :3100)
npm run test:report # open the last HTML test report
npm run shots # screenshots at 3 breakpoints (needs the dev server running)
```
Lighthouse,针对运行中的生产服务器:
```
node scripts/lighthouse.mjs / /work /about
```
## 环境变量
**无。** 该网站是完全静态的。如果以后引入了变量,必须仅在确属公开信息时才添加 `NEXT_PUBLIC_` 前缀,并记录在 `docs/DEPLOYMENT.md` 中。
## 更新内容
所有专业内容都存放在 `src/content/` 中 —— 绝不在 JSX 中。
| 文件 | 包含内容 |
| --- | --- |
| `site.ts` | 姓名、职位、定位、邮箱、地点、社交链接、导航、可信度信号 |
| `projects.ts` | 案例研究:问题、构建内容、难点、技术栈、pipeline 阶段、链接 |
| `career.ts` | 工作经历、教育背景、出版物、荣誉、认证 |
| `skills.ts` | 能力分组及其作为佐证的项目 |
| `types.ts` | 上述所有内容的类型化契约 |
要添加项目,请追加到 `projects.ts` 中。工作索引、过滤器、命令面板、sitemap、静态参数和 JSON-LD 都派生自该数组 —— 无需编辑其他任何内容。
要替换简历,请覆盖 `public/resume/Samarth-Devkar-Resume.pdf` 并保持文件名不变。
**在编辑任何内容之前,请阅读 [CLAUDE.md](CLAUDE.md) 中的完整性规则。** 本网站上没有任何内容可以脱离经过验证的来源。
## 文档
| 文档 | 内容 |
| --- | --- |
| [CLAUDE.md](CLAUDE.md) | 面向 agent 和贡献者的工作规则 |
| [docs/PORTFOLIO_CONTENT.md](docs/PORTFOLIO_CONTENT.md) | 所有声明、其来源以及待办事项 |
| [docs/DESIGN_SYSTEM.md](docs/DESIGN_SYSTEM.md) | token、字体缩放比例、动态效果、组件、反模式 |
| [docs/DEPLOYMENT.md](docs/DEPLOYMENT.md) | Vercel 工作流、域名保留、回滚 |
| [docs/QA_REPORT.md](docs/QA_REPORT.md) | 测试、可访问性、性能和安全结果 |
标签:React, Syscalls, Tailwind CSS, TypeScript, 个人主页, 安全插件, 特征检测, 自动化攻击