/ tech-stacks / Best Tech Stack for Building a Portfolio as a Solo Developer
tech-stacks 12 min read

Best Tech Stack for Building a Portfolio as a Solo Developer

The ideal tech stack for solo developers building a portfolio site in 2026.

Hero image for Best Tech Stack for Building a Portfolio as a Solo Developer

Your portfolio is probably the simplest project you'll ever build, and yet I've watched developers turn it into a multi-month engineering project. I've been guilty of this myself. My first portfolio used a headless CMS, a GraphQL API, three animation libraries, and custom page transitions. It looked amazing. It also took six weeks to build and didn't help me land a single client.

My current portfolio is an Astro site with Tailwind CSS. It took a weekend to build, scores 100 on Lighthouse, and has directly led to freelance work. The lesson is clear: for a portfolio, simpler is better. Here's the stack I'd recommend.

Layer Tool Why
Framework Astro Zero JS by default, perfect for static content
Styling Tailwind CSS Fast to write, consistent design, easy to maintain
Hosting Vercel or Cloudflare Pages Free, global CDN, deploys on push
Domain Cloudflare Registrar Cheapest registrar, includes DNS and CDN
Contact Form Formspree or Web3Forms No backend needed, generous free tiers
Analytics Plausible or Umami Privacy-friendly, lightweight
Images Cloudflare R2 or local Optimized by Astro's image component

The Numbers at a Glance (Checked May 2026)

Tool Latest version Free tier Stars / weekly installs
Astro 6.4.2 Open source, MIT 59.7k stars, 3.0M npm/week
Tailwind CSS 4.3.0 Open source, MIT 95.2k stars, 107M npm/week
Vercel Hobby plan 100 GB transfer, 1M edge requests/mo (personal use) Pro from $20/user/mo
Cloudflare Pages Free plan Unlimited bandwidth, 500 builds/mo n/a
Cloudflare Registrar at-cost No markup over registry price n/a
Formspree Free 50 submissions/mo, 30-day archive Personal from $15/mo
Web3Forms Free 250 submissions/mo, 30-day storage paid tiers from 5k/mo
Plausible n/a 30-day trial only, no free tier Starter $9/mo (10k pageviews)
Umami 2.10.0 (self-host) Cloud Hobby: 100k events/mo, 3 sites 36.9k stars; Cloud Pro $20/mo (1M events)
Cloudflare R2 n/a 10 GB storage/mo, no egress fees $0.015/GB-month beyond

All figures sourced and dated in the Sources section at the end. Pricing pages change, so confirm current numbers before you commit.

Why This Stack Works for Solo Developers

A portfolio is static content. You update it maybe once a month. It needs to load fast, look good, and rank when someone Googles your name. Every tool in this stack is optimized for that use case.

Astro generates static HTML with zero JavaScript by default. This means your portfolio loads in under a second on any connection. Compare that to a React portfolio that ships 150KB of JavaScript just to render text and images. Google's Core Web Vitals reward fast sites, and a portfolio is one of the few projects where achieving a perfect Lighthouse score is genuinely easy.

The free hosting options available in 2026 are ridiculously generous. Vercel's Hobby plan includes 100 GB of fast data transfer and 1 million edge requests per month, which a portfolio will never come close to exhausting. Cloudflare Pages goes further with unlimited bandwidth and unlimited static requests, capped only at 500 builds per month on the free plan. You should never pay for hosting a portfolio site. If you are, you're overpaying. One caveat worth knowing up front, Vercel's Hobby plan is for personal, non-commercial use, so if your portfolio doubles as a paid landing page you may need the Pro plan, which starts at $20 per user per month.

Framework: Astro

Astro is the best framework for content-heavy static sites, and I'll fight anyone who disagrees. The project is mature and widely used, sitting at version 6.4.2 with around 59,700 GitHub stars and roughly 3 million npm installs a week as of late May 2026, so you're not betting your portfolio on something abandoned. It's MIT licensed, so there's no cost and no lock-in. Here's why.

