Retro desktop operating system interface with a particle portrait, pixel cursor and cold-boot sequence
Portfolio-Template-33 — Astro Portfolio Template
By Muhammad112233-creator
Phosphor is a personal portfolio template with a retro desktop operating system interface, built on Astro, TypeScript, Three.js and GSAP. It includes 17 sample projects, a career timeline, a command palette and interactive 3D project views.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Actual screenshot captured by the server browser.
All pages & views 3
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
17 original sample projects with three browsing views: sphere, index and spatial gallery
13-step, four-branch career timeline presented as a commit graph
Searchable command palette and keyboard shortcuts (number keys for navigation, ⌘K to open the command palette, and others)
Six persistent color themes, with optional CRT glass, scanlines and synthesized click sounds
Separate mobile touch layout with navigation and forms optimized for small screens
Template Details
The template presents the portfolio as an explorable retro desktop environment, with a particle portrait, four navigation areas (projects, experience, profile, contact), a searchable command palette, keyboard shortcuts, six color themes and an optional CRT effect. Project content is shown as 17 original sample projects with three views: sphere, index and spatial gallery; career history appears as a 13-step, four-branch commit graph. Mobile has a separate touch layout.
The stack is Astro 7.4.0, TypeScript, Three.js r185 and GSAP 3.15.0, with the Jacquard 12 and DotGothic16 fonts. The interface is built with real HTML and needs no component runtime. The site is static output, includes a GitHub Pages deployment workflow, and can also be hosted on any static host.
The README explicitly states that the demo content (Alex Morgan and the 17 projects) is fictional sample material and must be replaced before use. The contact form generates a mailto: draft by default and does not send email directly; a compatible JSON endpoint can be configured for direct delivery. The README does not provide a formal WCAG audit conclusion and only lists the accessibility features that are implemented.
Is it right for your project?
Use Cases
- A portfolio that showcases personal projects and career history in a distinctive, interactive desktop style
- A static personal site that needs 3D project views, a command palette and keyboard shortcuts
- A static portfolio template built on Astro that can be deployed to GitHub Pages
- A portfolio page that is print-friendly and can generate a text résumé
Suitable For
- Personal portfolios for front-end developers or creative technologists
- Designers who like retro pixel aesthetics and interactive interfaces
- Users who need static site generation and a simple deployment flow
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
Requires Node.js 22.22.0 or newer and npm; run npm ci to install dependencies and npm run dev to start the development server (default http://localhost:4321).
- 2
The desktop must be started on first visit by clicking, touching or pressing a key; users who prefer reduced motion skip the cold boot.
- 3
Before use, replace the personal information, projects, experience and roles in src/data/portfolio.ts, as well as assets such as public/images/portrait.webp.
- 4
The contact form generates a mailto: draft by default; replace [email protected] and the social links. For direct delivery, configure a compatible endpoint in person.contactEndpoint.
- 5
The build command is npm run build and preview is npm run preview; deploy with the included GitHub Pages workflow or any static host.
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis entry covers the free version under the MIT license in the public repository; the free scope is that version's code and does not mean external services or third-party assets are free.
Must comply with when using
- The code of this version may be used, modified, used commercially and distributed free of charge.
- When distributing copies or substantial portions of the code, the original author's copyright notice and the full MIT license notice must be retained.
- The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.
Additional costs & items to verify
- Demo images, fonts, icons and other third-party assets must be checked against their own licenses; the code's MIT license alone does not determine this.
- External services such as domains, hosting, databases, payments or AI may incur separate charges.
- The demo content is fictional: Alex Morgan, the 17 projects and the career history are original samples, not real client results, and must be replaced before use.
- The contact form by default only generates a mailto: draft, sent by the local mail client; it does not deliver email directly.
- For direct form delivery, you must configure a compatible JSON endpoint yourself (accepting email, subject and message and returning a success response) and test it.
- API keys or email service keys must not be placed in client-side code; GitHub Pages is static hosting and does not provide a mail backend.
- Before publishing, [email protected] must be replaced with a real email address.
- Before publishing, the generic GitHub and LinkedIn link targets must be replaced.
- The listed accessibility features are implemented functionality, not a formal WCAG audit conclusion; content and changes must be tested by yourself before publishing.
- Fonts are distributed under their accompanying SIL Open Font License; dependencies retain their own licenses, and GSAP is not relicensed by this project's MIT file; see the third-party notices.
- Running requires Node.js 22.22.0 or newer and npm.
- Phosphor-Preview.html is only a preview/export, not an editable source file; editing requires the source code.
- This project does not reference the author's source code, branding or identity, is not affiliated with or endorsed by them, and does not guarantee pixel-level consistency.
View Original Text Basis
Permission is hereby granted, free of charge
Original License Text
> **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.
Original 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.
Original 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.
Original README
- Do not put API keys or mail-service secrets into client code. GitHub Pages is static hosting, not an email backend.
Original README
- Replace `[email protected]` with your real address.
Original README
- Replace the generic GitHub and LinkedIn destinations.
Original 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).
Original 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).
Original README
**Requirements:** Node.js **22.22.0 or newer** and npm. The lockfile is included.
Original 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.
Original README
https://github.com/Muhammad112233-creator/Portfolio-Template-33/blob/main/LICENSEhttps://github.com/Muhammad112233-creator/Portfolio-Template-33/blob/main/README.mdThis 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.
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-17. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.
Project checks & description sources
Template Information
- Source platforms
- GitHub
- Documentation and maintenance reference score
- More documented · 80 / 100
- Technologies
- Astro
- Website type
- Portfolio
How this score is calculated
Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.
What to verify for this project
- Repository update recorded
- 2026-10-17
- Screenshot last checked
- 2026-10-17
A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.
The catalog identifies Astro as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.
Use a selection guide →How this description was prepared
AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.
Review declaration: codex-user-requested-batch-review-20261018 · 2026-10-18
Inspect the recorded source material
SHA-256: 6e07b66070c2f45998886e2865913c922ef161b160e8eec475ff2fe2b49d047a
2026-10-17T17:14:45.910Z
Source file / repository<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" />
Explore similar templates
Compare previews and descriptions within the same stack and category.

astrofy
Astrofy is a free and open-source personal portfolio website template built with Astro and TailwindCSS, with built-in blog, CV timeline, project showcase, store, and RSS feed modules.
Astro · Portfolio

astro-nano
Astro Nano is a static, minimalist portfolio and blog template built with Astro, Tailwind, and TypeScript without frontend frameworks. It includes light/dark themes, animated UI, automatic sitemap and RSS feed generation, and Markdown/MDX support with component imports.
Astro · Portfolio

astro-erudite
astro-erudite is an opinionated, unstyled static blog template built with Astro and native CSS, with no UI or CSS framework and minimal dependencies.
Astro · Portfolio

astro-sphere
Astro Sphere is a static, minimalist portfolio and blog theme maintained by markhorn-dev, built mainly with Astro, Tailwind, and TypeScript, with a small amount of SolidJS for stateful components.
Astro · Portfolio

astro-micro
Astro Micro is a framework-free blog and portfolio theme for Astro, forked from Astro Nano. It adds Pagefind search and Giscus comments while retaining type safety, sitemap, RSS, Markdown and MDX support, and TailwindCSS with system, light, and dark themes.
Astro · Portfolio

astro-aria
astro-aria is an Astro-based personal blog and portfolio template maintained by miantiao-me, ported from static-templates/aria.
Astro · Portfolio
