Shane HobanShane Hoban

Shane Hoban

MSc. Computer Science (UCD) · Full Stack Developer

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

22 February 2026Updated 11 June 2026
ai-assistedmeme stonksarchivedredditmigrationreacttanstack routercoolifydockernixpackstypescriptvitevitest

Archive note, June 11, 2026: Meme Stonks is now archived. The rebuild worked as a deployment and refactor project, but the app depended on Reddit's public .json fetch path for live data. Reddit has since patched that access pattern, so the live-streaming behavior is no longer viable without moving to a different Reddit integration.

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.