AstroPortfolio

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.

2 previews
Desktop homepage1 / 2
Desktop captureTop of page

Actual screenshot captured by the server browser.

All pages & views 2

Screenshots show visual appearance; interactive behavior may differ.

Recorded 2026-10-12View source

What stands out

A quick read of the recorded project description.

01

All content is configured in site.config.ts, with no need to modify component code

02

Built-in dark and light palettes, each with its own configurable accent color

03

Images placed in src/assets/images/ are optimized to WebP at build time by Astro, with responsive variants generated

04

Provides Docker and Kubernetes deployment examples for k3s with Traefik

05

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.

AstroPortfolio

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

    After forking the repository, run npm install and npm run dev, then edit site.config.ts to fill in personal information

  2. 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. 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. 4

    For static hosting, run npm run build and deploy the dist/ directory

  5. 5

    Third-party assets such as demo images, fonts, and icons must be checked separately under their respective licenses

Read repository instructions

License & source material

Usage conditions & limitations

Free to use · keep license notice

This 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

Deploy to Kubernetes or any static host.

Original README
https://github.com/backstabslash/portfolio/blob/main/LICENSEhttps://github.com/backstabslash/portfolio/blob/main/README.md

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
[![CI](https://github.com/backstabslash/portfolio/actions/workflows/ci.yml/badge.svg)](https://github.com/backstabslash/portfolio/actions/workflows/ci.yml)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
[![Built with Astro](https://img.shields.io/badge/built%20with-Astro-ff5d01.svg?logo=astro)](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).
Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.