Best Tech Stack for Building a Portfolio as a Solo Developer
The ideal tech stack for solo developers building a portfolio site in 2026.
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.
The Recommended Stack
| 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 |
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 free tier handles millions of requests per month. Cloudflare Pages has unlimited bandwidth. You should never pay for hosting a portfolio site. If you are, you're overpaying.
Framework: Astro
Astro is the best framework for content-heavy static sites, and I'll fight anyone who disagrees. 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.
For a portfolio specifically, Tailwind's typography plugin (@tailwindcss/typography) 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. They charge at-cost (no markup), include free DNS, and their edge network means your site loads fast globally. A .com domain is about $10/year. A .dev domain is about $12/year.
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 offer generous free tiers, handle spam filtering, and send submissions to your email. The integration is a standard HTML form with their endpoint as the action. No JavaScript required.
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.
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.
Gather your content. Screenshots, descriptions, and links for your 3-5 best projects. A short bio. A professional photo (optional but recommended).
Create the project. Run
npm create astro@latestand choose the minimal template. Install Tailwind withnpx astro add tailwind.Build the homepage. Your name, a one-sentence tagline, links to your projects, and a contact method. That's the whole page.
Add project pages. Create a content collection for projects. Write a short case study for each one: the problem, your approach, the result.
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.
Related Articles
AI Wrapper Stack Guide for Solo Developers
Complete guide to the AI wrapper stack - when to use it, setup, pros/cons, and alternatives.
Best Tech Stack for Building an AI Wrapper as a Solo Developer
The ideal tech stack for solo developers building an AI wrapper in 2026.
Best Tech Stack for an Analytics Dashboard as a Solo Developer
The best tech stack for building an analytics dashboard as a solo developer - frameworks, databases, hosting, and tools.