Files
cloudrite/CLAUDE.md
T
asowneryt 1da82b9d30
Docker / build (push) Successful in 1m26s
Make Docker pnpm install resilient to sharp ignored-builds; drop
unreachable gha cache
2026-07-17 01:31:30 +12:00

140 lines
4.4 KiB
Markdown

# CLAUDE.md
This file provides guidance for Claude Code when working with this codebase.
## Project Overview
Cloudrite (cloudrite.co.nz) is an Auckland, New Zealand-based IT services company website. The site showcases web development, cloud hosting, and IT support services with the tagline "Every Business Needs an I.T Guy."
## Tech Stack
- **Framework**: Next.js 16.2.0 (App Router)
- **Language**: TypeScript 5.7.3
- **Styling**: Tailwind CSS 4.2.0 with CSS variables
- **UI Components**: shadcn/ui (new-york style)
- **Icons**: Lucide React
- **Package Manager**: pnpm
## Project Structure
```
app/ # Next.js App Router pages and API routes
api/send-email/ # Contact form email API (uses Resend)
globals.css # Global styles and CSS variables
layout.tsx # Root layout with fonts
page.tsx # Homepage
components/ # React components
ui/ # shadcn/ui primitives (do not modify directly)
header.tsx # Site navigation
hero.tsx # Hero section with animations
services.tsx # Services grid
features.tsx # Features showcase
process.tsx # Process timeline
contact.tsx # Contact form
footer.tsx # Site footer
chatwoot.tsx # Live chat widget
hooks/ # Custom React hooks
lib/ # Utility functions
public/ # Static assets
```
## Commands
```bash
pnpm dev # Start development server
pnpm build # Production build
pnpm start # Start production server
pnpm lint # Run ESLint
```
## Code Conventions
### Styling
- Use Tailwind CSS utility classes
- Use semantic design tokens from CSS variables (bg-background, text-foreground, text-primary, etc.)
- Dark theme is the default; colors defined in `app/globals.css`
- Primary color: green (`oklch(0.75 0.18 145)`)
- Prefer `gap-*` for spacing over margins in flex/grid layouts
- Always use the `frontend-design` skill. No exceptions.
### Components
- All custom components use `'use client'` directive when needed
- Import UI components from `@/components/ui/*`
- Import utilities from `@/lib/utils`
- Use Lucide icons: `import { IconName } from 'lucide-react'`
### TypeScript
- Strict mode enabled
- Path alias `@/*` maps to project root
- Prefer explicit types over `any`
### Fonts
- Headings: Space Grotesk (`font-sans`)
- Body: Inter (`font-body`)
## Environment Variables
Required for full functionality:
```
RESEND_API_KEY # Resend API key for contact form emails
NEXT_PUBLIC_CHATWOOT_ACCOUNT_TOKEN # Chatwoot widget token
```
## API Routes
### POST /api/send-email
Sends contact form submissions to contact@cloudrite.co.nz via Resend.
**Body:**
```json
{
"name": "string",
"email": "string",
"message": "string"
}
```
## shadcn/ui
This project uses shadcn/ui components. To add new components:
```bash
npx shadcn@latest add [component-name]
```
Components are installed to `components/ui/`. Do not manually edit these files; they can be regenerated.
## pnpm / sharp build (CI gotcha)
pnpm 11 hard-fails `pnpm install --frozen-lockfile` with
`[ERR_PNPM_IGNORED_BUILDS] Ignored build scripts: [email protected]` (exit 1) unless
sharp's native build script is explicitly accounted for. sharp ships prebuilt
binaries, so its build script is unnecessary and should stay skipped.
- `pnpm-workspace.yaml` records the decision as `allowBuilds:\n sharp: false`.
This **must be a real boolean** (`false`/`true`). A non-boolean value (e.g. the
placeholder string `set this to true or false`) does NOT count as a decision and
breaks CI. `onlyBuiltDependencies` / `ignoredBuiltDependencies` are NOT honored
for this in pnpm 11 — only `allowBuilds`. Verify before pushing:
`git show HEAD:pnpm-workspace.yaml`.
- Because that value is easy to corrupt, the Docker build is made resilient: the
`pnpm install` step in the `Dockerfile` passes `--config.strictDepBuilds=false`,
which downgrades the ignored-builds error to a warning regardless of the
workspace file. Keep that flag in place.
## Important Notes
- Contact email: contact@cloudrite.co.nz
- Phone: 021 107 7483
- Business hours: By appointment only (24/7 emergency support)
- The site uses extensive CSS animations; check existing patterns in hero.tsx and services.tsx before adding new ones
- TypeScript build errors are ignored in next.config.mjs for development flexibility