feat: multi-ecosystem stack graph + builder redesign#209
Conversation
Introduce a stack-graph model that lets a project mix languages per role (frontend, backend, database, mobile) instead of a single ecosystem, and redesign the web stack builder around it. Types & core - Add packages/types/src/stack-graph.ts (parts, roles, ecosystem bindings) with tests; extend schemas, compatibility, stack-translation, and types to support graph-shaped stacks alongside the legacy flat config. CLI - Parse/emit scoped --part flags, validate graph configs, and keep the reproducible-command output in sync with the new model. Template generator - Thread graph parts through the base + per-ecosystem template handlers (go, rust, python, java, elixir, database). Web builder (soft-modern redesign, multi-ecosystem block) - Full-width creation-method toggle promoted to a persistent top bar. - 5-step wizard: Frontend -> Backend -> Database -> Mobile -> Finalize, with step nav moved into the bottom command bar (partial command stays copyable mid-flow; full command + Copy on the final step). - Role step cards show the chosen tool + icon; Main Language picker uses icon tiles; rounded surfaces, softer borders, and subtle shadows. - General settings (package manager, AI docs, version channel, git) become the final "Finalize" step instead of always-visible sections. Docs - Add CONTEXT.md domain glossary for the stack-graph language.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2f5d082c82
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if (config.stackParts && config.stackParts.length > 0) { | ||
| flags = config.stackParts | ||
| .filter((part) => part.source !== "provided") | ||
| .map((part) => `--part ${formatStackPartSpec(part, config.stackParts ?? [])}`); | ||
| appendGraphExtraFlags(flags, config); | ||
| appendCommonFlags(flags, config); |
There was a problem hiding this comment.
Preserve non-graph options in reproducible commands
Because bts.jsonc is now written with stackParts for normal legacy projects too, any saved project with options outside the small graph-extra allowlist (for example email, payments, addons, examples, dbSetup, deploy flags, or shadcn settings) takes this branch and returns a command that drops those selections. Re-running the generated history/repro command will silently scaffold a different project even though the original config still contains those values.
Useful? React with 👍 / 👎.
- stack-builder: use semantic <fieldset> instead of role="group" for the creation-mode toggle (oxlint jsx-a11y/prefer-tag-over-role is correctness=error on newer oxlint, failing the Lint job) - stack-graph: only map the generic orm/api/auth config fields for TypeScript and React Native ecosystems. For Go (and other non-TS) the generic auth=better-auth default collided with the ecosystem-specific goAuth, emitting an invalid + duplicate auth part that validateStackParts rejected, breaking the go-auth web command roundtrip - docs: add living design doc for moving the stack graph to a single source of truth
…em builder - Move Solo / Multi-Ecosystem toggle into the global header (lime pill), bridged from the builder via a shared mode store; hide nav links on /new - Redesign multi-ecosystem step nav as a horizontal numbered stepper - Make multi-ecosystem sections match solo: icon+title headers, same tool card styling, collapsible with chevron - Add cursor-pointer to section titles and the theme toggle
…stack-graph Co-authored-by: Cursor <cursoragent@cursor.com> # Conflicts: # apps/cli/test/__snapshots__/template-snapshots.test.ts.snap # packages/template-generator/src/post-process/package-configs.ts
The single-source-of-truth design doc still read "Exploring (no code changes yet)" after the graph foundation, CLI --part round-trip, generator threading, and multi-ecosystem builder all shipped. Update the status, mark Phase 1 as landed (graph coexists with the flat config), and flag Phases 2-4 as the remaining follow-ups. Co-authored-by: Cursor <cursoragent@cursor.com>
Summary
Introduces a stack-graph model that lets a project mix languages per role (frontend, backend, database, mobile) instead of a single ecosystem, and redesigns the web stack builder around it.
Changes
Types & core (
packages/types)stack-graph.ts(parts, roles, ecosystem bindings) + tests.schemas,compatibility,stack-translation,typesto support graph-shaped stacks alongside the legacy flat config.CLI (
apps/cli)--partflags, validate graph configs, keep reproducible-command output in sync.Template generator (
packages/template-generator)Web builder (
apps/web) — soft-modern redesign of the multi-ecosystem blockDocs
CONTEXT.mddomain glossary for the stack-graph language.Testing
apps/web:tsc --noEmitclean,oxlint0 errors, 232 unit tests pass.Notes
origin/main(dependency/release bumps1.8.1,#204,#205); may want a rebase before merge.