Vision · Pics Portal

Vision: Pics Portal draft

Grow the Pics Portal from a read-only browse tool into a full-surface client portal that replaces SSI/Strawbridge's PlicGo / Captura School Portal for our customers — subjects management, exports, print layouts, and customer-facing access. Shipped in four phases so each unlocks value on its own.

Goals

Non-goals

Personas

Pics admin (us)
Has super_admin in Pics. Onboards studios, debugs data, has all permissions across studios.
Studio admin
Owns a Pics company / studio. Manages venues, events, subject rosters, exports, layouts, and invites customer users.
Studio operator
Day-to-day employee of a studio: imports subjects, runs exports, prints IDs. Permission-scoped to specific projects or to the whole studio.
Customer (school) admin
A principal, registrar, or yearbook coordinator at a school. Lives outside Pics's user model — needs portal-only identity. Reviews their school's subjects, approves rosters, downloads their school's exports, uploads files in response to requests.
Customer (school) user
A teacher or staff member who needs to upload a roster CSV or check a directory. Lowest-privilege role.

Four-phase roadmap

Phase 1 — Subjects + Exports core next

Goal: Studios can manage subjects for an event, find duplicates, generate the subject directory, and run the 25 standard SIS exports — end-to-end.

Non-goals for Phase 1: Custom export authoring (Phase 3), print layouts (Phase 2), customer-facing access (Phase 4).

Phase 2 — Print layouts (render-only)

Goal: Studios can pick a pre-authored layout, run it across selected subjects, and get a multi-page PDF.

Non-goals for Phase 2: Authoring layouts (Phase 3), per-layout custom paper/cut workflows beyond basic dimensions.

Phase 3 — Custom exports + layout authoring

Goal: Studios stop calling us to build new export formats or layouts. They can do it themselves.

Non-goals for Phase 3: Public layout marketplace, cross-studio sharing.

Phase 4 — Customer portal + RBAC + Files

Goal: Schools log in to their own scoped view of the portal. Studios send file requests; customers respond.

Non-goals for Phase 4: Self-serve studio onboarding, public sign-up. All customer accounts are invite-driven from a studio.

Cross-cutting concerns

Scale

School-photography studios handle 10⁵–10⁶ subjects and image variants per season at the high end. Two implications:

Async job model

Exports, subject-directory PDFs, layout renders, and bulk subject imports are all async with progress UI. They share one job substrate. The substrate choice is an open ADR; whatever we pick must support: enqueue from a Next.js server action, worker concurrency control, status polling endpoint, per-job progress percentage or step counter, output artifact handoff (signed URL).

RBAC

Phase 4 introduces real RBAC, but Phases 1–3 lay groundwork: every entity we add (subject, export job, layout, render job) is tagged with a studio_id (and where appropriate, a client_id / school scope) so the Phase 4 permission filter is a single query parameter, not a refactor.

Subjects as the load-bearing entity

Subjects are referenced by exports, the subject directory, the print wizard, find-duplicates, file requests, and (eventually) customer scoping. The subject schema and storage decision is the single highest-leverage decision in the whole project — captured as a dedicated ADR after the Phase 1 PRD is reviewed.

Image strategy

Today Pics serves images through some mechanism we don't yet consume. Print rendering needs full-resolution images; export "Named Images" formats need original files. We need a clearly-defined image-access contract with Pics before Phase 2 can start. ADR pending.

Customer auth

The four candidates (magic-link, Auth0, Pics SSO with delegated identity, provision Pics accounts) each have different operational and ergonomic implications. Decision required before Phase 4. ADR pending.

Success metrics

Sequencing rationale

What's not in this document