Programming innovation and modernization

Modernizing Promises in Our Event Sourcing Platform

Disclaimer: This blog post is automatically generated from project documentation and technical proposals using AI assistance. The content represents our development journey and architectural decisions. Code examples are simplified illustrations and may not reflect the exact production implementation. The Promise Modernization Challenge Caroline was reviewing some of our WebSocket handling code when she noticed something interesting. “You know,” she said, pointing at a nested Promise constructor, “Node.js has some new promise features we should be using.” I looked over her shoulder at the code. She was right—we were still using patterns from the early async/await days. With Node.js 25.2.0 in production, we had access to Promise.try(), Promise.withResolvers(), and promise-based timers. Claude suggested we audit the codebase for modernization opportunities. “Let’s make our promises cleaner,” Caroline grinned. “No more callback wrapper hell.” ...

December 3, 2025 · 8 min · Claude, Caroline & Stef Hock
Security innovation and achievement

Implementing Zero-Downtime Session Key Rotation

Disclaimer: This blog post is automatically generated from project documentation and technical proposals using AI assistance. The content represents our development journey and architectural decisions. Code examples are simplified illustrations and may not reflect the exact production implementation. Table of Contents The Session Security Challenge Multi-Key Strategy Implementation with Fastify Rotation Workflow Makefile Automation The Session Security Challenge When Caroline and I implemented secure sessions for the UI service, we knew session keys needed rotation for security. But we had a problem: how do you rotate keys without invalidating every user’s session? ...

December 3, 2025 · 5 min · Claude, Caroline & Stef Hock
Optimized data architecture achievement

Simplifying ClickHouse Queries with Smart Schema Design

Disclaimer: This blog post is automatically generated from project documentation and technical proposals using AI assistance. The content represents our development journey and architectural decisions. Code examples are simplified illustrations and may not reflect the exact production implementation. Table of Contents The Query Complexity Problem Three-Tier Improvement Strategy Tier 1: Zero-Risk Quick Wins Tier 1.5: Match Timing Lookup Table Tier 2: Shot Sequence Linking Tier 3: Score Denormalization Performance Impact Key Learnings The Query Complexity Problem When Caroline and I first built the ClickHouse analytics for Scores, we followed a pure event sourcing approach: store raw events, derive everything in queries. This kept writes simple but made reads complex. ...

December 3, 2025 · 9 min · Claude, Caroline & Stef Hock
AI assistance in optimization

Optimizing Docker Builds with Multi-Stage Strategy

Disclaimer: This blog post is automatically generated from project documentation and technical proposals using AI assistance. The content represents our development journey and architectural decisions. Code examples are simplified illustrations and may not reflect the exact production implementation. Table of Contents The Image Size Problem Multi-Stage Build Strategy esbuild Bundling Production vs Development Results and Lessons The Image Size Problem When Caroline and I first containerized the Scores services, we took the straightforward approach: install dependencies, copy the workspace, and run with tsx for TypeScript execution. Simple, but expensive. ...

December 3, 2025 · 5 min · Claude, Caroline & Stef Hock
Interconnected data streams and connections

Connection Pooling for Web Components

Disclaimer: This blog post is automatically generated from project documentation and technical proposals using AI assistance. The content represents our development journey and architectural decisions. Code examples are simplified illustrations and may not reflect the exact production implementation. Table of Contents The Connection Problem Singleton Connection Managers Channel-Based Message Routing StreamConnection Implementation EventConnection Implementation Component Integration Server-Side Changes Results and Benefits Key Learnings The Connection Problem When Caroline and I were building the recorder page for Scores, we noticed something alarming: each web component was creating its own connection to the server. The audio recorder had a WebSocket, the manual input component had another WebSocket, each of the four biometric monitors had their own WebSocket, and the score dashboard, match highlights, and real-time updates each had EventSource connections. ...

December 3, 2025 · 6 min · Claude, Caroline & Stef Hock