Sats value now comes from btcdata's Strike quote endpoint which
includes the actual fee/spread, matching the Strike app.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Show 54€ equivalent in sats with dark blue styling, light gray background,
and Danish number formatting for BTC/USDT and BTC/EUR values.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Receive raw JSON from btcdata, transform to HTML in ws_proxy.clj.
Added data.json dependency, price and strike rendering, safelist updates.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove btcdata compose include, use external shared network instead
so both projects can run as separate Docker stacks.
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>
- Replace vanilla JS WebSocket with HTMX ws extension (hx-ext="ws")
- Add HTMX + ws extension CDN scripts to page head
- Zero client-side JavaScript — HTMX handles connection, reconnect, and
DOM swap of HTML fragments from btcdata
- Hidden div safelists Tailwind classes used in btcdata HTML fragments
- Update BTCDATA_URL to LAN IP (192.168.50.42) for cross-machine access
- Update CLAUDE.md and README.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Switch from SSE EventSource to WebSocket client connecting to
btcdata's new /api/price/ws endpoint
- Add automatic reconnect on connection loss (3s delay)
- Update Dockerfile BTCDATA_URL to use btcdata's new Docker port 4101
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Docker runs on port 4041 alongside local dev on 4000.
Include btcdata docker-compose for unified startup.
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>
Switch to available base images (temurin-21) since clojure:openjdk-25
and azul/zulu-openjdk-alpine:25 no longer exist. Add docker-compose.yml
for single-command app deployment.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add Node.js stage for CSS build, cache Clojure deps in separate layer,
add .dockerignore, and default JDBC_URL to btcprod database.
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>