All content is configured in site.config.ts, with no need to modify component code
portfolio (backstabslash) — Astro Portfolio Template
By backstabslash
A config-driven developer portfolio template built with Astro, supporting dark/light themes and a particle background, deployable to Kubernetes or any static hosting platform.
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 2
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
Built-in dark and light palettes, each with its own configurable accent color
Images placed in src/assets/images/ are optimized to WebP at build time by Astro, with responsive variants generated
Provides Docker and Kubernetes deployment examples for k3s with Traefik
Includes ESLint, Prettier, Vitest unit tests, and Playwright end-to-end test scripts
Template Details
This is a developer portfolio template built with Astro. All content is configured in a single file, site.config.ts, including name, job title, bio, contact information, social links, skill groups, project list, and work experience. The page includes Hero, About, Projects, Work, and Contact sections. Theme colors (two palettes for dark and light, each with its own accent color) are also defined in the same config file as hex values.
Images go in the src/assets/images/ directory and are referenced in the config via the /images/ virtual path. During build, Astro optimizes them to WebP and generates responsive variants. The README provides minimum size recommendations for the avatar, About image, and project screenshots.
For running the project, the template provides scripts for development, build, preview, lint, unit testing (Vitest), and end-to-end testing (Playwright). Deployment options include a Docker image, Kubernetes manifests for k3s with Traefik (including ingress and deployment examples), and serving the dist/ directory to any static hosting platform. The README states there is no runtime JS except for the particle background.
Usage limitations: The template itself only provides a frontend static site and deployment examples; it does not include a backend, database, or content management system. Kubernetes deployment requires you to prepare your own cluster, domain, and kubeconfig secret. Licenses for third-party assets such as demo images, fonts, and icons must be checked separately; the MIT license only covers the repository code.
Is it right for your project?
Use Cases
- Individual developers building a portfolio site to showcase projects and work experience
- A static personal homepage that needs dark/light theme switching and a particle background effect
- Sites where all content is maintained in a single config file, avoiding page-by-page editing
- Planning to deploy a static site to a Kubernetes cluster or any static hosting platform
Suitable For
- Developers familiar with Astro or willing to edit TypeScript config files following the README
- A self-hosted personal portfolio that does not rely on a content management system
- Users with Docker or Kubernetes deployment experience
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
After forking the repository, run npm install and npm run dev, then edit site.config.ts to fill in personal information
- 2
Place images in src/assets/images/ and reference them in the config with the /images/ prefix; the avatar should be at least 440x440px, the About image at least 864x1080px, and project screenshots at least 1048x655px
- 3
Before Kubernetes deployment, modify the domain in k8s/ingress.yaml and the image name in k8s/deployment.yaml, and add a base64-encoded KUBECONFIG_DATA secret to the GitHub repository
- 4
For static hosting, run npm run build and deploy the dist/ directory
- 5
Third-party assets such as demo images, fonts, and icons must be checked separately under their respective licenses
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 applies to that version's code and does not mean external services or third-party assets are free.
Must comply with when using
- You are allowed to use, modify, commercialize, and distribute the code of this version for free.
- 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 under their respective licenses; they cannot be judged solely by the code's MIT license.
- External services such as domains, hosting, databases, payments, or AI may incur additional charges.
- When using the Kubernetes deployment method, you need to configure a secret named KUBECONFIG_DATA in the GitHub repository, containing a base64-encoded kubeconfig; this is an external service credential requirement.
- Before Kubernetes deployment, you must modify the domain in the ingress and the image name in the deployment; the template does not provide a ready-to-use cluster configuration.
- The deployment target is Kubernetes or static hosting; the template itself does not include a backend, database, or content management system.
View Original Text Basis
Permission is hereby granted, free of charge
Original License Text
Add `KUBECONFIG_DATA` secret to your GitHub repo (base64-encoded kubeconfig)
Original README
1. Update `k8s/ingress.yaml` with your domain 2. Update `k8s/deployment.yaml` with your image name
Original README
https://github.com/backstabslash/portfolio/blob/main/LICENSEhttps://github.com/backstabslash/portfolio/blob/main/README.mdDeploy to Kubernetes or any static host.
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-05-21
- 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: bdbbc9bd5d762bd655355a5d8487ffa8601cc6f1b13f936396748075024d7c86
2026-10-12T10:59:39.913Z
Source file / repository[](https://github.com/backstabslash/portfolio/actions/workflows/ci.yml)
[](LICENSE)
[](https://astro.build)
A config-driven developer portfolio built with Astro. Dark/light theme, interactive particle background, zero runtime JS (except particles). Deploy to Kubernetes or any static host.
## Quick start
```bash
# Fork this repo, then:
git clone https://github.com/YOUR_USERNAME/portfolio
cd portfolio
npm install
npm run dev
```
Edit `site.config.ts` with your info, that's the only file you need to change.
## Configuration
All content lives in `site.config.ts`:
| Field | Type | Description |
| -------------- | ------ | ------------------------------------------------------------------- |
| `name` | string | Your full name |
| `title` | string | Job title / tagline |
| `headline` | string | Hero section headline |
| `bio` | string | Short bio paragraph |
| `profileImage` | string | Path to profile photo, e.g. `/images/profile.jpg` |
| `email` | string | Contact email |
| `links` | object | `github`, `linkedin`, `resume` URLs |
| `about` | object | `image` path and `text` (supports `\n\n` for paragraphs) |
| `skills` | array | `{ label, items }` skill groups |
| `projects` | array | `{ title, description, image, tech, github, url?, stars?, label? }` |
| `work` | array | `{ title, description, tag }` professional work items |
| `contact` | object | `heading` and `description` for the contact section |
| `theme` | object | `colors.accentDark/accentLight` + `dark` and `light` palettes (hex) |
## Images
Drop your images in `src/assets/images/` and reference them in `site.config.ts` as `/images/filename.jpg` (the `/images/` prefix is a virtual path, not a folder). At build time Astro optimizes them to WebP and emits responsive variants via `srcset`, so oversized source files are fine.
| Image | Minimum size | Used in |
| ------------------- | ------------ | ------------- |
| `profile.jpg` | 440x440px | Hero section |
| `about.jpg` | 864x1080px | About section |
| Project screenshots | 1048x655px | Project cards |
## Theming
Edit `theme` in `site.config.ts` to change colors. All values are hex colors.
Each theme has its own accent color (`accentDark`, `accentLight`) that drives section labels, tech tags, particle color, primary buttons, and hover states.
Dark and light palettes are independent - each defines `bg`, `card`, `border`, `text`, and their variants.
## Development
```bash
npm run dev # Start dev server
npm run build # Production build
npm run preview # Preview production build
npm run lint # ESLint + Prettier check
npm run lint:fix # Auto-fix lint issues
npm run test # Unit tests (Vitest)
npm run test:e2e # E2E tests (Playwright)
```
## Deployment
### Docker (any host)
```bash
docker build -t portfolio .
docker run -p 80:80 portfolio
```
### Kubernetes (k3s with Traefik)
1. Update `k8s/ingress.yaml` with your domain
2. Update `k8s/deployment.yaml` with your image name
3. Add `KUBECONFIG_DATA` secret to your GitHub repo (base64-encoded kubeconfig)
4. Push to main - CI/CD handles the rest
### Other platforms
Run `npm run build` and deploy the `dist/` folder to any static host (Vercel, Netlify, Cloudflare Pages, etc).
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
