diff --git a/.cspell.json b/.cspell.json index 0291cd7..97f66fc 100644 --- a/.cspell.json +++ b/.cspell.json @@ -3,9 +3,12 @@ "language": "en", "words": [ "addons", + "addopts", "AGENTS", "alstr", "animatedgradient", + "asyncio", + "asyncpg", "Behaviour", "bunx", "celery", @@ -29,6 +32,7 @@ "dangerfile", "deployables", "django", + "docstrings", "dompurify", "dotenv", "Elipssis", @@ -38,8 +42,10 @@ "extraida", "extraída", "fastapi", + "filterwarnings", "grype", "hookform", + "httpx", "interactiva", "jeremias", "jscoverage", @@ -65,12 +71,14 @@ "pgvector", "picomatch", "pids", + "pipx", "PKGBUILD", "preconfigured", "pydantic", + "pyenv", "pygobject", - "PyPI", "pypi", + "PyPI", "pyproject", "pyright", "pytest", @@ -90,11 +98,12 @@ "Supabase", "syft", "tailwindcss", + "testpaths", "transpiling", "trivy", "trufflehog", - "Turborepo", "turborepo", + "Turborepo", "typer", "ulises", "ulisesjeremias", @@ -104,6 +113,8 @@ "uvx", "vaul", "vercel", + "viewsets", + "virtualenv", "vite", "vitest", "vlang", diff --git a/src/app/docs/advanced/usage/page.tsx b/src/app/docs/advanced/usage/page.tsx index 1893011..24faca4 100644 --- a/src/app/docs/advanced/usage/page.tsx +++ b/src/app/docs/advanced/usage/page.tsx @@ -7,8 +7,8 @@ import { Button } from '@/components/ui/button'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; export const metadata = { - title: 'Advanced Usage | Create Awesome Node App Documentation', - description: 'Advanced usage guide for create-awesome-node-app', + title: 'Advanced Usage | Create Awesome Python App Documentation', + description: 'Advanced usage guide for create-awesome-python-app', }; export default function AdvancedUsagePage() { @@ -18,85 +18,73 @@ export default function AdvancedUsagePage() {

Advanced Usage

- Advanced techniques and configurations for create-awesome-node-app + Advanced techniques and configurations for create-awesome-python-app

-
-

Using Different Package Managers

+
+

Working with uv in Generated Projects

- create-awesome-node-app supports multiple package managers. You can choose the one that best fits your - workflow: + Every CPA template is uv-first: dependencies live in pyproject.toml, the lockfile is{' '} + uv.lock, and day-to-day commands go through uv run.

- + - npm - Yarn - pnpm + uv sync + uv run + uv add - +
-                    {`# Create a new project with npm
-npx create-awesome-node-app my-app
+                    {`# Create a project (uv sync runs automatically unless --no-install)
+uvx create-awesome-python-app@latest my-app --template fastapi-starter
 
-# Specify package manager explicitly
-npx create-awesome-node-app my-app --use-npm
-
-# Install dependencies
+# Install or refresh dependencies later
 cd my-app
-npm install
-
-# Run development server
-npm run dev`}
+uv sync`}
                   
- +
-                    {`# Create a new project with Yarn
-yarn create awesome-node-app my-app
-
-# Specify package manager explicitly
-npx create-awesome-node-app my-app --use-yarn
-
-# Install dependencies
+                    {`# Run the dev server (FastAPI example)
 cd my-app
-yarn
+uv run uvicorn app.main:app --reload
+
+# Run tests
+uv run pytest
 
-# Run development server
-yarn dev`}
+# Run lint and type checks
+uv run ruff check .
+uv run mypy .`}
                   
- +
-                    {`# Create a new project with pnpm
-pnpm create awesome-node-app my-app
+                    {`# Add a runtime dependency
+uv add httpx
 
-# Specify package manager explicitly
-npx create-awesome-node-app my-app --use-pnpm
+# Add a dev dependency
+uv add --dev pytest-cov
 
-# Install dependencies
-cd my-app
-pnpm install
-
-# Run development server
-pnpm dev`}
+# Remove a dependency
+uv remove unused-package`}
                   
- Package Manager Detection + Skip automatic install - create-awesome-node-app automatically detects the package manager you're using. If you want to override - this behavior, use the --use-yarn or --use-pnpm flag. + Use --no-install when scaffolding if you want to review pyproject.toml before + running uv sync yourself.
@@ -117,19 +105,20 @@ pnpm dev`}

-                    npx create-awesome-node-app my-app --addons github-setup
+                    uvx create-awesome-python-app@latest my-app --template fastapi-starter --addons github-setup
                   
-

Docker Compose

+

Docker

- The Docker Compose Setup extension adds Docker environments for development and production. + The python-docker extension adds a Dockerfile and Compose files for local and production + container runs.

-                    npx create-awesome-node-app my-app --addons docker-compose-setup
+                    uvx create-awesome-python-app@latest my-app --template fastapi-starter --addons python-docker
                   
@@ -137,7 +126,7 @@ pnpm dev`}

Deployment Workflow

-

Here's a typical deployment workflow for a create-awesome-node-app project:

+

Here's a typical deployment workflow for a create-awesome-python-app project:

Monorepo Setup

-

create-awesome-node-app offers a Turborepo Boilerplate template for monorepo setups:

+

+ create-awesome-python-app offers the uv-workspace-starter template for Python monorepos with a + single lockfile and shared tooling: +

-                {`# Create a new monorepo project
-npx create-awesome-node-app my-monorepo --template turborepo-boilerplate
+                {`# Create a new uv workspace monorepo
+uvx create-awesome-python-app@latest my-monorepo --template uv-workspace-starter
 
 # Navigate to the project
 cd my-monorepo
 
-# Run all packages in development mode
-npm run dev
+# Sync all workspace members
+uv sync
+
+# Run a member app (example)
+uv run --package apps-api uvicorn app.main:app --reload
 
-# Build all packages
-npm run build`}
+# Run tests across the workspace
+uv run pytest`}
               
-

The Turborepo Boilerplate template includes:

+

The uv workspace starter includes:

@@ -209,10 +204,10 @@ npm run build`} dependencies manually

- npx create-awesome-node-app my-app --no-install + uvx create-awesome-python-app my-app --no-install
- cd my-app && npm install + cd my-app && uv sync
@@ -231,10 +226,10 @@ npm run build`} Solution: List available templates and extensions to check the correct names

- npx create-awesome-node-app --list-templates + uvx create-awesome-python-app --list-templates
- npx create-awesome-node-app --list-addons + uvx create-awesome-python-app --list-addons
@@ -254,7 +249,7 @@ npm run build`} interactive mode

- npx create-awesome-node-app my-app --interactive + uvx create-awesome-python-app my-app --interactive
@@ -278,15 +273,15 @@ npm run build`}