It generates clean HTML. No hydration, no client-side routing, no JavaScript runtime for pages that don't need it. Your portfolio is mostly text, images, and links. Astro renders those as plain HTML and CSS, which is exactly what browsers are optimized to display.

It supports components from any framework. If you want to add one interactive element (maybe a project filter or a dark mode toggle), you can use a React, Svelte, or Vue component for just that piece. Astro calls this "islands architecture." The rest of the page stays static while your interactive island loads only when it's needed.

Content Collections are perfect for portfolios. Define a collection for your projects (with typed frontmatter for title, description, image, tech stack, URL), and Astro gives you type-safe access to all your projects. Adding a new project is literally creating a new Markdown file.

Why not Next.js? Next.js is great, but it's overkill for a portfolio. You don't need server components, API routes, or middleware for a static site. And Next.js always ships some JavaScript, even for static exports. Astro ships zero unless you explicitly add interactive components.

Why not plain HTML? You could, and it would be fine. But Astro gives you components, layouts, and content collections without adding any client-side overhead. The developer experience is dramatically better than managing raw HTML files, especially when you want to update your navigation across every page.

Styling: Tailwind CSS

Tailwind CSS is my go-to for portfolio sites because it lets me build fast without fighting a design system I didn't choose. Utility classes mean I can tweak spacing, colors, and responsive behavior inline without switching between files. It's the most-installed CSS framework by a wide margin, pulling roughly 107 million npm installs a week and sitting at around 95,200 GitHub stars on version 4.3.0 as of late May 2026, so tutorials, plugins, and component kits are everywhere when you get stuck.

For a portfolio specifically, Tailwind's typography plugin (@tailwindcss/typography, version 0.5.19 at time of writing) is excellent. Apply the prose class to your project descriptions and they're automatically formatted with proper heading sizes, paragraph spacing, and link styles. It makes Markdown-rendered content look professional without any custom CSS.

Keep your design simple. One accent color, generous whitespace, readable body text (16px minimum), and a clean layout. The most memorable portfolios I've seen are the simplest ones. They let the work speak instead of competing with flashy animations.

Dark mode. Add it. It takes about 15 minutes with Tailwind's dark: variant, and a significant percentage of developers (your primary audience) prefer dark mode. Use a toggle that respects the system preference by default.

Domain and Hosting

Buy your domain through Cloudflare Registrar. Cloudflare states plainly that it "does not mark up domain prices at all" and that you "only pay the price charged by registries and ICANN for domain registration and renewal," so there's no markup at signup and no markup at renewal, which is where most registrars get you. You also get free DNS, and their edge network means your site loads fast globally. A .com runs around $10 to $11 a year at registry cost and a .dev around $12, but since Cloudflare passes through the wholesale price, check the current registry rate for your exact TLD before you buy.

For hosting, both Vercel and Cloudflare Pages deploy automatically when you push to your GitHub repo. I slightly prefer Cloudflare Pages for portfolios because the free tier has no bandwidth limits and the edge network is extensive. But Vercel works just as well and has a nicer dashboard.

The deploy workflow is simple: push to main, your portfolio updates within 30 seconds. No SSH, no FTP, no manual deployments. Set it up once and forget about it.

Contact Form: Keep It Simple

You need a way for people to reach you. The simplest approach is a mailto: link to your email. It works everywhere and requires zero infrastructure.

If you want a proper form (some people prefer not to open their email client), use Formspree or Web3Forms. Both handle spam filtering and send submissions to your email, and the integration is a standard HTML form with their endpoint as the action, no JavaScript required. The free tiers differ in scale. Formspree's free plan covers 50 submissions a month with a 30-day archive, while Web3Forms gives you 250 submissions a month with 30-day storage and no account required (you embed a single access key). For a portfolio that fields a handful of messages a month, either one is free forever in practice. If you somehow start getting more than that, Formspree's Personal plan is $15 a month and Web3Forms sells higher-volume tiers from 5,000 submissions a month.

