From 27115795ca967e09a11fc4240df44689bb4fb3ad Mon Sep 17 00:00:00 2001 From: ulises-jeremias Date: Fri, 17 Jul 2026 12:43:55 -0300 Subject: [PATCH 1/4] chore: rebrand site identity and catalog to Create-Python-App Point SEO/site URLs, README, AGENTS, catalog fetch, mock fallback data, and danger metadata at CPA / cpa-templates / PyPI. Co-authored-by: Cursor --- AGENTS.md | 2 +- README.md | 35 +++-- docs/PROJECT_CONFIGURATION.md | 2 +- src/app/layout.tsx | 42 +++--- src/app/robots.ts | 2 +- src/app/sitemap.ts | 2 +- src/lib/__tests__/schemas.test.ts | 18 +-- src/lib/__tests__/utils.test.ts | 10 +- src/lib/data.ts | 2 +- src/lib/mock-data.ts | 239 ++++++++++++++++++++---------- src/lib/seo.ts | 6 +- tools/danger/package.json | 8 +- 12 files changed, 226 insertions(+), 142 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 7261a00..801e831 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -2,7 +2,7 @@ ## Overview -Marketing and documentation site for create-node-app. +Marketing and documentation site for create-python-app. ## Tech Stack diff --git a/README.md b/README.md index 6cfafce..ca3cc90 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,25 @@ -# Create Awesome Node App - Official Website +# Create Awesome Python App - Official Website -[![npm](https://img.shields.io/npm/v/create-awesome-node-app?style=flat-square&color=cb3837)](https://www.npmjs.com/package/create-awesome-node-app) -[![npm downloads](https://img.shields.io/npm/dm/create-awesome-node-app?style=flat-square&color=cb3837)](https://www.npmjs.com/package/create-awesome-node-app) -[![Templates](https://img.shields.io/badge/templates-cna--templates-blue?style=flat-square)](https://github.com/Create-Node-App/cna-templates) -[![GitHub org](https://img.shields.io/badge/GitHub-Create--Node--App-black?style=flat-square&logo=github)](https://github.com/Create-Node-App) +[![PyPI](https://img.shields.io/pypi/v/create-awesome-python-app?style=flat-square&color=3776ab)](https://pypi.org/project/create-awesome-python-app/) +[![Templates](https://img.shields.io/badge/templates-cpa--templates-blue?style=flat-square)](https://github.com/Create-Python-App/cpa-templates) +[![GitHub org](https://img.shields.io/badge/GitHub-Create--Python--App-black?style=flat-square&logo=github)](https://github.com/Create-Python-App) -This is the official website for [Create Awesome Node App](https://www.npmjs.com/package/create-awesome-node-app), a tool that helps you quickly set up Node.js projects with best practices and modern tooling. +This is the official website for [Create Awesome Python App](https://pypi.org/project/create-awesome-python-app/), a tool that helps you quickly set up Python projects with best practices and modern tooling (uv-first). ## Project Links -- [Official website](https://create-awesome-node-app.vercel.app) -- [CLI package on npm](https://www.npmjs.com/package/create-awesome-node-app) -- [Main Create-Node-App repository](https://github.com/Create-Node-App/create-node-app) -- [Templates and extensions catalog](https://github.com/Create-Node-App/cna-templates) -- [Create-Node-App GitHub organization](https://github.com/Create-Node-App) +- [Official website](https://create-awesome-python-app.vercel.app) +- [CLI package on PyPI](https://pypi.org/project/create-awesome-python-app/) +- [Main Create-Python-App repository](https://github.com/Create-Python-App/create-python-app) +- [Templates and extensions catalog](https://github.com/Create-Python-App/cpa-templates) +- [Create-Python-App GitHub organization](https://github.com/Create-Python-App) > [!TIP] -> This project was initialized with [create-awesome-node-app](https://www.npmjs.com/package/create-awesome-node-app). **DO NOT USE THIS TEMPLATE DIRECTLY!** Instead, create your own project using the command and following the interactive menu options. For more information, refer to the documentation! +> Scaffold new apps with [`create-awesome-python-app`](https://pypi.org/project/create-awesome-python-app/) β€” do not clone template snapshot repos for production work. Prefer: +> +> ```bash +> uvx create-awesome-python-app my-api --template fastapi-starter +> ``` ## Features @@ -66,12 +69,12 @@ Scripts for preparing and viewing the production version: ## Contributing -Bug reports, feature requests, and pull requests are welcome on the [Create-Node-App/website](https://github.com/Create-Node-App/website) repository! +Bug reports, feature requests, and pull requests are welcome on the [Create-Python-App/website](https://github.com/Create-Python-App/website) repository! ## πŸ‘₯ Contributors - - + + -Made with [contributors-img](https://contrib.rocks). \ No newline at end of file +Made with [contributors-img](https://contrib.rocks). diff --git a/docs/PROJECT_CONFIGURATION.md b/docs/PROJECT_CONFIGURATION.md index 3b72e15..40fa59d 100644 --- a/docs/PROJECT_CONFIGURATION.md +++ b/docs/PROJECT_CONFIGURATION.md @@ -1,6 +1,6 @@ # βš™οΈ Project Configuration -The application has been bootstrapped using [create-awesome-node-app](https://www.npmjs.com/package/create-awesome-node-app) for simplicity reasons. It allows us to create applications quickly without dealing with a complex tooling setup such as bundling, transpiling etc. +The application has been bootstrapped using [create-awesome-python-app](https://pypi.org/project/create-awesome-python-app/) for simplicity reasons. It allows us to create applications quickly without dealing with a complex tooling setup such as bundling, transpiling etc. You should always configure and use the following tools: diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 5be0571..2a2e918 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -5,45 +5,45 @@ import '@/app/globals.css'; import { LayoutShell } from '@/components/layout-shell'; import { jsonLdScript, organizationJsonLd, websiteJsonLd } from '@/lib/seo'; -const siteUrl = 'https://create-awesome-node-app.vercel.app'; +const siteUrl = 'https://create-awesome-python-app.vercel.app'; export const metadata: Metadata = { metadataBase: new URL(siteUrl), title: { - default: 'Create Awesome Node App', - template: '%s | Create Awesome Node App', + default: 'Create Awesome Python App', + template: '%s | Create Awesome Python App', }, description: - 'One command. Any stack. Choose a template, add addons, and ship production-ready Node, Web, and AI-ready apps.', + 'One command. Any stack. Choose a template, add addons, and ship production-ready Python APIs, CLIs, and workers.', keywords: [ - 'node templates', - 'node.js starter', - 'create node app', - 'typescript boilerplate', - 'next.js template', - 'nestjs starter', - 'node extensions', + 'python templates', + 'python starter', + 'create python app', + 'fastapi boilerplate', + 'django api template', + 'celery worker starter', + 'python extensions', ], - authors: [{ name: 'Create Awesome Node App Team', url: siteUrl }], - creator: 'Create Awesome Node App', - publisher: 'Create Awesome Node App', + authors: [{ name: 'Create Awesome Python App Team', url: siteUrl }], + creator: 'Create Awesome Python App', + publisher: 'Create Awesome Python App', openGraph: { - title: 'Create Awesome Node App', - description: 'One command. Any stack. Compose templates and addons into production-ready Node.js apps.', + title: 'Create Awesome Python App', + description: 'One command. Any stack. Compose templates and addons into production-ready Python apps.', url: siteUrl, - siteName: 'Create Awesome Node App', + siteName: 'Create Awesome Python App', images: [ { url: '/og-default.png', // raster fallback width: 1200, height: 630, - alt: 'Create Awesome Node App – Templates & Extensions', + alt: 'Create Awesome Python App – Templates & Extensions', }, { url: '/og-default.svg', // some platforms now support SVG (fallback above covers others) width: 1200, height: 630, - alt: 'Create Awesome Node App – Templates & Extensions', + alt: 'Create Awesome Python App – Templates & Extensions', type: 'image/svg+xml', }, ], @@ -52,8 +52,8 @@ export const metadata: Metadata = { }, twitter: { card: 'summary_large_image', - title: 'Create Awesome Node App', - description: 'Discover Node.js templates and extensions to accelerate your development workflow.', + title: 'Create Awesome Python App', + description: 'Discover Python templates and extensions to accelerate your development workflow.', images: ['/og-default.png', '/og-default.svg'], creator: '@', }, diff --git a/src/app/robots.ts b/src/app/robots.ts index 1de0483..223493b 100644 --- a/src/app/robots.ts +++ b/src/app/robots.ts @@ -1,6 +1,6 @@ import type { MetadataRoute } from 'next'; -const siteUrl = 'https://create-awesome-node-app.vercel.app'; +const siteUrl = 'https://create-awesome-python-app.vercel.app'; export default function robots(): MetadataRoute.Robots { return { diff --git a/src/app/sitemap.ts b/src/app/sitemap.ts index 7d09adc..d007553 100644 --- a/src/app/sitemap.ts +++ b/src/app/sitemap.ts @@ -1,7 +1,7 @@ import type { MetadataRoute } from 'next'; import { getTemplatesData } from '@/lib/data'; -const siteUrl = 'https://create-awesome-node-app.vercel.app'; +const siteUrl = 'https://create-awesome-python-app.vercel.app'; export default async function sitemap(): Promise { const { templates, extensions, categories } = await getTemplatesData(); diff --git a/src/lib/__tests__/schemas.test.ts b/src/lib/__tests__/schemas.test.ts index e11ad31..aad50a9 100644 --- a/src/lib/__tests__/schemas.test.ts +++ b/src/lib/__tests__/schemas.test.ts @@ -25,26 +25,26 @@ describe('categorySchema', () => { describe('templateSchema', () => { it('should validate a valid template', () => { const validTemplate = { - name: 'React Vite Starter', + name: 'FastAPI Starter', description: 'A fast React boilerplate with Vite.', - url: 'https://github.com/Create-Node-App/cna-templates/tree/main/templates/react-vite-starter', + url: 'https://github.com/Create-Python-App/cpa-templates/tree/main/templates/fastapi-starter', type: 'react', category: 'frontend-applications', labels: ['React', 'Vite', 'TypeScript'], - slug: 'react-vite-starter', + slug: 'fastapi-starter', }; expect(templateSchema.safeParse(validTemplate).success).toBe(true); }); it('should reject a template with invalid url', () => { const invalidTemplate = { - name: 'React Vite Starter', + name: 'FastAPI Starter', description: 'A fast React boilerplate.', url: 'not-a-url', type: 'react', category: 'frontend-applications', labels: ['React'], - slug: 'react-vite-starter', + slug: 'fastapi-starter', }; expect(templateSchema.safeParse(invalidTemplate).success).toBe(false); }); @@ -55,7 +55,7 @@ describe('extensionSchema', () => { const validExtension = { name: 'Tailwind CSS', description: 'Add Tailwind CSS.', - url: 'https://github.com/Create-Node-App/cna-templates/tree/main/extensions/react-tailwindcss', + url: 'https://github.com/Create-Python-App/cpa-templates/tree/main/extensions/python-docker', type: 'react', category: 'UI', labels: ['Tailwind', 'CSS'], @@ -68,7 +68,7 @@ describe('extensionSchema', () => { const validExtension = { name: 'GitHub Setup', description: 'Add GitHub automation.', - url: 'https://github.com/Create-Node-App/cna-templates/tree/main/extensions/all-github-setup', + url: 'https://github.com/Create-Python-App/cpa-templates/tree/main/extensions/github-setup', type: ['react', 'nextjs', 'backend'], category: 'Tooling', labels: ['GitHub', 'CI/CD'], @@ -83,13 +83,13 @@ describe('templatesDataSchema', () => { const validData = { templates: [ { - name: 'React Vite Starter', + name: 'FastAPI Starter', description: 'A fast React boilerplate.', url: 'https://github.com/example/react-vite', type: 'react', category: 'frontend-applications', labels: ['React'], - slug: 'react-vite-starter', + slug: 'fastapi-starter', }, ], extensions: [ diff --git a/src/lib/__tests__/utils.test.ts b/src/lib/__tests__/utils.test.ts index 23c3457..55d6852 100644 --- a/src/lib/__tests__/utils.test.ts +++ b/src/lib/__tests__/utils.test.ts @@ -21,17 +21,17 @@ describe('validateTemplate', () => { it('should return data for valid template', () => { const validData = { - name: 'React Vite Starter', + name: 'FastAPI Starter', description: 'A fast React boilerplate.', - url: 'https://github.com/Create-Node-App/cna-templates/tree/main/templates/react-vite-starter', + url: 'https://github.com/Create-Python-App/cpa-templates/tree/main/templates/fastapi-starter', type: 'react', category: 'frontend-applications', labels: ['React', 'Vite'], - slug: 'react-vite-starter', + slug: 'fastapi-starter', }; const result = validateTemplate(validData); expect(result).not.toBeNull(); - expect(result?.name).toBe('React Vite Starter'); + expect(result?.name).toBe('FastAPI Starter'); }); }); @@ -45,7 +45,7 @@ describe('validateExtension', () => { const validData = { name: 'Tailwind CSS', description: 'Add Tailwind CSS.', - url: 'https://github.com/Create-Node-App/cna-templates/tree/main/extensions/react-tailwindcss', + url: 'https://github.com/Create-Python-App/cpa-templates/tree/main/extensions/python-docker', type: 'react', category: 'UI', labels: ['Tailwind'], diff --git a/src/lib/data.ts b/src/lib/data.ts index d082cfd..50bddc8 100644 --- a/src/lib/data.ts +++ b/src/lib/data.ts @@ -1,7 +1,7 @@ import { getFallbackData } from './mock-data'; import { type TemplatesData, templatesDataSchema } from './schemas'; -const TEMPLATES_URL = 'https://raw.githubusercontent.com/Create-Node-App/cna-templates/main/templates.json'; +const TEMPLATES_URL = 'https://raw.githubusercontent.com/Create-Python-App/cpa-templates/main/templates.json'; export async function getTemplatesData(): Promise { try { diff --git a/src/lib/mock-data.ts b/src/lib/mock-data.ts index fe7c025..69bdf03 100644 --- a/src/lib/mock-data.ts +++ b/src/lib/mock-data.ts @@ -3,107 +3,188 @@ import type { TemplatesData } from './schemas'; export const mockTemplatesData: TemplatesData = { categories: [ { - slug: 'frontend-applications', - name: 'Frontend Applications', - description: 'Templates for building modern web interfaces', - details: 'Discover templates for React, Vue, and other frontend frameworks to build beautiful user interfaces.', - labels: ['Frontend', 'UI', 'React', 'Vue', 'Web'], + slug: "backend-applications", + name: "Backend Applications", + description: "API and service starters for FastAPI and similar Python backends.", + details: "Use when the deliverable is an HTTP API or background worker β€” FastAPI for async APIs with OpenAPI docs.", + labels: ["Backend", "API", "Python", "FastAPI"], }, { - slug: 'backend-applications', - name: 'Backend Applications', - description: 'Templates for building robust server-side applications', - details: 'Explore templates for Node.js, Express, NestJS, and other backend frameworks to build powerful APIs.', - labels: ['Backend', 'API', 'Server', 'Node.js', 'Express', 'NestJS'], + slug: "ci", + name: "CI", + description: "Continuous integration and repository automation.", + details: "GitHub Actions, Dependabot, and related repository workflows.", + labels: ["CI", "GitHub", "DevOps"], }, { - slug: 'fullstack-applications', - name: 'Full Stack Applications', - description: 'Templates for building complete web applications', - details: 'Find templates for Next.js, Remix, and other full stack frameworks to build end-to-end applications.', - labels: ['Fullstack', 'Next.js', 'Remix', 'SSR', 'API Routes'], + slug: "containers", + name: "Containers", + description: "Docker and Compose packaging for the app.", + details: "Add when you want container images and compose stacks for the API.", + labels: ["Docker", "Compose", "DevOps"], }, { - slug: 'monorepo-boilerplate', - name: 'Monorepo Boilerplate', - description: 'Templates for managing multiple packages in a single repository', - details: - 'Streamline development with monorepo templates using tools like Nx, Turborepo, and Lerna for efficient code sharing.', - labels: ['Monorepo', 'Nx', 'Turborepo', 'Lerna', 'Workspace'], + slug: "database", + name: "Database", + description: "Database services and connection scaffolding.", + details: "Pair with the app when you need Postgres (or similar) locally/in compose.", + labels: ["PostgreSQL", "Database"], }, { - slug: 'user-acceptance-testing', - name: 'User Acceptance Testing', - description: 'Templates with built-in testing frameworks for end-to-end validation', - details: - 'Ensure your applications meet user requirements with templates featuring Cypress, Playwright, or Selenium for comprehensive testing.', - labels: ['Testing', 'UAT', 'Cypress', 'Playwright', 'Selenium', 'E2E'], + slug: "editor", + name: "Editor", + description: "Editor and remote development ergonomics.", + details: "Dev Containers and related IDE integrations.", + labels: ["DevContainer", "VS Code"], }, { - slug: 'web-extension', - name: 'Web Extension', - description: 'Templates for building browser extensions and add-ons', - details: - 'Develop cross-browser extensions with templates that support Chrome, Firefox, and Edge with modern web technologies.', - labels: ['Extension', 'Browser', 'Chrome', 'Firefox', 'Edge', 'Add-on'], + slug: "cli-applications", + name: "CLI Applications", + description: "Command-line tools and console scripts.", + details: "Use for Typer/Click CLIs and internal utilities shipped as entry points.", + labels: ["CLI", "Python", "Typer"], + }, + { + slug: "observability", + name: "Observability", + description: "Error tracking, metrics, and tracing integrations.", + details: "Add when you need production diagnostics such as Sentry.", + labels: ["Observability", "Sentry", "Monitoring"], + }, + { + slug: "security", + name: "Security", + description: "Authentication and authorization scaffolds.", + details: "JWT/session auth skeletons and related security helpers.", + labels: ["Auth", "JWT", "Security"], + }, + { + slug: "monorepo", + name: "Monorepo", + description: "Multi-package workspaces with shared tooling and one lockfile.", + details: "Use when you need multiple libraries and apps in one repo β€” uv workspaces link members locally with a single virtual environment.", + labels: ["Monorepo", "uv", "Workspace", "Python"], }, ], templates: [ { - slug: 'react-vite-boilerplate', - name: 'React Vite Boilerplate', - description: 'A highly opinionated React boilerplate with Vite, TypeScript, ESLint, Prettier, and more.', - url: 'https://github.com/Create-Node-App/cna-templates/tree/main/templates/react-vite-starter', - type: 'react', - category: 'frontend-applications', - labels: ['React', 'Vite', 'TypeScript', 'ESLint', 'Prettier'], + slug: "fastapi-starter", + name: "FastAPI Starter", + description: "Production-ready FastAPI API with uv, Ruff, pytest, mypy, pyright, and pydantic-settings", + url: "https://github.com/Create-Python-App/cpa-templates?subdir=templates/fastapi-starter", + type: "fastapi-backend", + category: "backend-applications", + labels: ["FastAPI", "API", "Python", "uv", "Backend", "Type Hints", "mypy", "pyright"], }, { - slug: 'nestjs-boilerplate', - name: 'NestJS Boilerplate', - description: 'A progressive Node.js framework for building efficient and scalable server-side applications.', - url: 'https://github.com/Create-Node-App/cna-templates/tree/main/templates/nestjs-starter', - type: 'nestjs', - category: 'backend-applications', - labels: ['NestJS', 'TypeScript', 'API', 'REST', 'Swagger'], + slug: "cli-starter", + name: "CLI Starter", + description: "Typer CLI with uv, Ruff, pytest, and a console script entry point", + url: "https://github.com/Create-Python-App/cpa-templates?subdir=templates/cli-starter", + type: "cli-app", + category: "cli-applications", + labels: ["CLI", "Typer", "Python", "uv"], }, { - slug: 'nextjs-starter', - name: 'Next.js Starter', - description: 'The React framework for production with server-side rendering and static site generation.', - url: 'https://github.com/Create-Node-App/cna-templates/tree/main/templates/nextjs-starter', - type: 'nextjs', - category: 'fullstack-applications', - labels: ['Next.js', 'React', 'TypeScript', 'SSR', 'API Routes'], + slug: "celery-worker", + name: "Celery Worker", + description: "Celery worker with Redis defaults, pydantic-settings, and eager-mode tests", + url: "https://github.com/Create-Python-App/cpa-templates?subdir=templates/celery-worker", + type: "celery-worker", + category: "backend-applications", + labels: ["Celery", "Worker", "Redis", "Python", "uv"], + }, + { + slug: "django-api", + name: "Django API", + description: "Django + DRF API starter with uv, Ruff, pytest-django, and health probes", + url: "https://github.com/Create-Python-App/cpa-templates?subdir=templates/django-api", + type: "django-backend", + category: "backend-applications", + labels: ["Django", "DRF", "API", "Python", "uv"], + }, + { + slug: "uv-workspace-starter", + name: "uv Workspace Starter", + description: "Python monorepo using uv workspaces: shared packages/ libraries and apps/ deployables with one lockfile, Ruff, Pyright, and pytest", + url: "https://github.com/Create-Python-App/cpa-templates?subdir=templates/uv-workspace-starter", + type: "uv-workspace", + category: "monorepo", + labels: ["Monorepo", "uv", "Workspace", "Python", "Typer"], }, ], extensions: [ { - slug: 'material-ui', - name: 'Material UI', - description: 'Extension to add Material UI to your React app', - url: 'https://github.com/Create-Node-App/cna-templates/tree/main/extensions/react-material-ui', - type: 'react', - category: 'UI', - labels: ['React', 'Material UI', 'Components', 'Theming'], - }, - { - slug: 'tailwindcss', - name: 'Tailwind CSS', - description: 'Add Tailwind CSS to your project for utility-first styling', - url: 'https://github.com/Create-Node-App/cna-templates/tree/main/extensions/tailwindcss', - type: ['react', 'nextjs', 'vue'], - category: 'UI', - labels: ['Tailwind CSS', 'Styling', 'Utility Classes'], - }, - { - slug: 'github-setup', - name: 'GitHub Setup', - description: 'Configure GitHub Actions, PR templates, and more', - url: 'https://github.com/Create-Node-App/cna-templates/tree/main/extensions/github-setup', - type: ['react', 'nextjs', 'nestjs', 'express', 'vue'], - category: 'DevOps', - labels: ['GitHub', 'CI/CD', 'Actions', 'Templates'], + slug: "github-setup", + name: "GitHub Setup", + description: "GitHub Actions CI, MegaLinter, Danger PR review, todo-to-issue, Dependabot, and issue/PR templates", + url: "https://github.com/Create-Python-App/cpa-templates?subdir=extensions/github-setup", + type: ["celery-worker", "cli-app", "django-backend", "fastapi-backend", "uv-workspace"], + category: "ci", + labels: ["GitHub", "CI", "DevOps", "MegaLinter", "Danger"], + }, + { + slug: "python-docker", + name: "Python Docker", + description: "Dockerfile, compose.yml, and compose.prod.yml for local and containerized runs", + url: "https://github.com/Create-Python-App/cpa-templates?subdir=extensions/python-docker", + type: ["celery-worker", "cli-app", "fastapi-backend"], + category: "containers", + labels: ["Docker", "DevOps", "Container"], + }, + { + slug: "python-postgres", + name: "Python Postgres", + description: "PostgreSQL service under docker/postgres/compose.yml plus env examples", + url: "https://github.com/Create-Python-App/cpa-templates?subdir=extensions/python-postgres", + type: ["celery-worker", "django-backend", "fastapi-backend"], + category: "database", + labels: ["PostgreSQL", "Database", "Docker"], + }, + { + slug: "python-devcontainer", + name: "Python Dev Container", + description: "VS Code Dev Container with Python 3.12 and uv", + url: "https://github.com/Create-Python-App/cpa-templates?subdir=extensions/python-devcontainer", + type: ["celery-worker", "cli-app", "django-backend", "fastapi-backend", "uv-workspace"], + category: "editor", + labels: ["DevContainer", "VS Code", "uv"], + }, + { + slug: "python-sqlalchemy", + name: "Python SQLAlchemy", + description: "SQLAlchemy 2.x session helpers and Alembic migrations for FastAPI", + url: "https://github.com/Create-Python-App/cpa-templates?subdir=extensions/python-sqlalchemy", + type: ["fastapi-backend"], + category: "database", + labels: ["SQLAlchemy", "Alembic", "ORM", "Database"], + }, + { + slug: "python-redis", + name: "Python Redis", + description: "Redis client helper and local Compose service", + url: "https://github.com/Create-Python-App/cpa-templates?subdir=extensions/python-redis", + type: ["fastapi-backend"], + category: "database", + labels: ["Redis", "Cache", "Queue"], + }, + { + slug: "python-sentry", + name: "Python Sentry", + description: "Sentry SDK for FastAPI with env-driven init helper", + url: "https://github.com/Create-Python-App/cpa-templates?subdir=extensions/python-sentry", + type: ["fastapi-backend"], + category: "observability", + labels: ["Sentry", "Observability", "Errors"], + }, + { + slug: "python-auth-jwt", + name: "Python Auth JWT", + description: "JWT auth feature skeleton with password hashing helpers", + url: "https://github.com/Create-Python-App/cpa-templates?subdir=extensions/python-auth-jwt", + type: ["fastapi-backend"], + category: "security", + labels: ["Auth", "JWT", "Security"], }, ], }; diff --git a/src/lib/seo.ts b/src/lib/seo.ts index 5c0111b..1c04633 100644 --- a/src/lib/seo.ts +++ b/src/lib/seo.ts @@ -1,7 +1,7 @@ -export const SITE_URL = 'https://create-awesome-node-app.vercel.app'; -export const SITE_NAME = 'Create Awesome Node App'; +export const SITE_URL = 'https://create-awesome-python-app.vercel.app'; +export const SITE_NAME = 'Create Awesome Python App'; export const SITE_DESCRIPTION = - 'Discover production-ready templates and extensions to jumpstart your next Node.js project. Combine starters and add-ons to build faster.'; + 'Discover production-ready templates and extensions to jumpstart your next Python project. Combine starters and add-ons to build faster with uv.'; export function organizationJsonLd() { return { diff --git a/tools/danger/package.json b/tools/danger/package.json index 5a1f145..6717b5b 100644 --- a/tools/danger/package.json +++ b/tools/danger/package.json @@ -1,5 +1,5 @@ { - "name": "create-node-app", + "name": "create-python-app-website", "version": "1.0.0", "description": "", "main": "index.js", @@ -8,14 +8,14 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/Create-Node-App/create-node-app.git" + "url": "git+https://github.com/Create-Python-App/website.git" }, "author": "ulises-jeremias", "license": "MIT", "bugs": { - "url": "https://github.com/Create-Node-App/create-node-app/issues" + "url": "https://github.com/Create-Python-App/website/issues" }, - "homepage": "https://github.com/Create-Node-App/create-node-app#readme", + "homepage": "https://github.com/Create-Python-App/website#readme", "dependencies": { "danger": "^13.0.10" }, From b15384e686574be72ffc901060b8493d53040d21 Mon Sep 17 00:00:00 2001 From: ulises-jeremias Date: Fri, 17 Jul 2026 12:51:35 -0300 Subject: [PATCH 2/4] feat: adapt homepage and UI copy for Create-Python-App Replace Node/SaaS flagship framing with FastAPI-first recipes, ecosystem sibling links, and PyPI-oriented chrome while keeping the existing site layout. Co-authored-by: Cursor --- .cspell.json | 27 ++++--- .github/ISSUE_TEMPLATE/config.yml | 2 +- .../[slug]/ExtensionDetailsClient.tsx | 10 +-- src/app/page.tsx | 28 ++++---- .../[slug]/TemplateDetailsClient.tsx | 52 +++++++------- .../extensions/[extensionSlug]/page.tsx | 8 +-- src/components/animated-terminal.tsx | 36 +++++----- src/components/contributors-section.tsx | 8 +-- src/components/docs-sidebar.tsx | 2 +- src/components/ecosystem-section.tsx | 39 +++++----- src/components/layout-shell.tsx | 28 ++++---- src/components/recipes-section.tsx | 71 ++++++++++--------- src/components/saas-ai-banner.tsx | 39 +++++----- src/components/site-header.tsx | 8 +-- src/components/template-extension-combo.tsx | 2 +- 15 files changed, 190 insertions(+), 170 deletions(-) diff --git a/.cspell.json b/.cspell.json index 61b9577..7c606d5 100644 --- a/.cspell.json +++ b/.cspell.json @@ -7,16 +7,20 @@ "alstr", "animatedgradient", "Behaviour", + "bunx", "Chakra", "checkov", "clsx", "cmdk", "cna", + "Codegen", "codepaths", "commitlint", "contenido", "controlado", "copypaste", + "CPA", + "cpa", "cpath", "crect", "cspell", @@ -29,7 +33,8 @@ "esbuild", "eslintcache", "extraida", - "extraΓ­da", + "extra\u00edda", + "fastapi", "grype", "hookform", "interactiva", @@ -39,8 +44,10 @@ "jspm", "jumpstart", "linaria", + "Lingui", "lintstagedrc", "lucide", + "makepkg", "megalinter", "mermaid", "minimatch", @@ -49,39 +56,40 @@ "npmjs", "nums", "Pagespeed", + "paru", "PBAC", "pgvector", "picomatch", "pids", + "PKGBUILD", "preconfigured", + "pygobject", + "PyPI", + "pypi", + "pywal", "radix", "Reakit", "recharts", - "bunx", - "Codegen", - "Lingui", - "makepkg", - "paru", - "PKGBUILD", "saas", - "Supabase", "Selenoid", "shadcn", "sonner", "srcset", "SSCCE", "stefanzweifel", + "Supabase", "syft", "tailwindcss", "transpiling", "trivy", "trufflehog", - "turborepo", "Turborepo", + "turborepo", "ulises", "ulisesjeremias", "unmemoized", "unvetted", + "uvx", "vaul", "vercel", "vite", @@ -90,6 +98,7 @@ "Vlang", "webextension", "workdir", + "wpgtk", "wscript" ], "ignorePaths": [ diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index d3c0a79..37c8b58 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -2,5 +2,5 @@ blank_issues_enabled: false contact_links: - name: πŸ’¬ General Question - url: https://github.com/Create-Node-App/create-node-app/discussions/categories/q-a + url: https://github.com/Create-Python-App/create-python-app/discussions/categories/q-a about: Please ask and answer questions as a discussion thread diff --git a/src/app/extensions/[slug]/ExtensionDetailsClient.tsx b/src/app/extensions/[slug]/ExtensionDetailsClient.tsx index 2a72434..e0ee44e 100644 --- a/src/app/extensions/[slug]/ExtensionDetailsClient.tsx +++ b/src/app/extensions/[slug]/ExtensionDetailsClient.tsx @@ -111,7 +111,7 @@ export function ExtensionDetailsClient({ extension, compatibleTemplates }: Exten

