Browser-only developer and everyday utilities. Every tool runs entirely in the visitor's browser — no uploads, no servers, no tracking. Live at inbrowser.app.
Built with Astro, React, and shadcn/ui. Shipped to production as v2.0.0; main is the live product. The legacy Vue 3 / Vite implementation is preserved on the legacy/vue branch.
apps/web— the only deployable. Astro routes, layouts, SEO, and Cloudflare Worker config.packages/ui— shared design system. The only owner ofshadcn/uisource andcomponents.json.packages/tool-sdk— framework-agnostic tool contract:defineTool(), types, locale resolution, validation.packages/tool-registry— manifest discovery + codegen (registry, search index, static paths, page loaders).packages/lib/<domain>— promoted, framework-free domain libraries.tools/<slug>— self-contained workspace packages, scoped@tool/<slug>. Each tool is its own private workspace package with its own runtime deps.
- Default to tool-local code. Shared code must earn its way into
packages/lib/*(≥3 callers or correctness-sensitive). tools/*may depend on@workspace/ui,@workspace/tool-sdk, andpackages/lib/*, but not onapps/webor@workspace/tool-registry.packages/uiis presentation-only; no imports fromapps/web,tools/*, ortool-registry.packages/tool-sdkis framework-agnostic.packages/tool-registryis the only package allowed to generate imports that point at@tool/*, and only fromsrc/generated/.- All external dependency versions live in the
catalog:block ofpnpm-workspace.yaml; package manifests reference them as"catalog:".
See docs/architecture/workspace-boundaries.md for the full boundary contract.
pnpm install
pnpm dev # tool-registry:generate + astro dev (apps/web)Node >=20, pnpm@10.33.0.
packages/ui owns the shared components.json. Add or update shadcn components from there rather than from the app shell.