Newsletter
Join the Community
Subscribe to our newsletter for the latest news and updates
Portfolio template built with Astro; edit JSON files and deploy a static site with contact form, GitHub auto-fetch, and printable resume.

Impulse is a parallax template, Bootstrap v3.3.5 mobile-ready layout. Portfolio lightbox gallery and pricing tables are included.

Free one-page responsive portfolio website template built with Bootstrap 5, HTML5, and CSS3, featuring a hero header, sliders, FAQ, and more.

Free Bootstrap 4 one-page HTML5 landing template with a red theme, pricing table, and contact form.

Super fast, minimal one-column Jekyll theme for portfolio and blog sites weighing under 2kb.

A Jekyll portfolio theme with YAML-based customization and Sitepins CMS support.
astro-portfolio-theme is a portfolio website template built with Astro that generates a complete static site from JSON data files — no CMS, no database, and no server-side code.
astro-portfolio-theme is a static site builder for personal portfolios. You supply content in JSON files under src/data/ and the theme compiles it into a single-page site with Hero, About, Expertise, Portfolio, Projects, Certifications, Services, and Contact sections. It runs on Astro 6 with Tailwind CSS 4 and TypeScript, and produces pure static HTML/CSS/JS in ./dist/ (via pnpm) or ./output/ (via Docker Compose). The build pipeline enforces linting and type-checking before generating the site.
src/data/; edit personal.json, projects.json, skills.json, certifications.json, and the rest, then rebuild.githubRepo, the build reads that repository's README and extracts the first non-badge image to use as the hero slider cover, with a local sliderImage as fallback.site.json; submissions arrive in your inbox with no server.showcase for five or fewer projects (full-width feature cards with thumbnail galleries) and grid for six or more (a filterable three-column card grid with Featured and category buttons).src/data/personal.json and projects.json, run pnpm run build, and publish the resulting static files to any host.serviceSites array in site.json to display two distinct service cards, one for client work and one for a side project.githubRepo on each project so the theme pulls cover art from GitHub READMEs automatically at build time, saving manual image curation.The built site is fully static, so it runs anywhere: GitHub Pages, GitLab Pages, Codeberg Pages, Cloudflare Pages, Netlify, Vercel, or your own server via the included Docker image. The GitHub Actions and GitLab CI files auto-detect SITE_URL and BASE_PATH from the platform's environment variables, and a Docker Compose file lets you produce a lean nginx Alpine image (~25 MB) that serves the site on port 80.
src/data/ to set your personal information, skills, projects, portfolio items, certifications, and services.SITE_URL, BASE_PATH, GITHUB_USER, and optionally GITHUB_TOKEN (the token is used for fetching GitHub README images).pnpm run build or docker compose build && docker compose up. The finished site lands in ./dist/ or ./output/.your-username.github.io to get a clean root URL.No. All content is managed through static JSON files under src/data/. You edit the JSON, rebuild, and deploy — there is no database or admin panel to maintain.
You need Docker + Docker Compose, or Node.js 24 or later with pnpm 11. The build automatically runs ESLint and Astro Check as quality gates, so lint and type errors stop the build.
The contact form uses Web3Forms. You get a free API key from web3forms.com and put it in site.json. When someone submits the form, Web3Forms emails you the message — no backend or server code is needed.
Yes. The repo includes a GitHub Actions workflow that builds the site and publishes it to Pages. Set GITHUB_USER as a repository variable; SITE_URL and BASE_PATH are auto-detected from your repository name, and can be overridden for custom domains.
Yes. Sections such as Portfolio, Certifications, and Services can be removed by deleting their component from src/pages/index.astro and the corresponding menu entry in src/data/menu.json. No JSON cleanup is required.
