* feat: add Sentry error monitoring (#77)
Installs and configures @sentry/react-router with server and client
instrumentation. Disabled in development to avoid noise; only active
in production.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* chore: add VSCode Sentry MCP server config
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: pass vite env to sentryReactRouter plugin
sentryReactRouter requires the ConfigEnv as a second argument to read
the vite `command` property.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
`resolve.alias` with `isSsrBuild` only works at build time — during
`npm run dev`, `isSsrBuild` is always false, so `ssrLoadModule` was
loading the browser stub (DatabaseContext = null) instead of the real
AsyncLocalStorage implementation, causing a TypeError on every request.
Replace the alias with an `enforce: 'pre'` plugin that checks
`options.ssr` at resolve time, which Vite correctly sets for both dev
SSR module loading and production SSR builds.
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
database/context.ts uses AsyncLocalStorage from node:async_hooks which
is a Node.js-only API. Vite externalizes it for browser builds but the
resulting error "AsyncLocalStorage is not exported by __vite-browser-external"
caused npm run build to fail.
Fix: add a Vite resolve.alias for the browser (non-SSR) build that maps
~/database/context to a browser-safe stub. The stub is never called at
runtime since database() is only invoked in server-side loaders, but it
allows the client bundle to build without errors.
https://claude.ai/code/session_01Fjf9WFqNnuHmmC5yTedL7G
Co-authored-by: Claude <noreply@anthropic.com>