first commit
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
# CLAUDE.md — project memory for AI assistants & developers
|
||||
|
||||
> **This file is the project-local source of truth.** It lives in the repo (not in any individual's
|
||||
> `~/.claude`), so any developer — or any Claude/AI account that opens this package — can read the
|
||||
> full context, decisions, and roadmap. Keep it updated as the project evolves.
|
||||
|
||||
## What this is
|
||||
|
||||
A **reusable macOS Photos–style photo gallery SDK** (`@photo-gallery/sdk`) for React / Next.js, plus a
|
||||
Next.js demo (`apps/web`). Goal: a near carbon-copy of macOS Photos (light/dark/semi-dark, fully
|
||||
responsive) where **every feature is optional via flags**, so each consuming project enables only what
|
||||
it needs. See [`docs/ROADMAP.md`](docs/ROADMAP.md) for the complete, living feature checklist
|
||||
(done / in-progress / planned) and [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) for the design.
|
||||
|
||||
## Monorepo
|
||||
|
||||
- `packages/photo-sdk` — the SDK (React components, Zustand store, adapters, AI provider interface,
|
||||
lib utils, self-contained CSS). **No heavy/ML deps in here** — they're injected by the host app.
|
||||
- `apps/web` — Next.js demo: landing page (`/`) + gallery (`/gallery`), AI providers, server routes.
|
||||
|
||||
## Conventions
|
||||
|
||||
- SDK ships its own `styles.css` (no Tailwind required by consumers). Classes are prefixed `apg-`.
|
||||
- State: a per-instance Zustand store (`createGalleryStore`) provided via React context.
|
||||
- Storage is a pluggable `StorageAdapter` (default: localStorage/IndexedDB). AI is a pluggable
|
||||
`AIProvider` (object detection / faces / OCR / caption / embeddings / generativeEdit) — all optional.
|
||||
- Every capability is gated by a feature flag (`features={{ editor, camera, ai, map, import, export, ... }}`).
|
||||
- Security: strict per-request **nonce CSP** (middleware), input validation, URL-scheme allow-list,
|
||||
filename sanitization, server-only API keys (never `NEXT_PUBLIC_`). Don't regress this.
|
||||
|
||||
## Secrets
|
||||
|
||||
- API keys go in `apps/web/.env.local` (gitignored via `.env.*`). **Never commit keys.** Gemini is
|
||||
read server-side only in `apps/web/src/app/api/ai/edit/route.ts`. See `.env.example`.
|
||||
|
||||
## Run
|
||||
|
||||
```bash
|
||||
pnpm install && pnpm dev # http://localhost:3000 (landing → Open Gallery → /gallery)
|
||||
pnpm build # SDK (tsup) + Next production build
|
||||
pnpm typecheck
|
||||
```
|
||||
|
||||
Full setup/troubleshooting: [`docs/SETUP.md`](docs/SETUP.md).
|
||||
|
||||
## Memory & status
|
||||
|
||||
**AI/working memory lives in [`.claude/memory/`](.claude/memory/)** (committed with the repo, not in any
|
||||
machine's global `~/.claude`):
|
||||
- [`.claude/memory/status.md`](.claude/memory/status.md) — current status + session log.
|
||||
- [`.claude/memory/requirements.md`](.claude/memory/requirements.md) — the complete requirements backlog.
|
||||
|
||||
Human-facing feature checklist is [`docs/ROADMAP.md`](docs/ROADMAP.md). Read `.claude/memory/` + `docs/ROADMAP.md`
|
||||
first — they are authoritative and travel with the code.
|
||||
Reference in New Issue
Block a user