Meme Stonks migration: old VPS app to React + TanStack Router
I migrated Meme Stonks from an older VPS deployment and codebase to a rebuilt app on a new VPS via Coolify, using React + TypeScript + TanStack Router.
The goal was not just a UI refresh. It was to make the app easier to reason about, test, and deploy.
New stack
The rewrite now runs on:
- React 19 + TypeScript
- TanStack Router
- Vite + Tailwind CSS v4
- Vitest + Testing Library
- Biome for lint/format checks
Routing and app structure
I moved to route-driven app behavior with a clear shell and subreddit routes:
//r/:subreddit
That gives cleaner state boundaries and clearer navigation logic than the older structure.
Stream behavior rebuilt in hooks
Core stream logic is now isolated in React hooks and utility modules:
- live Reddit polling stream
- dedupe/stable comment identity behavior
- thread chooser and single-thread filtering
- parser/label helpers for recurring thread patterns
This made behavior easier to test directly without relying on full UI integration for every case.
UX and settings improvements
The rewrite also kept and improved practical controls:
- settings modal for comment visibility preferences
- persisted stream/display settings in local storage
- stats modal and thread detail affordances
- text-only and moderation-related display toggles
Deployment and runtime fixes
After the main rewrite, I applied deployment-facing fixes for the new VPS environment:
- proper favicon/meta/canonical/OG tags in
index.html - explicit host allowlist in Vite dev/preview config for
meme-stonks.shanehoban.com - Dockerized Nixpacks-compatible build/start flow for Coolify
Testing baseline
I added smoke coverage around parser/settings/stream/route behavior so future changes have guardrails.
This is the part that matters most long-term: future refactors are safer because behavior is documented by tests, not just manual checks.

