3.2 KiB
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
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 servernpm run typecheck- run Vue TypeScript checksnpm run lint- run ESLintnpm run lint:fix- auto-fix lint findingsnpm run format- format with Prettiernpm run format:check- verify formattingnpm run test- run unit testsnpm run test:watch- watch mode testsnpm run test:coverage- coverage reportnpm run build- typecheck and production buildnpm run check- full quality gate (typecheck, lint, test, build)npm run init:custom- create gitignored local files from templates (gallery, decisions doc, starterPRDs/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
- Privacy scrub and metadata extraction:
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.