To use this extension with a compatible template, run the following command:

-

npx create-awesome-node-app --template [template-name] --addons {extension.slug}

+

uvx create-awesome-python-app --template [template-name] --addons {extension.slug}

With Specific Templates @@ -123,7 +123,7 @@ export function ExtensionDetailsClient({ extension, compatibleTemplates }: Exten className="bg-muted rounded-md p-4 font-mono text-sm overflow-x-auto shimmer mb-4" >

- npx create-awesome-node-app --template {template.slug} --addons {extension.slug} + uvx create-awesome-python-app --template {template.slug} --addons {extension.slug}

))} @@ -178,7 +178,7 @@ export function ExtensionDetailsClient({ extension, compatibleTemplates }: Exten
-

$ npx create-awesome-node-app \\

+

$ uvx create-awesome-python-app \\

--template [template-name] \\

--addons {extension.slug}

@@ -186,7 +186,7 @@ export function ExtensionDetailsClient({ extension, compatibleTemplates }: Exten

    -
  • Pre-configured development environment
  • -
  • Modern tooling and best practices
  • -
  • TypeScript support out of the box
  • -
  • Linting and formatting setup
  • -
  • Testing infrastructure ready to go
  • +
  • Pre-configured uv project with lockfile workflow
  • +
  • Ruff, pytest, and type checking out of the box
  • +
  • Python 3.12+ with modern typing patterns
  • +
  • AGENTS.md for AI assistant guardrails
  • +
  • Extension-ready structure for Docker, Postgres, and CI
@@ -127,7 +131,7 @@ export function TemplateDetailsClient({ template, compatibleExtensions }: Templa

To use this template, run the following command:

-

npx create-awesome-node-app --template {template.slug}

+

uvx create-awesome-python-app --template {template.slug}

With Extensions @@ -135,7 +139,7 @@ export function TemplateDetailsClient({ template, compatibleExtensions }: Templa

You can also add extensions to enhance your template:

- npx create-awesome-node-app --template {template.slug} --addons{' '} + uvx create-awesome-python-app --template {template.slug} --addons{' '} {compatibleExtensions.length >= 2 ? `${compatibleExtensions[0].slug} ${compatibleExtensions[1].slug}` : compatibleExtensions.length === 1 @@ -153,20 +157,20 @@ export function TemplateDetailsClient({ template, compatibleExtensions }: Templa

{[ { - title: 'TypeScript Support', - desc: 'Full TypeScript integration with properly configured tsconfig.', + title: 'uv & pyproject.toml', + desc: 'Dependencies and scripts managed with uv and a single pyproject.toml.', }, { - title: 'Modern Tooling', - desc: 'ESLint, Prettier, and other tools preconfigured for code quality.', + title: 'Quality tooling', + desc: 'Ruff, pytest, and mypy/pyright preconfigured for Python 3.12+.', }, { - title: 'Testing Setup', - desc: 'Testing framework and utilities ready for unit and integration tests.', + title: 'Testing setup', + desc: 'pytest fixtures and examples ready for unit and integration tests.', }, { - title: 'Optimized Build', - desc: 'Production-ready build configuration for optimal performance.', + title: 'Production patterns', + desc: 'Settings, health checks, and extension hooks aligned with CPA best practices.', }, ].map((f) => ( @@ -194,14 +198,14 @@ export function TemplateDetailsClient({ template, compatibleExtensions }: Templa
-

$ npx create-awesome-node-app \

+

$ uvx create-awesome-python-app \

--template {template.slug}

@@ -340,7 +344,7 @@ export function TemplateDetailsClient({ template, compatibleExtensions }: Templa size="lg" className="bg-gradient-to-r from-primary to-teal-600 hover:from-primary/90 hover:to-teal-600/90 glow transition-all duration-300" onClick={() => { - navigator.clipboard?.writeText?.(`npx create-awesome-node-app --template ${template.slug}`); + navigator.clipboard?.writeText?.(`uvx create-awesome-python-app --template ${template.slug}`); }} > Get Started diff --git a/src/app/templates/[slug]/extensions/[extensionSlug]/page.tsx b/src/app/templates/[slug]/extensions/[extensionSlug]/page.tsx index 1a8757e..4b0939b 100644 --- a/src/app/templates/[slug]/extensions/[extensionSlug]/page.tsx +++ b/src/app/templates/[slug]/extensions/[extensionSlug]/page.tsx @@ -193,7 +193,7 @@ export default function TemplateExtensionPage({

- $ npx create-awesome-node-app{' '} + $ uvx create-awesome-python-app{' '} --template {template.slug}{' '} --addons {extension.slug}

@@ -292,7 +292,7 @@ export default function TemplateExtensionPage({

- $ npx create-awesome-node-app{' '} + $ uvx create-awesome-python-app{' '} --template {template.slug}{' '} --addons {extension.slug}

@@ -301,7 +301,7 @@ export default function TemplateExtensionPage({
@@ -401,7 +401,7 @@ export default function TemplateExtensionPage({

- The composition-first scaffolding approach is coming to more ecosystems. Start with Node.js today β€” Python + The composition-first scaffolding approach is coming to more ecosystems. Start with Python today β€” Node.js and V are on the way.

diff --git a/src/components/layout-shell.tsx b/src/components/layout-shell.tsx index 4bcf926..960abc5 100644 --- a/src/components/layout-shell.tsx +++ b/src/components/layout-shell.tsx @@ -76,13 +76,13 @@ export function LayoutShell({ children }: { children: ReactNode }) { /> - create-node-app + create-python-app

- One command. Any stack. Compose templates and extensions into production-ready Node.js apps. + One command. Any stack. Compose templates and extensions into production-ready Python apps.

- © {new Date().getFullYear()} Create Awesome Node App. + © {new Date().getFullYear()} Create Awesome Python App.

{/* Col 2 β€” Resources */} @@ -95,7 +95,7 @@ export function LayoutShell({ children }: { children: ReactNode }) { { href: '/docs', label: 'Documentation' }, { href: '/docs/contributing', label: 'Contributing Guide' }, { - href: 'https://github.com/Create-Node-App/cna-templates/releases', + href: 'https://github.com/Create-Python-App/cpa-templates/releases', label: 'Changelog', external: true, }, @@ -117,19 +117,19 @@ export function LayoutShell({ children }: { children: ReactNode }) {

Community