All checks were successful
Deploy to Cloudflare Pages / deploy (push) Successful in 27s
Adds bun run deploy script, deployment docs to README, and updates CLAUDE.md with deployment info, current patterns, and rule to keep docs in sync with changes.
96 lines
3.5 KiB
Markdown
96 lines
3.5 KiB
Markdown
# CLAUDE.md
|
|
|
|
## Important Rules
|
|
|
|
- **Always update `CLAUDE.md` and `README.md`** when making changes that affect project structure, commands, deployment, tooling, or conventions. Keep them in sync.
|
|
- Do not include co-author lines or "Generated by" attributions in commit messages.
|
|
|
|
## Project Overview
|
|
|
|
The Lofty Project is a 501(c)(4) connecting creative talent with leftist organizing. This repo is the **pre-launch landing page** — a single-page static site with interest signup links.
|
|
|
|
**Stack:** Astro 5 (static output), TypeScript, Bun 1.3+
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
src/
|
|
layouts/Layout.astro # HTML shell, meta tags, Typekit fonts, design tokens, CSS reset
|
|
pages/index.astro # All page sections (hero, pillars, signup, footer), scoped CSS, client JS
|
|
public/
|
|
favicon.svg # Stylized "L" mark
|
|
hero-bg.webp/.jpg # Hero background image (WebP + JPEG fallback)
|
|
astro.config.mjs # Static output, site URL, dev toolbar disabled
|
|
wrangler.toml # Cloudflare Pages deployment config
|
|
.gitea/workflows/ # CI/CD via Gitea Actions
|
|
```
|
|
|
|
Two-file architecture: `Layout.astro` (global concerns) + `index.astro` (all content). No component files — single page with no reuse opportunity.
|
|
|
|
## Development
|
|
|
|
```bash
|
|
bun run dev # Start dev server (localhost:4321)
|
|
bun run build # Static build to dist/
|
|
bun run preview # Preview production build
|
|
```
|
|
|
|
## Deployment
|
|
|
|
Deploys to **Cloudflare Pages** via Gitea Actions on push to `main`.
|
|
|
|
```bash
|
|
bun run deploy # Build + deploy to Cloudflare Pages (manual)
|
|
```
|
|
|
|
Config lives in `wrangler.toml`. CI requires `CLOUDFLARE_API_TOKEN` and `CLOUDFLARE_ACCOUNT_ID` as Gitea secrets.
|
|
|
|
## Linting & Formatting
|
|
|
|
Uses **Biome** for both linting and formatting.
|
|
|
|
```bash
|
|
bun run lint # Check for lint + format issues
|
|
bun run lint:fix # Auto-fix lint + format issues
|
|
bun run format # Format all files
|
|
```
|
|
|
|
**Biome config:** 4-space indent, 100 char line width, double quotes, trailing commas, semicolons. Astro files have `noUnusedImports`/`noUnusedVariables` disabled (Biome can't parse Astro template references).
|
|
|
|
## Commit Standards
|
|
|
|
This project uses **conventional commits** enforced by commitlint + lefthook.
|
|
|
|
Format: `type(scope): subject`
|
|
|
|
**Types:** feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert
|
|
|
|
**Scopes:** page, style, config, deps (custom scopes allowed)
|
|
|
|
```bash
|
|
bun run commit # Guided commit via commitizen (cz-git)
|
|
```
|
|
|
|
## Git Hooks (Lefthook)
|
|
|
|
- **pre-commit:** Biome check on staged files
|
|
- **commit-msg:** Commitlint validation
|
|
- **pre-push:** Full build
|
|
|
|
## Design Tokens
|
|
|
|
Colors, typography, spacing, and easing are defined as CSS custom properties in `Layout.astro`:
|
|
|
|
- **Colors:** cream (#F5F0EB), dusty-rose (#C48B8B), slate-blue (#8A9BB5), navy (#1A1F2E)
|
|
- **Fonts:** `neue-haas-grotesk-display` (body, weight 500), `meno-text` (display/headings) via Typekit
|
|
- **Spacing/type:** Fluid scales using `clamp()`
|
|
- **Easing:** `--ease-out-quart` (hover), `--ease-in-out` (layout/entrance animations)
|
|
|
|
## Key Patterns
|
|
|
|
- All scroll animations use `.reveal` class + IntersectionObserver (threshold 0.1, -40px root margin)
|
|
- Hero animations: line-by-line blur-in reveal with staggered delays, quartic ease-out
|
|
- Hover interactions use `--ease-out-quart`, layout/entrance animations use `--ease-in-out`
|
|
- `prefers-reduced-motion` is detected via inline script and disables all animations via `.reduce-motion` class
|
|
- Hero background image uses blur + desaturation + cream overlay for glassmorphic effect
|