Available Templates and Extensions

-

create-awesome-node-app offers a variety of templates and extensions. Here's how to list them:

+

create-awesome-python-app offers a variety of templates and extensions. Here's how to list them:

                 {`# List all available templates
-npx create-awesome-node-app --list-templates
+uvx create-awesome-python-app --list-templates
 
 # List all available extensions
-npx create-awesome-node-app --list-addons`}
+uvx create-awesome-python-app --list-addons`}
               
@@ -300,7 +295,7 @@ npx create-awesome-node-app --list-addons`}

The interactive mode provides a guided experience for creating projects:

-
{`npx create-awesome-node-app my-app --interactive`}
+
{`uvx create-awesome-python-app my-app --interactive`}

In interactive mode, you'll be prompted to:

diff --git a/src/app/docs/agents-md/page.tsx b/src/app/docs/agents-md/page.tsx index 4e22454..bacb1a4 100644 --- a/src/app/docs/agents-md/page.tsx +++ b/src/app/docs/agents-md/page.tsx @@ -6,7 +6,7 @@ import { Button } from '@/components/ui/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; export const metadata = { - title: 'AGENTS.md | Create Awesome Node App', + title: 'AGENTS.md | Create Awesome Python App', description: 'Guide to the generated AGENTS.md contract for AI assistants.', }; @@ -80,10 +80,10 @@ export default function AgentsMdPage() { - Generated Example (React Template) + Generated Example (FastAPI Template) - A trimmed example of the AGENTS.md shipped with a React Vite template. + A trimmed example of the AGENTS.md shipped with the FastAPI starter template. @@ -98,62 +98,61 @@ Humans: read CONTRIBUTING.md and the documents under docs/. | Topic | Source of Truth | |-------|-----------------| | Project architecture | docs/PROJECT_STRUCTURE.md | -| Component patterns | docs/COMPONENT_GUIDELINES.md | -| Performance guidance | docs/PERFORMANCE.md | -| State management approach | docs/STATE_MANAGEMENT.md | -| Styling + design system | docs/STYLING.md | +| API route patterns | docs/API_GUIDELINES.md | +| Settings & env vars | docs/CONFIGURATION.md | +| Database / ORM usage | docs/DATABASE.md | | Testing strategy | docs/TESTING.md | -| Accessibility notes | docs/ACCESSIBILITY.md | +| Deployment notes | docs/DEPLOYMENT.md | ## 2. Operating Principles (AI Perspective) - Documentation-first - Reuse-before-build -- Type safety always (no unvetted any) +- Type hints always (mypy/pyright clean) - Deterministic, incremental changes - Explicit assumption logging -## 3. AI Execution Protocol (React Feature Work) +## 3. AI Execution Protocol (FastAPI Feature Work) -When asked to add/modify UI logic: -1. Locate relevant feature folder (src/features/*) or propose new if justified +When asked to add/modify API behavior: +1. Locate the relevant router or service module under src/ 2. Read related docs/* referenced above -3. Prefer extending existing component patterns +3. Prefer extending existing dependency-injection patterns 4. Show proposed file tree + diff plan BEFORE writing code -5. After code: list follow-up validation steps (lint, type check, test) +5. After code: list follow-up validation steps (ruff, mypy, pytest) ## 4. Guardrails (Must Enforce) -- Do NOT fabricate file paths, component APIs, or library versions -- Do NOT remove existing accessibility props (aria-*, alt, role) without replacement rationale -- Do NOT introduce global mutable singletons for state—prefer documented patterns +- Do NOT fabricate file paths, settings keys, or package versions +- Do NOT bypass pydantic validation or typed settings without rationale +- Do NOT add sync I/O inside async route handlers without explicit approval - ALWAYS flag large dependency additions (>1 lib) for human confirmation -- ALWAYS surface potential performance regressions (unmemoized large lists, heavy renders) +- ALWAYS surface potential performance regressions (N+1 queries, blocking calls) -## 5. Component Creation Checklist +## 5. Endpoint Creation Checklist -- Typed props interface exported -- Meaningful name + colocated index.ts re-export (if pattern exists) -- Accessibility reviewed (labels, semantics) -- Story / example or usage snippet considered -- Test file added or explicitly deferred with reason +- Typed request/response models (Pydantic v2) +- Router registered in the app factory +- Settings read via pydantic-settings, not raw os.environ +- Test added or explicitly deferred with reason +- OpenAPI tags and summaries updated when applicable ## 6. When the AI Should Ask or Refuse -Ask for clarification if: feature scope unclear, conflicting patterns, missing target directory. -Refuse if: asked to bypass validation, remove type safety, duplicate existing documented component. +Ask for clarification if: feature scope unclear, conflicting patterns, missing target module. +Refuse if: asked to bypass validation, remove type checks, or duplicate existing documented endpoints. ## 7. Post-Change Assistant Report Return a bullet summary: - Files touched (concise) - New dependencies (if any) -- Type/lint status +- ruff/mypy/pytest status - Suggested manual QA steps - Deferred items (tests, docs) --- -Maintained automatically by create-awesome-node-app React template provisioning. +Maintained automatically by create-awesome-python-app FastAPI template provisioning. Humans: stop reading—go to CONTRIBUTING.md + docs/. `} @@ -174,7 +173,8 @@ Humans: stop reading—go to CONTRIBUTING.md + docs/.
  • Add domain-specific escalation triggers (security, data, billing)
  • Reference internal design system docs instead of re-stating variants
  • - Include CI scripts or task runners (e.g. pnpm test:unit) if not obvious + Include CI scripts or task runners (e.g. uv run pytest, uv run ruff check .) + if not obvious
  • Keep tone imperative and concise—optimize for machine parsing + embedding
  • diff --git a/src/app/docs/contributing/page.tsx b/src/app/docs/contributing/page.tsx index c3a6bb0..7c257e9 100644 --- a/src/app/docs/contributing/page.tsx +++ b/src/app/docs/contributing/page.tsx @@ -6,8 +6,8 @@ import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert'; import { Button } from '@/components/ui/button'; export const metadata = { - title: 'Contributing | Create Awesome Node App Documentation', - description: 'Learn how to contribute templates and extensions to create-awesome-node-app', + title: 'Contributing | Create Awesome Python App Documentation', + description: 'Learn how to contribute templates and extensions to create-awesome-python-app', }; export default function ContributingPage() { @@ -15,7 +15,7 @@ export default function ContributingPage() {
    -

    Contributing to create-awesome-node-app

    +

    Contributing to create-awesome-python-app

    Learn how to contribute templates and extensions to the project

    @@ -24,7 +24,7 @@ export default function ContributingPage() {

    Contribution Overview

    -

    The create-awesome-node-app project welcomes contributions from the community. You can contribute by:

    +

    The create-awesome-python-app project welcomes contributions from the community. You can contribute by:

    • Adding new templates
    • Adding new extensions
    • @@ -54,7 +54,7 @@ graph TD

      Contributing New Templates

      - Templates are the foundation of create-awesome-node-app. They provide the initial structure and + Templates are the foundation of create-awesome-python-app. They provide the initial structure and configuration for new projects. This guide will walk you through the process of creating and contributing a new template.

      @@ -76,15 +76,15 @@ graph TD
                           {`templates/
       └── your-template-name/
      -    ├── public/           # Static assets
      -    ├── src/              # Source code
      -    │   ├── components/   # React components (for frontend templates)
      -    │   ├── lib/          # Utility functions and libraries
      -    │   └── styles/       # CSS and styling
      -    ├── .gitignore        # Git ignore file
      -    ├── package.json      # Package dependencies and scripts
      +    ├── src/              # Application source (layout varies by template)
      +    │   ├── app/          # FastAPI/Django modules
      +    │   └── ...
      +    ├── tests/            # pytest suite
      +    ├── .gitignore
      +    ├── pyproject.toml    # uv project metadata, scripts, and dependencies
      +    ├── uv.lock           # Lockfile (generated after uv sync)
           ├── README.md         # Template documentation
      -    └── tsconfig.json     # TypeScript configuration (if applicable)`}
      +    └── AGENTS.md         # AI assistant contract`}
                         
    @@ -110,7 +110,7 @@ graph TD "name": "Your Template Name", "slug": "your-template-name", "description": "A concise description of your template", - "url": "https://github.com/Create-Node-App/cna-templates/tree/main/templates/your-template-name", + "url": "https://github.com/Create-Python-App/cpa-templates/tree/main/templates/your-template-name", "type": "template-type", "category": "category-slug", "labels": ["Label1", "Label2", "Label3"] @@ -135,7 +135,8 @@ graph TD url: The URL to your template in the repository
  • - type: The type of template (e.g., "react", "nestjs-backend", "nextjs") + type: The type of template (e.g., "fastapi-backend", "django-backend", + "cli-app", "celery-worker", "uv-workspace")
  • category: The category slug from the categories section @@ -207,19 +208,19 @@ graph TD Submitting Your Template

    - Once your template is ready, you can submit it for inclusion in the create-awesome-node-app project: + Once your template is ready, you can submit it for inclusion in the create-awesome-python-app project:

    1. Fork the repository: Create a fork of the{' '} - cna-templates repository + cpa-templates repository {' '} on GitHub.
    2. @@ -272,11 +273,9 @@ graph TD
                           {`extensions/
       └── your-extension-name/
      -    ├── files/           # Files to be added to the template
      -    │   ├── src/         # Source files to be added
      -    │   └── ...          # Other files
      -    ├── dependencies.json # Dependencies to be added to package.json
      -    ├── scripts.json     # Scripts to be added to package.json
      +    ├── files/           # Files to be added to or merged into the template
      +    ├── pyproject/       # Optional dependency fragments for pyproject.toml merge
      +    ├── extension.json   # Metadata, compatibility, and merge rules
           └── README.md        # Extension documentation`}
                         
  • @@ -302,7 +301,7 @@ graph TD "name": "Your Extension Name", "slug": "your-extension-name", "description": "A concise description of your extension", - "url": "https://github.com/Create-Node-App/cna-templates/tree/main/extensions/your-extension-name", + "url": "https://github.com/Create-Python-App/cpa-templates/tree/main/extensions/your-extension-name", "type": ["template-type1", "template-type2"], "category": "Extension Category", "labels": ["Label1", "Label2", "Label3"] @@ -331,7 +330,8 @@ graph TD of strings)
  • - category: The category of the extension (e.g., "UI", "State Management", "Tooling") + category: The category of the extension (e.g., "containers", "database", + "observability", "security", "ci")
  • labels: Keywords that describe your extension @@ -358,12 +358,12 @@ graph TD the template.
  • - Define dependencies: Create a dependencies.json file listing any npm - packages your extension requires. + Define dependencies: Declare Python packages your extension adds in a{' '} + pyproject/ fragment or equivalent merge file consumed by the CLI.
  • - Add scripts: If your extension needs to add scripts to package.json, - create a scripts.json file. + Add scripts or tasks: If your extension needs Makefile targets or documented{' '} + uv run commands, include them in the extension README and any task runner config.
  • Document your extension: Create a README.md that explains how to use your extension @@ -373,23 +373,17 @@ graph TD
    -                    {`// Example dependencies.json
    -{
    -  "dependencies": {
    -    "axios": "^1.3.4",
    -    "react-query": "^3.39.3"
    -  },
    -  "devDependencies": {
    -    "@types/axios": "^0.14.0"
    -  }
    -}
    -
    -// Example scripts.json
    -{
    -  "scripts": {
    -    "api:generate": "openapi-generator-cli generate -i api-spec.yaml -g typescript-axios -o src/api"
    -  }
    -}`}
    +                    {`# Example pyproject dependency fragment (conceptual)
    +[project]
    +dependencies = [
    +  "httpx>=0.27",
    +  "sqlalchemy>=2.0",
    +]
    +
    +[dependency-groups]
    +dev = [
    +  "pytest-cov>=5.0",
    +]`}
                       
  • @@ -424,7 +418,7 @@ graph TD
                         {`// Example of specifying multiple compatible template types
    -"type": ["react", "nextjs", "webextension-react"]`}
    +"type": ["fastapi-backend", "django-backend", "cli-app"]`}
                       
    @@ -442,12 +436,12 @@ graph TD
  • Fork the repository: Create a fork of the{' '} - cna-templates repository + cpa-templates repository {' '} on GitHub.
  • @@ -484,10 +478,10 @@ graph TD

    Code Quality

      -
    • Include linting and formatting configurations
    • -
    • Set up TypeScript for type safety
    • -
    • Add comprehensive comments where necessary
    • -
    • Follow best practices for the technologies used
    • +
    • Include Ruff and pytest configuration where applicable
    • +
    • Use type hints and optional mypy/pyright settings
    • +
    • Add comprehensive docstrings where behavior is non-obvious
    • +
    • Follow Python and framework best practices (FastAPI, Django, Typer, Celery)
    @@ -496,7 +490,7 @@ graph TD @@ -506,7 +500,7 @@ graph TD diff --git a/src/app/docs/extensions/page.tsx b/src/app/docs/extensions/page.tsx index fef6574..279aa0d 100644 --- a/src/app/docs/extensions/page.tsx +++ b/src/app/docs/extensions/page.tsx @@ -1,19 +1,4 @@ -import { - ArrowLeft, - ArrowRight, - Cloud, - Code, - Database, - Globe, - Layers, - Monitor, - Package, - Palette, - Shield, - TestTube, - Wrench, - Zap, -} from 'lucide-react'; +import { ArrowLeft, ArrowRight, Cloud, Code, Container, Database, Monitor, Shield, Terminal, Wrench } from 'lucide-react'; import type { Metadata } from 'next'; import Link from 'next/link'; @@ -21,14 +6,14 @@ import { Button } from '@/components/ui/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; export const metadata: Metadata = { - title: 'Extensions | Create Awesome Node App Documentation', + title: 'Extensions | Create Awesome Python App Documentation', description: - 'Learn about extensions and how to add features like state management, testing, and UI libraries to your project.', + 'Learn about extensions and how to add Docker, Postgres, observability, auth, and CI tooling to your Python project.', alternates: { canonical: '/docs/extensions' }, openGraph: { - title: 'Extensions | Create Awesome Node App Documentation', + title: 'Extensions | Create Awesome Python App Documentation', description: - 'Learn about extensions and how to add features like state management, testing, and UI libraries to your project.', + 'Learn about extensions and how to add Docker, Postgres, observability, auth, and CI tooling to your Python project.', url: '/docs/extensions', type: 'article', }, @@ -36,76 +21,52 @@ export const metadata: Metadata = { const categories = [ { - name: 'UI', - description: 'Component libraries and design systems.', - icon: , - examples: ['Material UI', 'Tailwind CSS', 'Shadcn/UI', 'Semantic UI', 'Mantine'], - }, - { - name: 'State Management', - description: 'Client-side state solutions.', - icon: , - examples: ['Zustand', 'Redux Toolkit', 'Recoil', 'Jotai'], - }, - { - name: 'Testing', - description: 'Unit, integration, and end-to-end testing setups.', - icon: , - examples: ['Vitest + Testing Library', 'Jest + Testing Library', 'Playwright'], + name: 'Containers', + description: 'Docker images and Compose stacks for local and production runs.', + icon: , + examples: ['python-docker'], }, { name: 'Database', - description: 'ORM, database adapters, and data persistence utilities.', + description: 'PostgreSQL services, ORM helpers, and migration scaffolding.', icon: , - examples: ['Drizzle + PostgreSQL', 'Drizzle + SQLite', 'Mongoose', 'Prisma'], + examples: ['python-postgres', 'python-sqlalchemy', 'python-redis'], }, { - name: 'Data Fetching', - description: 'API and data synchronization layers.', - icon: , - examples: ['React Query', 'Apollo Client', 'SWR', 'tRPC'], + name: 'Observability', + description: 'Error tracking and production diagnostics.', + icon: , + examples: ['python-sentry'], }, { - name: 'Auth', - description: 'Authentication and authorization integrations.', + name: 'Security', + description: 'Authentication and authorization skeletons.', icon: , - examples: ['NextAuth.js', 'Clerk', 'Auth0', 'Supabase Auth'], - }, - { - name: 'Tooling', - description: 'Developer experience and workflow extensions.', - icon: , - examples: ['Storybook', 'GitHub Setup', 'Million.js', 'Electron'], + examples: ['python-auth-jwt'], }, { - name: 'Deployment', - description: 'Hosting, CI/CD, and infrastructure configurations.', + name: 'CI & GitHub', + description: 'GitHub Actions, lint gates, and repository automation.', icon: , - examples: ['Vercel', 'Docker', 'GitHub Actions', 'Serverless'], + examples: ['github-setup'], }, { - name: 'Monitoring', - description: 'Error tracking, logging, and observability.', - icon: , - examples: ['Sentry', 'OpenTelemetry', 'Datadog', 'LogRocket'], + name: 'Developer Experience', + description: 'Editor integrations and remote development environments.', + icon: , + examples: ['python-devcontainer'], }, { - name: 'Localization', - description: 'Internationalization and translation tooling.', - icon: , - examples: ['i18next', 'react-intl', 'next-intl', 'Lingui'], - }, - { - name: 'API', - description: 'API clients, code generation, and integration utilities.', + name: 'API & Services', + description: 'Backend-focused add-ons for FastAPI and similar templates.', icon: , - examples: ['Axios', 'Ky', 'OpenAPI Generator', 'GraphQL Codegen'], + examples: ['python-sqlalchemy', 'python-redis', 'python-auth-jwt'], }, { - name: 'Cross Platform', - description: 'Extensions targeting multiple platforms simultaneously.', - icon: , - examples: ['Electron', 'Tauri', 'Capacitor', 'React Native Web'], + name: 'Tooling', + description: 'Cross-cutting workflow improvements for Python projects.', + icon: , + examples: ['github-setup', 'python-devcontainer'], }, ]; @@ -120,7 +81,7 @@ export default function DocsExtensionsPage() { template {' '} - to layer in additional features — UI libraries, state management, testing setups, and more. + to layer in additional features — Docker packaging, Postgres, observability, auth, CI, and more.

    @@ -134,15 +95,15 @@ export default function DocsExtensionsPage() {

    Each extension declares which template types it is compatible with (e.g.{' '} - react, nestjs-backend), so the CLI only shows you relevant options for your - chosen template. + fastapi-backend, django-backend, cli-app), so the CLI only shows + you relevant options for your chosen template.

                     
    -                  npx create-awesome-node-app my-app --template react-vite-boilerplate --addons react-zustand
    -                  react-tailwindcss react-testing-library-with-vitest
    +                  uvx create-awesome-python-app@latest my-app --template fastapi-starter --addons python-docker
    +                  python-postgres github-setup
                     
                   
    @@ -190,8 +151,8 @@ export default function DocsExtensionsPage() {

    How extensions work

    - When the CLI applies an extension it performs a deep merge of the extension's files and{' '} - package.json fields into the scaffolded project: + When the CLI applies an extension it performs a deep merge of the extension's files and{' '} + pyproject.toml fields into the scaffolded project:

      @@ -200,12 +161,12 @@ export default function DocsExtensionsPage() { Filenames ending in .template are processed as EJS templates before being written.
    1. - Dependenciespackage/dependencies.js and{' '} - package/devDependencies.js entries are merged into the project's package.json. + Dependencies — extension dependency lists are merged into the project's{' '} + pyproject.toml (runtime and dev groups).
    2. - Scripts — any scripts defined by the extension are merged with existing - scripts. + Scripts — any task scripts or Makefile targets defined by the extension are merged with + existing project tooling.
    3. Incompatibilities — extensions declare incompatibleWith slugs so the CLI @@ -219,12 +180,12 @@ export default function DocsExtensionsPage() {

      Extensions live in the extensions/ directory of the{' '} - cna-templates + cpa-templates {' '} repository:

      @@ -232,11 +193,9 @@ export default function DocsExtensionsPage() {
                       {`extensions/
       └── your-extension-name/
      -    ├── [src]/            # Source files merged into the project's src/
      -    ├── package/
      -    │   ├── dependencies.js       # Runtime deps to add
      -    │   └── devDependencies.js    # Dev deps to add
      -    ├── package.json      # Extension metadata
      +    ├── files/            # Files merged into the project tree
      +    ├── pyproject/        # Optional dependency fragments for merge
      +    ├── extension.json    # Extension metadata and compatibility
           └── README.md`}
                     
      @@ -246,7 +205,7 @@ export default function DocsExtensionsPage() {

      Listing available extensions

      -                npx create-awesome-node-app --list-addons
      +                uvx create-awesome-python-app --list-addons
                     

      diff --git a/src/app/docs/installation/page.tsx b/src/app/docs/installation/page.tsx index a3c918a..4c9672c 100644 --- a/src/app/docs/installation/page.tsx +++ b/src/app/docs/installation/page.tsx @@ -9,12 +9,14 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/com import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; export const metadata: Metadata = { - title: 'Installation | Create Awesome Node App Documentation', - description: 'Install create-awesome-node-app via npm, Homebrew, AUR, or Docker. Get up and running in seconds.', + title: 'Installation | Create Awesome Python App Documentation', + description: + 'Install create-awesome-python-app via uvx/PyPI, Homebrew, AUR, or Docker. Get up and running in seconds.', alternates: { canonical: '/docs/installation' }, openGraph: { - title: 'Installation | Create Awesome Node App Documentation', - description: 'Install create-awesome-node-app via npm, Homebrew, AUR, or Docker. Get up and running in seconds.', + title: 'Installation | Create Awesome Python App Documentation', + description: + 'Install create-awesome-python-app via uvx/PyPI, Homebrew, AUR, or Docker. Get up and running in seconds.', url: '/docs/installation', type: 'article', }, @@ -22,8 +24,8 @@ export const metadata: Metadata = { const methods = [ { - id: 'npm', - label: 'npm / npx', + id: 'uv', + label: 'uv / PyPI', icon: , recommended: true, }, @@ -54,26 +56,24 @@ export default function InstallationPage() {

      Installation

      - Get create-awesome-node-app running in seconds. Choose the install method that fits your + Get create-awesome-python-app running in seconds. Choose the install method that fits your workflow.

      - {/* Quick start */} No global install required - The fastest way is to use npm create or npx — no global install needed. Node.js - 22+ must be installed. + The fastest way is uvx create-awesome-python-app@latest — no global install needed. Python + 3.12+ is required for generated projects; uv installs the CLI on the fly. - {/* Method tabs */}

      Install methods

      - + {methods.map((m) => ( @@ -88,70 +88,60 @@ export default function InstallationPage() { ))} - {/* npm */} - + - npm / npx + uv / PyPI - Works on macOS, Linux, and Windows. Requires Node.js 22+. + + Works on macOS, Linux, and Windows. Requires{' '} + + uv + + . +
      -

      Run without installing (recommended for one-off use):

      +

      Run without installing (recommended):

      -

      - Shorthand via npm create: -

      +

      Pin a version:

      -

      Install globally (optional):

      +

      Install with pipx (optional):

      - After global install you can run create-awesome-node-app my-app directly. + After install you can run create-awesome-python-app my-app directly.

      -

      Alternative package managers:

      - - - Yarn - pnpm - Bun - - -
      -
      yarn create awesome-node-app my-app
      -
      -
      - -
      -
      pnpm create awesome-node-app my-app
      -
      -
      - -
      -
      bunx create-awesome-node-app my-app
      -
      -
      -
      +

      Install with pip into a virtualenv (optional):

      +
      @@ -164,34 +154,34 @@ export default function InstallationPage() {
      -

      Node.js 22 LTS or later

      +

      Python 3.12 or later

      - Check with node --version. Install via{' '} + Check with python --version. Install via{' '} - fnm + uv python install ,{' '} - Volta + pyenv , or{' '} - nodejs.org + python.org .

      @@ -200,9 +190,18 @@ export default function InstallationPage() {
      -

      npm 11+, yarn, pnpm, or bun

      +

      uv (recommended)

      - npm 11 ships with Node 22. Check with npm --version. + Install from{' '} + + docs.astral.sh/uv + + . Check with uv --version.

      @@ -219,7 +218,6 @@ export default function InstallationPage() { - {/* Homebrew */} @@ -233,34 +231,33 @@ export default function InstallationPage() {

      1. Add the tap:

      2. Install:

      Update to latest version:

      - Homebrew will also install Node.js as a dependency if it is not already present on your system. + Homebrew will also install Python as a dependency if it is not already present on your system.
      - {/* AUR */} @@ -274,36 +271,35 @@ export default function InstallationPage() {

      Using yay:

      Using paru:

      Manual build from PKGBUILD:

      -
      {`git clone https://github.com/Create-Node-App/aur-package.git
      +                      
      {`git clone https://github.com/Create-Python-App/aur-package.git
       cd aur-package
       makepkg -si`}
      - The AUR package installs via npm under the hood. Node.js and npm must be installed as dependencies - (e.g. via the nodejs and npm packages from the official Arch repos). + The AUR package installs from PyPI. Python 3.12+ must be available (via the official Arch{' '} + python package or equivalent).
      - {/* Docker */} @@ -312,7 +308,7 @@ makepkg -si`} Docker - Run without any local Node.js installation. Useful in CI/CD pipelines. + Run without any local Python installation. Useful in CI/CD pipelines. @@ -321,8 +317,8 @@ makepkg -si`}
      {`docker run --rm -it \\
         -v "\${PWD}:/app" -w /app \\
      -  ulisesjeremias/create-awesome-node-app:latest \\
      -  my-app --template react-vite-boilerplate`}
      + ulisesjeremias/create-awesome-python-app:latest \\ + my-app --template fastapi-starter --no-interactive`}
      @@ -330,8 +326,8 @@ makepkg -si`}
      {`docker run --rm -it \\
         -v "\${PWD}:/app" -w /app \\
      -  ulisesjeremias/create-awesome-node-app:0.12.0 \\
      -  my-app --template nestjs-boilerplate --addons drizzle-orm-postgresql`}
      + ulisesjeremias/create-awesome-python-app:0.2.0 \\ + my-app --template fastapi-starter --addons python-docker github-setup --no-interactive`}
      @@ -339,8 +335,8 @@ makepkg -si`}
      {[ { tag: 'latest', desc: 'Always the newest release' }, - { tag: '0.12.0', desc: 'Exact version (reproducible)' }, - { tag: '0.12', desc: 'Latest 0.12.x patch' }, + { tag: '0.2.0', desc: 'Exact version (reproducible)' }, + { tag: '0.2', desc: 'Latest 0.2.x patch' }, { tag: 'v0', desc: 'Latest 0.x.y release' }, ].map(({ tag, desc }) => (
      @@ -352,9 +348,8 @@ makepkg -si`}
      - The container image runs as the non-root node user. Mount your working directory with{' '} - -v {'"${PWD}:/app"'} and set -w /app so the scaffolded project appears - in your current folder. + Mount your working directory with -v {'"${PWD}:/app"'} and set -w /app{' '} + so the scaffolded project appears in your current folder. @@ -363,32 +358,30 @@ makepkg -si`}
      - {/* Verify */}

      Verify the installation

      After installing, confirm the CLI is available and shows the correct version:

      Or list all available templates to confirm the CLI can reach the catalog:

      - {/* Update */}

      Keeping up to date

      {[ - { method: 'npm (global)', cmd: 'npm install -g create-awesome-node-app@latest' }, - { method: 'npx', cmd: 'npx create-awesome-node-app@latest my-app' }, - { method: 'Homebrew', cmd: 'brew upgrade create-awesome-node-app' }, - { method: 'AUR (yay)', cmd: 'yay -Syu create-awesome-node-app' }, + { method: 'uvx', cmd: 'uvx create-awesome-python-app@latest my-app' }, + { method: 'pipx', cmd: 'pipx upgrade create-awesome-python-app' }, + { method: 'Homebrew', cmd: 'brew upgrade create-awesome-python-app' }, + { method: 'AUR (yay)', cmd: 'yay -Syu create-awesome-python-app' }, ].map(({ method, cmd }) => (

      {method}

      @@ -399,15 +392,14 @@ makepkg -si`} ))}

      - When using npx without a global install, always add @latest to ensure you get the - newest version rather than a cached one. + When using uvx without a global install, always add @latest (or a pinned version) + to ensure you get the release you expect rather than a cached one.

      - {/* Nav */}

      Documentation

      -

      Comprehensive guide to using create-awesome-node-app

      +

      Comprehensive guide to using create-awesome-python-app

      -

      Introduction to create-awesome-node-app

      +

      Introduction to create-awesome-python-app

      - create-awesome-node-app is a powerful command-line tool designed to streamline the process of - setting up modern Node.js applications. It provides a collection of carefully crafted templates and + create-awesome-python-app is a powerful command-line tool designed to streamline the process of + setting up modern Python applications. It provides a collection of carefully crafted templates and extensions that help developers quickly bootstrap projects with best practices and optimal configurations.

      @@ -110,34 +110,34 @@ export default function DocsPage() {

      Getting Started

      - Using create-awesome-node-app is straightforward. You can create a new project with a single + Using create-awesome-python-app is straightforward. You can create a new project with a single command:

      - + - npm - Yarn - pnpm + uvx + pipx + Homebrew - +
      -                    npx create-awesome-node-app my-app
      +                    uvx create-awesome-python-app@latest my-app
                         
      - +
      -                    yarn create awesome-node-app my-app
      +                    pipx run create-awesome-python-app my-app
                         
      - +
      -                    pnpm create awesome-node-app my-app
      +                    brew install create-awesome-python-app{'\n'}create-awesome-python-app my-app
                         
      @@ -149,10 +149,15 @@ export default function DocsPage() {

      Prerequisites

      -

      Before using create-awesome-node-app, ensure you have the following installed:

      +

      Before using create-awesome-python-app, ensure you have the following installed:

      Command Options

      @@ -169,9 +174,15 @@ export default function DocsPage() { - -V, --version + --version - Output the version number + Show the CLI version + + + + -i, --info + + Print environment debug info @@ -181,47 +192,46 @@ export default function DocsPage() { - -i, --info + -t, --template <template> - Print environment debug info + Specify a template slug (e.g. fastapi-starter) - --no-install + --addons [extensions...] - Generate package.json without installing dependencies + Apply one or more extensions during scaffolding - -t, --template <template> + --extend <extension> - Specify a template for the created project + Apply a single extension (repeatable) - --addons [extensions...] + --set <key=value> - Specify extensions to apply for the boilerplate generation + Set template or extension variables non-interactively - --use-yarn + --no-install - Use yarn instead of npm or pnpm + Scaffold the project without running uv sync - --use-pnpm + -f, --force - Use pnpm instead of yarn or npm + Overwrite the target directory if it already exists - --interactive + --interactive / --no-interactive - Run in interactive mode to select options (default: false) + Enable or disable the guided template/extension prompts - {/* --ai-tool flag removed (deprecated) */} --list-templates @@ -232,7 +242,43 @@ export default function DocsPage() { --list-addons - List all available addons + List all available extensions + + + + --offline + + Use cached catalog and templates only + + + + --no-cache / --cache-dir + + Control the local template cache location and behavior + + + + --pin / --refresh / --strict-version + + Pin, refresh, or strictly resolve catalog versions + + + + --keep-on-failure + + Keep partially generated files when scaffolding fails + + + + --install-completion / --show-completion + + Install or print shell completion scripts + + + + cache + + Manage the local template cache (subcommand) @@ -250,7 +296,7 @@ export default function DocsPage() {

      Create a project with interactive mode:

      -                    npx create-awesome-node-app my-app --interactive
      +                    uvx create-awesome-python-app my-app --interactive
                         
      @@ -259,7 +305,7 @@ export default function DocsPage() {

      Create a project with a specific template:

      -                    npx create-awesome-node-app my-app --template react-vite-boilerplate
      +                    uvx create-awesome-python-app@latest my-app --template fastapi-starter
                         
      @@ -269,7 +315,7 @@ export default function DocsPage() {
                           
      -                      npx create-awesome-node-app my-app --template react-vite-boilerplate --addons material-ui
      +                      uvx create-awesome-python-app@latest my-app --template fastapi-starter --addons python-docker
                             github-setup
                           
                         
      @@ -280,7 +326,7 @@ export default function DocsPage() {

      List all available templates:

      -                    npx create-awesome-node-app --list-templates
      +                    uvx create-awesome-python-app --list-templates
                         
      @@ -289,7 +335,7 @@ export default function DocsPage() {

      List all available extensions:

      -                    npx create-awesome-node-app --list-addons
      +                    uvx create-awesome-python-app --list-addons
                         
      @@ -300,13 +346,13 @@ export default function DocsPage() {

      Available Templates

      -

      create-awesome-node-app offers a variety of templates for different types of applications:

      +

      create-awesome-python-app offers a variety of templates for different types of applications:

      -

      10 production-ready templates

      +

      5 production-ready templates

      - Frontend, backend, fullstack, monorepo, testing, and web extension starters. + FastAPI, Django API, CLI, Celery worker, and uv workspace monorepo starters.

      @@ -281,136 +215,106 @@ npm uninstall unused-package`}

      Template-Specific Customization

      -

      Different templates have specific customization options. Here are some examples:

      - - - - React Vite - Next.js - NestJS +

      Different CPA templates have distinct extension points:

      + + + + FastAPI + Django + CLI + uv Workspace - +
      -

      React Vite Boilerplate Customization

      -

      The React Vite template provides several customization options:

      +

      FastAPI Starter

      • - Routing: The template uses React Router. You can modify the routes in{' '} - src/App.tsx or create a dedicated router configuration. -
      • -
      • - State Management: Add your preferred state management library using extensions - like Redux, Zustand, or Jotai. + Routers: Register new routers in the app factory; pair with{' '} + python-sqlalchemy or python-auth-jwt when needed.
      • - Styling: The template supports CSS modules by default. You can add other styling - solutions like Tailwind CSS or styled-components. + Settings: Extend the generated Settings class for new env vars.
      • - API Integration: Add Axios or other HTTP clients for API integration. + Observability: Add python-sentry during scaffold or wire Sentry + manually in lifespan hooks.
      -                      {`// Example of customizing React Router in App.tsx
      -import { BrowserRouter, Routes, Route } from 'react-router-dom'
      -import Home from './pages/Home'
      -import About from './pages/About'
      -import Contact from './pages/Contact'
      -import NotFound from './pages/NotFound'
      -
      -function App() {
      -  return (
      -    
      -      
      -        } />
      -        } />
      -        } />
      -        } />
      -      
      -    
      -  )
      -}`}
      +                      {`# app/main.py (simplified)
      +from fastapi import FastAPI
      +from app.api.routes import health, users
      +
      +app = FastAPI(title="my-app")
      +app.include_router(health.router, prefix="/health", tags=["health"])
      +app.include_router(users.router, prefix="/users", tags=["users"])`}
                           
      - +
      -

      Next.js Starter Customization

      -

      The Next.js template offers these customization options:

      +

      Django API

      • - App Router: The template uses Next.js App Router. You can customize the routing - by adding or modifying files in the app directory. + Apps: Add Django apps under the project package; register in{' '} + INSTALLED_APPS.
      • - API Routes: Add or modify API routes in the app/api directory. + DRF: Define serializers and viewsets; keep URL routing in{' '} + urls.py.
      • - Styling: The template supports CSS modules. You can add other styling solutions - like Tailwind CSS. + Database: Pair with python-postgres for local Compose services.
      • +
      +
      +
      + +
      +

      CLI Starter

      +
      • - Authentication: Integrate authentication solutions like NextAuth.js. + Commands: Add Typer subcommands under the generated CLI package. +
      • +
      • + Entry point: Console script is declared in pyproject.toml — update + the target if you rename modules. +
      • +
      • + Testing: Use Typer's CliRunner in pytest for command coverage.
      -                      {`// Example of creating an API route in app/api/hello/route.ts
      -import { NextResponse } from 'next/server'
      +                      {`import typer
       
      -export async function GET() {
      -  return NextResponse.json({ message: 'Hello World!' })
      -}
      +app = typer.Typer()
       
      -// Example of creating a new page in app/about/page.tsx
      -export default function AboutPage() {
      -  return (
      -    
      -

      About Us

      -

      This is the about page.

      -
      - ) -}`} +@app.command() +def greet(name: str) -> None: + typer.echo(f"Hello, {name}!")`}
      - +
      -

      NestJS Boilerplate Customization

      -

      The NestJS template provides these customization options:

      +

      uv Workspace Starter

      • - Modules: Add new modules to organize your application features. + Members: Add libraries under packages/ and apps under{' '} + apps/; declare workspace members in root pyproject.toml.
      • - Controllers: Create controllers to define API endpoints. + Shared tooling: Keep Ruff/pytest config at the workspace root.
      • - Services: Implement business logic in services. -
      • -
      • - Database Integration: Add database support using extensions like Drizzle ORM or - Mongoose. + Running: Use uv run --package <member> ... to target a specific + app or library.
      -
      -
      -                      {`// Example of creating a new module
      -import { Module } from '@nestjs/common';
      -import { UsersController } from './users.controller';
      -import { UsersService } from './users.service';
      -
      -@Module({
      -  controllers: [UsersController],
      -  providers: [UsersService],
      -  exports: [UsersService],
      -})
      -export class UsersModule {}`}
      -                    
      -
      @@ -418,58 +322,42 @@ export class UsersModule {}`}

      Advanced Customization

      -

      For more advanced customization needs, you can modify the core functionality of the template:

      +

      For deeper changes, adjust runtime configuration and deployment artifacts:

      -
      -

      Custom Build Configurations

      -

      You can customize the build process by modifying the build configuration files:

      - -
        -
      • - React Vite: Modify vite.config.ts to customize the build process. -
      • -
      • - Next.js: Customize next.config.js to adjust Next.js behavior. -
      • -
      • - NestJS: Modify nest-cli.json and tsconfig.build.json for - build customization. -
      • -
      -
      -

      Environment Variables

      -

      Customize your application's behavior using environment variables:

      +

      Use .env locally (never commit secrets) and typed settings in code:

      -                    {`# .env file example
      -API_URL=https://api.example.com
      -DEBUG=true
      -NODE_ENV=development
      -
      -# For client-side variables in Next.js
      -NEXT_PUBLIC_SITE_URL=https://example.com`}
      +                    {`# .env.example
      +APP_ENV=development
      +DATABASE_URL=postgresql+asyncpg://user:pass@localhost:5432/app
      +SENTRY_DSN=`}
                         
      -

      Access environment variables in your code:

      -
      -                    {`// In Node.js (server-side)
      -const apiUrl = process.env.API_URL
      -
      -// In React (client-side, Vite)
      -const siteUrl = import.meta.env.VITE_SITE_URL
      +                    {`from pydantic_settings import BaseSettings, SettingsConfigDict
       
      -// In Next.js (client-side)
      -const siteUrl = process.env.NEXT_PUBLIC_SITE_URL`}
      +class Settings(BaseSettings):
      +    model_config = SettingsConfigDict(env_file=".env", extra="ignore")
      +    app_env: str = "development"
      +    database_url: str`}
                         
      + +
      +

      Docker & Compose

      +

      + When you scaffold with python-docker, customize Dockerfile,{' '} + compose.yml, and health checks for your deployment target. Rebuild with{' '} + docker compose up --build after changes. +

      +
      diff --git a/src/app/docs/templates/customization/page.tsx b/src/app/docs/templates/customization/page.tsx index 7aad607..2fe531a 100644 --- a/src/app/docs/templates/customization/page.tsx +++ b/src/app/docs/templates/customization/page.tsx @@ -1,8 +1,8 @@ import TemplateCustomizationClientPage from './TemplateCustomizationClientPage'; export const metadata = { - title: 'Template Customization | Create Awesome Node App Documentation', - description: 'Learn how to customize templates in create-awesome-node-app', + title: 'Template Customization | Create Awesome Python App Documentation', + description: 'Learn how to customize templates in create-awesome-python-app', }; export default function TemplateCustomizationPage() { diff --git a/src/app/docs/templates/page.tsx b/src/app/docs/templates/page.tsx index 3b9c608..a3cda05 100644 --- a/src/app/docs/templates/page.tsx +++ b/src/app/docs/templates/page.tsx @@ -1,4 +1,4 @@ -import { ArrowLeft, ArrowRight, Globe, Layers, Package, Server, Settings, Terminal, Wrench, Zap } from 'lucide-react'; +import { ArrowLeft, ArrowRight, Globe, Layers, Package, Settings, Terminal, Zap } from 'lucide-react'; import type { Metadata } from 'next'; import Link from 'next/link'; @@ -7,28 +7,23 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/com import { getTemplatesData } from '@/lib/data'; export const metadata: Metadata = { - title: 'Templates | Create Awesome Node App Documentation', - description: 'Learn about the available project templates and how to use them with create-awesome-node-app.', + title: 'Templates | Create Awesome Python App Documentation', + description: 'Learn about the available project templates and how to use them with create-awesome-python-app.', alternates: { canonical: '/docs/templates' }, openGraph: { - title: 'Templates | Create Awesome Node App Documentation', - description: 'Learn about the available project templates and how to use them with create-awesome-node-app.', + title: 'Templates | Create Awesome Python App Documentation', + description: 'Learn about the available project templates and how to use them with create-awesome-python-app.', url: '/docs/templates', type: 'article', }, }; const typeIcons: Record = { - 'nestjs-backend': , - nextjs: , - monorepo: , - react: , - 'webextension-react': , - webdriverio: , - 'nextjs-saas-ai': , - remix: , - astro: , - hono: , + 'fastapi-backend': , + 'django-backend': , + 'cli-app': , + 'celery-worker': , + 'uv-workspace': , }; export default async function DocsTemplatesPage() { @@ -41,7 +36,7 @@ export default async function DocsTemplatesPage() {

      Templates

      - Project templates are the starting point for every create-awesome-node-app project. Each + Project templates are the starting point for every create-awesome-python-app project. Each template is a complete, production-ready project skeleton for a specific technology stack.

      @@ -51,7 +46,7 @@ export default async function DocsTemplatesPage() {

      What is a template?

      A template provides the initial directory structure, configuration files, and tooling for a new project. - When you run create-awesome-node-app, you pick a template and optionally layer{' '} + When you run create-awesome-python-app, you pick a template and optionally layer{' '} extensions {' '} @@ -60,7 +55,7 @@ export default async function DocsTemplatesPage() {

      -                npx create-awesome-node-app my-app --template react-vite-boilerplate
      +                uvx create-awesome-python-app@latest my-app --template fastapi-starter
                     
      @@ -78,12 +73,12 @@ export default async function DocsTemplatesPage() {

      The following templates are maintained in the{' '} - cna-templates + cpa-templates {' '} repository. There are currently {templates.length} templates available.

      @@ -132,7 +127,7 @@ export default async function DocsTemplatesPage() {

      -                    npx create-awesome-node-app my-app --interactive
      +                    uvx create-awesome-python-app my-app --interactive
                         
      @@ -145,8 +140,8 @@ export default async function DocsTemplatesPage() {
                           
      -                      npx create-awesome-node-app my-app --template react-vite-boilerplate --addons react-zustand
      -                      react-testing-library-with-vitest
      +                      uvx create-awesome-python-app@latest my-app --template fastapi-starter --addons python-docker
      +                      python-postgres
                           
                         
      @@ -156,7 +151,7 @@ export default async function DocsTemplatesPage() {

      List all templates

      -                    npx create-awesome-node-app --list-templates
      +                    uvx create-awesome-python-app --list-templates
                         
      @@ -166,20 +161,20 @@ export default async function DocsTemplatesPage() {

      Template structure

      - Every template lives in the templates/ directory of the cna-templates repository and follows + Every template lives in the templates/ directory of the cpa-templates repository and follows this layout:

                       {`templates/
       └── your-template-name/
      -    ├── src/              # Source code
      -    ├── public/           # Static assets (frontend templates)
      +    ├── src/              # Application source (or app/ for Django)
      +    ├── tests/            # pytest suite
           ├── .gitignore
      -    ├── package.json
      +    ├── pyproject.toml    # uv project metadata and dependencies
      +    ├── uv.lock           # Lockfile (generated)
           ├── README.md
      -    ├── AGENTS.md         # AI assistant contract
      -    └── tsconfig.json`}
      +    └── AGENTS.md         # AI assistant contract`}