diff --git a/package.json b/package.json index 8127e4d..2f032ca 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "input-otp": "^1.4.2", "lucide-react": "^0.485.0", "mermaid": "^11.16.0", - "next": "15.5.20", + "next": "15.5.21", "next-themes": "^0.4.6", "react": "^19.1.0", "react-day-picker": "^8.10.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2169dc9..53b0378 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -144,8 +144,8 @@ importers: specifier: ^11.16.0 version: 11.16.0 next: - specifier: 15.5.20 - version: 15.5.20(@types/node@24.13.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: 15.5.21 + version: 15.5.21(@types/node@24.13.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -757,70 +757,70 @@ packages: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 - '@next/env@15.5.20': + '@next/env@15.5.21': resolution: - { integrity: sha512-dXh51Wvddf8daEyBXryZZEe1FdVxEWx9lgaTseLZUtC1XP/W8Wri+Z+VPOElHlByk23CyqHdc2oVByX7wsTWsw== } + { integrity: sha512-hjJI/GfrjWHgNguRIBzItjRRu0m3Nrz17GhxsjuHfjIvg9hyg3239REd2dpI+bpMTFuVrVprHzEQ19m++cDtbw== } '@next/eslint-plugin-next@15.5.20': resolution: { integrity: sha512-MZUgFpVd9rGSZpb8bNceUWvkAZe6aQw/6h2SSqHQuYzKfaiEUEVPIO6mXqaBmiBEBSN1f1sOc1uV8GCM90oegg== } - '@next/swc-darwin-arm64@15.5.20': + '@next/swc-darwin-arm64@15.5.21': resolution: - { integrity: sha512-in0yXG7/pRBVjWeEl7f7ZZETpletSMFKXVS4GJgHENTPVrJFNJKPrYewa9rpZcvdjwFece5fZP0CK34G4PxowA== } + { integrity: sha512-ZfjqPEdi6TRC/fWx7UDbwb1fbVgyh2uD5tVTRKIDZDlYM+UNuE/LafDG2fwuAoZilADpABh46OY/F5qf9JjqLQ== } engines: { node: '>= 10' } cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.5.20': + '@next/swc-darwin-x64@15.5.21': resolution: - { integrity: sha512-0hsFshdPnTzGJdDTHeHJ+XPUShOpnyp9pUFDwDhqctsA0Cd8NcIVGRPtptYhgYY9DjkKgCDRkXxmgRc+CgT5Wg== } + { integrity: sha512-TlCf1NpxgQLzTrexuev75xwmNCJMd1/qkJpTVP1GRRcih93hlIBn1P72hkh8T0gnRFr6BmWksQtbyG3jT6jnww== } engines: { node: '>= 10' } cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.5.20': + '@next/swc-linux-arm64-gnu@15.5.21': resolution: - { integrity: sha512-DMvkoBtAABOzE6pMZRW/xNm7sKqql3wzzzZJ1R/d/rp4BCxv6LykouD3tHjGY8WdQqGpZs11t+R9AtjPxvvljw== } + { integrity: sha512-LXRsq1p+HvHSi7ygwNcSEEcK0zuo5jS75ZlqFHtOH+LF7qntXAJVJxah+1Pi/GyBm7EpkwU7m4EgbvIKrMqm9A== } engines: { node: '>= 10' } cpu: [arm64] os: [linux] libc: [glibc] - '@next/swc-linux-arm64-musl@15.5.20': + '@next/swc-linux-arm64-musl@15.5.21': resolution: - { integrity: sha512-RQmDfeYBtXV2FSId7dfA1hE6M/T6+g7wdbYnFQ47tw/gUBwV+CccLVejNmCGa9yLDitk83foeg8hl/3DjfYQ5g== } + { integrity: sha512-hyGixhFxpDKjqoev6l4KlcRBlt9AXWrGhDZwmwg49sMJM5tnKQPSi+SEj9+e5n+l/bthRGZUdh59GKIs6lQPRw== } engines: { node: '>= 10' } cpu: [arm64] os: [linux] libc: [musl] - '@next/swc-linux-x64-gnu@15.5.20': + '@next/swc-linux-x64-gnu@15.5.21': resolution: - { integrity: sha512-DkWLEdKajJwdGt27M3i1VEO2kelTvZrK6Pcb7JvW2BY+nofWm7FBsBNDj7g7Pr1NuQ5PLJvqEqYa20GTsBDnKQ== } + { integrity: sha512-qfE+YfOba6S2+13e8qn1/UozDVNZ2clBlrs8UtDoax4s8ediu6sq93z66OEHUYlb69Tffh5JTNkgtsAKiSuugg== } engines: { node: '>= 10' } cpu: [x64] os: [linux] libc: [glibc] - '@next/swc-linux-x64-musl@15.5.20': + '@next/swc-linux-x64-musl@15.5.21': resolution: - { integrity: sha512-rAO5b7pKHvX+ExdmJskusDXTNbiNZfptifIPZItbUx+AOXxxTydVBsPt7Oz84DRd5mY8e0DcE8kvLj3AIfjE6w== } + { integrity: sha512-BXLGG+EvIwp/Rrgl6HY8sqvD6BOUOIRz8/naDbeLNX7mlA5H2XRcL6MW/0IGnJISfj5BA9gNhFyJj5yOoiIDJQ== } engines: { node: '>= 10' } cpu: [x64] os: [linux] libc: [musl] - '@next/swc-win32-arm64-msvc@15.5.20': + '@next/swc-win32-arm64-msvc@15.5.21': resolution: - { integrity: sha512-Hp3zFsN8N8Kj9+vY6L4vnZ9EtA9eXyATu0q4EfGbZTiocgPUNSfz8NWhym6xvaOmHpJ8EuoypuU1WejCPsTFtg== } + { integrity: sha512-tNGNOlT0Wn7E4IMsSnufjXN/l2L2/AGdLLpa2vzS89SYCBuihgLn3ngLsIrvndAnWo9nAkus+4gZHTI/Ijx9HA== } engines: { node: '>= 10' } cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.5.20': + '@next/swc-win32-x64-msvc@15.5.21': resolution: - { integrity: sha512-T/L7CXpR1M0wij/xbF3rT1+7KvSkfOLr7C+ToHHWZTG2eKmb52C5WvsyGCBNtkVvDEUESWkRUbbqSH4rSbOCYQ== } + { integrity: sha512-DmIdWmC9p4rdNIiQqo8ap0+Cnj6kKtTZnuSCxoYydSc8sgpDgAg9wFhxplunak9imLV0pTvc5WVCOHwm5eHLtQ== } engines: { node: '>= 10' } cpu: [x64] os: [win32] @@ -3909,9 +3909,9 @@ packages: react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - next@15.5.20: + next@15.5.21: resolution: - { integrity: sha512-cvyS3/geydan1xLtE3FA8VCgdoQ/Gg/dlOldFkFCbB5VcVYJV7090hQLBnvTW2PwT76Z/dHdzDZCsVhZpoOlUA== } + { integrity: sha512-/TsdBtkWLhkl+NVL3Uqws2UphNd6IPzOtzSk1fHaf+0P7GQKLZDUytyhns/Ykbzdy9+YRjwG7ONvrHaaTDdFqQ== } engines: { node: ^18.18.0 || ^19.8.0 || >= 20.0.0 } hasBin: true peerDependencies: @@ -5484,34 +5484,34 @@ snapshots: '@tybys/wasm-util': 0.10.3 optional: true - '@next/env@15.5.20': {} + '@next/env@15.5.21': {} '@next/eslint-plugin-next@15.5.20': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.5.20': + '@next/swc-darwin-arm64@15.5.21': optional: true - '@next/swc-darwin-x64@15.5.20': + '@next/swc-darwin-x64@15.5.21': optional: true - '@next/swc-linux-arm64-gnu@15.5.20': + '@next/swc-linux-arm64-gnu@15.5.21': optional: true - '@next/swc-linux-arm64-musl@15.5.20': + '@next/swc-linux-arm64-musl@15.5.21': optional: true - '@next/swc-linux-x64-gnu@15.5.20': + '@next/swc-linux-x64-gnu@15.5.21': optional: true - '@next/swc-linux-x64-musl@15.5.20': + '@next/swc-linux-x64-musl@15.5.21': optional: true - '@next/swc-win32-arm64-msvc@15.5.20': + '@next/swc-win32-arm64-msvc@15.5.21': optional: true - '@next/swc-win32-x64-msvc@15.5.20': + '@next/swc-win32-x64-msvc@15.5.21': optional: true '@nodelib/fs.scandir@2.1.5': @@ -8245,9 +8245,9 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - next@15.5.20(@types/node@24.13.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + next@15.5.21(@types/node@24.13.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - '@next/env': 15.5.20 + '@next/env': 15.5.21 '@swc/helpers': 0.5.15 caniuse-lite: 1.0.30001743 postcss: 8.5.21 @@ -8255,14 +8255,14 @@ snapshots: react-dom: 19.1.0(react@19.1.0) styled-jsx: 5.1.6(react@19.1.0) optionalDependencies: - '@next/swc-darwin-arm64': 15.5.20 - '@next/swc-darwin-x64': 15.5.20 - '@next/swc-linux-arm64-gnu': 15.5.20 - '@next/swc-linux-arm64-musl': 15.5.20 - '@next/swc-linux-x64-gnu': 15.5.20 - '@next/swc-linux-x64-musl': 15.5.20 - '@next/swc-win32-arm64-msvc': 15.5.20 - '@next/swc-win32-x64-msvc': 15.5.20 + '@next/swc-darwin-arm64': 15.5.21 + '@next/swc-darwin-x64': 15.5.21 + '@next/swc-linux-arm64-gnu': 15.5.21 + '@next/swc-linux-arm64-musl': 15.5.21 + '@next/swc-linux-x64-gnu': 15.5.21 + '@next/swc-linux-x64-musl': 15.5.21 + '@next/swc-win32-arm64-msvc': 15.5.21 + '@next/swc-win32-x64-msvc': 15.5.21 sharp: 0.35.3(@types/node@24.13.3) transitivePeerDependencies: - '@babel/core' diff --git a/src/app/page.tsx b/src/app/page.tsx index f0405af..e6e1812 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -5,6 +5,7 @@ import { AnimatedTerminal } from '@/components/animated-terminal'; import { AnnouncementBanner } from '@/components/announcement-banner'; import { ContributorsSection } from '@/components/contributors-section'; import { CopyButton } from '@/components/copy-button'; +import { DiscordIcon } from '@/components/discord-icon'; import { EcosystemSection } from '@/components/ecosystem-section'; import { FeaturedTemplate } from '@/components/featured-template'; import { HeroSection } from '@/components/hero-section'; @@ -14,6 +15,7 @@ import { StatsBar } from '@/components/stats-bar'; import { TemplateCategories } from '@/components/template-categories'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@/components/ui/card'; +import { DISCORD_INVITE_URL } from '@/lib/community'; import { getTemplatesData } from '@/lib/data'; const PRIMARY_COMMAND = 'uvx create-awesome-python-app my-app'; @@ -31,11 +33,14 @@ export default async function Home() {
} + label="NEW" message={ - <>New: FastAPI Starter — production-ready API with uv, Ruff, pytest, and composable Python extensions. + <>Join Create Awesome on Discord — chat, good first issues, and collaboration across Node / Python / V. } - ctaHref="/templates/fastapi-starter" - ctaLabel="Explore template" + ctaHref={DISCORD_INVITE_URL} + ctaLabel="Join Discord" + ctaExternal />