Docs: Sprint A UX (match-all, slim payloads, deploy-viewer).
CI / skip-ci-check (pull_request) Successful in 29s
CI / docker-ci (pull_request) Successful in 32s
CI / python-lint (pull_request) Successful in 32s
CI / secret-scan (pull_request) Successful in 37s
CI / viewer-unit (pull_request) Successful in 1m38s
CI / admin-unit (pull_request) Successful in 1m51s
CI / e2e (pull_request) Failing after 2m3s
CI / skip-ci-check (pull_request) Successful in 29s
CI / docker-ci (pull_request) Successful in 32s
CI / python-lint (pull_request) Successful in 32s
CI / secret-scan (pull_request) Successful in 37s
CI / viewer-unit (pull_request) Successful in 1m38s
CI / admin-unit (pull_request) Successful in 1m51s
CI / e2e (pull_request) Failing after 2m3s
This commit is contained in:
@@ -33,6 +33,7 @@ Living plan for product quality, auth/email reliability, and automation.
|
||||
- [x] **Person contact fields** — optional email/phone on identify (viewer + admin), pending approve UI, Modify person
|
||||
- [x] **Approve Identified bulk select** — Select All Approve/Deny + Approve Next 10
|
||||
- [x] **Admin pending-queue digest email** — `ADMIN_NOTIFY_EMAIL` via `noreply@levkine.ca` SMTP (throttled)
|
||||
- [x] **UX Sprint A — match-all filters, slim search payloads, DEV `next start`** — see [UX sprint](#ux-sprint--trust-mobile-admin-throughput-2026-08)
|
||||
|
||||
## Next (near-term)
|
||||
|
||||
@@ -65,6 +66,14 @@ Living plan for product quality, auth/email reliability, and automation.
|
||||
|
||||
- [ ] **Burn-in / deploy-smoke CLI** (playkit ROADMAP v0.4/v0.5+) — playkit's own ROADMAP has an explicit "adoption pause" until the `v0.3.1` network helpers + release job soak for a few days in this repo's CI; revisit once that settles rather than adding more moving parts at once.
|
||||
|
||||
### UX sprint — trust, mobile, admin throughput (2026-08)
|
||||
|
||||
#### Sprint A — quick trust + speed (shipped)
|
||||
|
||||
- [x] **Match-all people/tags filters** — `/api/search` raw SQL uses `GROUP BY` + `HAVING COUNT(DISTINCT …)` when `peopleMode=all` / `tagsMode=all` (`lib/search-filter-sql.ts` + Vitest)
|
||||
- [x] **Slim gallery face payloads** — home SSR + search API return id, photo_id, person_id, location, person names only
|
||||
- [x] **DEV viewer `next start`** — `scripts/deploy-viewer.sh`; `ecosystem.config.js.example` uses `next start -p 3001`
|
||||
|
||||
## Later
|
||||
|
||||
- [x] Proper DEV deploy (`next start` + CI image) instead of long-lived `next dev` — `scripts/deploy-viewer.sh`, `ecosystem.config.js.example` uses `next start -p 3001`
|
||||
|
||||
+1
-1
@@ -56,7 +56,7 @@ not enabled in this CI job yet.
|
||||
10. API catalog: people/tags lists, login 422/401, users/roles 401, missing photo 404|401
|
||||
11. Viewer `/api/auth/session` returns email when storageState is loaded
|
||||
12. FastAPI role-permission write gates: viewer 403 vs admin 200 on users, role-permissions, bulk-delete
|
||||
13. Public gallery search (`/api/search`): tag filter, person filter, and combined-filter narrowing return correct subsets; UI tag-filter interaction updates URL + result count
|
||||
13. Public gallery search (`/api/search`): tag filter, person filter, **match-all** (`peopleMode=all` / `tagsMode=all`) combined narrowing, and UI tag-filter interaction updates URL + result count
|
||||
14. Logged-in-only filters: Favorites checkbox toggles `favoritesOnly` URL param; People filter UI selection updates URL + result count (uses storageState)
|
||||
15. Silent-failure network monitor (`startNetworkErrorMonitor`): gallery home, search+filter, upload, and Manage Users overlay all stay free of background 4xx/5xx while the UI loads/interacts
|
||||
16. `interceptNetworkCall` spies on the real upload POST (status + `{ message, photos }` shape) and the filtered `/api/search?tags=` GET (status + Zod-validated shape) instead of brittle `waitForResponse`/text scraping
|
||||
|
||||
@@ -41,6 +41,22 @@ Project-specific scripts remain in the repository root:
|
||||
- `stop_backend.sh` - Stop backend server
|
||||
- `run_worker.sh` - Run RQ worker
|
||||
- `demo.sh` - Demo helper script
|
||||
- `deploy-viewer.sh` - Build viewer (`next build`) and recreate PM2 `punimtag-viewer` with `next start` (use after viewer deploys; `pm2 restart` alone does not pick up script-arg changes)
|
||||
|
||||
### Viewer deploy (DEV / prod-like)
|
||||
|
||||
```bash
|
||||
cd /opt/punimtag
|
||||
git pull
|
||||
bash scripts/deploy-viewer.sh --skip-install # when node_modules already current
|
||||
```
|
||||
|
||||
Admin static build (served by Caddy or `pm2 serve`):
|
||||
|
||||
```bash
|
||||
cd /opt/punimtag/admin-frontend && npm run build
|
||||
# restart API if backend changed: pm2 restart punimtag-api
|
||||
```
|
||||
|
||||
## Database Shell Scripts
|
||||
|
||||
|
||||
Reference in New Issue
Block a user