- spa_server.py: strip /magpie prefix before API check and file lookup;
all HTTP methods call _normalise_path() first so /magpie/api/v1/* proxies
correctly and /magpie/assets/* resolve against the dist root
- manage.sh: pass --base /magpie to spa_server.py so the handler knows
the deployment prefix
- main.ts: pass import.meta.env.BASE_URL to createWebHistory so Vue Router
strips the /magpie prefix before matching routes
Without these fixes, assets returned index.html (MIME type error), API
calls returned HTML instead of JSON (stats.posts undefined), and router
routes never matched (matched: []).
Closes: #12
FastAPI backend (SQLite + APScheduler), Vue 3 frontend, MCP server for
Claude integration, and Docker Compose stack. Includes campaign data model
(campaigns → variants → subs), post history, sub rules, and Playwright-based
Reddit posting layer migrated from claude-bridge/reddit-poster.
Also seeds legacy campaigns (6) and sub rules (14) from reddit-poster history.
Closes#1 (scaffold), resolves migration from claude-bridge.