Astro作品集

portfolio.dev — Astro 作品集模板

作者 apoi1

Julián David Ruiz Flórez 的个人作品集网站,基于 Astro 构建,使用 Tailwind CSS、TypeScript、GSAP、Lenis 和 three.js,支持英西双语、明暗主题,并作为静态站点部署在 Netlify。

看看你的网站会是什么样

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

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

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

全部页面与视图 3

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

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

值得关注的模板亮点

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

01

交互式首屏使用 three.js 点波信号场,响应指针和主题变化

02

滚动编排基于 GSAP、ScrollTrigger 和 Lenis,通过 data-reveal、data-stagger、data-counter、data-magnetic 等属性声明式控制

03

完整英西双语路由,包含 hreflang 替代链接和按语言区分的元数据与 OG 卡片

04

深色/浅色主题通过 CSS 变量覆盖实现,无构建分支,无闪烁,并持久化用户选择

05

项目内容使用 Astro Content Collections 管理,添加项目只需新建文件夹并放入双语 Markdown 与封面图

06

包含 ⌘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 未提供性能数据、浏览器兼容性细节或生产环境的具体限制说明。

Astro作品集

适合你的项目吗?

适用场景

  • 个人作品集网站,需要展示项目案例并支持多语言
  • 希望以内容文件夹方式管理项目条目,避免为每个项目编写组件代码
  • 需要静态部署且包含 SEO 元数据、结构化数据和站点地图的站点
  • 希望提供明暗主题切换、滚动动画和减少动态效果回退的交互体验

适合人群

  • 需要英西双语个人作品集的开发者或设计师
  • 使用 Astro 和 Tailwind CSS 构建静态站点的项目
  • 希望通过 Content Collections 以文件夹方式添加项目内容的场景
  • 需要部署到 Netlify 并配置自定义域名的静态站点

上手与定制指南

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

  1. 1

    运行 npm install 安装依赖,npm run dev 启动开发服务器(默认 http://localhost:4321)

  2. 2

    运行 npm run build 生成静态输出到 dist/,npm run check 执行 astro check 类型检查

  3. 3

    运行 npm run verify 执行构建后的内容、SEO 和链接冒烟测试

  4. 4

    添加项目时在 src/content/projects/<slug>/ 下创建 index.en.md、index.es.md 和封面图片,构建后自动出现在网格、案例页和 ⌘K 面板中

  5. 5

    部署相关配置参见 docs/DEPLOYMENT.md,内容模型参考 docs/CONTENT-GUIDE.md,架构细节参考 docs/ARCHITECTURE.md

查看仓库使用说明

授权与来源资料

使用条件与限制

免费使用 · 保留许可声明

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

使用时需要遵守

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

额外费用与待核对事项

  • 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
  • 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
查看原文依据

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**.

![Preview](public/og.png)

[![Netlify](https://img.shields.io/badge/deploy-Netlify-00C7B7?style=flat-square&logo=netlify&logoColor=white)](https://apoi2.netlify.app)
[![Astro](https://img.shields.io/badge/Astro-7-BC52EE?style=flat-square&logo=astro&logoColor=white)](https://astro.build)
[![Tailwind CSS](https://img.shields.io/badge/Tailwind_CSS-4-38BDF8?style=flat-square&logo=tailwindcss&logoColor=white)](https://tailwindcss.com)
[![TypeScript](https://img.shields.io/badge/TypeScript-strict-3178C6?style=flat-square&logo=typescript&logoColor=white)](https://www.typescriptlang.org)
[![License: MIT](https://img.shields.io/badge/license-MIT-black?style=flat-square)](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).
反馈内容错误

看看同类模板

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