Astro作品集

Portfolio-Template-33 — Astro 作品集模板

作者 Muhammad112233-creator

Phosphor 是一个以复古桌面操作系统为界面的个人作品集模板,基于 Astro、TypeScript、Three.js 和 GSAP 构建,包含 17 个示例项目、职业时间线、命令面板和可交互的 3D 项目视图。

看看你的网站会是什么样

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

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

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

全部页面与视图 3

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

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

值得关注的模板亮点

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

01

复古桌面操作系统界面,包含粒子肖像、像素光标和冷启动序列

02

17 个原创示例项目,提供球体、索引和空间画廊三种浏览视图

03

13 步、四分支的职业时间线,以提交图形式呈现

04

可搜索命令面板和键盘快捷键(数字键导航、⌘K 打开命令面板等)

05

六种持久颜色主题,可选 CRT 玻璃、扫描线和合成点击音效

06

移动端独立触摸布局,导航和表单针对小屏优化

模板详细介绍

该模板将作品集呈现为一个可探索的复古桌面环境,包含粒子肖像、四个导航区域(项目、经历、个人资料、联系)、可搜索命令面板、键盘快捷键、六种颜色主题以及可选的 CRT 效果。项目内容以 17 个原创示例项目展示,并提供球体、索引和空间画廊三种视图;职业经历以 13 步、四分支的提交图形式呈现。移动端有独立的触摸布局。

技术栈为 Astro 7.4.0、TypeScript、Three.js r185 和 GSAP 3.15.0,字体为 Jacquard 12 和 DotGothic16。界面使用真实 HTML 构建,无需组件运行时。站点为静态输出,包含 GitHub Pages 部署工作流,也可托管于任意静态主机。

README 明确说明演示内容(Alex Morgan 及 17 个项目)为虚构示例,使用前需替换。联系表单默认生成 mailto: 草稿,不直接发送邮件;如需直接投递,可配置兼容的 JSON 端点。README 未提供正式 WCAG 审计结论,仅列出已实现的无障碍特性。

Astro作品集

适合你的项目吗?

适用场景

  • 希望以独特、可交互的桌面风格展示个人项目与职业经历的作品集
  • 需要包含 3D 项目视图、命令面板和键盘快捷键的静态个人网站
  • 想要一个基于 Astro 且可部署到 GitHub Pages 的静态作品集模板
  • 需要打印友好、可生成文本简历的作品集页面

适合人群

  • 前端开发者或创意技术人员的个人作品集
  • 喜欢复古像素美学和交互式界面的设计师
  • 需要静态站点生成和简单部署流程的用户