Don't build a contact form backend. Don't set up a serverless function to send emails. Don't use SendGrid for a contact form that gets five messages a month. Use a free form service and move on.

Analytics and Images

You probably want to know whether anyone is visiting. Skip Google Analytics for a personal site and use a privacy-friendly, lightweight tracker instead. The two I reach for are Plausible and Umami, and they cost differently.

Plausible is the polished hosted option, but be aware it has no permanent free tier in 2026. You get a 30-day trial with no credit card, after which the Starter plan begins at $9 a month for up to 10,000 monthly pageviews. Umami is the budget path. The software is open source and MIT licensed (version 2.10.0, around 36,900 GitHub stars as of late May 2026), so self-hosting it on a cheap VPS is free forever. If you'd rather not run a server, Umami Cloud has a genuinely free Hobby tier covering 100,000 events a month across up to 3 sites with 6-month retention, and its single paid Pro plan is $20 a month for 1 million events. For a portfolio, Umami Cloud's free tier is almost certainly all you'll ever need.

For images, Astro's built-in image component optimizes and resizes local files at build time, so for most portfolios you don't need anything external. If you do want object storage (large galleries, downloadable assets), Cloudflare R2 is the standout because it charges no egress fees. The free tier gives you 10 GB of storage a month plus 1 million Class A and 10 million Class B operations, and storage beyond that is $0.015 per GB-month. A portfolio's worth of images will sit comfortably inside the free tier.

What I'd Skip

A CMS. Your portfolio has maybe 5-10 projects. You don't need Contentful, Sanity, or Strapi to manage that. Markdown files in your repo are perfectly fine. When you want to update a project, edit a file and push. A CMS adds a dependency that can break, a service that can go down, and a bill that can arrive.

Animation libraries. GSAP, Framer Motion, Three.js. They're fun, but they don't help you get hired or win clients. If your portfolio needs flashy animations to impress people, the underlying work probably isn't strong enough. Save the fancy stuff for a side project that demonstrates your animation skills as actual work.

Blog functionality. Unless you actively write blog posts, don't add a blog to your portfolio. An empty blog section or one with a single post from 2023 looks worse than no blog at all. If you want to blog, build it as a separate project or use a dedicated platform.

Client-side routing. Server-side rendering and static generation handle navigation fine for a portfolio. There's no reason for client-side routing, page transitions, or a single-page application architecture. Each page should be a separate HTML file that loads independently.

Over-optimization. Your portfolio gets hundreds of visits per month, not hundreds of thousands. Don't add CDN configuration, image optimization pipelines, or caching headers. Astro and your hosting provider handle all of this automatically.

Getting Started

Here's what I'd do this Saturday.

  1. Gather your content. Screenshots, descriptions, and links for your 3-5 best projects. A short bio. A professional photo (optional but recommended).

  2. Create the project. Run npm create astro@latest and choose the minimal template. Install Tailwind with npx astro add tailwind.

  3. Build the homepage. Your name, a one-sentence tagline, links to your projects, and a contact method. That's the whole page.

  4. Add project pages. Create a content collection for projects. Write a short case study for each one: the problem, your approach, the result.

  5. Deploy. Connect to Vercel or Cloudflare Pages, push, and point your domain. You now have a live portfolio.

The entire process should take less than a day. And that's the point. Your portfolio exists to show your work, not to be your work. Build it fast, make it clean, and spend your time creating projects worth showcasing on it.

Sources

All figures checked on 2026-05-30. Pricing and version numbers move, so verify current values before you commit.

Built by Kevin

Like this? You'll like what I'm building too.

Two ways to support and get more of this work.

Desktop App

HEARTH

A privacy-first Life OS for your desktop. Journal, tasks, and notes that stay on your machine. Coming soon, direct download from this site.

Read more
Digital Products

MY TOOLKITS

Receipts-first toolkits for shipping after hours, building Claude agents, publishing on Amazon, and more. The exact methods I used, not theory.

Browse on Whop

Need This Built?

Kevin builds products solo, from first version to live. If you want something like this made, work with him.