Case studies
Full-Stack App 2026

Ghostbase — Personal Hub & Devlog

SvelteKitSvelte 5TypeScriptSQLiteDockerSelf-Hosted

The challenge

Every "link in bio" tool is built for creators posting content, not for someone who just wants a real home base on the internet — one place that knows what you're listening to, what you're watching, what you're building, and where you keep your own notes. Nothing off-the-shelf does that without stitching together four separate services and their four separate outages.

What I built

Ghostbase — a personal dashboard at razerghost.xyz, built on SvelteKit 5, Tailwind 4, and SQLite, deployed via Docker behind Coolify/Traefik.

It grew from a simple links page into a full application:

  • Live integrations — Spotify (now playing + listening history), Simkl (a merged kdrama/anime watchlist), Discord presence, and Unsplash-backed backgrounds, each degrading gracefully when disconnected instead of breaking the page
  • A devlog and project showcase — markdown content with embeddable interactive components (before/after sliders, terminal replays, diagrams), tag filtering, RSS feeds, and per-post OG image generation
  • A note-taking system — autosave, soft delete, and throttled revision history, so it's trustworthy enough to actually use daily
  • A /newtab dashboard — a drag-and-dock browser new-tab replacement with a pomodoro timer
  • A full admin panel — a CMS behind GitHub OAuth for editing content, managing backups and media, and monitoring the health of every integration, instead of hand-editing files on a server

Behind the features sits infrastructure most personal projects skip entirely: a self-healing SQLite cache layer for Simkl (built to respect its API's caching guidelines rather than poll on every request), an idempotent Spotify import pipeline that reconciles historical exports against live scrobbles, hand-rolled FTS5 full-text search, and startup-run schema migrations with no external framework.

Why it matters

Ghostbase isn't client work — it's mine, it's public, and the code is open. Every architectural decision was made because I had to live with the consequences myself, with no spec to hide behind and no one else to blame for a bad call. It's the same discipline I bring to client projects, just with the pressure turned up: when you're both the developer and the only user, "good enough" has to actually be good enough.

Curious how it's built? Ghostbase is open source — read more about why I built it and how it came together.