Product Requirements Document · v1.0 · 2026-06-11

MoorePhotos
everything we know, everything we'll build.

Synthesized from Merritt's product brief (5 pp), two recorded calls (6 min + 56 min, transcribed), the codebase audit, and the founder review of the live deployment. Each requirement below is traceable to its source.

Product
Photo & video organizer for creators
Owner
Merritt Moore (via Parth)
Engagement
Favor → equity / build-&-own open
Live
app · landing · Rust API
Repo
kishorer747/moorephotos (private)
01 · provenance

Where the requirements come from

Product Brief (PDF)

"Product Brief & Development Roadmap", 5 pages
  • Current feature inventory
  • 5 challenge areas w/ desired solutions
  • Roadmap Phases 1–4
  • Tech architecture table

Call 1 — Merritt

6 min, app walkthrough on her phone
  • Touch drag broken (top pain)
  • Can't move photos between groups
  • Titles/notes hard to edit
  • "Can't tell if they're duplicates"
  • Prior dev stalled 6 months

Call 2 — Andrew

56 min, tooling + App Store coaching
  • App Store intent: Photos/Productivity, free at launch
  • Needs public website + 10 screenshots + previews
  • Light mode ("what's popular")
  • PRD-driven workflow advised
  • TestFlight reachable today

Our Audit + Founder Review

code audit 2026-06-08 · live review 06-11
  • 4 server-side security holes
  • 2 data-loss bugs in sync hook
  • Founder: select-all / share / download
  • Founder: search, geotags, editing?
02 · founder questions, answered from the sources

"Is it in the requirement?"

Albums

Already exist — the brief calls them toggles: nested, color-coded groups (Instagram → Week 1 → Post 1). Select photos → Group. The real gap is discoverability (you didn't find it — neither did Merritt's first users).

in the requirement ✓ shipped — needs a visible "New album" button

Search / filters / geotags

No explicit search bar in the brief. But Phase 4 demands smart grouping by event, location, subject, date + face/object auto-tagging — tags without search is pointless. Geotags come free from photo EXIF on import.

implied by P4 — promoted to explicit requirement (F-13)

Photo editing

Not in the brief, not in either call. The product's identity is organize → curate → publish. A light "quick fix" layer (crop / rotate / brightness, client-side) fits creators' workflow but is genuinely new scope.

NOT in requirement — proposed as P5, needs Merritt's yes

Post / share / download

Direct posting is Phase 3 (Meta Business API, LinkedIn, TikTok/X + scheduler + queue). Today: native share sheet (→ Instagram et al on phones) + zip download — shipped during the founder review. Engagement tracking is NOT in the brief — proposed as P3.5 (F-22), riding on the same platform tokens and reusing AdPilot's adapters/poller.

share/download shipped ✓ · publishing = P3 · analytics = P3.5 proposal
03 · requirement traceability

Full requirement inventory

Status: LIVE-HERS shipped in her build · BUILT-BY-US added on our branch · NEXT committed roadmap · LATER roadmap, not started · NEW added this review · OUT not in scope yet

