Files
beachho.us/README.md
T
matt bc02d72576
CI / quality (push) Has been cancelled
New initial commit
2026-04-22 16:28:11 -07:00

78 lines
3.2 KiB
Markdown

# beacho.us (Seaside Sanctuary)
Vue 3 + Vite gallery for coastal, garden, and wildlife photography. The current app is
an alpha focused on public gallery browsing, while private admin ingestion and AI
tagging are scaffolded for iterative hardening.
## Requirements
- Node `22` (see `.nvmrc`)
- npm `10+`
## Quick Start
```bash
nvm use
npm install
npm run dev
```
## Local customization (optional)
Some files are **gitignored** so you can personalize without committing secrets or your real gallery.
| You want | Do this |
|----------|---------|
| Your own gallery manifest | `npm run init:custom` (or copy `src/data/gallery.defaults.json` → `src/data/gallery.json`) |
| Private implementation notes | Same command creates `docs/IMPLEMENTATION_DECISIONS.md` from `docs/IMPLEMENTATION_DECISIONS.example.md` |
| Other private docs | `docs/_private/` (contents gitignored) or any `docs/**/*.local.md` |
| Product requirements | `PRDs/*.md` except `PRD.template.md` / `README.md` — copy template to e.g. `PRDs/PRD.md` |
| Large / private images | Put them under `public/gallery/user/` (ignored except `.gitkeep`) and reference `/gallery/user/...` in your manifest |
Tracked templates: `src/data/gallery.defaults.json`, `docs/IMPLEMENTATION_DECISIONS.example.md`, `.env.example`. See `docs/README.md` for gitignored doc patterns.
## Scripts
- `npm run dev` - start local dev server
- `npm run typecheck` - run Vue TypeScript checks
- `npm run lint` - run ESLint
- `npm run lint:fix` - auto-fix lint findings
- `npm run format` - format with Prettier
- `npm run format:check` - verify formatting
- `npm run test` - run unit tests
- `npm run test:watch` - watch mode tests
- `npm run test:coverage` - coverage report
- `npm run build` - typecheck and production build
- `npm run check` - full quality gate (typecheck, lint, test, build)
- `npm run init:custom` - create gitignored local files from templates (gallery, decisions doc, starter `PRDs/PRD.md`)
## Architecture
- Public gallery UI: `src/views/GalleryView.vue`, `src/components/*`
- Gallery state and lightbox behavior: `src/stores/gallery.ts`
- Data source adapter boundary: `src/data/source.ts`
- Default static data source: `src/data/staticGallerySource.ts`
- Admin workflow scaffold: `src/views/AdminWorkbenchView.vue`
- Admin domain logic:
- Privacy scrub and metadata extraction: `src/features/admin/ingestion.ts`
- Vision provider abstraction: `src/features/admin/vision.ts`
- Admin settings and upload queue: `src/stores/admin.ts`
## Current Scope
- Implemented:
- Gallery filters, lazy pagination, lightbox navigation
- Admin workbench scaffold with upload review queue and AI suggestion preview
- Pluggable vision provider interface with resilient fallback to manual tagging
- Not yet production-complete:
- Backend upload endpoint and persistent DB
- Cloudflare/Vercel deployment wiring
- Server-side secrets and auth/session enforcement
## Deployment Direction
`BACKLOG.md` still tracks high-level post-alpha themes. Detailed PRDs live only on your
machine: copy `PRDs/PRD.template.md` to a new file under `PRDs/` (see `PRDs/README.md`),
or use `npm run init:custom`. For local implementation notes, use
`docs/IMPLEMENTATION_DECISIONS.example.md` → `docs/IMPLEMENTATION_DECISIONS.md`.