All work
LiveSolo full-stack2025–2026

Portfolio Architecture: Full-Stack Systems on a Self-Hosted Stack

A production Next.js app with SQLite, JWT auth, and self-hosted KVM deployment — built to demonstrate end-to-end ownership.

Context

A portfolio shouldn't just claim skills — it should demonstrate them. This site is built as a real production system: Next.js App Router, SQLite with Drizzle ORM, JWT-based auth via Auth.js, and self-hosted on a KVM VPS. Every architectural decision is visible and justified.

Stack Decisions

Next.js 16 App Router for server components and route handlers. SQLite with better-sqlite3 for zero-config data — each project gets its own database file. Drizzle ORM for typed schemas. Auth.js for stateless JWT sessions. Zod for validation. Framer Motion for purposeful animations. Tailwind CSS v4 + shadcn/ui for the design system.

Why Self-Hosted

better-sqlite3 needs Node.js filesystem access — incompatible with serverless edge. Instead, the app runs on a Hostinger KVM VPS with nginx reverse-proxy and PM2 process management. Self-hosting gives full control over the runtime, database files, and deployment pipeline.

Design System

The Dark Studio design system uses a near-black canvas (#0f0f0f), amber signal accent (#f59e0b), Fraunces for display serif headings, and Plus Jakarta Sans for UI. Motion is purposeful and reduced-motion safe. The anti-slop checklist bans gradient text, glassmorphism defaults, and emoji-first product cards.

Auth & Payments

Auth.js provides stateless JWT sessions — no database round-trip per request. The payment layer is abstracted behind a provider-agnostic interface supporting Stripe, Paddle, and LemonSqueezy, switchable via environment variables.

What I'd Do Next

Add a shared analytics layer across projects. Implement a performance dashboard. Explore SQLite read replicas for scaling.

Need this level of ownership on your team?

Let's talk about product-minded full-stack work.