IDRequirementSourceStatus
F-01Drag-drop import of photos & videos (Finder + mobile)BriefLIVE-HERS
F-02Nested color-coded albums ("toggles"), 2 levelsBriefLIVE-HERS
F-03Notes & captions on photos and albumsBriefLIVE-HERS
F-04Filename / caption export per albumBriefLIVE-HERS
F-05Code-based workspaces, sync, offline PWABriefLIVE-HERS
F-06Touch drag that actually works (long-press + drag)Call 1BUILT-BY-US
F-07Move photos/groups between groups (incl. center-drop)Call 1BUILT-BY-US
F-08Easy inline titles + notes on mobileCall 1BUILT-BY-US
F-09Duplicate & near-duplicate detection (no upload)Call 1 + Brief P4BUILT-BY-US
F-10Real server-side auth (argon2 + tokens; closes 4 audit holes)Brief P2 + auditBUILT-BY-US
F-11Select all (⌘A) · download zip · native share sheetFounder reviewBUILT-BY-US
F-12Persistent cloud photo storage (R2 presigned, CDN, renditions)Brief P1NEXT
F-13Search bar + filters (name, notes, tags, date, location)Founder + P4 impliedNEW
F-14EXIF capture at import (date, camera, GPS → geotags)Founder + P4 impliedNEW
F-15Album discoverability: "New album" button + empty-state hintsFounder reviewNEW
F-16OAuth accounts (Google/Apple), private-by-default, GDPRBrief P2LATER
F-17Direct publishing: IG / LinkedIn / TikTok / X + scheduler + queueBrief P3LATER
F-18AI: quality scoring, best-of-batch, smart grouping, auto-captions, auto-tagsBrief P4LATER
F-19Apple/Google Photos & iCloud album import, thousands of filesBrief (Import perf)LATER
F-20App Store release (TestFlight → review), category PhotosCall 2NEXT
F-21Quick edits: crop / rotate / brightness (client-side)Founder (new idea)OUT — P5 proposal
F-22Engagement analytics post-publish (reach, likes, saves, comments per post/album) — same Meta/LinkedIn tokens as F-17; reuse AdPilot's Rust platform adapters + metrics pollerFounder (new idea)OUT — P3.5 proposal

traceability rule: nothing ships unless it has a row here — Andrew's advice to Merritt, now enforced ✦

04 · roadmap

From favor to flagship — the build sequence

P0 · UX rescueF-06…F-11 + security
DONE ✓
P1 · Real storageF-12 · R2 + renditions
next
P1.5 · Find & albums UXF-13 F-14 F-15
new
P2 · AccountsF-16 · OAuth, GDPR
App StoreF-20 · TestFlight → review
P3 · PublishingF-17 · IG/LI/TikTok/X
P4 · AI organizationF-18 · photos-engine
our leverage
now+1 mo+2 mo+3 mo+4 mo

P4 overlaps devpilot/crates/photos-engine (CLIP, embeddings, albums) — our differentiator, on-device-first ✦

05 · architecture

One stack, no Vercel lock-in

React PWA

her FE, kept — Vite + dnd-kit + Tailwind, offline service worker

Landing + PRD

static, this theme — doubles as App Store "public website"

nginx

moorephotos.devpilot.co.in · TLS wildcard · /api proxy

moorephotos-api · Rust/Axum

argon2 auth, rotating tokens, tree JSONB, dedup endpoint, presign

PostgreSQL 16

workspaces · photos (dhash, EXIF cols next) · pgvector for P4

Cloudflare R2

presigned direct uploads · originals + renditions · zero egress

pixels go browser → bucket directly; the API never proxies photo bytes · AI runs on-device first (P4), cloud only by consent
06 · app store readiness (from call 2)

What Apple will ask for

07 · open decisions & risks

What needs a human yes

#Decision / riskOwnerDefault
D-1Photo editing (P5) — in or out of product identity?Merrittout for v1
D-2DNS A record moorephotos → 40.192.31.95 (GoDaddy) to light up the subdomainFounder (2 min)
D-3R2 bucket + keys to enable real photo storage (P1)FounderR2, ~$5/mo
D-4Engagement model before P2+ (favor → equity / build-&-own)Founder + Merrittrevisit at P1 done
D-5Migrating her Vercel/Upstash users (T7 import) + telling her about the reload-wipe bug in her prodFoundertell her now
D-6Engagement analytics (P3.5) — in MoorePhotos, or stays AdPilot territory? Reuse path: shared social-connectors crate both products consumeFounder + Merrittyes, at P3
R-1RISK her prod app still wipes workspaces on reload (bug fixed only on our branch)ship fix via PR
R-2RISK P3 needs Meta Business API review — longest external dependency, start earlyfile at P2