The Altyaa cockpit now has an end-to-end media surface. Operators upload photos once into a per-org library, attach them to Google Business Profile (GBP) Local Posts from the in-cockpit composer, and see coach-suggested assets rendered inline in the daily recommendation detail sheet.
Highlights
- Per-org Asset Library at
/home/mediaβ upload, dedupe, scan, and publish. - Composer attach β pick a library asset, publish a GBP STANDARD post in three clicks.
- Coach suggestions inline β coach-recommended assets render in the daily recommendation detail sheet with a one-click "Use in composer" CTA.
- Content-addressed dedupe β re-uploads of the same bytes collapse to the existing row per organization.
- Async scan pipeline β uploads land as
PENDING_SCAN, flip toREADYonce magic-byte verification + dimension extraction complete (median <2s in dev).
What's new
Asset Library
- New
/home/mediaroute underGrowin the sidebar. - Drag-and-drop or click-to-browse upload β JPG, PNG, WebP, or MP4 up to 25 MB.
- Status filters: All / Ready / Scanning / Rejected.
- Source filters: All sources / Uploaded by you / Coach-suggested.
- Pipeline radiator (24h): Uploaded / Scanned / Published / Coach-attached / Failed.
- Asset detail drawer with preview, dimensions, MIME, and soft-delete.
Composer (GBP)
- "Publish" modal accepts a caption + one or more attached assets from the library.
- Channel rail shows IG / FB / TikTok visible-disabled β GBP-only for WS-1.
- Server action
publishComposerActionenqueuesgbp.publish.local-postfor async delivery; UI returns in β€3s. - Per-org idempotency key collapses double-submits.
Coach attachments
- Coach detail sheet surfaces a 96Γ96 thumb strip when the recommendation envelope carries suggested media.
- Click any tile to open the lightbox; "Use in composer" CTA pre-fills the publish modal.
- URL-ingest path materializes coach-referenced photos as org-owned
Assetrows withsource=COACH_URL_INGEST.
Feature flags
Three per-org toggles gate the rollout. Defaults are OFF; pilot orgs are enrolled by inserting an altyaaOrgSettings row.
| Toggle | Default | Per-org override | Env fallback (migration window) |
|---|---|---|---|
media.library.v1 | OFF | altyaaOrgSettings.mediaLibraryV1 |