Introduction
This was my previous portfolio site, built with Next.js and Tailwind CSS before the current Astro-based version. It served as my professional web presence through 2024 and was also a deliberate experiment in combining a Next.js frontend with a Go backend for API endpoints — a polyglot architecture chosen to evaluate each runtime’s strengths on the same project.
The Challenge & Solution
The portfolio needed server-side rendering for SEO — search engines needed to index project content without relying on client-side JavaScript hydration — while keeping the architecture simple enough to maintain without CI/CD infrastructure overhead. Next.js App Router handled SSR for project pages and statically generated the high-traffic routes, giving fast initial loads with good crawlability. The Go backend was introduced as a lightweight API sidecar for dynamic endpoints: a single compiled binary with no runtime dependencies, ~10MB memory footprint, and sub-millisecond cold response times. Running both runtimes side by side on the same project made the runtime tradeoffs concrete — Next.js was better for page rendering and DX, Go was better for low-overhead API endpoints that needed no framework scaffolding.
Technologies & Architecture
- Next.js App Router: SSR for project case study pages ensured search engine crawlers received fully rendered HTML, while client-side navigation kept the browsing experience fast after initial load.
- Go: Single-binary API sidecar for dynamic data endpoints — no runtime dependencies, minimal memory overhead, and a simple HTTP handler pattern that was faster to write than a Node.js Express equivalent for pure JSON APIs.
- TypeScript: Shared type definitions between the Next.js frontend and the API response contracts, catching interface mismatches between the Go backend’s JSON output and the React component’s expected props at compile time.
- Tailwind CSS: Utility-first styling with zero runtime CSS-in-JS overhead, keeping the bundle lightweight and the layout fully responsive without custom media query breakpoints.
Key Highlights
- Modern design
- Responsive layout
- Performance optimization
Impact
SSR via Next.js App Router delivered fast initial page loads and full search engine indexability for all project pages. The Go sidecar experiment confirmed that a compiled binary API needs no framework overhead for simple JSON endpoints — a finding that influenced subsequent architecture decisions on API design.