78 lines
3.2 KiB
Markdown
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`.
|