Shane HobanShane Hoban

Shane Hoban

MSc. Computer Science (UCD) · Full Stack Developer

Crosshaven, Cork, Ireland
All Articles

Meme Stonks migration: old VPS app to React + TanStack Router

22 February 2026
ai-assistedmeme stonksmigrationreacttanstack routercoolifydockernixpackstypescriptvitevitest

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.