交互式首屏使用 three.js 点波信号场,响应指针和主题变化
portfolio.dev — Astro 作品集模板
作者 apoi1
Julián David Ruiz Flórez 的个人作品集网站,基于 Astro 构建,使用 Tailwind CSS、TypeScript、GSAP、Lenis 和 three.js,支持英西双语、明暗主题,并作为静态站点部署在 Netlify。
看看你的网站会是什么样
浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。
全部页面与视图 3
截图用于了解视觉与布局,交互效果请以实际项目为准。
值得关注的模板亮点
从已有项目资料中,快速了解它的特点。
滚动编排基于 GSAP、ScrollTrigger 和 Lenis,通过 data-reveal、data-stagger、data-counter、data-magnetic 等属性声明式控制
完整英西双语路由,包含 hreflang 替代链接和按语言区分的元数据与 OG 卡片
深色/浅色主题通过 CSS 变量覆盖实现,无构建分支,无闪烁,并持久化用户选择
项目内容使用 Astro Content Collections 管理,添加项目只需新建文件夹并放入双语 Markdown 与封面图
包含 ⌘K 命令面板、可打印 CV 页面、JSON-LD 结构化数据、站点地图和语义化 HTML
模板详细介绍
portfolio.dev 是系统工程师 Julián David Ruiz Flórez 的个人作品集,README 说明其使用 Astro、Tailwind CSS、TypeScript、GSAP、Lenis 和 three.js 构建,支持英语和西班牙语双语路由(/ 与 /es/),提供深色与浅色主题切换,并包含滚动动画、⌘K 命令面板和可打印的 CV 页面。项目内容通过 Astro Content Collections 管理,每个项目对应一个文件夹,内含英西双语的 Markdown 条目和封面图片。构建输出为静态 HTML,部署在 Netlify,并配置了自定义域名。README 未提供性能数据、浏览器兼容性细节或生产环境的具体限制说明。
适合你的项目吗?
适用场景
- 个人作品集网站,需要展示项目案例并支持多语言
- 希望以内容文件夹方式管理项目条目,避免为每个项目编写组件代码
- 需要静态部署且包含 SEO 元数据、结构化数据和站点地图的站点
- 希望提供明暗主题切换、滚动动画和减少动态效果回退的交互体验
适合人群
- 需要英西双语个人作品集的开发者或设计师
- 使用 Astro 和 Tailwind CSS 构建静态站点的项目
- 希望通过 Content Collections 以文件夹方式添加项目内容的场景
- 需要部署到 Netlify 并配置自定义域名的静态站点
上手与定制指南
结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。
- 1
运行 npm install 安装依赖,npm run dev 启动开发服务器(默认 http://localhost:4321)
- 2
运行 npm run build 生成静态输出到 dist/,npm run check 执行 astro check 类型检查
- 3
运行 npm run verify 执行构建后的内容、SEO 和链接冒烟测试
- 4
添加项目时在 src/content/projects/<slug>/ 下创建 index.en.md、index.es.md 和封面图片,构建后自动出现在网格、案例页和 ⌘K 面板中
- 5
部署相关配置参见 docs/DEPLOYMENT.md,内容模型参考 docs/CONTENT-GUIDE.md,架构细节参考 docs/ARCHITECTURE.md
授权与来源资料
使用条件与限制
免费使用 · 保留许可声明本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。
使用时需要遵守
- 允许免费使用、修改、商用和分发该版本代码。
- 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
- 代码按现状提供;担保与责任限制以原许可证及适用法律为准。
额外费用与待核对事项
- 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
- 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
查看原文依据
https://github.com/apoi1/portfolio.dev/blob/main/LICENSEhttps://github.com/apoi1/portfolio.dev/blob/main/README.mdPermission is hereby granted, free of charge
许可证原文
DeepSeek 根据仓库许可证和 README 整理 ·2026-10-16。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。
项目核对记录与介绍依据
模板资料
- 来源平台
- GitHub
- 资料与维护参考分
- 资料较完整 · 80 / 100
- 技术栈
- Astro
- 网站类型
- 作品集
这个分数如何计算
本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。
这个项目需要核对什么
- 记录的仓库更新时间
- 2026-10-16
- 截图检查日期
- 2026-10-16
已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。
目录记录的主要技术栈是 Astro。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。
查看具体选型方法 →介绍的制作与核对状态
介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。
审核声明: codex-user-requested-batch-review-20261017 · 2026-10-16
查看当时使用的来源资料
SHA-256: 25d36f398c2b803327ad630b09fa794b6999938dcd240af51b2c5b2877fabda3
2026-10-16T15:15:07.534Z
来源文件 / 仓库# apoi2 · portfolio.dev
**Personal portfolio of Julián David Ruiz Flórez** — systems engineer from Soacha/Bogotá, Colombia, building real-time signal systems and full-stack products. Bilingual (EN/ES), dual-theme (dark/light), motion-first, and still **100% static on Netlify**.

[](https://apoi2.netlify.app)
[](https://astro.build)
[](https://tailwindcss.com)
[](https://www.typescriptlang.org)
[](LICENSE)
**Live → [apoi2.is-a.dev](https://apoi2.is-a.dev)** · [English](https://apoi2.is-a.dev/) · [Español](https://apoi2.is-a.dev/es/) · [CV (print-ready)](https://apoi2.is-a.dev/cv)
## What's inside
| Feature | How |
| --- | --- |
| Interactive hero | three.js point-wave "signal field" — reacts to your pointer and to the theme |
| Scroll choreography | GSAP + ScrollTrigger + Lenis, all declarative (`data-reveal`, `data-stagger`, `data-counter`, `data-magnetic`) |
| Bilingual EN/ES | Full i18n routing (`/` + `/es/`), hreflang alternates, per-locale metadata & OG cards |
| Dark / light theme | CSS-variable token overrides — zero build fork, zero flash, persisted |
| Projects as content | Astro Content Collections — **add a project by adding a folder** |
| ⌘K command palette | Navigate, open cases, copy email, jump to the CV |
| Print-ready CV | `/cv` and `/es/cv` reuse the same verified data as the site |
| SEO | JSON-LD (Person, WebSite, CreativeWork), sitemap with hreflang, OG/Twitter cards, semantic HTML |
| Fast & resilient | Static HTML, `prefers-reduced-motion` fallbacks everywhere, no-JS still readable |
## Quick start
```bash
npm install
npm run dev # http://localhost:4321
npm run build # static output → dist/
npm run check # astro check (types)
npm run verify # post-build content/SEO/link smoke test
```
## Add a project in 3 steps
That's the whole content model — no component code, no config:
```text
src/content/projects/<your-slug>/
├── index.en.md ← English entry (frontmatter + case body)
├── index.es.md ← Spanish entry (same shape, translated)
├── cover.svg ← card/OG cover (16:10 works best)
└── shot-1.webp … ← optional gallery images
```
1. Create the folder, drop a `cover` image (SVG/PNG/WebP).
2. Write `index.en.md` + `index.es.md` — frontmatter + the case-study body.
3. Build. The card appears in the grid, the case page in both languages, and the ⌘K palette picks it up.
```mermaid
flowchart LR
A["📁 new folder<br/>src/content/projects/<slug>/"] --> B["📝 index.en.md + index.es.md"]
B --> C["🖼️ cover + gallery images"]
C --> D[" astro build "]
D --> E["🏠 card on the grid"]
D --> F["📄 /projects/<slug> + /es/projects/<slug>"]
D --> G["⌘K palette entry"]
D --> H["📅 sitemap + hreflang"]
```
Full reference: [docs/CONTENT-GUIDE.md](docs/CONTENT-GUIDE.md).
## Architecture (the short version)
```mermaid
flowchart TB
subgraph SRC[" src "]
C["Content collections<br/>5 projects × 2 locales"]
I["i18n/ui.ts — every UI string<br/>EN + ES, type-checked shapes"]
S["sections/ locale-aware<br/>Hero · About · Experience · Projects · Skills · Contact"]
M["scripts/motion.ts + signal-field.ts<br/>Lenis · GSAP · three.js"]
end
subgraph BUILD[" astro build "]
PG["15 static pages<br/>/ + /es + 10 case pages + 2 CV + 404"]
SEO["JSON-LD · sitemap+hreflang<br/>OG per locale"]
end
subgraph EDGE["Netlify edge"]
DIST["dist/ static files<br/>immutable asset caching"]
end
SRC --> BUILD --> EDGE
EDGE --> W["🌍 apoi2.is-a.dev<br/>(CNAME → apoi2.netlify.app)"]
```
Deep dive: [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) · Deployment: [docs/DEPLOYMENT.md](docs/DEPLOYMENT.md).
## Project structure
```text
├── astro.config.mjs # site URL, i18n routing, sitemap
├── netlify.toml # build + security/cache headers
├── scripts/
│ ├── generate-og.mjs # regenerates OG cards + favicon PNGs
│ └── verify-site.mjs # post-build smoke test (npm run verify)
├── src/
│ ├── content.config.ts # projects collection schema
│ ├── content/projects/ # ← THE content (folder per project)
│ ├── i18n/ui.ts # all copy, EN + ES
│ ├── lib/ # site identity, project helpers
│ ├── components/
│ │ ├── ui/ # design-system primitives (incl. toggles)
│ │ ├── sections/ # page sections
│ │ └── … # Nav, Footer, cards, palette, CV
│ ├── layouts/Layout.astro# SEO head, theme boot, VT
│ ├── scripts/ # motion.ts, signal-field.ts
│ └── pages/ # / , /es/ , /projects/[slug] , /cv , 404
└── public/ # favicon suite, OG cards, robots.txt
```
## Docs index
| Doc | What you'll find |
| --- | --- |
| [ARCHITECTURE](docs/ARCHITECTURE.md) | Rendering pipeline, i18n, theming, motion system — with diagrams |
| [CONTENT-GUIDE](docs/CONTENT-GUIDE.md) | Add projects, frontmatter reference, image & i18n rules |
| [DEPLOYMENT](docs/DEPLOYMENT.md) | Netlify, the is-a.dev domain, headers, OG regeneration |
## Credits
Designed & built by **Julián Ruiz — apoi2** with Astro, Tailwind CSS, GSAP, Lenis and three.js. Motion respects `prefers-reduced-motion`. Almost all rights reserved — [MIT licensed](LICENSE).
看看同类模板
对比同技术栈与用途的模板,找到更适合的视觉与内容结构。

astrofy
Astrofy is a free and open-source template for your Personal Portfolio Website built with Astro and TailwindCS…
Astro · 作品集

astro-nano
Astro Nano is a static, minimalist, lightweight, lightning fast portfolio and blog.
Astro · 作品集

astro-erudite
An opinionated, unstyled static blogging template built with Astro and native CSS.
Astro · 作品集

astro-sphere
Astro Sphere is a static, minimalist, lightweight, lightning fast portfolio and blog.
Astro · 作品集

astro-micro
Blog theme for Astro with search and comments built-in. Zero frameworks.
Astro · 作品集

astro-aria
A personal blog, portfolio, or blog template
Astro · 作品集
