An AI experiment.
A Bun monorepo. Packages live under packages/.
Strategy Dance aims to create partly autonomous companies that involve both humans and AIs.
Its first iteration will act as an overseer and companion for solo entrepreneurs, helping them build, distribute, stay accountable, stay consistent, and, more generally, act on their projects using AI guidance and human wisdom. Progressively, AI guidance will evolve into AI execution, performing tasks typically reserved for humans.
In the long term, we would create 100% automated companies. We could also provide existing organizations with AI employees across various departments and possibly offer salaries to the humans who work for AI-led companies.
The main challenge is to solve company creation and execution by creating a universal system. The answer lies in architecture and design.
packages/strategydance-web— TanStack Start (SPA mode) + React + Tailwind CSS v4, built with Vitepackages/strategydance-database— the Firebase Data Connect service: the Postgres schema, its connectors, and the SDK generated from thempackages/strategydance-core— types, enums and constants shared by every package, with zero runtime dependenciespackages/strategydance-design-system— the component library: shadcn + Tailwind CSS v4, documented in Storybookpackages/strategydance-translations— the Gemini-backed CLI that translates the message catalogues. Node-onlypackages/strategydance-emails— the transactional emails, as React Email templates the backend renders. Node-onlypackages/strategydance-backend— a Bun and Express server on Cloud Run, for what needs a secret or the server's word, like inviting people
Beside them, documents/ holds documents written for people rather than for the build, in Markdown only.
bun install
bun run dev:emulators
bun run dev:backend
bun run devEach in its own terminal. The frontend is served on http://localhost:5173 and the backend on http://localhost:3003, both against the Firebase emulators.
The interface is localized with React Intl into English,
French, Spanish, German, Portuguese, Chinese and Japanese. English is the source: its strings are
the defaultMessages in packages/strategydance-web/src/data/intl/messages/, so it has no catalogue of its
own.
bun run translate fills the other six from those sources with Gemini, and only sends what has
actually changed. It needs a key in packages/strategydance-translations/.env (see .env.example)
and it spends quota on every run, so it is run by hand rather than in CI.
| Command | What it does |
|---|---|
bun run dev |
Runs the frontend dev server |
bun run dev:emulators |
Runs the Firebase emulators |
bun run dev:backend |
Runs the backend against the emulators |
bun run dev:emails |
Runs React Email's preview server on the email templates |
bun run build |
Typechecks and builds the design system's Storybook and the frontend |
bun run storybook |
Runs the design system's Storybook |
bun run preview |
Serves the production build |
bun run lint |
Runs oxlint across the repo and checks its formatting with oxfmt |
bun run lint:fix |
Applies oxlint's safe fixes, then formats |
bun run format |
Formats the repo with oxfmt |
bun run typecheck |
Runs tsc across the packages |
bun run test |
Runs bun test across the packages |
bun run translate |
Translates the message catalogues (needs a Gemini API key) |
bun run ncu |
Interactively updates dependencies |
bun run ship |
Opens the release pull request, from dev to main |
bun run review <command> |
Runs the GitHub calls of the Copilot review loop |
bun run deploy:backend |
Deploys the backend to Cloud Run |