- frontend.py: /book was calling /book on matcher (404); fixed to
/orderbook/<symbol> with ?symbol= query param
- Order Entry: pass selected symbol to /book, reload on symbol change
- Order Entry: add β Dashboard link via onclick (not href)
- FIX UI: β Dashboard href="/" was rewritten by nginx sub_filter to
/fix/; fixed by switching to onclick so sub_filter can't touch it
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Frontend (disconnected root cause):
- All fetch('/endpoint') calls were hitting nginx '/' (dashboard) instead
of '/frontend/endpoint'. Added BASE detection at page load:
const BASE = window.location.pathname === '/' ? '' : pathname.replace(/\/$/, '');
Applied to /securities, /order, /book, /trades
FIX UI (session disrupted by reloader):
- debug=True caused Flask reloader to spawn a child process and restart
the app, breaking the QuickFIX session on startup
- Changed to debug=False, use_reloader=False
Entrypoint timing:
- FIX OEG sleep increased from 3s β 6s (allow full socket bind)
- FIX UI sleep increased from 2s β 3s (allow QuickFIX initiator to start)
Dashboard:
- Local clock added to header bar (updates every second, browser timezone)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Fix port 5000 conflict and nginx MIME type warningsβ
- frontend.py: read PORT env var instead of hardcoding 5000
(entrypoint starts frontend with PORT=5003, so dashboard keeps 5000)
- nginx.conf: remove sub_filter_types text/html from /fix/ and /frontend/
blocks β text/html is nginx sub_filter default, explicit declaration
caused duplicate MIME type warnings
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add Frontend button to dashboard; wire frontend into single-containerβ
Dashboard:
- FRONTEND_URL env var injected into template; button only shown when set
- docker-compose: FRONTEND_URL=http://localhost:5000 added to dashboard service
- Button opens frontend in new tab (indigo pill style, matching FIX UI)
Single-container (HuggingFace):
- nginx: /frontend/ route added β localhost:5003
- entrypoint.sh: starts frontend on port 5003 with correct template folder
- Dockerfile: copies frontend.py + templates to /app/frontend_templates/
- frontend.py: TEMPLATE_FOLDER env var support added
- Dockerfile: also copies market_schedule.txt to /app/data/
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add NBG security and restrict symbol entry to known securitiesβ
Kafka-based stock exchange simulation with:
- Order matcher engine with SQLite persistence
- FIX protocol OEG server and UI clients
- Frontend order entry with real-time book/trades
- Trading dashboard with SSE streaming and charts
- Market data feeder, consumer, and snapshot viewer
- Docker Compose orchestration for all services
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>