init stack cli project-id and publishable-client-key args#888
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Note Other AI code review bot(s) detectedCodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review. WalkthroughRenames the single generated Stack app into separate server/client files and updates imports/docs accordingly; removes a vertical Separator in the dashboard New Project page; extends packages/init-stack with two key-based test scripts and CLI options to emit project and publishable-client keys and generate stack/server and stack/client artifacts. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant CI as User / CI
participant CLI as init-stack CLI
participant Parser as Arg Parser
participant Steps as Steps (Generators)
participant FS as Filesystem
CI->>CLI: run init-stack [--next|--js] --project-id X --publishable-client-key Y
CLI->>Parser: parse args
Parser-->>CLI: {projectId, publishableClientKey, target}
CLI->>Steps: getServerOrClientOrBoth()
Steps-->>CLI: ["server","client"] or subset
loop per target
CLI->>Steps: writeStackAppFile(options, "server"|"client")
Steps->>Steps: determine publishableClientKey emission (env var vs literal/placeholder)
Steps->>FS: write files to stack/server or stack/client
FS-->>Steps: success
end
CLI->>Steps: generate env templates
Steps->>FS: write NEXT_PUBLIC_* values from args (or blank)
FS-->>CLI: finished
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
Suggested reviewers
Pre-merge checks (3 passed)✅ Passed checks (3 passed)
Poem
✨ Finishing Touches
🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Greptile Summary
This PR enhances the init-stack CLI tool by adding two new command-line arguments: --project-id and --publishable-client-key. These arguments allow developers to pre-configure Stack Auth credentials during project initialization, eliminating the need for manual copy-pasting from the dashboard afterward.
The changes span three files:
- CLI Implementation (
packages/init-stack/src/index.ts): Adds argument parsing for the new options, modifies environment variable writing to use provided values, and updates Stack app file generation to embed the credentials directly - Testing Infrastructure (
packages/init-stack/package.json): Introduces two test scripts (test-run-keys-nextandtest-run-keys-js) to validate the new functionality in both Next.js and SvelteKit environments - UI Cleanup (
apps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/new-project/page-client.tsx): Removes a vertical separator component from the new project creation page for cleaner visual layout
The implementation handles different project types appropriately - for Next.js projects, credentials are written to .env.local files, while for vanilla JavaScript projects, they're embedded directly in the Stack app configuration files. When no arguments are provided, the tool falls back to placeholder text as before, maintaining backward compatibility.
Confidence score: 2/5
- This PR has a critical bug that will cause immediate issues in production
- Score lowered due to duplicate client-side Stack app file generation on line 202 in
index.ts, which will overwrite previous configurations - Pay close attention to
packages/init-stack/src/index.tsline 202 where duplicate file generation occurs
3 files reviewed, 3 comments
There was a problem hiding this comment.
Actionable comments posted: 2
♻️ Duplicate comments (2)
packages/init-stack/src/index.ts (2)
601-604: Sanitize publishable key before embedding in generated codeDirect interpolation can break code generation or enable code injection if the key contains quotes/newlines. Use JSON.stringify. (Same concern noted previously.)
- const publishableClientKeyWrite = clientOrServer === "server" - ? `process.env.STACK_PUBLISHABLE_CLIENT_KEY ${publishableClientKeyFromArgs ? `|| '${publishableClientKeyFromArgs}'` : ""}` - : `'${publishableClientKeyFromArgs ?? 'INSERT_YOUR_PUBLISHABLE_CLIENT_KEY_HERE'}'`; + const publishableClientKeyWrite = clientOrServer === "server" + ? `process.env.STACK_PUBLISHABLE_CLIENT_KEY${publishableClientKeyFromArgs ? ` || ${JSON.stringify(publishableClientKeyFromArgs)}` : ""}` + : ${JSON.stringify(publishableClientKeyFromArgs ?? "INSERT_YOUR_PUBLISHABLE_CLIENT_KEY_HERE")};
615-617: Sanitize projectId before embeddingSame issue: wrap with JSON.stringify. (Previously flagged.)
- type === "js" && projectIdFromArgs ? `\n${indentation}projectId: '${projectIdFromArgs}',` : ""}${ + type === "js" && projectIdFromArgs ? `\n${indentation}projectId: ${JSON.stringify(projectIdFromArgs)},` : ""}${
🧹 Nitpick comments (3)
packages/init-stack/package.json (1)
27-29: Keyed test-run scripts added — consider cross-shell quoting for --import-aliasLooks good functionally. Minor: single quotes around --import-alias can break on Windows shells. Prefer no quotes or double quotes.
Apply this diff if you want a safer default:
- "test-run-next": "rimraf test-run-output && npx -y create-next-app@latest test-run-output --app --ts --no-src-dir --tailwind --use-npm --eslint --import-alias '##@#/*' --turbopack && STACK_DISABLE_INTERACTIVE=true pnpm run init-stack:local test-run-output", + "test-run-next": "rimraf test-run-output && npx -y create-next-app@latest test-run-output --app --ts --no-src-dir --tailwind --use-npm --eslint --import-alias \"##@#/*\" --turbopack && STACK_DISABLE_INTERACTIVE=true pnpm run init-stack:local test-run-output",packages/init-stack/src/index.ts (2)
519-526: Quote .env values to avoid breakage with special charactersIf args contain spaces/newlines/quotes, the generated .env can break parsing. Quote via JSON.stringify.
Apply this diff in both branches:
- `NEXT_PUBLIC_STACK_PROJECT_ID=${projectIdFromArgs ?? ""}\n` + - `NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY=${publishableClientKeyFromArgs ?? ""}\n` + + `NEXT_PUBLIC_STACK_PROJECT_ID=${projectIdFromArgs !== undefined ? ${"JSON.stringify(projectIdFromArgs)"} : ""}\n` + + `NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY=${publishableClientKeyFromArgs !== undefined ? ${"JSON.stringify(publishableClientKeyFromArgs)"} : ""}\n` +
578-582: Avoid unnecessary type assertionMap the union without casting.
- const clientOrServerCap = { - client: "Client", - server: "Server", - }[clientOrServer as string] ?? throwErr("unknown clientOrServer " + clientOrServer); + const clientOrServerCap = ({ client: "Client", server: "Server" } as const)[clientOrServer];
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
apps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/new-project/page-client.tsx(0 hunks)packages/init-stack/package.json(1 hunks)packages/init-stack/src/index.ts(8 hunks)
💤 Files with no reviewable changes (1)
- apps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/new-project/page-client.tsx
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
Prefer ES6 Map over Record when representing key–value collections
Files:
packages/init-stack/src/index.ts
🧬 Code graph analysis (1)
packages/init-stack/src/index.ts (1)
packages/stack-shared/src/utils/errors.tsx (1)
throwErr(10-19)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (9)
- GitHub Check: docker
- GitHub Check: all-good
- GitHub Check: lint_and_build (latest)
- GitHub Check: build (22.x)
- GitHub Check: restart-dev-and-test
- GitHub Check: build (22.x)
- GitHub Check: docker
- GitHub Check: setup-tests
- GitHub Check: Security Check
🔇 Additional comments (4)
packages/init-stack/src/index.ts (4)
45-47: CLI args for project-id and publishable-client-key — LGTMNames, Commander parsing, and help text are consistent.
63-64: Options mapping — LGTMCommander camelCase access (projectId, publishableClientKey) is correct.
202-204: Double generation in Next.js: confirm intentGenerating both client and server Stack apps for Next is a product decision. If intentional, ensure all imports use the new locations (see import-path fix below).
694-709: Client/server selection API — LGTMClear return type and arg handling.
There was a problem hiding this comment.
Actionable comments posted: 0
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
packages/init-stack/src/index.ts (1)
608-613: Next client file incorrectly marked server-onlyThe template always adds import "server-only" for Next, which will crash if this is a client file. Gate it on server only.
Apply:
-${type === "next" ? `import "server-only";` : ""} +${type === "next" && clientOrServer === "server" ? `import "server-only";` : ""}If you keep the Next client file, also switch tokenStore to "cookie" (not "nextjs-cookie") for the client variant.
♻️ Duplicate comments (3)
packages/init-stack/src/index.ts (3)
601-604: Code injection/broken syntax risk when embedding keys — use JSON.stringifyDirectly interpolating publishableClientKeyFromArgs into generated code can break on quotes and enables code injection. Use JSON.stringify for safe literal emission (server fallback and client literal).
Apply:
-const publishableClientKeyWrite = clientOrServer === "server" - ? `process.env.STACK_PUBLISHABLE_CLIENT_KEY ${publishableClientKeyFromArgs ? `|| '${publishableClientKeyFromArgs}'` : ""}` - : `'${publishableClientKeyFromArgs ?? 'INSERT_YOUR_PUBLISHABLE_CLIENT_KEY_HERE'}'`; +const publishableClientKeyWrite = clientOrServer === "server" + ? `process.env.STACK_PUBLISHABLE_CLIENT_KEY${publishableClientKeyFromArgs ? ` || ${JSON.stringify(publishableClientKeyFromArgs)}` : ""}` + : ${JSON.stringify(publishableClientKeyFromArgs ?? "INSERT_YOUR_PUBLISHABLE_CLIENT_KEY_HERE")};
615-617: Use JSON.stringify for projectId to avoid broken code and injectionEmbedding projectIdFromArgs in quotes will break if the value contains quotes; JSON.stringify fixes this and prevents injection.
-type === "js" && projectIdFromArgs ? `\n${indentation}projectId: '${projectIdFromArgs}',` : ""}${ +type === "js" && projectIdFromArgs ? `\n${indentation}projectId: ${JSON.stringify(projectIdFromArgs)},` : ""}${
639-643: Make the server app import path robust for src/ and non-src projectsHardcoding "../../../stack/server" fails in projects without a src/ folder (it should be "../../stack/server"). Compute the relative path dynamically.
Apply:
const handlerPath = handlerPathWithoutExtension + "." + handlerFileExtension; const handlerContent = await readFile(handlerPath); + const serverAppImportRel = path + .relative(path.dirname(handlerPath), path.join(projectInfo.srcPath, "stack", "server")) + .split(path.sep).join("/"); @@ - laterWriteFileIfNotExists( + laterWriteFileIfNotExists( handlerPath, - `import { StackHandler } from "@stackframe/stack";\nimport { stackServerApp } from "../../../stack/server";\n\nexport default function Handler(props${ + `import { StackHandler } from "@stackframe/stack";\nimport { stackServerApp } from "${serverAppImportRel}";\n\nexport default function Handler(props${ handlerFileExtension.includes("ts") ? ": unknown" : "" }) {\n${projectInfo.indentation}return <StackHandler fullPage app={stackServerApp} routeProps={props} />;\n}\n` );
🧹 Nitpick comments (2)
packages/init-stack/src/index.ts (2)
519-526: .env authoring: quote or validate valuesIf projectId/publishable key include characters like spaces, #, or newlines, the .env can be corrupted. Either:
- Quote values (dotenv supports quoted strings), or
- Validate against a safe charset and fallback to empty string with a warning.
Example (quoting):
-`NEXT_PUBLIC_STACK_PROJECT_ID=${projectIdFromArgs ?? ""}\n` + -`NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY=${publishableClientKeyFromArgs ?? ""}\n` + +`NEXT_PUBLIC_STACK_PROJECT_ID="${projectIdFromArgs ?? ""}"\n` + +`NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY="${publishableClientKeyFromArgs ?? ""}"\n` +
575-583: Simplify mapping; also consider legacy stack.ts detection
- Nit: no need for the string cast or map. A ternary is simpler and type-safe.
- Optional: migrating from the legacy single file (stack.ts) won’t be detected now that paths moved to stack/server|client. Consider checking for a legacy file and bailing with a migration hint.
Proposed simplification:
-const clientOrServerCap = { - client: "Client", - server: "Server", -}[clientOrServer as string] ?? throwErr("unknown clientOrServer " + clientOrServer); +const clientOrServerCap = clientOrServer === "client" ? "Client" : "Server";
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
packages/init-stack/src/index.ts(10 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
Prefer ES6 Map over Record when representing key–value collections
Files:
packages/init-stack/src/index.ts
🧬 Code graph analysis (1)
packages/init-stack/src/index.ts (1)
packages/stack-shared/src/utils/errors.tsx (1)
throwErr(10-19)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (9)
- GitHub Check: lint_and_build (latest)
- GitHub Check: build (22.x)
- GitHub Check: all-good
- GitHub Check: build (22.x)
- GitHub Check: restart-dev-and-test
- GitHub Check: docker
- GitHub Check: docker
- GitHub Check: setup-tests
- GitHub Check: Security Check
🔇 Additional comments (5)
packages/init-stack/src/index.ts (5)
45-47: CLI: New args look goodFlags are well named and documented. Commander will expose them as options.projectId/options.publishableClientKey, which you use below.
63-65: Arg plumbing verifiedReading options into projectIdFromArgs/publishableClientKeyFromArgs is correct.
694-709: Typed return for getServerOrClientOrBoth is solidTightening the return type to Array<"server" | "client"> improves downstream safety.
752-753: Import path fix in layout is correctSwitching to ../stack/server matches the new file layout.
202-203: ```shell
#!/bin/bash
set -euo pipefailecho "=== packages/init-stack/src/index.ts (lines 1-240) ==="
sed -n '1,240p' packages/init-stack/src/index.ts || true
echoecho "=== packages/init-stack/src/index.ts (lines 560-620) ==="
sed -n '560,620p' packages/init-stack/src/index.ts || true
echoecho "=== search: writeStackAppFile ==="
rg -n -C3 "writeStackAppFile" packages || true
echoecho "=== search: Steps.writeStackAppFile ==="
rg -n -C3 "Steps.writeStackAppFile" packages || true
echoecho "=== search: definition/occurrences of Steps (class/const/export) ==="
rg -n -C3 "class Steps" packages || true
rg -n -C3 "export const Steps" packages || true
rg -n -C3 "const Steps" packages || true
echoecho "=== search: import "server-only" or server-only ==="
rg -n -C3 'server-only' packages || true
echoecho "=== search: @StackFrame references ==="
rg -n -C3 '@StackFrame' packages || true
echoecho "=== search: StackClientApp symbol ==="
rg -n -C3 'StackClientApp' packages || true
echoecho "=== search: tokenStore ==="
rg -n -C3 'tokenStore' packages || true
echoecho "=== show packages/init-stack/package.json (if present) ==="
sed -n '1,240p' packages/init-stack/package.json || true
echoecho "=== search: template files under packages/init-stack ==="
rg -n -C3 'template|templates|writeStackAppFile' packages/init-stack || true
echoecho "=== done ==="
</blockquote></details> </blockquote></details> </details> <!-- This is an auto-generated comment by CodeRabbit for review status -->
N2D4
left a comment
There was a problem hiding this comment.
Can you also update the docs? In particular the Getting Started guide, and all the imports of the old stack.ts file
There was a problem hiding this comment.
Actionable comments posted: 3
♻️ Duplicate comments (2)
packages/init-stack/src/index.ts (2)
601-604: Sanitize injected values in generated codeAvoid raw string interpolation; use JSON.stringify for safe escaping.
- const publishableClientKeyWrite = clientOrServer === "server" - ? `process.env.STACK_PUBLISHABLE_CLIENT_KEY ${publishableClientKeyFromArgs ? `|| '${publishableClientKeyFromArgs}'` : ""}` - : `'${publishableClientKeyFromArgs ?? 'INSERT_YOUR_PUBLISHABLE_CLIENT_KEY_HERE'}'`; + const publishableClientKeyWrite = clientOrServer === "server" + ? `process.env.STACK_PUBLISHABLE_CLIENT_KEY${publishableClientKeyFromArgs ? ` || ${JSON.stringify(publishableClientKeyFromArgs)}` : ""}` + : ${JSON.stringify(publishableClientKeyFromArgs ?? 'INSERT_YOUR_PUBLISHABLE_CLIENT_KEY_HERE')};
615-616: Also sanitize projectId in generated JS app fileUse JSON.stringify to prevent quote breaks.
-type === "js" && projectIdFromArgs ? `\n${indentation}projectId: '${projectIdFromArgs}',` : ""}${ +type === "js" && projectIdFromArgs ? `\n${indentation}projectId: ${JSON.stringify(projectIdFromArgs)},` : ""}${
🧹 Nitpick comments (3)
docs/templates/getting-started/setup.mdx (1)
54-54: Punctuation nitAdd a period for consistency with the preceding bullets.
- - `stack/client.ts`: This file contains the `stackClientApp` which you can use to access Stack from Client Components + - `stack/client.ts`: This file contains the `stackClientApp` which you can use to access Stack from Client Components.packages/init-stack/src/index.ts (2)
519-526: Escape quotes when writing .env.local to avoid malformed valuesIf an ID/key contains
", the generated.env.localwill break. Escape double quotes in both branches.- `NEXT_PUBLIC_STACK_PROJECT_ID="${projectIdFromArgs ?? ""}"\n` + - `NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY="${publishableClientKeyFromArgs ?? ""}"\n` + + `NEXT_PUBLIC_STACK_PROJECT_ID="${(projectIdFromArgs ?? "").replaceAll('"', '\\"')}"\n` + + `NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY="${(publishableClientKeyFromArgs ?? "").replaceAll('"', '\\"')}"\n` +- `NEXT_PUBLIC_STACK_PROJECT_ID="${projectIdFromArgs ?? ""}"\n` + - `NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY="${publishableClientKeyFromArgs ?? ""}"\n` + + `NEXT_PUBLIC_STACK_PROJECT_ID="${(projectIdFromArgs ?? "").replaceAll('"', '\\"')}"\n` + + `NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY="${(publishableClientKeyFromArgs ?? "").replaceAll('"', '\\"')}"\n` +
593-594: Error message mentions only .ts; generalize extensionProjects may use
.js,.tsx, etc.- `A file at the path ${stackAppPath} already exists. Stack uses the stack/${clientOrServer}.ts file to initialize the Stack SDK. Please remove the existing file and try again.` + `A file at the path ${stackAppPath} already exists. Stack uses the stack/${clientOrServer}.* file to initialize the Stack SDK. Please remove the existing file and try again.`
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (9)
apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsx(3 hunks)docs/templates/concepts/oauth.mdx(1 hunks)docs/templates/customization/custom-pages.mdx(2 hunks)docs/templates/customization/page-examples/forgot-password.mdx(1 hunks)docs/templates/customization/page-examples/password-reset.mdx(1 hunks)docs/templates/getting-started/example-pages.mdx(6 hunks)docs/templates/getting-started/setup.mdx(4 hunks)docs/templates/getting-started/users.mdx(1 hunks)packages/init-stack/src/index.ts(9 hunks)
✅ Files skipped from review due to trivial changes (6)
- docs/templates/customization/page-examples/password-reset.mdx
- docs/templates/concepts/oauth.mdx
- docs/templates/customization/custom-pages.mdx
- docs/templates/customization/page-examples/forgot-password.mdx
- docs/templates/getting-started/example-pages.mdx
- apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/(overview)/setup-page.tsx
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
Prefer ES6 Map over Record when representing key–value collections
Files:
packages/init-stack/src/index.ts
🧬 Code graph analysis (1)
packages/init-stack/src/index.ts (1)
packages/stack-shared/src/utils/errors.tsx (1)
throwErr(10-19)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: build (22.x)
- GitHub Check: all-good
- GitHub Check: Security Check
🔇 Additional comments (6)
docs/templates/getting-started/setup.mdx (1)
205-223: LGTM on React client app setupThe
stack/client.tscreation and usage inApp.tsxlook correct and consistent with the new split.Also applies to: 235-235
packages/init-stack/src/index.ts (5)
45-47: CLI options addition looks goodNew
--project-idand--publishable-client-keyflags are clearly named and documented.
575-583: Good: split client/server file generation and pathing
stack/clientandstack/servertargets are clear and match the docs.
640-643: LGTM: fixed server import path in Next handler
"../../../stack/server"is correct relative toapp/handler/[...stack]/page.*.
694-709: Typed return is goodNarrowing
getServerOrClientOrBoth()toArray<"server" | "client">improves type safety.
752-752: LGTM: updated layout import to server path
import { stackServerApp } from "../stack/server";aligns with the new split and src/app layout.
| ## Server Component basics | ||
|
|
||
| Since `useUser()` is a stateful hook, you can't use it on server components. Instead, you can import `stackServerApp` from `stack.ts` and call `getUser()`: | ||
| Since `useUser()` is a stateful hook, you can't use it on server components. Instead, you can import `stackServerApp` from `stack/client.ts` and call `getUser()`: |
There was a problem hiding this comment.
Fix import location: use stack/server.ts for server components
Importing stackServerApp from stack/client.ts is incorrect for Server Components.
Apply:
-Since `useUser()` is a stateful hook, you can't use it on server components. Instead, you can import `stackServerApp` from `stack/client.ts` and call `getUser()`:
+Since `useUser()` is a stateful hook, you can't use it on server components. Instead, import `stackServerApp` from `stack/server.ts` and call `getUser()`:Also update the snippet’s import to:
import { stackServerApp } from "@/stack/server";🤖 Prompt for AI Agents
In docs/templates/getting-started/users.mdx around line 33, the example
incorrectly imports stackServerApp from stack/client.ts for a Server Component;
change the import to use the server-side entry by updating the snippet to import
stackServerApp from "@/stack/server" so the example shows the correct
server-side import for calling getUser() in Server Components.
Important
Add CLI options for project ID and publishable client key, update initialization process, and modify documentation to reflect changes.
--project-idand--publishable-client-keyoptions toindex.tsfor CLI setup.writeEnvVars()inindex.tsto include project ID and publishable client key in.env.local.writeStackAppFile()inindex.tsto handle new CLI options.stack.tstostack/client.tsandstack/server.tsin multiple.mdxfiles.setup.mdxandexample-pages.mdx.test-run-keys-nextandtest-run-keys-jsscripts inpackage.jsonfor testing new CLI options.This description was created by
for b204910. You can customize this summary. It will automatically update as commits are pushed.
Review by RecurseML
🔍 Review performed on bd14f6b..92c332a
✨ No bugs found, your code is sparkling clean
✅ Files analyzed, no issues (2)
•
packages/init-stack/src/index.ts•
apps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/new-project/page-client.tsx⏭️ Files skipped (trigger manually) (1)
packages/init-stack/package.jsonSummary by CodeRabbit
New Features
UI
Documentation
Chores