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`}
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.
@@ -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:
{`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`}
- 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
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
Provide a detailed README.md
Include usage examples
-
Document available scripts and commands
+
Document available uv run commands and Makefile targets
Explain any non-standard configurations
@@ -506,7 +500,7 @@ graph TD
Ensure compatibility with supported extensions
Use the latest stable versions of dependencies
-
Test with different Node.js versions
+
Test with different Python versions
Consider cross-platform compatibility
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.
@@ -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.
- Dependencies β package/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).
- 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.
Incompatibilities β extensions declare incompatibleWith slugs so the CLI
@@ -219,12 +180,12 @@ export default function DocsExtensionsPage() {
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() {
- 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() {
{`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`}
- 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:
- 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.
@@ -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.
@@ -324,7 +370,7 @@ export default function DocsPage() {
Installation
- npm, Homebrew, AUR, and Docker install options
+ uvx/PyPI, Homebrew, AUR, and Docker install options
diff --git a/src/app/docs/templates/customization/TemplateCustomizationClientPage.tsx b/src/app/docs/templates/customization/TemplateCustomizationClientPage.tsx
index 5ab5272..03a3452 100644
--- a/src/app/docs/templates/customization/TemplateCustomizationClientPage.tsx
+++ b/src/app/docs/templates/customization/TemplateCustomizationClientPage.tsx
@@ -20,9 +20,9 @@ export default function TemplateCustomizationClientPage() {
Customization Basics
- Templates provided by create-awesome-node-app are designed to be customizable. This guide will show you
- how to modify templates to suit your specific requirements, from simple configuration changes to more
- advanced customizations.
+ Templates provided by create-awesome-python-app are designed to be customizable. This guide shows how to
+ adapt generated Python projects β from project layout and tooling configuration to dependencies and
+ environment settings.
- After creating a project with create-awesome-node-app, you can modify its structure to better suit
- your needs. Here are some common customizations:
+ After scaffolding, reorganize modules to match your domain. Common patterns across CPA templates:
-
Reorganizing Components
+
Feature modules
- You can reorganize the components directory structure to better match your project's architecture.
+ Group routers, services, and schemas by feature (e.g. src/users/,{' '}
+ src/billing/).
-
Adding New Directories
+
Shared core
- Create additional directories for features, contexts, hooks, or other code organization patterns.
+ Keep cross-cutting code in src/core/ or packages/common/ for workspace
+ templates.
-
Modifying the App Structure
+
Settings layout
- Adjust the app directory structure to implement your desired routing and page organization.
+ Centralize configuration with pydantic-settings; extend the generated settings class rather than
+ scattering env reads.
-
Customizing Public Assets
+
Tests mirror src
- Add or modify files in the public directory to include your own static assets.
+ Place tests under tests/ mirroring the package layout for easier navigation.
- The React Vite template uses moduleResolution: "Bundler" and{' '}
- module: "esnext" with ignoreDeprecations: "6.0" for TypeScript 5.x
- compatibility. You can customize path aliases, compiler options, or add additional include/exclude
- patterns.
+ Adjust Python version bounds, add runtime deps with uv add, and extend dev tooling in{' '}
+ [dependency-groups].
- Templates use the ESLint flat config format (eslint.config.mjs), which is the
- standard from ESLint v9+. Modify rules, add plugins, or adjust ignored paths to match your team's
- preferences.
+ Run uv run ruff check . and uv run ruff format . after changing rules.
- Customize Vite configuration to adjust build settings, add plugins (e.g. PWA, SVG), or configure
- the development server port and host.
+ FastAPI templates use httpx.AsyncClient fixtures; Django templates use pytest-django
+ markers β extend rather than replace them.
You can add, remove, or update dependencies to tailor the project to your needs:
+
Manage dependencies with uv after scaffolding:
- {`# Add a new dependency
-npm install axios
+ {`# Add a runtime dependency
+uv add httpx
-# Add a development dependency
-npm install --save-dev jest @testing-library/react
+# Add a dev dependency
+uv add --dev pytest-asyncio
-# Update a dependency
-npm update react
+# Update the lockfile after manual pyproject edits
+uv sync
# Remove a dependency
-npm uninstall unused-package`}
+uv remove unused-package`}
- After modifying dependencies, you may need to update your project's configuration files to properly
- integrate the new packages.
+ After adding packages that need app wiring (ORM, Redis, Sentry), follow the extension or template docs
+ for initialization hooks.
- If you want to add extensions to an existing project created with create-awesome-node-app, you have a
- few options:
+ If you want extensions on an existing project, you can manually port the files from{' '}
+
+ cpa-templates/extensions
+ {' '}
+ or re-scaffold with the desired combination:
- Manual Integration: You can manually add the files and dependencies from the
- extension to your project.
+ Manual integration: Copy extension files and merge pyproject.toml{' '}
+ fragments, then run uv sync.
- Create a New Project: Create a new project with the same template and the desired
- extensions, then migrate your code.
+ Re-scaffold: Create a fresh project with the same template plus extensions, then
+ migrate your application code.
- Use Git: If your project is a Git repository, you can create a new branch, add the
- extension, and then merge the changes.
+ Git branch: Apply extension changes on a branch and merge after review.
Note
- Currently, create-awesome-node-app doesn't support adding extensions to existing projects through
- the CLI. This feature may be added in future versions.
+ The CLI applies extensions at scaffold time only. Post-create extension application may be added in
+ future releases.
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 (
-
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=`}
+ 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() {
@@ -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() {
@@ -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: