CI 中设置硬性性能预算:JS 包体积、单图大小、字体预加载数量与移动端/桌面端 Lighthouse 分数,超出即失败
astro-performance-starter — Astro 启动器模板
作者 clownware
基于 Astro 的启动器模板,默认零 JS 基线,内置设计令牌与 CI 性能预算门禁,附带分层 AI 协作规则。
看看你的网站会是什么样
浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。
全部页面与视图 3
截图用于了解视觉与布局,交互效果请以实际项目为准。
值得关注的模板亮点
从已有项目资料中,快速了解它的特点。
图片默认输出 AVIF 并带响应式 srcset,栅格图源文件与构建产物均受 200KB 上限检查
零 JS 基线,交互组件按 client:visible → client:idle → client:media → client:load 顺序尽量延迟水合
使用 CSS 原生 @theme 的设计令牌系统,配合原子化组件目录结构
内置分层 AI 协作规则(CLAUDE.md 与 .claude/),并生成 AGENTS.md 供多种 AI 工具读取
提供 Playwright 端到端测试与 Vitest 单元测试配置
模板详细介绍
该模板是一个 Astro 启动器,面向需要把性能约束固化到开发流程中的站点项目。默认输出零 JS 基线,仅在需要交互时使用岛屿组件;同时提供 CSS 原生设计令牌系统与内容集合(含 MDX)。
模板把性能预算写入 CI:对 JS 包体积、单张栅格图片大小(源文件与构建产物)、字体预加载数量以及移动端与桌面端的 Lighthouse 分数设置硬性阈值,超出即构建失败。图片管线默认输出 AVIF 并带响应式 srcset,栅格图有 200KB 上限,字体预加载每页不超过 2 个。
仓库还包含一套分层 AI 协作规则(CLAUDE.md 与 .claude/ 目录),并生成 AGENTS.md 供多种 AI 工具读取;规则以 halt-on-violation 方式与质量门禁绑定。文档目录中仅 docs/adr/ 会进入构建并渲染在 /adr/ 路径下。
使用前需注意:模板依赖 Node.js 与 pnpm(通过 Corepack 固定版本),首次 dev 或 build 会自动编译设计令牌。演示图片、字体、图标等第三方素材的许可需单独核对,代码本身采用 MIT 许可。
适合你的项目吗?
适用场景
- 新建 Astro 站点并希望从第一次提交起就由 CI 守住性能预算
- 把现有站点与本模板的 ADR 和预算对照,做性能审计与回归排查
- 为个人站点保留 Lighthouse 门禁与图片、字体、JS 体积检查,同时去掉较重的协作流程
- 需要一套可被多种 AI 编码工具读取的工程规则与质量门禁
适合人群
- 使用 Astro 并接受 Node.js 与 pnpm 工具链的开发者
- 希望把性能预算写成 CI 门禁而非文档建议的团队或个人
- 需要内容集合与 MDX 支持的内容型站点
- 愿意按模板约定维护 ADR 与 AI 规则文件的维护者
上手与定制指南
结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。
- 1
可通过 GitHub 的 Use this template 或 pnpm create astro 指定该模板来创建项目
- 2
需要 Node.js 与 pnpm;没有 pnpm 时先运行 corepack enable
- 3
首次运行 dev 或 build 会自动编译设计令牌
- 4
克隆后需按 README 表格修改 src/config.ts、package.json、LICENSE.txt、导航与 bio 内容、logo 与 favicon、tokens/base.json 等文件
- 5
演示图片、字体、图标等第三方素材的许可需单独核对,不能仅凭代码的 MIT 许可判断
授权与来源资料
使用条件与限制
免费使用 · 保留许可声明本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。
使用时需要遵守
- 允许免费使用、修改、商用和分发该版本代码。
- 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
- 代码按现状提供;担保与责任限制以原许可证及适用法律为准。
额外费用与待核对事项
- 使用前需具备 Node.js 与 pnpm 工具链;若未安装 pnpm,需先运行 corepack enable 启用包管理器,否则无法安装依赖与运行脚本。
- 首次运行 dev 或 build 时会自动编译设计令牌,属于构建流程的一部分,需保证该步骤可正常执行。
- 运行 Lighthouse 性能报告命令需要先启动本地开发服务器,否则该命令无法产出报告。
- 变异测试(Stryker)为可选高级功能,不在克隆关键路径与 quality:ci 中,运行缓慢,本地很少执行,可按需移除。
- docs/ 目录中仅 docs/adr/ 会进入构建并渲染在 /adr/ 路径下,其余文档不会被打包发布。
- 克隆后需按 README 表格手动修改 src/config.ts、package.json、LICENSE.txt、导航与 bio 内容、logo 与 favicon、tokens/base.json 等文件,才能完成个性化配置。
- 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
- 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
查看原文依据
Permission is hereby granted, free of charge
许可证原文
**No pnpm?** Run `corepack enable` first
README 原文
Token compilation happens automatically on first `dev` or `build` command.
README 原文
`pnpm run perf:lighthouse` | Lighthouse HTML report (requires running dev server)
README 原文
**Mutation testing** — remove `.github/workflows/mutation.yml`, the `test:mutate` script, and Stryker from devDependencies
README 原文
Only `docs/adr/` is published (rendered at `/adr/` — ADR-062); everything else stays out of the build.
README 原文
https://github.com/clownware/astro-performance-starter/blob/master/LICENSE.txthttps://github.com/clownware/astro-performance-starter/blob/master/README.mdupdate these files to make the template yours
README 原文
DeepSeek 根据仓库许可证和 README 整理 ·2026-10-03。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。
项目核对记录与介绍依据
模板资料
- 来源平台
- GitHub
- 资料与维护参考分
- 资料较完整 · 83 / 100
- 技术栈
- Astro
- 网站类型
- 启动器
这个分数如何计算
本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。
这个项目需要核对什么
- 记录的仓库更新时间
- 2026-09-30
- 截图检查日期
- 2026-10-03
已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。
目录记录的主要技术栈是 Astro。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。
查看具体选型方法 →介绍的制作与核对状态
介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。
审核声明: [email protected] · 2026-10-04
查看当时使用的来源资料
SHA-256: f6c7c6cfafc3b6a2d01804c496269d90b6cd2d923db1218ccce5bd0592078787
2026-10-03T16:29:40.795Z
来源文件 / 仓库# Astro Performance Starter **Hard performance budgets, enforced on every PR • Zero-JS baseline • Astro 7** [](https://github.com/clownware/astro-performance-starter/actions/workflows/ci.yml) [](./LICENSE.txt) [](https://nodejs.org/) [](#-performance-budgets) **[🚀 Live Demo](https://clownware.github.io/astro-performance-starter/)** • [Quick Start](#-quick-start) • [Documentation](#-documentation) • [Contributing](#-contributing) ---  ## Why This Starter? Most Astro templates hand you a fast first commit and no way to keep it fast. This one ships a **performance ratchet** — hard budgets wired into CI that fail the build when a change regresses them. The Lighthouse score is the _evidence_; the enforcement is the point. - **Enforced, not aspirational** — halt-on-violation CI gates on JS bundle size, per-image size (source _and_ build output), font-preload count, and Lighthouse on **both mobile and desktop**. A regression fails the PR — it doesn't ship. ([ADR-039](./docs/adr/039-halt-on-violation-enforcement.md)) - **Images can't sink you** — the #1 real-world perf killer is gated: Astro `<Image>` → AVIF with responsive `srcset`, plus a 200KB-per-raster ceiling checked in CI (details in the next section). - **Agentic discipline built in** — Layered AI constitution (`CLAUDE.md` + `.claude/`), role-separated workflow. Your agent clears the same gates you do. - **Fast by default, measured** — ~48KB raw JS (~17KB gzipped) _total_ across the site; ~19–21KB gzipped CSS per page; 99 Performance / CLS 0 on home and blog, **desktop and mobile**. - **Modern stack** — Astro 7.x · TypeScript 5.x (strict) · Tailwind 4.x · Biome 2.x · Node 24.x · pnpm 11.x - **Accessible** — WCAG AA via semantic HTML, ARIA, and validated contrast; accessibility gated ≥ 95 in CI (most routes score 100). ## 🖼️ The image pipeline (the #1 perf killer) One oversized hero image can cost more Lighthouse points than every other issue combined — it's the single most common regression adopters hit. So images are a first-class, gated concern here, not an afterthought: - **Modern formats by default** — [`src/components/atoms/Image.astro`](./src/components/atoms/Image.astro) wraps Astro's `<Image>`, emitting **AVIF** with responsive `srcset` and lazy loading. Raw `<img>` for raster is discouraged; SVG passes through untouched. ([ADR-030](./docs/adr/030-image-optimisation-defaults.md)) - **A hard per-image ceiling** — **200KB per raster file**, enforced in CI on both source (`public/`, `src/`) _and_ build output (`dist/`) — so a heavyweight PNG, including an accidental fallback emitted alongside AVIF/WebP, fails the build. Override with `IMAGE_BUDGET_KB`. ([ADR-057](./docs/adr/057-image-budget-gate.md)) - **Font preloads capped** — ≤ 2 preloaded fonts per page, so preloads don't crowd out the LCP image. ([ADR-058](./docs/adr/058-font-preload-budget.md)) ## ⚡ Quick Start ### Use as a GitHub template Click **Use this template** on GitHub, then: ```bash git clone https://github.com/YOUR_USERNAME/your-site.git cd your-site pnpm install pnpm run dev ``` ### Or scaffold with the Astro CLI ```bash pnpm create astro@latest my-site -- --template clownware/astro-performance-starter cd my-site pnpm run dev ``` Open **<http://localhost:4321/>** — you're up and running. > **First build?** Token compilation happens automatically on first `dev` or `build` command. > > **No pnpm?** Run `corepack enable` first, or see the [onboarding guide](https://docs.clownware.org/astro/getting-started/onboarding/). ### One-click deploy [](https://deploy.workers.cloudflare.com/?url=https://github.com/clownware/astro-performance-starter) [](https://app.netlify.com/start/deploy?repository=https://github.com/clownware/astro-performance-starter) [](https://vercel.com/new/clone?repository-url=https://github.com/clownware/astro-performance-starter) ## 🛠️ Personalization After cloning, update these files to make the template yours: | File | What to change | |------|---------------| | `src/config.ts` | Site title, author, GitHub URL, docs URL, social links | | `package.json` | `name`, `description`, `author`, `repository`, `homepage`, `bugs` | | `LICENSE.txt` | Copyright year and holder name | | `src/content/navigation/header.json` | Navigation links and GitHub URL | | `src/content/bio/default.mdx` | Name, title, social links, bio text | | `public/logo.svg` | Your logo / wordmark | | `public/favicon.svg` | Your favicon | | `tokens/base.json` | Brand colors | | `.github/CODEOWNERS` | Uncomment and set your GitHub username | | `CHANGELOG.md` | Start fresh for your project | | `README.md` | CI badge URL, deploy buttons, `--template` command | ## ✨ What's Inside - **Astro** 7.x with zero-JS by default (islands when needed) - **TypeScript** 5.x in strict mode for type safety - **Tailwind CSS** 4.x with CSS-native `@theme` design token system - **Biome** 2.x for formatting and linting (20x faster than ESLint+Prettier) - **Node.js** 24.x (locked via `.nvmrc`) - **pnpm** 10.x (pinned via `packageManager` + Corepack; `engines` declares the floor) - Atomic design structure in `src/components/` - Content collections with MDX support - GitHub Actions CI/CD (build, lint, type-check, security audit) - Pre-commit hooks for code quality - E2E tests with Playwright, unit tests with Vitest ## 📚 Documentation Everything you need to customize and extend lives in `docs/`: - **[Onboarding Guide](https://docs.clownware.org/astro/getting-started/onboarding/)** — Detailed setup and concepts - **[Launch Demo](https://docs.clownware.org/astro/getting-started/launch-demo/)** — Get running in 5-10 minutes - **[Quick Deploy](https://docs.clownware.org/astro/getting-started/quick-deploy/)** — Ship to production in under an hour - **[Implementation Roadmap](./docs/README.md#implementation-roadmap)** — Phased development guide - **[AI Context Guides](./docs/ai-context/)** — Optimized for AI assistants > The `docs/` folder contains extensive reference material. Only `docs/adr/` is published (rendered at `/adr/` — ADR-062); everything else stays out of the build. ## 🎨 Progressive Implementation One path, three natural stopping points: - **Foundation (Phases 0–4)** — Working site skeleton with design system, content schemas, and CI pipeline — pre-configured in template - **Build (Phases 5–8)** — Components, pages, content, and QA — scope each phase to Essential / Recommended / Advanced - **Polish (Phases 9–12)** — Performance budgets, deployment, documentation, monitoring — stop when goals are met See the **[Implementation Guide](./docs/README.md#implementation-roadmap)** for details. ## 🤖 Working with AI Agents This template is a reference implementation of the **layered AI constitution** pattern — agent-readable rules with halt-on-violation enforcement. Drop Claude (or any agent) into the repo and it works under the same rules you do. The constitution layers responsibility: - **[`CLAUDE.md`](./CLAUDE.md)** — top-level entry: stack, scope boundaries, halt conditions - **`.claude/engineering.md`** — components, design system, TypeScript, testing discipline ([ADR-037](./docs/adr/037-testing-philosophy.md)) - **`.claude/workflow.md`** — three-pass Architect → Coder → Reviewer ([ADR-038](./docs/adr/038-agent-roles.md)), quality gate ([ADR-039](./docs/adr/039-halt-on-violation-enforcement.md)) - **`.claude/stack.md`** — tooling, versions, performance budgets - **`.claude/roles/`** — per-pass prompts (architect, coder, reviewer) Every rule names its halt condition with a stated reason — no soft guidance. `pnpm quality:ci` halts on broken tests, lint, types, or markdown — the same gate your agent must clear before claiming done. ```bash pnpm quality:ci # the halt-on-violation gate — agent must clear this before claiming done ``` Pattern source: Robert C. Martin and Justin Martin's _Clean AI: Agentic Discipline_ series. Layered-constitution precedent: [`unclebob/swarm-forge`](https://github.com/unclebob/swarm-forge). ### Multi-tool AI Context The constitution is the canonical source. The same rules ship in multiple formats so the discipline is tool-agnostic: | Tool | File(s) | What it does | |------|---------|-------------| | All modern AI tools | `AGENTS.md` (root) | Cross-tool spine — read natively by Cursor, Codex CLI, Copilot, Windsurf, Aider, Devin, Zed, Continue, Amp, Amazon Q | | Claude Code | `CLAUDE.md` + `.claude/` | Constitution, layered engineering/workflow/stack files, skills, subagents | | Maintenance | `pnpm agents:build` | Regenerates `AGENTS.md` from the layered source files; CI fails on drift | One source of truth, every tool stays in sync. Edit the layered files in `.claude/` (or `CLAUDE.md` for halt-on-violation rules) and run `pnpm agents:build`. See [ADR-045](docs/adr/045-cross-tool-agents-spine.md) for the cross-tool spine rationale and [ADR-036](docs/adr/036-layered-constitution.md) for the layering. Entry points: - **Agent workflow**: `.claude/workflow.md` — three-pass pattern, quality gate, ADR discipline - **Architectural constraints**: `docs/adr/` — every Accepted ADR is a rule the agent must respect - **Performance limits**: budgets in `.claude/stack.md`, checked before adding dependencies - **Zero config**: no MCP server, no API — well-structured markdown any agent can read See [AI Context Setup Guide](docs/ai-context/ai-rules-setup.md) for the multi-tool sync workflow. ## 🔍 Use as an audit reference You don't have to _build on_ this template to benefit from it — you can point an agent at an **existing** site and use this repo as the standard to audit against. In one real case that workflow took a personal site from **Lighthouse 73 to 100** (desktop) by surfacing exactly the regressions these gates encode. The workflow: 1. Clone this repo next to your project (or open both side by side). 2. Tell your agent: _"Audit this site against the norms in the astro-performance-starter repo — its ADRs, `.claude/stack.md` budgets, and CI gates. Report deviations ranked by performance impact."_ 3. Have it check what this template treats as non-negotiable: - **Images** — modern formats, responsive `srcset`, every raster under the 200KB ceiling (source _and_ shipped). Usually the single biggest win. - **Islands** — Preact for interactive islands ([ADR-001](./docs/adr/001-preact-island-usage-policy.md)), hydrated as late as possible up the ladder **`client:visible` → `client:idle` → `client:media` → `client:load`** (`client:load` only with ADR justification). - **Fonts** — subset `woff2`, ≤ 2 preloads per page so preloads don't fight the LCP image ([ADR-053](./docs/adr/053-fonts-via-astro-fonts-api.md)). - **Budgets & gates** — JS/CSS/image/font budgets and Lighthouse floors, run on every PR so nothing silently regresses. Because each norm has an ADR behind it, the agent can justify every recommendation from the _why_ rather than cargo-culting it. ## 🎚️ Minimum viable gate (solo / personal sites) The full apparatus is built for a template that must never regress. A personal site rarely needs all of it. **Keep the ratchet, drop the ceremony** — this is subtraction from one config, not a second maintained tier: **Keep** — this _is_ the performance ratchet, and it's cheap to run: - `lighthouserc.json` + `lighthouserc.mobile.json` — the Lighthouse gates - the JS bundle-size step, `images:gate`, and `fonts:gate` in CI - `pnpm test:e2e` as a smoke test that pages actually render **Safe to drop** for less overhead: - **Mutation testing** — remove `.github/workflows/mutation.yml`, the `test:mutate` script, and Stryker from devDependencies ([ADR-042](./docs/adr/042-mutation-testing-with-stryker.md)). - **The full ADR apparatus** — `docs/adr/` and the `docs:count` guard keep a _shared_ template honest; a solo project can keep a lightweight `DECISIONS.md` (or nothing) and drop `docs:count` from `quality:ci`. - **Cross-tool agent spine** — if you use only one agent, drop `agents:build` / `agents:check` and keep just `CLAUDE.md`. - **Template-invariant guards** — `version:check` and `og:check` protect template-specific invariants; trim them from `quality:ci` as needed. ## 🔧 Key Commands ```bash pnpm run dev # Start dev server pnpm run build # Production build pnpm run preview # Serve already-built dist/ locally pnpm run quality # Full quality check (format + lint + type-check) pnpm run test:unit # Unit tests (Vitest) pnpm run test:e2e # E2E tests (Playwright) pnpm run test:a11y # Accessibility tests (axe-core) pnpm run tokens:build # Rebuild design tokens (rarely needed) ``` <details> <summary><strong>All Scripts Reference</strong></summary> **Development** | Command | Description | |---------|-------------| | `pnpm run dev` | Start dev server on port 4321 | | `pnpm run dev:host` | Dev server exposed to LAN | | `pnpm run dev:debug` | Dev server with verbose logging | | `pnpm run preview` | Serve already-built `dist/` locally | | `pnpm run preview:build` | Build then preview | **Code Quality** | Command | Description | |---------|-------------| | `pnpm run quality` | Format + lint + markdown lint + type-check (auto-fixes format) | | `pnpm run quality:ci` | Same checks, no auto-fix (CI mode) | | `pnpm run format` | Format with Biome | | `pnpm run format:check` | Check formatting without writing | | `pnpm run lint` | Lint with Biome | | `pnpm run lint:md` | Lint markdown files | | `pnpm run check` | Astro diagnostics | | `pnpm run check:types` | TypeScript type-check | **Testing** | Command | Description | |---------|-------------| | `pnpm run test:unit` | Vitest (single run) | | `pnpm run test:coverage` | Vitest with coverage report | | `pnpm run test:e2e` | Playwright (all browsers) | | `pnpm run test:e2e:ui` | Playwright with interactive UI | | `pnpm run test:a11y` | Accessibility tests (axe-core via Playwright) | **Advanced / optional** — not on the clone critical path; not in `quality:ci`. | Command | Description | |---------|-------------| | `pnpm run test:mutate` | Mutation testing (Stryker). Slow; runs monthly in CI, rarely run locally. See [ADR-042](docs/adr/042-mutation-testing-with-stryker.md). | **Build & Deploy** | Command | Description | |---------|-------------| | `pnpm run build` | Validate env + build tokens + Astro build | | `pnpm run build:ci` | Same with verbose output | | `pnpm run tokens:build` | Compile design tokens from `tokens/` | | `pnpm run clean` | Remove `dist/`, `.astro/`, `tokens/dist/` | | `pnpm run clean:all` | Clean + clear `node_modules/.cache` | **Performance & Validation** | Command | Description | |---------|-------------| | `pnpm run perf:lighthouse` | Lighthouse HTML report (requires running dev server) | | `pnpm run perf:budgets` | Track JS/CSS budget violations | | `pnpm run perf:baseline` | Establish performance baseline | | `pnpm run bundle:analyze` | Build + analyze bundle composition | | `pnpm run design:validate` | Validate semantic color contrast ratios | | `pnpm run budgets:validate` | Validate budget override configuration | | `pnpm run images:analyze` | Analyze image sizes and formats | | `pnpm run images:gate` | Fail on any raster image over the per-file budget (CI gate, ADR-057) | | `pnpm run fonts:gate` | Fail on any built page over the font-preload budget (CI gate, ADR-058) | | `pnpm run images:optimize` | Interactive image optimization | **Release & Maintenance** | Command | Description | |---------|-------------| | `pnpm run release:changelog` | Generate CHANGELOG from commits | | `pnpm run audit` | pnpm audit (production deps) | | `pnpm run roadmap:update` | Update implementation roadmap status | </details> ## 🚀 Performance Budgets Budgets (see `.claude/stack.md`): - **JavaScript**: < 160KB raw total - **CSS**: < 50KB (advisory — tracked, not CI-gated) - **Images**: < 200KB per raster file, source + build output — enforced in CI ([ADR-057](./docs/adr/057-image-budget-gate.md)); override with `IMAGE_BUDGET_KB` - **Font preloads**: ≤ 2 per page — enforced in CI ([ADR-058](./docs/adr/058-font-preload-budget.md)); override with `MAX_FONT_PRELOADS` - **Lighthouse**: gated on **desktop _and_ mobile** — Performance ≥ 90, Accessibility ≥ 95, Best-Practices ≥ 95, SEO ≥ 90 (CI floors; see `lighthouserc.json` + `lighthouserc.mobile.json`) The default starter ships well under budget — measured on a production build: - **JavaScript**: ~48KB raw (~17KB gzipped) _total_ across the whole site; a typical page loads only the view-transition router plus a tiny page script. - **CSS**: ~19–21KB gzipped per page — a ~17.6KB shared stylesheet plus 1–3.5KB of inlined critical styles (fonts, view transitions); ≈23–24KB on pages with code blocks. - **Lighthouse**: 99 Performance / CLS 0 on home and blog — **desktop and mobile** (measured; desktop re-verified at 100/CLS 0 on home, blog index, and a post, July 2026); accessibility 96–100 across all gated routes. ## 🤝 Contributing Contributions welcome! See [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines. ## 📄 License Licensed under the [MIT License](./LICENSE.txt). --- **Status**: Active development • v0.9.0
看看同类模板
对比同技术栈与用途的模板,找到更适合的视觉与内容结构。

astrowind
⭕️ AstroWind: A free template using Astro v7 and Tailwind CSS v4. Astro starter theme.
Astro · 博客
accessible-astro-starter
Accessible Astro Starter 是一个以无障碍为核心理念的 Astro 6 启动模板,由 incluud 团队维护。
Astro · 博客

astro-erudite
An opinionated, unstyled static blogging template built with Astro and native CSS.
Astro · 作品集

astro-shopify
astro-shopify 是一个面向开发者的轻量级电商启动模板,用于构建基于 Shopify 的无头店面。
Astro · 电商

brutal
A neobrutalism Astro starter theme
Astro · 启动器

qwind
⭕️ Qwind: A template to make your website using Qwik + Tailwind CSS.
Astro · 工具站
