| Age | Commit message (Expand) | Author |
| 2026-05-19 | docs: add Phase 5 Playwright E2E test plan for /setup pagefeature/display-fix | Your Name |
| 2026-05-19 | docs: update web WiFi setup plan checklist with progress | Your Name |
| 2026-05-19 | feat: add WiFi QR code to BOOT and ERROR screens | Your Name |
| 2026-05-19 | fix: transition display to ERROR after WiFi retries exhausted | Your Name |
| 2026-05-19 | feat: web-based WiFi setup via captive portal, portrait-only display | Your Name |
| 2026-05-19 | Fix display rotation: use stride=480 for correct framebuffer addressing | Your Name |
| 2026-05-19 | Dynamic layout for WiFi setup: landscape rotation, responsive render, highlig... | Your Name |
| 2026-05-18 | fix: keyboard KB_START_Y must match render position (70), simplify row 3 layout | Your Name |
| 2026-05-18 | fix: prevent IntegerDivideByZero in config_get_next_wifi when no networks | Your Name |
| 2026-05-18 | feat: integrate touchscreen WiFi setup into display UI | Your Name |
| 2026-05-18 | feat: add WiFi setup state machine + config_add_wifi with unit tests | Your Name |
| 2026-05-18 | feat: add on-screen keyboard with layout/hit detection tests | Your Name |
| 2026-05-18 | feat: add AXS15231B touch driver with coordinate parsing tests | Your Name |
| 2026-05-18 | Sync display with live TollGate state | Your Name |
| 2026-05-18 | Update plan: all display screens verified working on hardware | Your Name |
| 2026-05-18 | Implement full TollGate display UI | Your Name |
| 2026-05-18 | Fix display: add RAMWR before pixel data, correct colors, smaller text | Your Name |
| 2026-05-18 | Fix display colors with internal DMA byte-swap buffer | Your Name |
| 2026-05-18 | Document QSPI protocol findings and display fix plan | Your Name |
| 2026-05-18 | merge: latest master with per-board locks and port assignments | Your Name |
| 2026-05-18 | feat: per-board hardware locks (board-a/b/c.lock), fix port assignments | Your Name |
| 2026-05-18 | fix: convert AXS15231B driver from SPI to QSPI | Your Name |
| 2026-05-18 | track: add display abstraction layer and bitmap font | Your Name |
| 2026-05-18 | track: add AXS15231B display driver and QR code components | Your Name |
| 2026-05-18 | fix: EVENT msg buffer underflow + WS write loop + WPA3 auth | Your Name |
| 2026-05-18 | feat: ContextVM (MCP over Nostr) server with WS masking fix | Your Name |
| 2026-05-18 | fix: move MAC set after wifi_set_mode, start services without STA | Your Name |
| 2026-05-17 | refactor: reorganize test suite, add integration tests for NAT filter | Your Name |
| 2026-05-17 | feat: per-client NAT filtering via LWIP_HOOK_IP4_CANFORWARD | Your Name |
| 2026-05-17 | Bug fixes: reset_auth clears sessions, port 80 /usage shows real data, metric... | Your Name |
| 2026-05-17 | Playwright interop tests: 18 tests (ESP32 happy path + OpenWRT comparison) | Your Name |
| 2026-05-17 | Phase 7: MCP handler (25 tests), NIP-04 encrypt/decrypt (15 tests), CVM serve... | Your Name |
| 2026-05-17 | feat(phase6): bytes-based billing - dual metric support | Your Name |
| 2026-05-17 | Phase 5: Lightning auto-payout with LNURL-pay and NUT-05 melt | Your Name |
| 2026-05-17 | Phase 4: TollGate client detection + auto-payment | Your Name |
| 2026-05-17 | interop: ESP32 ↔ OpenWRT TollGate cross-platform test suite | Your Name |
| 2026-05-17 | test_cashu (10/10) + test_session (18/18): all 86 unit tests passing | Your Name |
| 2026-05-17 | test_nostr_event: 23/23 passing — NIP-01 event ID, Schnorr signing, JSON se... | Your Name |
| 2026-05-17 | test_identity: 24/24 passing — HMAC-SHA512 derivation, MAC bits, SSID/IP de... | Your Name |
| 2026-05-17 | Testing infrastructure: AGENTS.md rules + unit test framework + geohash tests... | Your Name |
| 2026-05-16 | Phase 3: Nostr identity derivation + wifistr service discovery | Your Name |
| 2026-05-16 | Phase 3: on-device Cashu wallet with mbedTLS secp256k1 + SPIFFS persistence +... | Your Name |
| 2026-05-16 | Fix test 22: use dynamic TOLLGATE_IP instead of hardcoded 192.168.4.1 for rou... | Your Name |
| 2026-05-16 | Fix captive portal detection on GrapheneOS + embed mint URL in portal HTML | Your Name |
| 2026-05-16 | Unique SSID/IP per board + captive detection fix + mint list in portal | Your Name |
| 2026-05-16 | Phase 2 Playwright tests: 10/10 passing (portal, captive detection, API) | Your Name |
| 2026-05-16 | Phase 2 tests 22-23 passing: session expiry + renewal (21/21) | Your Name |
| 2026-05-16 | Captive portal detection fix + Phase 2 tests 16-18,20 passing (17/17) | Your Name |
| 2026-05-16 | gitignore: exclude generated config.json (contains WiFi credentials) | Your Name |
| 2026-05-16 | Phase 2 WIP: token decode works, TLS checkstate succeeds (crashes after respo... | Your Name |
| 2026-05-15 | Fix stack overflow and heap-allocate large buffers in Cashu/payment path | Your Name |
| 2026-05-15 | Phase 2 WIP: Cashu payment endpoints, session tracking, updated checklist | Your Name |
| 2026-05-15 | Phase 1 working: captive portal, DNS hijack, NAT-based access control | Your Name |
| 2026-05-15 | initiall commit | Your Name |