Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .cspell.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,10 +40,11 @@
"esbuild",
"eslintcache",
"extraida",
"extraída",
"extra\u00edda",
"fastapi",
"filterwarnings",
"grype",
"gunicorn",
"hookform",
"httpx",
"interactiva",
Expand DownExpand Up@@ -87,6 +88,7 @@
"Reakit",
"recharts",
"ruff",
"runserver",
"saas",
"Selenoid",
"shadcn",
Expand Down
4 changes: 2 additions & 2 deletions src/app/docs/advanced/usage/page.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -113,12 +113,12 @@ uv remove unused-package`}
<div className="rounded-lg border p-4">
<h3 className="text-lg font-semibold mb-2">Docker</h3>
<p className="text-sm text-muted-foreground">
The <code>python-docker</code> extension adds a Dockerfile and Compose files for local and production
The <code>fastapi-docker</code> extension adds a Dockerfile and Compose files for local and production
container runs.
</p>
<div className="mt-4">
<pre className="text-xs bg-muted p-2 rounded-md overflow-x-auto">
uvx create-awesome-python-app@latest my-app --template fastapi-starter --addons python-docker
uvx create-awesome-python-app@latest my-app --template fastapi-starter --addons fastapi-docker
</pre>
</div>
</div>
Expand Down
31 changes: 21 additions & 10 deletions src/app/docs/extensions/page.tsx
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,15 @@
import { ArrowLeft, ArrowRight, Cloud, Code, Container, Database, Monitor, Shield, Terminal, Wrench } 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';

Expand All@@ -24,25 +35,25 @@ const categories = [
name: 'Containers',
description: 'Docker images and Compose stacks for local and production runs.',
icon: <Container className="h-5 w-5 text-primary" />,
examples: ['python-docker'],
examples: ['fastapi-docker', 'django-docker', 'celery-docker'],
},
{
name: 'Database',
description: 'PostgreSQL services, ORM helpers, and migration scaffolding.',
icon: <Database className="h-5 w-5 text-primary" />,
examples: ['python-postgres', 'python-sqlalchemy', 'python-redis'],
examples: ['postgres', 'fastapi-sqlalchemy', 'fastapi-redis'],
},
{
name: 'Observability',
description: 'Error tracking and production diagnostics.',
icon: <Monitor className="h-5 w-5 text-primary" />,
examples: ['python-sentry'],
examples: ['fastapi-sentry'],
},
{
name: 'Security',
description: 'Authentication and authorization skeletons.',
icon: <Shield className="h-5 w-5 text-primary" />,
examples: ['python-auth-jwt'],
examples: ['fastapi-auth-jwt'],
},
{
name: 'CI & GitHub',
Expand All@@ -54,19 +65,19 @@ const categories = [
name: 'Developer Experience',
description: 'Editor integrations and remote development environments.',
icon: <Terminal className="h-5 w-5 text-primary" />,
examples: ['python-devcontainer'],
examples: ['development-container'],
},
{
name: 'API & Services',
description: 'Backend-focused add-ons for FastAPI and similar templates.',
icon: <Code className="h-5 w-5 text-primary" />,
examples: ['python-sqlalchemy', 'python-redis', 'python-auth-jwt'],
examples: ['fastapi-sqlalchemy', 'fastapi-redis', 'fastapi-auth-jwt'],
},
{
name: 'Tooling',
description: 'Cross-cutting workflow improvements for Python projects.',
icon: <Wrench className="h-5 w-5 text-primary" />,
examples: ['github-setup', 'python-devcontainer'],
examples: ['github-setup', 'development-container'],
},
];

Expand DownExpand Up@@ -102,8 +113,8 @@ export default function DocsExtensionsPage() {
<div className="rounded-md bg-muted p-4">
<pre className="text-sm overflow-x-auto">
<code>
uvx create-awesome-python-app@latest my-app --template fastapi-starter --addons python-docker
python-postgres github-setup
uvx create-awesome-python-app@latest my-app --template fastapi-starter --addons fastapi-docker
postgres github-setup
</code>
</pre>
</div>
Expand Down
2 changes: 1 addition & 1 deletion src/app/docs/installation/page.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -327,7 +327,7 @@ makepkg -si`}</pre>
<pre className="text-sm font-mono overflow-x-auto">{`docker run --rm -it \\
-v "\${PWD}:/app" -w /app \\
ulisesjeremias/create-awesome-python-app:0.2.0 \\
my-app --template fastapi-starter --addons python-docker github-setup --no-interactive`}</pre>
my-app --template fastapi-starter --addons fastapi-docker github-setup --no-interactive`}</pre>
</div>
</div>
<div>
Expand Down
2 changes: 1 addition & 1 deletion src/app/docs/page.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -324,7 +324,7 @@ export default function DocsPage() {
<div className="rounded-md bg-muted p-4 mt-2">
<pre className="text-sm">
<code>
uvx create-awesome-python-app@latest my-app --template fastapi-starter --addons python-docker
uvx create-awesome-python-app@latest my-app --template fastapi-starter --addons fastapi-docker
github-setup
</code>
</pre>
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -31,9 +31,7 @@ export default function TemplateCustomizationClientPage() {
<FileCode className="h-5 w-5 text-primary" />
Project Structure Customization
</h3>
<p>
After scaffolding, reorganize modules to match your domain. Common patterns across CPA templates:
</p>
<p>After scaffolding, reorganize modules to match your domain. Common patterns across CPA templates:</p>

<div className="grid gap-4 md:grid-cols-2 mt-4">
<div className="rounded-lg border p-4">
Expand DownExpand Up@@ -230,13 +228,13 @@ uv remove unused-package`}
<ul className="list-disc pl-6 space-y-2">
<li>
<strong>Routers:</strong> Register new routers in the app factory; pair with{' '}
<code>python-sqlalchemy</code> or <code>python-auth-jwt</code> when needed.
<code>fastapi-sqlalchemy</code> or <code>fastapi-auth-jwt</code> when needed.
</li>
<li>
<strong>Settings:</strong> Extend the generated <code>Settings</code> class for new env vars.
</li>
<li>
<strong>Observability:</strong> Add <code>python-sentry</code> during scaffold or wire Sentry
<strong>Observability:</strong> Add <code>fastapi-sentry</code> during scaffold or wire Sentry
manually in lifespan hooks.
</li>
</ul>
Expand All@@ -262,11 +260,13 @@ app.include_router(users.router, prefix="/users", tags=["users"])`}
<code>INSTALLED_APPS</code>.
</li>
<li>
<strong>DRF:</strong> Define serializers and viewsets; keep URL routing in{' '}
<code>urls.py</code>.
<strong>DRF:</strong> Define serializers and viewsets; keep URL routing in <code>urls.py</code>.
</li>
<li>
<strong>Database:</strong> Pair with <code>postgres</code> for local Compose services.
</li>
<li>
<strong>Database:</strong> Pair with <code>python-postgres</code> for local Compose services.
<strong>Containers:</strong> Add <code>django-docker</code> for gunicorn/runserver images.
</li>
</ul>
</div>
Expand DownExpand Up@@ -311,8 +311,8 @@ def greet(name: str) -> None:
<strong>Shared tooling:</strong> Keep Ruff/pytest config at the workspace root.
</li>
<li>
<strong>Running:</strong> Use <code>uv run --package &lt;member&gt; ...</code> to target a specific
app or library.
<strong>Running:</strong> Use <code>uv run --package &lt;member&gt; ...</code> to target a
specific app or library.
</li>
</ul>
</div>
Expand All@@ -327,7 +327,9 @@ def greet(name: str) -> None:
<div className="space-y-6 mt-6">
<div className="space-y-2">
<h3 className="text-xl font-semibold">Environment Variables</h3>
<p>Use <code>.env</code> locally (never commit secrets) and typed settings in code:</p>
<p>
Use <code>.env</code> locally (never commit secrets) and typed settings in code:
</p>

<div className="rounded-md bg-muted p-4 mt-4">
<pre className="text-sm overflow-x-auto">
Expand All@@ -353,7 +355,7 @@ class Settings(BaseSettings):
<div className="space-y-2">
<h3 className="text-xl font-semibold">Docker & Compose</h3>
<p>
When you scaffold with <code>python-docker</code>, customize <code>Dockerfile</code>,{' '}
When you scaffold with <code>fastapi-docker</code>, customize <code>Dockerfile</code>,{' '}
<code>compose.yml</code>, and health checks for your deployment target. Rebuild with{' '}
<code>docker compose up --build</code> after changes.
</p>
Expand Down
4 changes: 2 additions & 2 deletions src/app/docs/templates/page.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -140,8 +140,8 @@ export default async function DocsTemplatesPage() {
<div className="rounded-md bg-muted p-4">
<pre className="text-sm overflow-x-auto">
<code>
uvx create-awesome-python-app@latest my-app --template fastapi-starter --addons python-docker
python-postgres
uvx create-awesome-python-app@latest my-app --template fastapi-starter --addons fastapi-docker
postgres
</code>
</pre>
</div>
Expand Down
4 changes: 2 additions & 2 deletions src/app/page.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -187,10 +187,10 @@ export default async function Home() {
<div className="bg-muted rounded-md p-4 font-mono text-sm overflow-x-auto">
<p className="text-green-700 dark:text-green-300">$ uvx create-awesome-python-app my-app \</p>
<p className="pl-4">--template fastapi-starter \</p>
<p className="pl-4">--addons python-docker github-setup</p>
<p className="pl-4">--addons fastapi-docker github-setup</p>
</div>
<CopyButton
command="uvx create-awesome-python-app my-app --template fastapi-starter --addons python-docker github-setup --no-interactive"
command="uvx create-awesome-python-app my-app --template fastapi-starter --addons fastapi-docker github-setup --no-interactive"
variant="outline"
className="w-full"
/>
Expand Down
12 changes: 8 additions & 4 deletions src/components/animated-terminal.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,7 +8,7 @@ const STACKS = [
lines: [
{ prefix: '$', text: ' uvx create-awesome-python-app my-api', color: 'text-foreground' },
{ prefix: '✔', text: ' Template fastapi-starter', color: 'text-green-400' },
{ prefix: '✔', text: ' Extensions python-docker · github-setup · python-postgres', color: 'text-green-400' },
{ prefix: '✔', text: ' Extensions fastapi-docker · github-setup · postgres', color: 'text-green-400' },
{ prefix: '✔', text: ' Syncing with uv...', color: 'text-muted-foreground' },
{ prefix: '✔', text: ' Ready. cd my-api && uv run uvicorn app.main:app --reload', color: 'text-primary' },
],
Expand All@@ -18,7 +18,7 @@ const STACKS = [
lines: [
{ prefix: '$', text: ' uvx create-awesome-python-app my-cli', color: 'text-foreground' },
{ prefix: '✔', text: ' Template cli-starter', color: 'text-green-400' },
{ prefix: '✔', text: ' Extensions github-setup · python-devcontainer', color: 'text-green-400' },
{ prefix: '✔', text: ' Extensions github-setup · development-container', color: 'text-green-400' },
{ prefix: '✔', text: ' Syncing with uv...', color: 'text-muted-foreground' },
{ prefix: '✔', text: ' Ready. cd my-cli && uv run my-cli --help', color: 'text-primary' },
],
Expand All@@ -28,9 +28,13 @@ const STACKS = [
lines: [
{ prefix: '$', text: ' uvx create-awesome-python-app my-worker', color: 'text-foreground' },
{ prefix: '✔', text: ' Template celery-worker', color: 'text-green-400' },
{ prefix: '✔', text: ' Extensions python-redis · python-docker', color: 'text-green-400' },
{ prefix: '✔', text: ' Extensions celery-docker · github-setup', color: 'text-green-400' },
{ prefix: '✔', text: ' Syncing with uv...', color: 'text-muted-foreground' },
{ prefix: '✔', text: ' Ready. cd my-worker && uv run celery -A app worker', color: 'text-primary' },
{
prefix: '✔',
text: ' Ready. cd my-worker && uv run celery -A worker.celery_app worker --loglevel=INFO',
color: 'text-primary',
},
],
},
];
Expand Down
24 changes: 12 additions & 12 deletions src/components/recipes-section.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -31,10 +31,10 @@ const recipes: Recipe[] = [
templateFlag: '--template',
templateValue: ' fastapi-starter ',
addonsFlag: '--addons',
addonsValue: ' python-docker github-setup',
addonsValue: ' fastapi-docker github-setup',
},
rawCommand:
'uvx create-awesome-python-app my-api --template fastapi-starter --addons python-docker github-setup --no-interactive',
'uvx create-awesome-python-app my-api --template fastapi-starter --addons fastapi-docker github-setup --no-interactive',
href: '/templates/fastapi-starter',
},
{
Expand All@@ -47,42 +47,42 @@ const recipes: Recipe[] = [
templateFlag: '--template',
templateValue: ' cli-starter ',
addonsFlag: '--addons',
addonsValue: ' python-devcontainer github-setup',
addonsValue: ' development-container github-setup',
},
rawCommand:
'uvx create-awesome-python-app my-cli --template cli-starter --addons python-devcontainer github-setup --no-interactive',
'uvx create-awesome-python-app my-cli --template cli-starter --addons development-container github-setup --no-interactive',
href: '/templates/cli-starter',
},
{
title: 'Celery worker',
description: 'Background worker with Redis and Docker for async task pipelines.',
description: 'Background worker with Celery Docker for async task pipelines.',
icon: Workflow,
labels: ['Celery', 'Redis', 'Docker', 'Workers'],
labels: ['Celery', 'Docker', 'Workers', 'uv'],
command: {
base: 'uvx create-awesome-python-app my-worker ',
templateFlag: '--template',
templateValue: ' celery-worker ',
addonsFlag: '--addons',
addonsValue: ' python-redis python-docker',
addonsValue: ' celery-docker github-setup',
},
rawCommand:
'uvx create-awesome-python-app my-worker --template celery-worker --addons python-redis python-docker --no-interactive',
'uvx create-awesome-python-app my-worker --template celery-worker --addons celery-docker github-setup --no-interactive',
href: '/templates/celery-worker',
},
{
title: 'Django API',
description: 'Django API starter with Postgres and JWT auth extensions.',
description: 'Django API starter with Postgres and Django Docker.',
icon: Sparkles,
labels: ['Django', 'Postgres', 'JWT', 'API'],
labels: ['Django', 'Postgres', 'Docker', 'API'],
command: {
base: 'uvx create-awesome-python-app my-django ',
templateFlag: '--template',
templateValue: ' django-api ',
addonsFlag: '--addons',
addonsValue: ' python-postgres python-auth-jwt',
addonsValue: ' postgres django-docker',
},
rawCommand:
'uvx create-awesome-python-app my-django --template django-api --addons python-postgres python-auth-jwt --no-interactive',
'uvx create-awesome-python-app my-django --template django-api --addons postgres django-docker --no-interactive',
href: '/templates/django-api',
},
];
Expand Down
2 changes: 1 addition & 1 deletion src/components/saas-ai-banner.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -112,7 +112,7 @@ export function SaasAiBanner() {
<div className="p-4 sm:p-6 font-mono text-sm leading-relaxed overflow-x-auto">
<p className="text-green-400">$ uvx create-awesome-python-app my-api \</p>
<p className="text-slate-300 pl-4">--template fastapi-starter \</p>
<p className="text-slate-300 pl-4">--addons python-docker github-setup</p>
<p className="text-slate-300 pl-4">--addons fastapi-docker github-setup</p>
<p className="mt-4 text-slate-500"># ✅ FastAPI scaffold ready</p>
<p className="text-slate-500"># ✅ uv workspace + typed settings</p>
<p className="text-slate-500"># ✅ Compose Docker + CI extensions</p>
Expand Down
6 changes: 3 additions & 3 deletions src/lib/__tests__/schemas.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,7 +55,7 @@ describe('extensionSchema', () => {
const validExtension = {
name: 'Tailwind CSS',
description: 'Add Tailwind CSS.',
url: 'https://github.com/Create-Python-App/cpa-templates/tree/main/extensions/python-docker',
url: 'https://github.com/Create-Python-App/cpa-templates/tree/main/extensions/fastapi-docker',
type: 'react',
category: 'UI',
labels: ['Tailwind', 'CSS'],
Expand All@@ -68,7 +68,7 @@ describe('extensionSchema', () => {
const validExtension = {
name: 'GitHub Setup',
description: 'Add GitHub automation.',
url: 'https://github.com/Create-Python-App/cpa-templates/tree/main/extensions/github-setup',
url: 'https://github.com/Create-Python-App/cpa-templates/tree/main/extensions/all-github-setup',
type: ['react', 'nextjs', 'backend'],
category: 'Tooling',
labels: ['GitHub', 'CI/CD'],
Expand DownExpand Up@@ -96,7 +96,7 @@ describe('templatesDataSchema', () => {
{
name: 'Tailwind CSS',
description: 'Add Tailwind CSS.',
url: 'https://github.com/example/python-docker',
url: 'https://github.com/example/fastapi-docker',
type: 'react',
category: 'UI',
labels: ['CSS'],
Expand Down
2 changes: 1 addition & 1 deletion src/lib/__tests__/utils.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,7 +45,7 @@ describe('validateExtension', () => {
const validData = {
name: 'Tailwind CSS',
description: 'Add Tailwind CSS.',
url: 'https://github.com/Create-Python-App/cpa-templates/tree/main/extensions/python-docker',
url: 'https://github.com/Create-Python-App/cpa-templates/tree/main/extensions/fastapi-docker',
type: 'react',
category: 'UI',
labels: ['Tailwind'],
Expand Down
Loading
Loading