Back to changelog
Jan 18, 2026AIProductUXDX

Shipping update - 2026-01-18

Launched a composable AI elements library with 27 new components, added comprehensive keyboard shortcuts for logs, migrated to Bun for faster builds, and shipped a spring-physics theme toggle.

Highlights

  • AI elements component library: built 27 composable components (prompt input, message renderer, context provider, open-in-chat widget, and more) as a reusable foundation for AI-powered interfaces across the product, with streaming support baked in.
  • Full-stack AI streaming integration: wired the backend streaming API into the dashboard chat context with optimistic updates, incremental message rendering, cancellation support, and proper session management across 17 changed files.
  • Comprehensive keyboard shortcuts for logs: added Cmd/Ctrl+click to open details, arrow keys and j/k vim-style row navigation, Enter/Space to expand, / to focus search, w for line wrap, [/] for tab switching, number keys for mode switching, and a shortcuts modal triggered by ?.
  • Exception stack traces now include component stacks parsed from error args, giving developers the full React component hierarchy alongside the JavaScript call stack when debugging exceptions.
  • Switched the dashboard build from yarn to Bun for roughly 10-25x faster package installation, with simplified caching and backward-compatible lockfile support.
  • Personal site: replaced the button-based dark mode toggle with an interactive spring-physics pull cord using verlet integration for rope simulation, where dragging the ball past a threshold triggers the theme switch with natural spring animation.

User outcomes

  • AI chat feels native and responsive with streaming messages, structured tool-result cards, character count limits, and improved loading/empty states.
  • Log exploration is fully keyboard-navigable: power users can browse rows, open details, toggle views, refresh queries, and switch modes without touching the mouse.
  • When debugging exceptions, the full component stack (React hierarchy) now appears in the trace view, making it faster to pinpoint which component tree path led to an error.
  • Dashboard CI runs significantly faster thanks to the Bun migration, reducing feedback loops for engineers.
  • The personal site theme toggle is now a playful, physics-based interaction instead of a static button.

Technical wins

  • Built the AI elements library as composable primitives: a PromptInput component (1200+ lines) with attachment handling, character counting, and submit affordances; a Message renderer with structured parts and copy behavior; and a Context provider for managing chat state across the component tree.
  • Integrated real-time streaming into the chat context with a helper to build stream URLs, an updateMessage method for incremental token appending, and proper cleanup on unmount/cancellation — spanning backend Go handlers and frontend React state in a single coordinated change.
  • Implemented a keyboard shortcuts system with a KeyboardShortcutsContext provider, multi-key sequence support (e.g., g h, g l vim-style), visual focus rings on rows, and a discoverable shortcuts modal — all without conflicting with existing input fields.
  • Centralized exception formatting with getComponentStackFromArgs to parse args payloads, extract componentStack entries, and merge them with existing stacktrace frames, handling both exception.stacktrace and error.stacktrace fallback paths.
  • Replaced yarn with Bun in CI workflows, removing 94 lines of configuration and adding Bun's global cache strategy for simpler, faster builds.
  • Implemented rope physics using verlet integration with configurable segment count, gravity, and constraint iterations, attaching a draggable ball that triggers theme changes when pulled past a distance threshold.

Notes

  • Sensitive/internal details have been redacted.
  • Bundle analysis workflow was removed as part of build tooling cleanup.
  • Linting auto-fixes were applied across 7 files for formatting consistency.

More updates

View all