Skip to content

Commit 9eb05fb

Browse files
fix: remove CNA leftovers and mark Create Vlang App as live
Correct footer/stats/category maps for the Python bank, update ecosystem copy so V is live, and clean remaining Node/React fixture copy.
1 parent e3c74ea commit 9eb05fb

9 files changed

Lines changed: 96 additions & 118 deletions

File tree

README.md

Lines changed: 22 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,37 @@
1-
# Create Awesome Python App - Official Website
1+
<div align="center">
22

3-
[![PyPI](https://img.shields.io/pypi/v/create-awesome-python-app?style=flat-square&color=3776ab)](https://pypi.org/project/create-awesome-python-app/)
4-
[![Templates](https://img.shields.io/badge/templates-cpa--templates-blue?style=flat-square)](https://github.com/Create-Python-App/cpa-templates)
5-
[![GitHub org](https://img.shields.io/badge/GitHub-Create--Python--App-black?style=flat-square&logo=github)](https://github.com/Create-Python-App)
6-
7-
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).
3+
# Create Awesome Python App — Website
84

9-
## Project Links
5+
**Docs and catalog site for the Create Python App scaffolding toolkit.**
106

11-
- [Official website](https://create-awesome-python-app.vercel.app)
12-
- [CLI package on PyPI](https://pypi.org/project/create-awesome-python-app/)
13-
- [Main Create-Python-App repository](https://github.com/Create-Python-App/create-python-app)
14-
- [Templates and extensions catalog](https://github.com/Create-Python-App/cpa-templates)
15-
- [Create-Python-App GitHub organization](https://github.com/Create-Python-App)
16-
17-
> [!TIP]
18-
> 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:
19-
>
20-
> ```bash
21-
> uvx create-awesome-python-app my-api --template fastapi-starter
22-
> ```
7+
[![Website](https://img.shields.io/badge/site-create--awesome--python--app.vercel.app-blue?style=flat-square)](https://create-awesome-python-app.vercel.app)
8+
[![CLI](https://img.shields.io/badge/CLI-create--awesome--python--app-3B82F6?style=flat-square)](https://github.com/Create-Python-App/create-python-app)
9+
[![Templates](https://img.shields.io/badge/templates-cpa--templates-blue?style=flat-square)](https://github.com/Create-Python-App/cpa-templates)
10+
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](LICENSE)
2311

24-
## Features
12+
</div>
2513

26-
- ⚡️ **Instant HMR (Hot Module Replacement)** - Leveraging Next.js for fast refreshes and updates during development.
27-
- ⚛ **React Integration** - Utilizes [React](https://reactjs.org/) for building the user interface.
28-
- 🦾 **TypeScript Support** - Ensures type safety with [TypeScript](https://www.typescriptlang.org/).
14+
---
2915

30-
## Extra Documentation
16+
## Install the CLI
3117

32-
Discover more about the project structure, available scripts, and much more in the [docs](./docs) folder!
18+
```bash
19+
uvx create-awesome-python-app@latest my-app --template fastapi-starter
20+
```
3321

34-
## Pre-packed Development Tools
22+
## Catalog
3523

36-
- [TypeScript](https://www.typescriptlang.org/) - For type-safe code.
37-
- [eslint](https://eslint.org/) - A linter tool for identifying and reporting on patterns in JavaScript and JSX.
38-
- [prettier](https://prettier.io/) - An opinionated code formatter for clean and consistent code style.
39-
- [husky](https://www.npmjs.com/package/husky) - Simplifies the use of Git hooks in your project.
40-
- [lint-staged](https://www.npmjs.com/package/lint-staged) - Allows running linters on git staged files to catch errors before they're committed.
24+
Vendored registry for the docs site (when present under `public/data/`) mirrors [cpa-templates](https://github.com/Create-Python-App/cpa-templates).
4125

42-
## Quick Start
26+
## Development
4327

44-
```sh
45-
fnm use
28+
```bash
4629
pnpm install
47-
pnpm run dev
30+
pnpm dev
4831
```
4932

50-
## Development Workflow
51-
52-
For most development work, you'll primarily use `pnpm run dev`. However, you have additional scripts at your disposal for various tasks:
53-
54-
| pnpm run <script> | Description |
55-
| ------------------ | --------------------------------------------------------------------------------------------------- |
56-
| `npm run dev` | Starts the local development server for building and previewing your application. |
57-
| `npm run format` | Formats the codebase using [Prettier](https://prettier.io/) to ensure consistent code styling. |
58-
| `npm run lint` | Runs linting on the codebase to identify and report on patterns with [eslint](https://eslint.org/). |
59-
| `npm run lint:fix` | Automatically fixes linting errors in the codebase where possible. |
60-
61-
## Production
62-
63-
Scripts for preparing and viewing the production version:
64-
65-
| pnpm run <script> | Description |
66-
| ----------------- | -------------------------------------------------------------------------------------------- |
67-
| `npm run start` | Serves your application using the production setup, ensuring it's ready for deployment. |
68-
| `npm run build` | Compiles the application into the `dist/` directory, preparing it for production deployment. |
69-
70-
## Contributing
71-
72-
Bug reports, feature requests, and pull requests are welcome on the [Create-Python-App/website](https://github.com/Create-Python-App/website) repository!
73-
74-
## 👥 Contributors
75-
76-
<a href="https://github.com/Create-Python-App/website/contributors">
77-
<img src="https://contrib.rocks/image?repo=Create-Python-App/website" alt="Contributors to Create-Python-App/website"/>
78-
</a>
33+
## Related
7934

80-
Made with [contributors-img](https://contrib.rocks).
35+
- [create-python-app](https://github.com/Create-Python-App/create-python-app) — CLI
36+
- [cpa-templates](https://github.com/Create-Python-App/cpa-templates) — templates & extensions
37+
- [Create-Python-App org](https://github.com/Create-Python-App)

src/app/docs/templates/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export default async function DocsTemplatesPage() {
5050
<Link href="/docs/extensions" className="text-primary hover:underline">
5151
extensions
5252
</Link>{' '}
53-
on top of it to add functionality like state management, testing, or UI libraries.
53+
on top of it to add functionality like Docker, Postgres overlays, or CI workflows.
5454
</p>
5555

5656
<div className="rounded-md bg-muted p-4">

src/components/ecosystem-section.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,9 @@ const ECOSYSTEM: EcosystemEntry[] = [
6363
name: 'Create Vlang App',
6464
slug: 'create-vlang-app',
6565
description:
66-
'Scaffolding for the V language — by a V core team member and author of vsl, vtl, rxv, and setup-v. Coming soon.',
67-
status: 'planned',
68-
href: 'https://github.com/Create-Vlang-App',
66+
'Scaffolding for the V language — by a V core team member and author of vsl, vtl, rxv, and setup-v. Shipped at 0.1.0.',
67+
status: 'production',
68+
href: 'https://create-vlang-app.vercel.app',
6969
colors: {
7070
node1: '#a78bfa',
7171
node2: '#06b6d4',
@@ -150,7 +150,7 @@ export function EcosystemSection() {
150150
</h2>
151151
<p className="max-w-2xl text-muted-foreground md:text-lg">
152152
The composition-first scaffolding approach spans ecosystems. Start with Python Beta today — Node.js is
153-
production-ready, and V is on the way.
153+
production-ready, and Create Vlang App is live.
154154
</p>
155155
</div>
156156

src/components/layout-shell.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,15 +175,15 @@ export function LayoutShell({ children }: { children: ReactNode }) {
175175
</span>
176176
</Link>
177177
<Link
178-
href="https://github.com/Create-Vlang-App"
178+
href="https://create-vlang-app.vercel.app"
179179
target="_blank"
180180
rel="noreferrer"
181181
className="flex items-center gap-2 text-sm transition-colors hover:text-foreground"
182182
>
183183
<span className="h-2 w-2 rounded-full bg-violet-500 shrink-0" />
184184
<span className="text-muted-foreground hover:text-foreground transition-colors">
185185
V language
186-
<span className="ml-1.5 text-[10px] font-medium text-muted-foreground">soon</span>
186+
<span className="ml-1.5 text-[10px] font-medium text-primary/80">live</span>
187187
</span>
188188
</Link>
189189
</nav>

src/components/stats-bar.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ interface Stat {
99
}
1010

1111
const STATS: Stat[] = [
12-
{ value: 10, label: 'Templates' },
13-
{ value: 51, label: 'Extensions' },
14-
{ value: 12, label: 'Categories' },
12+
{ value: 5, label: 'Templates' },
13+
{ value: 12, label: 'Extensions' },
14+
{ value: 9, label: 'Categories' },
1515
{ value: 'MIT', label: 'Licensed' },
1616
];
1717

src/components/template-card.tsx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,15 @@ interface TemplateCardProps {
1010
}
1111

1212
const categoryColors: Record<string, string> = {
13-
'frontend-applications': 'border-l-blue-500',
1413
'backend-applications': 'border-l-green-500',
15-
'full-stack-applications': 'border-l-violet-500',
16-
'monorepo-boilerplate': 'border-l-blue-500',
17-
'user-acceptance-testing': 'border-l-orange-500',
18-
'web-extension': 'border-l-cyan-500',
14+
ci: 'border-l-emerald-500',
15+
containers: 'border-l-blue-500',
16+
database: 'border-l-green-600',
17+
editor: 'border-l-sky-500',
18+
'cli-applications': 'border-l-cyan-500',
19+
observability: 'border-l-violet-500',
20+
security: 'border-l-amber-500',
21+
monorepo: 'border-l-lime-500',
1922
};
2023

2124
export function TemplateCard({ template }: TemplateCardProps) {

src/components/template-categories.tsx

Lines changed: 46 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ArrowRight, Code, Database, GitBranch, Globe, Layers, TestTube } from 'lucide-react';
1+
import { ArrowRight, Box, Code, Container, Database, Eye, GitBranch, Layers, Shield, Terminal } from 'lucide-react';
22
import Link from 'next/link';
33
import type React from 'react';
44

@@ -11,54 +11,72 @@ interface TemplateCategoriesProps {
1111
}
1212

1313
export function TemplateCategories({ categories }: TemplateCategoriesProps) {
14-
// Map of category slugs to their respective icons
1514
const categoryIcons: Record<string, React.ReactNode> = {
16-
'frontend-applications': <Code className="h-5 w-5 text-primary" />,
17-
'backend-applications': <Database className="h-5 w-5 text-green-600" />,
18-
'fullstack-applications': <Layers className="h-5 w-5 text-blue-500" />,
19-
'monorepo-boilerplate': <GitBranch className="h-5 w-5 text-green-500" />,
20-
'user-acceptance-testing': <TestTube className="h-5 w-5 text-blue-500" />,
21-
'web-extension': <Globe className="h-5 w-5 text-blue-500" />,
15+
'backend-applications': <Code className="h-5 w-5 text-primary" />,
16+
ci: <GitBranch className="h-5 w-5 text-green-500" />,
17+
containers: <Container className="h-5 w-5 text-blue-500" />,
18+
database: <Database className="h-5 w-5 text-green-600" />,
19+
editor: <Box className="h-5 w-5 text-blue-400" />,
20+
'cli-applications': <Terminal className="h-5 w-5 text-cyan-600" />,
21+
observability: <Eye className="h-5 w-5 text-violet-500" />,
22+
security: <Shield className="h-5 w-5 text-amber-500" />,
23+
monorepo: <Layers className="h-5 w-5 text-green-500" />,
2224
};
2325

24-
// Map of category slugs to their respective color classes
2526
const categoryColors: Record<string, { bg: string; hover: string; border: string }> = {
26-
'frontend-applications': {
27+
'backend-applications': {
2728
bg: 'from-primary/20 to-green-600/20',
2829
hover: 'from-primary/40 to-green-600/40',
2930
border: 'border-primary/40',
3031
},
31-
'backend-applications': {
32+
ci: {
33+
bg: 'from-green-500/20 to-blue-500/20',
34+
hover: 'from-green-500/40 to-blue-500/40',
35+
border: 'border-green-500/40',
36+
},
37+
containers: {
38+
bg: 'from-blue-500/20 to-cyan-500/20',
39+
hover: 'from-blue-500/40 to-cyan-500/40',
40+
border: 'border-blue-500/40',
41+
},
42+
database: {
3243
bg: 'from-green-600/20 to-blue-500/20',
3344
hover: 'from-green-600/40 to-blue-500/40',
3445
border: 'border-green-600/40',
3546
},
36-
'fullstack-applications': {
37-
bg: 'from-blue-500/20 to-green-600/20',
38-
hover: 'from-blue-500/40 to-green-600/40',
39-
border: 'border-blue-500/40',
47+
editor: {
48+
bg: 'from-blue-400/20 to-primary/20',
49+
hover: 'from-blue-400/40 to-primary/40',
50+
border: 'border-blue-400/40',
4051
},
41-
'monorepo-boilerplate': {
42-
bg: 'from-green-500/20 to-green-500/20',
43-
hover: 'from-green-500/40 to-green-500/40',
44-
border: 'border-green-500/40',
52+
'cli-applications': {
53+
bg: 'from-cyan-500/20 to-green-600/20',
54+
hover: 'from-cyan-500/40 to-green-600/40',
55+
border: 'border-cyan-500/40',
4556
},
46-
'user-acceptance-testing': {
47-
bg: 'from-blue-500/20 to-orange-500/20',
48-
hover: 'from-blue-500/40 to-orange-500/40',
49-
border: 'border-blue-500/40',
57+
observability: {
58+
bg: 'from-violet-500/20 to-blue-500/20',
59+
hover: 'from-violet-500/40 to-blue-500/40',
60+
border: 'border-violet-500/40',
5061
},
51-
'web-extension': {
52-
bg: 'from-blue-500/20 to-cyan-500/20',
53-
hover: 'from-blue-500/40 to-cyan-500/40',
54-
border: 'border-blue-500/40',
62+
security: {
63+
bg: 'from-amber-500/20 to-green-600/20',
64+
hover: 'from-amber-500/40 to-green-600/40',
65+
border: 'border-amber-500/40',
66+
},
67+
monorepo: {
68+
bg: 'from-green-500/20 to-primary/20',
69+
hover: 'from-green-500/40 to-primary/40',
70+
border: 'border-green-500/40',
5571
},
5672
};
5773

74+
const fallback = categoryColors['backend-applications'];
75+
5876
return (
5977
<>
6078
{categories.map((category) => {
61-
const colors = categoryColors[category.slug] || categoryColors['frontend-applications'];
79+
const colors = categoryColors[category.slug] || fallback;
6280
const icon = categoryIcons[category.slug] || <Code className="h-5 w-5 text-primary" />;
6381

6482
return (

src/lib/__tests__/schemas.test.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ describe('categorySchema', () => {
77
slug: 'frontend-applications',
88
name: 'Frontend Applications',
99
description: 'Templates for building web interfaces.',
10-
details: 'Discover templates for React, Vue, and other frameworks.',
11-
labels: ['Frontend', 'UI', 'React'],
10+
details: 'Discover templates for FastAPI, Django, and CLIs.',
11+
labels: ['API', 'FastAPI', 'Python'],
1212
};
1313
expect(categorySchema.safeParse(validCategory).success).toBe(true);
1414
});
@@ -26,11 +26,11 @@ describe('templateSchema', () => {
2626
it('should validate a valid template', () => {
2727
const validTemplate = {
2828
name: 'FastAPI Starter',
29-
description: 'A fast React boilerplate with Vite.',
29+
description: 'A FastAPI API starter with uv.',
3030
url: 'https://github.com/Create-Python-App/cpa-templates/tree/main/templates/fastapi-starter',
3131
type: 'react',
3232
category: 'frontend-applications',
33-
labels: ['React', 'Vite', 'TypeScript'],
33+
labels: ['FastAPI', 'uv', 'Python'],
3434
slug: 'fastapi-starter',
3535
};
3636
expect(templateSchema.safeParse(validTemplate).success).toBe(true);
@@ -39,11 +39,11 @@ describe('templateSchema', () => {
3939
it('should reject a template with invalid url', () => {
4040
const invalidTemplate = {
4141
name: 'FastAPI Starter',
42-
description: 'A fast React boilerplate.',
42+
description: 'A FastAPI starter.',
4343
url: 'not-a-url',
4444
type: 'react',
4545
category: 'frontend-applications',
46-
labels: ['React'],
46+
labels: ['fastapi'],
4747
slug: 'fastapi-starter',
4848
};
4949
expect(templateSchema.safeParse(invalidTemplate).success).toBe(false);
@@ -84,11 +84,11 @@ describe('templatesDataSchema', () => {
8484
templates: [
8585
{
8686
name: 'FastAPI Starter',
87-
description: 'A fast React boilerplate.',
87+
description: 'A FastAPI starter.',
8888
url: 'https://github.com/example/fastapi-starter',
8989
type: 'react',
9090
category: 'frontend-applications',
91-
labels: ['React'],
91+
labels: ['fastapi'],
9292
slug: 'fastapi-starter',
9393
},
9494
],

src/lib/__tests__/utils.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ describe('validateTemplate', () => {
2222
it('should return data for valid template', () => {
2323
const validData = {
2424
name: 'FastAPI Starter',
25-
description: 'A fast React boilerplate.',
25+
description: 'A FastAPI starter.',
2626
url: 'https://github.com/Create-Python-App/cpa-templates/tree/main/templates/fastapi-starter',
2727
type: 'react',
2828
category: 'frontend-applications',
29-
labels: ['React', 'Vite'],
29+
labels: ['FastAPI', 'uv'],
3030
slug: 'fastapi-starter',
3131
};
3232
const result = validateTemplate(validData);

0 commit comments

Comments
 (0)