VS Code-style tab navigation with closable tabs and Ctrl/Cmd+Z to restore them one by one
hophni.dev — Astro Portfolio Template
By HoPHNiDev
An Astro-based VS Code-style developer portfolio template with content managed in Markdown, featuring a hidden terminal and multiple Stitch Easter egg interactions.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Actual screenshot captured by the server browser.
One original preview is available. Open the full image to inspect the design.
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
Hidden terminal overlay with Tab completion and commands such as help, neofetch, and git status
Multiple Stitch Easter eggs: debugger, tech badge comments, copy prompt, idle crash animation, and 404 page
All content managed through Markdown files under src/content/ without modifying component code
Theme colors centrally defined in the @theme block of global.css
Includes a GitHub Pages deployment workflow and custom domain configuration instructions
Template Details
This is a personal portfolio website template that adopts a dark IDE interface similar to VS Code. Pages are organized by closable tab navigation, including a terminal-style Hero section, an experience timeline presented as JSON, a project card grid, and a footer with a VS Code status bar.
All editable content is placed in Markdown files under src/content/: hero/about.md defines role, username, hostname, bio, and skills; each file in experience/ corresponds to a work experience entry; each file in projects/ corresponds to a project card; contacts/links.md manages contact information; terminal/commands.md defines hidden terminal commands; stitch/reviews.md stores tech badge comments. Theme colors are adjusted in the @theme block of src/styles/global.css, and the domain is set in public/CNAME and the site field of astro.config.mjs.
Interactive Easter eggs include: a Stitch debugger in the bottom-right corner (appearing on hover, click, or idle), opening an Ubuntu-style hidden terminal by pressing backtick, tilde, or Cmd/Ctrl+K (with Tab completion and built-in commands such as help, neofetch, git status), hovering over tech badges to trigger Stitch comments, selecting text in the experience section to trigger a copy prompt, triggering falling page elements and a Stitch crash animation after five minutes of tab idle time, and a custom 404 page.
The template uses Astro and Tailwind CSS, manages content via Astro Content Collections in Markdown, targets GitHub Pages for deployment, and includes a GitHub Actions workflow. The repository is MIT licensed and can be used, modified, commercialized, and distributed for free, but third-party assets such as demo images, fonts, and icons require separate license verification, and external services such as domains and hosting may incur additional charges.
Is it right for your project?
Use Cases
- Build a personal portfolio website for developers to showcase skills, work experience, and projects
- Maintain portfolio content in Markdown to avoid directly editing component code
- Add fun to the website through a hidden terminal and Easter egg interactions
- Deploy to GitHub Pages and use a custom domain
Suitable For
- Developers who want to quickly build an IDE-style personal portfolio
- Users who prefer managing content with Markdown
- Those who need a GitHub Pages deployment solution and custom domain configuration reference
- Developers who like terminal-style interfaces and Easter egg interactions
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
Run npm install to install dependencies, npm run dev to start the development server at http://localhost:4321/ by default
- 2
Modify personal information, experience, projects, contact information, and terminal commands in the Markdown files under src/content/
- 3
Adjust the IDE color scheme in the @theme block of src/styles/global.css
- 4
Before deployment, fill in the custom domain in public/CNAME and set site in astro.config.mjs
- 5
In the GitHub repository's Settings → Pages, set Source to GitHub Actions; pushing to the main branch will deploy automatically
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 the code of this version and does not mean external services or third-party assets are free.
Must comply with when using
- Free use, modification, commercial use, and distribution of this version's code are permitted.
- When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
- 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 respective licenses and cannot be judged solely by the code's MIT license.
- External services such as domains, hosting, databases, payments, or AI may incur additional charges.
- The design prototype uses the Google Stitch tool, which is an external service; modifying the design yourself may require access to that external service.
- Using a custom domain requires editing public/CNAME and configuring the domain yourself; domain registration and hosting are external paid services.
- Deploying to a custom domain requires manually setting the site field in astro.config.mjs.
- Deployment depends on GitHub Pages and GitHub Actions, requiring a GitHub account and corresponding repository settings.
- Automatic deployment depends on the GitHub Actions workflow in the repository, requiring Pages to be enabled on GitHub and pushing to the main branch.
View Original Text Basis
Permission is hereby granted, free of charge
Original License Text
| Design | [Google Stitch](https://stitch.withgoogle.com/) (initial prototype) |
Original README
- **Domain**: edit `public/CNAME`
Original README
**`astro.config.mjs`** — set `site` to your domain:
Original README
2. Under **Source**, select **GitHub Actions**
Original README
https://github.com/HoPHNiDev/hophni.dev/blob/main/LICENCEhttps://github.com/HoPHNiDev/hophni.dev/blob/main/README.md3. The workflow (`.github/workflows/deploy.yml`) will auto-deploy on every push to `main`
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-12. 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-02-26
- Screenshot last checked
- 2026-10-12
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: [email protected] · 2026-10-13
Inspect the recorded source material
SHA-256: a76dbded4d5f3e803129c6b8c55347fc88ce60ac8ff25546e3146c9fb8be53c6
2026-10-12T22:42:07.009Z
Source file / repository# 🖥️ IDE & Stitch — Developer Portfolio A personal portfolio site with an **IDE-like (VS Code)** dark theme, powered by [Astro](https://astro.build/) and packed with interactive **Stitch Easter eggs**.    > 🛠️ **Template by [HoPHNi](https://github.com/HoPHNiDev)** — fork it, customize it, make it yours. --- ## 🚀 Quick Start ```bash # Install dependencies npm install # Run dev server npm run dev # Build for production npm run build # Preview production build npm run preview ``` The site will be available at `http://localhost:4321/`. --- ## 📁 Project Structure ``` src/ ├── content/ ← All editable content (Markdown) │ ├── hero/about.md ← Role, skills, bio for terminal │ ├── experience/*.md ← Work experience entries │ ├── projects/*.md ← Pet project cards │ ├── contacts/links.md ← GitHub, Telegram, etc. │ ├── terminal/commands.md ← Hidden terminal commands │ └── stitch/reviews.md ← Stitch tech review comments ├── components/ ← Astro components │ ├── Header.astro ← IDE tab navigation │ ├── Hero.astro ← Terminal-style hero section │ ├── ExperienceTimeline.astro ← JSON-formatted experience │ ├── ProjectCards.astro ← Project card grid │ ├── Footer.astro ← Contact + VS Code status bar │ ├── StitchDebugger.astro ← 🐛 Corner Stitch Easter egg │ ├── StitchReviewer.astro ← 🔍 Tech badge tooltip │ ├── StitchCopyGuard.astro ← 🔒 Copy guard toast │ ├── StitchCrash.astro ← 💥 Idle crash effect │ └── HiddenTerminal.astro ← 🖥️ Secret terminal ├── layouts/BaseLayout.astro ← HTML head, fonts, meta tags ├── pages/ │ ├── index.astro ← Main page │ └── 404.astro ← Custom 404 with Stitch ├── styles/global.css ← Tailwind v4 theme tokens public/ ├── stitch-debugger.png ← Stitch with a bug ├── stitch-reviewer.png ← Stitch with magnifying glass ├── stitch-crash.png ← Stitch sitting innocently ├── stitch-guard.png ← Stitch guarding data ├── stitch-404.png ← Stitch chewing cables ├── favicon.svg ← Terminal prompt icon └── CNAME ← Custom domain ``` --- ## ✏️ How to Customize All content lives in **Markdown files** inside `src/content/`. No component code changes needed. ### 👤 Hero Section — `src/content/hero/about.md` ```yaml --- role: "Your Role Title" username: "yourname" # Terminal prompt: yourname@portfolio hostname: "portfolio" # Terminal prompt + path templateUrl: "https://github.com/..." # "Use Template" header button bio: "Short bio paragraph." skills: backend: ["FastAPI", "Django"] database: ["PostgreSQL", "Redis"] devops: ["Docker", "CI/CD"] tools: ["Celery", "RabbitMQ"] --- ``` ### 💼 Experience — `src/content/experience/*.md` Create one `.md` file per job (e.g., `1-company.md`): ```yaml --- company: "Company Name" role: "Your Role" period: "Jan 2024 — Present" stack: ["Python", "FastAPI", "PostgreSQL"] order: 1 # Lower = shown first current: true # Optional, marks green dot description: "Project context" --- - Built something amazing - Led a team of 5 ``` ### 🚀 Projects — `src/content/projects/*.md` ```yaml --- name: "Project Name" description: "What the project does." stack: ["Python", "Selenium"] icon: "smart_toy" # Material Symbol name link: "https://example.com" # Optional (GitHub, website, etc.) order: 1 --- ``` > Icons: browse [Material Symbols](https://fonts.google.com/icons) ### 📬 Contacts — `src/content/contacts/links.md` ```yaml --- heading: "Want to collaborate or hire me?" links: # Material Symbol icon (default) - label: "[email protected]" url: "mailto:[email protected]" icon: "mail" # Custom SVG icon (e.g. brand logos) - label: "github.com/yourname" url: "https://github.com/yourname" icon: "code" iconType: "svg" # "material" (default) or "svg" svgPath: "M12 0c-6.626..." # SVG path data (d attribute) --- ``` > `iconType: "svg"` renders an inline `<svg>` with the provided `svgPath`. Omit it for default Material Symbols. ### 🎨 Theme Colors — `src/styles/global.css` Edit the `@theme` block to change IDE colors: ```css @theme { --color-bg-dark: #0D1117; /* Main background */ --color-ide-gray: #161B22; /* Panel backgrounds */ --color-primary: #58A6FF; /* Accent color */ --color-accent-green: #3FB950; /* Terminal green */ } ``` ### 🌐 Domain & SEO - **Domain**: edit `public/CNAME` - **Site URL**: edit `site` in `astro.config.mjs` - **Title & Description**: edit `src/layouts/BaseLayout.astro` --- ## 🗂️ IDE Features ### Closable Tabs Every tab in the header has a **close button (×)** that appears on hover — just like VS Code: - Click × to **close the tab** and hide its section from the page - All tabs can be closed - A **"Restore"** button appears when tabs are closed — click to reopen all - Press **`Ctrl+Z`** (or `Cmd+Z`) to restore the last closed tab one by one ### Active Tab Tracking The active tab automatically highlights based on scroll position. --- ## 🥚 Easter Eggs ### 1. 🐛 Stitch Debugger (bottom-right corner) Stitch peeks from the bottom-right holding a glowing bug. - **Hover** → Stitch peeks up fully - **Click** → Console log: *"Burp! Delicious bugs..."* - **Idle** → Stitch periodically peeks up on his own ### 2. 🖥️ Hidden Terminal Press **`` ` ``** (backtick), **`~`** (tilde), or **`Cmd+K`** / **`Ctrl+K`** to open an Ubuntu-styled terminal overlay. **Tab autocomplete** — type a partial command and press `Tab` to complete it. | Command | Output | |---------|--------| | `help` | List of available commands | | `cat skills.json` | Tech skills (from hero section) | | `python3 info.py` | Bio in triple quotes | | `cat contact.sh` | Contact links | | `neofetch` | Ubuntu-style ASCII + system info | | `fetch_stack` | ASCII tech stack table | | `ls` | Virtual file listing | | `git status` | Fake git status | | `sudo rm -rf /` | Glitch effect + ASCII art 💀 | > Customize commands and neofetch info in `src/content/terminal/commands.md` ### 3. 🔍 Stitch Code Reviewer Hover over any **tech badge** (in Experience or Projects) — Stitch appears with a speech bubble commenting on the technology. > Customize comments in `src/content/stitch/reviews.md` ### 4. 🔒 Copy Guard Select text inside the **Experience** section — a toast appears: > *"🔒 Data locked. Just kidding, copy whatever you want 😜"* 30-second cooldown between triggers. ### 5. 💥 The Crash Leave the tab **inactive for 5 minutes**, then return: 1. Page scrolls to top 2. ALL sections "fall" into a pile with physics 3. Stitch sits on the wreckage: *"SYSTEM CRASH — docker-compose down // oops"* 4. Move the mouse to **reboot** — elements spring back to their positions > Change idle duration: edit `IDLE_MS` in `src/components/StitchCrash.astro` ### 6. 🔌 404 Page Navigate to any invalid URL — Stitch is caught chewing server cables with electric sparks. --- ## 🚢 Deployment ### Step 1: Create GitHub Repository ```bash git init git remote add origin https://github.com/YOUR_USERNAME/YOUR_REPO.git git add . git commit -m "initial commit" git push -u origin main ``` ### Step 2: Enable GitHub Pages 1. Go to **Settings → Pages** in your GitHub repo 2. Under **Source**, select **GitHub Actions** 3. The workflow (`.github/workflows/deploy.yml`) will auto-deploy on every push to `main` ### Step 3: Verify Deployment Push to `main` → wait ~1 min → visit `https://YOUR_USERNAME.github.io/YOUR_REPO/` ```bash git add . git commit -m "update portfolio" git push origin main ``` --- ### 🌐 Custom Domain Setup (e.g. `hophni.dev`) #### 3a. Set domain in project **`public/CNAME`** — set your domain (no `https://`): ``` yourdomain.com ``` **`astro.config.mjs`** — set `site` to your domain: ```js export default defineConfig({ site: 'https://yourdomain.com', // ... }); ``` #### 3b. Configure DNS at your domain registrar Go to your domain registrar's DNS settings and add these records: **For root domain (`yourdomain.com`)** — add 4 A records: | Type | Name | Value | |------|------|-------| | A | `@` | `185.199.108.153` | | A | `@` | `185.199.109.153` | | A | `@` | `185.199.110.153` | | A | `@` | `185.199.111.153` | **For `www` subdomain** — add CNAME: | Type | Name | Value | |------|------|-------| | CNAME | `www` | `YOUR_USERNAME.github.io` | > ⏳ DNS changes can take 10 min–48 hours to propagate. #### 3c. Set domain in GitHub 1. Go to **Settings → Pages** 2. Under **Custom domain**, enter `yourdomain.com` 3. Click **Save** 4. Wait for DNS check to pass (green checkmark) 5. ✅ Check **Enforce HTTPS** (appears after DNS verifies) #### 3d. Verify everything works ```bash # Check DNS propagation dig yourdomain.com +short # Should show: 185.199.108.153, ...109, ...110, ...111 # Check HTTPS curl -I https://yourdomain.com # Should show: HTTP/2 200 ``` Visit `https://yourdomain.com` — your portfolio should load with HTTPS 🔒 --- ## 🛠️ Tech Stack | Layer | Tech | |-------|------| | SSG | [Astro 5](https://astro.build/) | | Styling | [Tailwind CSS v4](https://tailwindcss.com/) | | Content | Astro Content Collections (Markdown) | | Hosting | GitHub Pages | | CI/CD | GitHub Actions | | Design | [Google Stitch](https://stitch.withgoogle.com/) (initial prototype) | --- ## 📜 License MIT — use it, fork it, make it yours. --- > **Template developed by [HoPHNi](https://github.com/HoPHNiDev)** · Star ⭐ the repo if you like it!
Explore similar templates
Compare previews and descriptions within the same stack and category.

astro-theme-cactus
Astro Cactus is an Astro-based blog and portfolio theme that uses Markdown/MDX content collections to manage posts, notes, and tags, with frontmatter type-checked by a schema.
Astro · Portfolio

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