上手与定制指南

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

  1. 1

    需要 Node.js 22.22.0 或更新版本及 npm,运行 npm ci 安装依赖,npm run dev 启动开发服务器(默认 http://localhost:4321)。

  2. 2

    首次访问需点击、触摸或按键启动桌面;减少动态效果的用户会跳过冷启动。

  3. 3

    使用前需替换 src/data/portfolio.ts 中的个人信息、项目、经历和角色,以及 public/images/portrait.webp 等资源。

  4. 4

    联系表单默认生成 mailto: 草稿,需替换 [email protected] 和社交链接;如需直接投递,在 person.contactEndpoint 配置兼容端点。

  5. 5

    构建命令为 npm run build,预览为 npm run preview;部署可使用包含的 GitHub Pages 工作流或任意静态主机。

查看仓库使用说明

授权与来源资料

使用条件与限制

免费使用 · 保留许可声明

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

使用时需要遵守

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

额外费用与待核对事项

  • 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
  • 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
  • 演示内容为虚构:Alex Morgan 及 17 个项目、职业经历均为原创示例,非真实客户业绩,使用前须替换。
  • 联系表单默认仅生成 mailto: 草稿,由本地邮件客户端发送,不直接投递邮件。
  • 如需表单直接投递,须自行配置兼容的 JSON 端点(接收 email、subject、message 并返回成功响应)并测试。
  • 不得将 API 密钥或邮件服务密钥放入客户端代码;GitHub Pages 为静态托管,不提供邮件后端。
  • 发布前须将 [email protected] 替换为真实邮箱地址。
  • 发布前须替换通用的 GitHub 和 LinkedIn 链接目标。
  • 所列无障碍特性为实现功能,并非正式 WCAG 审计结论;发布前须自行测试内容与修改。
  • 字体依其附带的 SIL Open Font License 分发;依赖保留各自许可证,GSAP 不受本项目 MIT 文件重新授权,详见第三方声明。
  • 运行需 Node.js 22.22.0 或更新版本及 npm。
  • Phosphor-Preview.html 仅为预览/导出,非编辑用源文件;编辑需使用源码。
  • 本项目非参考作者源码、品牌或身份,与其无关联或背书,也不保证像素级一致。
查看原文依据

Permission is hereby granted, free of charge

许可证原文

> **Demo content, honestly labelled.** Alex Morgan is a fictional identity. The 17 projects and career history are original examples, not real client credits. Replace them before representing the portfolio as your own professional work.

README 原文

By default, the form prepares a **`mailto:` draft**. Your email app handles sending. The interface never claims a message was sent when it was not.

README 原文

- If you want direct form delivery, configure a compatible endpoint in `person.contactEndpoint` and test it. The optional endpoint must accept JSON `{ email, subject, message }` and return a successful HTTP response on success.

README 原文

- Do not put API keys or mail-service secrets into client code. GitHub Pages is static hosting, not an email backend.

README 原文

- Replace `[email protected]` with your real address.

README 原文

- Replace the generic GitHub and LinkedIn destinations.

README 原文

These are implemented features, **not a claim of a formal WCAG audit**. Test your own content and any modifications before shipping. See the [production and export verification record](docs/VERIFICATION.md).

README 原文

The template source and original SVG artwork are released under the [MIT License](LICENSE). The demo portrait is AI-generated and represents a fictional person. Fonts are distributed under their included **SIL Open Font License** notices. Dependencies retain their own licenses; GSAP is not relicensed by this project's MIT file. See [third-party notices](THIRD_PARTY_NOTICES.md).

README 原文

**Requirements:** Node.js **22.22.0 or newer** and npm. The lockfile is included.

README 原文

**No Node.js just to look around?** The delivery includes a separate `Phosphor-Preview.html`: download it and open it in a modern browser. It embeds its scripts, fonts, and images and does not need a server. It is a preview/export, not the source of truth for editing.

README 原文

This is not the reference author's source code, work, branding, imagery, or identity. It is not affiliated with or endorsed by the reference author, and it is not advertised as a verified pixel-identical copy. New content, new art, independent code.

README 原文
https://github.com/Muhammad112233-creator/Portfolio-Template-33/blob/main/LICENSEhttps://github.com/Muhammad112233-creator/Portfolio-Template-33/blob/main/README.md

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

项目核对记录与介绍依据

模板资料

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

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

这个项目需要核对什么

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

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

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

查看具体选型方法 →

介绍的制作与核对状态

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

审核声明: codex-user-requested-batch-review-20261018 · 2026-10-18

查看当时使用的来源资料

SHA-256: 6e07b66070c2f45998886e2865913c922ef161b160e8eec475ff2fe2b49d047a

2026-10-17T17:14:45.910Z

来源文件 / 仓库
<div align="center">
  <img src="docs/media/header.gif" width="960" alt="Phosphor Portfolio — a different kind of personal website" />
  <br />
  <strong>A portfolio with a little memory. And a lot of character.</strong>
  <br /><br />
  A retro desktop, a living project collection, and a human story.<br />
  Built with Astro, TypeScript, Three.js, and GSAP. Made to be made your own.
  <br /><br />
  <img src="docs/media/stack.svg" width="640" alt="Astro · TypeScript · Three.js · GSAP · MIT licensed source" />
  <br /><br />
  <a href="#03--get-it-running">Quick start</a> ·
  <a href="#04--publish-it">Deploy</a> ·
  <a href="docs/CUSTOMIZATION.md">Make it yours</a> ·
  <a href="docs/REFERENCE-STUDY.md">Design notes</a>
</div>

<br />

## 01 — Not another wall of cards

<img src="docs/media/spectrum.gif" width="960" height="6" alt="Animated rainbow divider" />

Phosphor turns the portfolio into an operating system you can explore. Open a volume, follow a career through a commit graph, find a command, or get pleasantly sidetracked by a cartridge.

The interface is playful. The underlying site is straightforward: static HTML, local assets, real links, and a small, readable codebase.

| The desktop                                           | Inside the system                                           |
| :---------------------------------------------------- | :---------------------------------------------------------- |
| A glowing particle portrait with pointer response     | 17 original project concepts and individual case-study URLs |
| Four corners: projects, experience, profile, contact  | Sphere, index, and spatial gallery views                    |
| A cold-start sequence and pixel cursors               | A 13-step, four-branch career timeline                      |
| Six persistent, carefully chosen color themes         | A long-form profile with animated, original diagrams        |
| Optional CRT glass, scanlines, and synthesized clicks | Draggable contact and utility windows                       |
| Searchable command palette and keyboard shortcuts     | An original ray-cast maze and fractal explorer              |

> **Demo content, honestly labelled.** Alex Morgan is a fictional identity. The 17 projects and career history are original examples, not real client credits. Replace them before representing the portfolio as your own professional work.

## 02 — A closer look

<img src="docs/media/spectrum.gif" width="960" height="6" alt="Animated rainbow divider" />

<p align="center"><img src="docs/media/desktop.webp" width="960" alt="Desktop preview: amber pixel type, a particle portrait, and four navigation spaces" /></p>

<details>
<summary><strong>See the mobile layout</strong></summary>
<br />
<p align="center"><img src="docs/media/mobile.webp" width="300" alt="Mobile preview with a centred portrait and a two-column navigation grid" /></p>

This is a separate touch layout, not a desktop squeezed into a smaller viewport. Navigation moves below the portrait, the contact form stacks, and project controls remain within reach.

</details>

## 03 — Get it running

<img src="docs/media/spectrum.gif" width="960" height="6" alt="Animated rainbow divider" />

**Requirements:** Node.js **22.22.0 or newer** and npm. The lockfile is included.

```sh
npm ci
npm run dev
```

Open the local URL printed by Astro, normally **http://localhost:4321**. On first visit, click, tap, or press a key to start the desktop. Reduced-motion visitors skip the cold start.

```sh
npm run check       # Astro and TypeScript diagnostics
npm run build       # Type-check, then generate the static site
npm run preview     # Serve that production build locally
npm run package     # After a build: create source, portable Pages, and offline exports
```

**No Node.js just to look around?** The delivery includes a separate `Phosphor-Preview.html`: download it and open it in a modern browser. It embeds its scripts, fonts, and images and does not need a server. It is a preview/export, not the source of truth for editing.

## 05 — Make it yours

<img src="docs/media/spectrum.gif" width="960" height="6" alt="Animated rainbow divider" />

Start here, not in the shaders:

| What you want to change                         | Where it lives                                              |
| :---------------------------------------------- | :---------------------------------------------------------- |
| Name, email, role, location, social links       | `src/data/portfolio.ts` → `person`                          |
| Projects, descriptions, credits, technologies   | `src/data/portfolio.ts` → `projects`                        |
| Career entries, dates, branch labels            | `src/data/portfolio.ts` → `commits`                         |
| Four roles and capabilities                     | `src/data/portfolio.ts` → `roles`                           |
| Profile paragraphs, form labels, interface copy | `src/components/Desktop.astro`                              |
| Home portrait                                   | `public/images/portrait.webp`                               |
| Raster portrait fallback                        | `public/images/portrait-particles.png`                      |
| Project artwork                                 | `public/art/<project-id>.svg` and `<project-id>-detail.svg` |
| Palette values                                  | `src/styles/global.css` and `themes` in the data file       |
| Motion, navigation, windows, interactions       | `src/scripts/app.ts`                                        |
| WebGL portrait and project scenes               | `src/scripts/scenes.ts`                                     |
| Domain and deployment base                      | `astro.config.mjs` / optional environment values            |

<details>
<summary><strong>Project structure</strong></summary>

```text
.
├── .github/workflows/deploy.yml  # Source-to-Pages deployment
├── public/
│   ├── art/                     # 34 original SVG covers and detail plates
│   ├── fonts/                   # Self-hosted fonts + OFL notices
│   ├── images/                  # New portrait, fallback, social card
│   ├── .nojekyll
│   └── favicon.svg
├── src/
│   ├── components/              # Real HTML interface + SVG diagrams
│   ├── data/portfolio.ts        # Identity, work, experience, themes
│   ├── pages/                   # Home, static deep links, and 404
│   ├── scripts/                 # Router, scenes, and original cartridges
│   └── styles/global.css        # Themes, layout, print, responsive states
├── docs/                        # Public documentation + README media
├── scripts/                     # Artwork and export tools
├── astro.config.mjs
├── package.json
└── package-lock.json
```

</details>

## 06 — Find your way around

<img src="docs/media/spectrum.gif" width="960" height="6" alt="Animated rainbow divider" />

| Key                   | Action                                               |
| :-------------------- | :--------------------------------------------------- |
| `1` / `2` / `3` / `4` | Projects / experience / profile / contact            |
| `⌘ K` or `Ctrl K`     | Open or close the command palette                    |
| `Esc`                 | Close the foreground window, or return a level       |
| `←` / `→`             | Move through experience or the 3D project views      |
| `Home` / `End`        | First / last career step                             |
| `Enter`               | Open the selected 3D project                         |
| `S`                   | Toggle sound, except while typing or playing         |
| `F`                   | Request full screen, where browser permissions allow |
| `⌘ P` or `Ctrl P`     | Print the complete, text-based résumé                |

The project sphere supports dragging and a scroll wheel. The index is a normal scrollable list. The gallery supports swiping, scrolling, and explicit previous/next controls. Right-click the desktop for a small context menu.

## 07 — Under the glass

<img src="docs/media/spectrum.gif" width="960" height="6" alt="Animated rainbow divider" />

| Layer                                   | Choice                                          |
| :-------------------------------------- | :---------------------------------------------- |
| Static framework                        | Astro 7.4.0                                     |
| Application code                        | TypeScript                                      |
| Portrait and spatial project collection | Three.js r185                                   |
| Transitions and interaction timing      | GSAP 3.15.0                                     |
| Display type                            | Jacquard 12                                     |
| Interface type                          | DotGothic16                                     |
| Maze and fractal cartridges             | Original Canvas 2D code                         |
| Hosting                                 | Any static host; GitHub Pages workflow included |

<p align="center"><img src="docs/media/boot.gif" width="680" alt="Animated terminal showing the portfolio's local, static architecture" /></p>

No component runtime is needed for the interface. React and SwiftUI appear in the fictional project descriptions; they are **not** extra runtime dependencies of this website.

### Accessibility & practical details

- Navigation, forms, project stories, and content remain real HTML.
- Reduced-motion preferences disable animated transitions and skip startup.
- The complete project index is available without WebGL. A raster halftone backs up the portrait.
- Dialogs have focus management; background content is inert while a dialog is open.
- Keyboard shortcuts do not intercept typing in a form.
- Fonts and visual assets are local. The site has no analytics or tracking service.
- Rendering pauses when scenes are not needed or the tab is hidden.
- The print stylesheet produces a readable résumé rather than a screenshot of a canvas.

These are implemented features, **not a claim of a formal WCAG audit**. Test your own content and any modifications before shipping. See the [production and export verification record](docs/VERIFICATION.md).

## 08 — Contact without pretending

<img src="docs/media/spectrum.gif" width="960" height="6" alt="Animated rainbow divider" />

By default, the form prepares a **`mailto:` draft**. Your email app handles sending. The interface never claims a message was sent when it was not.

Before publishing:

- Replace `[email protected]` with your real address.
- Replace the generic GitHub and LinkedIn destinations.
- If you want direct form delivery, configure a compatible endpoint in `person.contactEndpoint` and test it. The optional endpoint must accept JSON `{ email, subject, message }` and return a successful HTTP response on success.
- Do not put API keys or mail-service secrets into client code. GitHub Pages is static hosting, not an email backend.

## 09 — Credits, provenance & license

<img src="docs/media/spectrum.gif" width="960" height="6" alt="Animated rainbow divider" />

Visual and interaction inspiration: **[Eddy Naboulet’s portfolio](https://eddy-naboulet.dev/)**. Its retro operating-system vocabulary, warm phosphor palette, pixel type, spatial collection, and commit-history résumé were studied before this independent implementation was written.

This is not the reference author's source code, work, branding, imagery, or identity. It is not affiliated with or endorsed by the reference author, and it is not advertised as a verified pixel-identical copy. New content, new art, independent code.

The template source and original SVG artwork are released under the [MIT License](LICENSE). The demo portrait is AI-generated and represents a fictional person. Fonts are distributed under their included **SIL Open Font License** notices. Dependencies retain their own licenses; GSAP is not relicensed by this project's MIT file. See [third-party notices](THIRD_PARTY_NOTICES.md).

<img src="docs/media/spectrum.gif" width="420" height="6" alt="Animated rainbow spectrum" />

<div align="center">
  <strong>Build something with a point of view.</strong><br />
  Keep it useful. Give it a little character.
  <br /><br />
  <img src="docs/media/spectrum.gif" width="420" height="6" alt="Animated rainbow spectrum" />
</div>

<div align="center">

## 🌟 Support the Project

If you find this template useful, please consider giving it a star! It helps others discover the repository and supports future development.

</div>

<img src="docs/media/spectrum.gif" width="420" height="6" alt="Animated rainbow spectrum" />
反馈内容错误

看看同类模板

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