diff --git a/.changeset/red-banks-dig.md b/.changeset/red-banks-dig.md new file mode 100644 index 0000000..9c917b8 --- /dev/null +++ b/.changeset/red-banks-dig.md @@ -0,0 +1,5 @@ +--- +"create-better-t-stack": patch +--- + +Replace log.info with note for post-install instructions diff --git a/README.md b/README.md index f35346e..e4aba1d 100644 --- a/README.md +++ b/README.md @@ -57,10 +57,6 @@ bun dev:cli bun dev:web ``` -## Contributors +## Want to contribute? - - - - -Made with [contrib.rocks](https://contrib.rocks). +Just fork the repository and submit a pull request! diff --git a/apps/cli/README.md b/apps/cli/README.md index 2e557f5..912b199 100644 --- a/apps/cli/README.md +++ b/apps/cli/README.md @@ -34,7 +34,7 @@ Follow the prompts to configure your project or use the `-y` flag for defaults. - **Desktop Apps**: Build native desktop apps with Tauri integration - **Code Quality**: Biome for linting and formatting - **Git Hooks**: Husky with lint-staged for pre-commit checks -- **Examples**: Todo app with full CRUD functionality +- **Examples**: Todo app with full CRUD functionality, AI Chat using AI SDK - **Developer Experience**: Git initialization, various package manager support (npm, pnpm, bun) ## Usage @@ -43,39 +43,27 @@ Follow the prompts to configure your project or use the `-y` flag for defaults. Usage: create-better-t-stack [project-directory] [options] Options: - -V, --version Output the version number - -y, --yes Use default configuration - --no-database Skip database setup - --sqlite Use SQLite database - --postgres Use PostgreSQL database - --auth Include authentication - --no-auth Exclude authentication - --pwa Include Progressive Web App support - --tauri Include Tauri desktop app support - --biome Include Biome for linting and formatting - --husky Include Husky, lint-staged for Git hooks - --no-addons Skip all additional addons - --examples Include specified examples - --no-examples Skip all examples - --git Include git setup (default) - --no-git Skip git initialization - --npm Use npm as package manager - --pnpm Use pnpm as package manager - --bun Use bun as package manager - --drizzle Use Drizzle ORM - --prisma Use Prisma ORM - --install Install dependencies (default) - --no-install Skip installing dependencies - --turso Set up Turso for SQLite database - --no-turso Skip Turso setup for SQLite database - --hono Use Hono backend framework (default) - --elysia Use Elysia backend framework - --runtime Specify runtime (bun or node) - --web Include web frontend (default) - --native Include Expo frontend - --no-web Exclude web frontend - --no-native Exclude Expo frontend - -h, --help Display help + -V, --version Output the version number + -y, --yes Use default configuration + --database Database type (none, sqlite, postgres) + --orm ORM type (none, drizzle, prisma) + --auth Include authentication + --no-auth Exclude authentication + --frontend Frontend types (web,native or both) + --addons Additional addons (pwa,tauri,biome,husky) + --no-addons Skip all additional addons + --examples Examples to include (todo,ai) + --no-examples Skip all examples + --git Initialize git repository + --no-git Skip git initialization + --package-manager Package manager (npm, pnpm, bun) + --install Install dependencies + --no-install Skip installing dependencies + --turso Set up Turso for SQLite database + --no-turso Skip Turso setup + --backend Backend framework (hono, elysia) + --runtime Runtime (bun, node) + -h, --help Display help ``` ## Examples @@ -87,17 +75,20 @@ npx create-better-t-stack my-app -y Create a project with specific options: ```bash -npx create-better-t-stack my-app --postgres --drizzle --auth --pwa --biome +npx create-better-t-stack my-app --database postgres --orm drizzle --auth --addons pwa,biome ``` Create a project with Elysia and Node.js runtime: ```bash -npx create-better-t-stack my-app --elysia --runtime node +npx create-better-t-stack my-app --backend elysia --runtime node ``` -Create a project using Hono with no addons: +Create a project with specific frontend options: ```bash -npx create-better-t-stack my-app --hono --no-addons +npx create-better-t-stack my-app --frontend web,native ``` -Created by [Aman Varshney](https://github.com/AmanVarshney01) & [Nitish Singh](https://github.com/FgrReloaded) +Create a project with examples: +```bash +npx create-better-t-stack my-app --examples todo,ai +``` diff --git a/apps/cli/src/helpers/post-installation.ts b/apps/cli/src/helpers/post-installation.ts index 7fda3a9..45679de 100644 --- a/apps/cli/src/helpers/post-installation.ts +++ b/apps/cli/src/helpers/post-installation.ts @@ -1,4 +1,4 @@ -import { log } from "@clack/prompts"; +import { note } from "@clack/prompts"; import pc from "picocolors"; import type { ProjectAddons, @@ -42,8 +42,8 @@ export function displayPostInstallInstructions( const hasNativeFrontend = frontends?.includes("native"); const hasFrontend = hasWebFrontend || hasNativeFrontend; - log.info(`${pc.bold("Next steps:")} -${pc.cyan("1.")} ${cdCmd} + note( + `${pc.cyan("1.")} ${cdCmd} ${!depsInstalled ? `${pc.cyan("2.")} ${packageManager} install\n` : ""}${pc.cyan(depsInstalled ? "2." : "3.")} ${runCmd} dev ${pc.bold("Your project will be available at:")} @@ -52,15 +52,17 @@ ${ ? `${hasWebFrontend ? `${pc.cyan("•")} Frontend: http://localhost:3001\n` : ""}` : `${pc.yellow("NOTE:")} You are creating a backend-only app (no frontend selected)\n` }${pc.cyan("•")} API: http://localhost:3000 -${nativeInstructions ? `\n${nativeInstructions.trim()}` : ""}${databaseInstructions ? `\n${databaseInstructions.trim()}` : ""}${tauriInstructions ? `\n${tauriInstructions.trim()}` : ""}${lintingInstructions ? `\n${lintingInstructions.trim()}` : ""}`); +${nativeInstructions ? `\n${nativeInstructions.trim()}` : ""}${databaseInstructions ? `\n${databaseInstructions.trim()}` : ""}${tauriInstructions ? `\n${tauriInstructions.trim()}` : ""}${lintingInstructions ? `\n${lintingInstructions.trim()}` : ""}`, + "Next steps", + ); } function getNativeInstructions(): string { - return `${pc.yellow("NOTE:")} If the Expo app cannot connect to the server, update the EXPO_PUBLIC_SERVER_URL in apps/native/.env to use your local IP address instead of localhost:\n${pc.dim("EXPO_PUBLIC_SERVER_URL=http://192.168.0.103:3000")}\n`; + return `${pc.yellow("NOTE:")} If the Expo app cannot connect to the server, update the EXPO_PUBLIC_SERVER_URL in apps/native/.env to use your local IP address instead of localhost:\n${"EXPO_PUBLIC_SERVER_URL=http://192.168.0.103:3000"}\n`; } function getLintingInstructions(runCmd?: string): string { - return `${pc.bold("Linting and formatting:")}\n${pc.cyan("•")} Format and lint fix: ${pc.dim(`${runCmd} check`)}\n\n`; + return `${pc.bold("\nLinting and formatting:")}\n${pc.cyan("•")} Format and lint fix: ${`${runCmd} check`}\n\n`; } function getDatabaseInstructions( @@ -75,7 +77,7 @@ function getDatabaseInstructions( if (database === "sqlite") { instructions.push( `${pc.yellow("NOTE:")} Turso support with Prisma is in Early Access and requires additional setup.`, - `${pc.dim("Learn more at: https://www.prisma.io/docs/orm/overview/databases/turso")}`, + `${"Learn more at: https://www.prisma.io/docs/orm/overview/databases/turso"}`, ); } @@ -85,24 +87,16 @@ function getDatabaseInstructions( ); } - instructions.push( - `${pc.cyan("•")} Apply schema: ${pc.dim(`${runCmd} db:push`)}`, - ); - instructions.push( - `${pc.cyan("•")} Database UI: ${pc.dim(`${runCmd} db:studio`)}`, - ); + instructions.push(`${pc.cyan("•")} Apply schema: ${`${runCmd} db:push`}`); + instructions.push(`${pc.cyan("•")} Database UI: ${`${runCmd} db:studio`}`); } else if (orm === "drizzle") { if (database === "sqlite") { instructions.push( - `${pc.cyan("•")} Start local DB: ${pc.dim(`cd apps/server && ${runCmd} db:local`)}`, + `${pc.cyan("•")} Start local DB: ${`cd apps/server && ${runCmd} db:local`}`, ); } - instructions.push( - `${pc.cyan("•")} Apply schema: ${pc.dim(`${runCmd} db:push`)}`, - ); - instructions.push( - `${pc.cyan("•")} Database UI: ${pc.dim(`${runCmd} db:studio`)}`, - ); + instructions.push(`${pc.cyan("•")} Apply schema: ${`${runCmd} db:push`}`); + instructions.push(`${pc.cyan("•")} Database UI: ${`${runCmd} db:studio`}`); } return instructions.length @@ -111,5 +105,5 @@ function getDatabaseInstructions( } function getTauriInstructions(runCmd?: string): string { - return `${pc.bold("Desktop app with Tauri:")}\n${pc.cyan("•")} Start desktop app: ${pc.dim(`cd apps/web && ${runCmd} desktop:dev`)}\n${pc.cyan("•")} Build desktop app: ${pc.dim(`cd apps/web && ${runCmd} desktop:build`)}\n${pc.yellow("NOTE:")} Tauri requires Rust and platform-specific dependencies. See: ${pc.dim("https://v2.tauri.app/start/prerequisites/")}\n\n`; + return `${pc.bold("Desktop app with Tauri:")}\n${pc.cyan("•")} Start desktop app: ${`cd apps/web && ${runCmd} desktop:dev`}\n${pc.cyan("•")} Build desktop app: ${`cd apps/web && ${runCmd} desktop:build`}\n${pc.yellow("NOTE:")} Tauri requires Rust and platform-specific dependencies. See: ${"https://v2.tauri.app/start/prerequisites/"}\n\n`; }