Replace the Clojure Kit application with a Python FastAPI app that
produces identical HTML output. WebSocket proxy, Danish number
formatting, and HTMX integration all preserved.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Browser can't reach the LAN-only btcdata WebSocket when accessing
btcprice remotely (Tailscale/Cloudflare Tunnel). Add a /ws/price
proxy route that relays btcdata frames to the browser so only
btcprice needs to be reachable.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Safelist Tailwind classes for currency rate HTML fragments from btcdata
WebSocket. Add make run-docker target that connects to Docker btcdata
on port 4101.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove DB, Binance WebSocket, and Kraken pollers from btcprice.
UI now uses vanilla EventSource connecting to btcdata for live
price updates. btcprice is now a pure UI service with no database.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Polls Kraken API for 1-day BTC/USD candles aligned to 00:01 UTC,
mirroring the existing hourly poller pattern.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Hourly candles only finalize on the hour, so polling every 5 minutes
was wasteful. Now the poller sleeps until 1 minute past each hour,
fetches immediately on first run when no data exists, and logs time
to next fetch on startup.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fetches Bitcoin hourly candles from the Kraken public REST API
and upserts them into a kraken_hour table on a 5-minute poll interval,
following the existing Integrant component pattern.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Show price in green when rising, red when falling. Use Tailwind
classes with a safelist comment so JIT includes them. Remove
middleware from SSE route to prevent "response already started" error.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace 2s polling with Server-Sent Events for instant price updates.
Write directly to Undertow exchange output stream to ensure proper
flushing, since the Ring adapter buffers InputStream bodies.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Connect to Binance trade stream, persist prices to binance_price table
(throttled to every 5s), and live-update the home page via HTMX polling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Load .env vars via Makefile, use #env JDBC_URL for all profiles in
system.edn, switch ig/prep to ig/expand, and add missing namespace
requires in core.clj to match elprice project conventions.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Kit framework with Undertow, Reitit routing, Hiccup + HTMX templating,
Tailwind CSS v4, PostgreSQL (empty database), and mobile-first index page.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>