Changelog
Release history.
All notable changes to the AOD Standard and its public website are recorded in this file.
The format follows Keep a Changelog and the project adheres to Semantic Versioning.
[Unreleased] — FEAT-0013 Phase D
Feature: FEAT-0013 — Media Pipeline & Publishing Assets
Status: Publish pipeline projects hero, hero srcset, social image, and gallery
(with alt text, captions, credits, and licensing) into projects_public.
Added — Phase D
publish_cms_projectnow resolves ready derivatives for the draft's Hero, Social, and Gallery media and projects them atomically intoprojects_public(primary_image_url,primary_image_alt,hero_srcset,hero_alt,hero_decorative,social_image_url,social_image_alt,galleryjsonb). Immutable revisions recordgallery_media_ids, andproject_media_referencesrows are written for each Hero/Social/Gallery media so referenced originals cannot be deleted or downgraded while a published revision uses them.- Publish refuses if any referenced Hero/Social/Gallery media is not in
readystate — no dangling public references possible. unpublish_cms_project/archive_cms_projectcontinue to hide the row viais_public_visible = false; media references are preserved so the published revision stays reproducible.public.storage_configsingleton +public.public_media_url(path)helper used server-side to build absolute public URLs without hardcoding.- Gallery ordering — Move Up / Move Down controls in the Media tab details
panel. Order persists via
gallery_media_idsarray position and is respected on publish. - Retry processing action for media in the
failedstate (Media tab details panel) — reuses the existing private original, no re-upload needed. Now callable by editors as well as admins.
[Prior] — FEAT-0013 Phase C
Status: Media tab editor UI (upload, browse, describe, assign roles, archive).
Added — Phase C
- Media tab in the project editor: drag-and-drop uploads, grid/list browser, processing-state indicators, and details side panel with alt text, decorative flag, caption, credit, license, and role assignment (Hero / Social / Gallery).
listProjectMedia,updateMediaMetadata,archiveMedia,restoreArchivedMedia, andlistMediaUsageserver functions (src/lib/admin/media.functions.ts).gallery_media_idsadded to editableProjectContent— role toggles autosave via the existing draft autosave.- RLS policies: editors and admins can read and update descriptive metadata on
project_media. Checksum immutability and referenced-ready-state protection triggers remain in force.
[Prior] — FEAT-0013 Phase B
Status: Runtime pipeline (upload → finalize → derivatives). Editor UI and publish integration deferred to later phases.
Added
project-media-publicflipped to a truly public bucket with world-readable SELECT policy and no client write policies (service role only, immutable checksum-versioned paths).- Storage RLS on
project-media-privaterestricting reads and writes to editors/admins viacan_edit_projects. - Admin-callable RPCs (SECURITY DEFINER, EXECUTE revoked from
anon/public):mint_media_upload_ticket,finalize_media_upload,mark_media_ready,mark_media_failed. - Backend-only RPC
record_media_derivative(service role EXECUTE only). - Immutable-checksum trigger on
project_media— once set,checksum_sha256cannot change. - Supabase edge function
process-media(Deno + ImageScript) that verifies checksum, sniffs magic bytes, and generates JPEG variants (thumb 320w,card 640w,hero 1440w,hero2x 2560w) at immutable pathderivatives/{media_id}/{variant}-{checksum12}.jpgwithCache-Control: 31536000, immutable. Timing-safe service-role bearer auth. - Server functions
createUploadTicket,finalizeMediaUpload,retryMediaProcessing,getMediaPipelineHealth(src/lib/admin/media.functions.ts). - Hidden admin verification surface at
/admin/media/health(not linked from nav). - Idempotent dedupe on finalize: same
(project_id, sha256)archives the new pending row and returns the existing readymedia_id.
Security
- Public bucket writes require the service role; RLS on
storage.objectsdenies anon/authenticated writes toproject-media-public. - All new SECURITY DEFINER functions perform explicit
can_edit_projects(or admin) checks and revoke EXECUTE fromPUBLIC/anon;record_media_derivativeis service-role-only. - Edge function requires
Authorization: Bearer <service_role>via timing-safe compare; rejects otherwise with 401. - Google Authentication remains the primary supported provider;
trgriffith@brambletech.comis seeded intoadmin_allowlist(idempotent). Bootstrap admin flow untouched.
[Unreleased] — FEAT-0012 Phase 3C
Feature: FEAT-0012 — Project Administration, Authentication & Content Management Status: Publishing pipeline & public-site integration
Added
- Atomic CMS publishing projector (
publish_cms_project,unpublish_cms_project,archive_cms_project) that mints an immutable revision, projects it toprojects_public, updates editorial status, and writes an audit event as a single transaction. Public read model reads exclusively from the immutable revision content, never from the mutable draft. - Public projection metadata:
is_public_visible,origin_type(cmsvs future community mirror),projected_at, andcms_revision_idso drift is computed against the exact projected revision. - Database-enforced cross-table slug uniqueness between community submissions and CMS projects (triggers on both
projectsandprojects_public). - "Live on site" link in the editor action bar for published projects.
- CMS-published projects intermix with community submissions in the
Built with AODgrid, detail routes, sitemap, and slug listings, ordered bypublished_at.
Changed
- Unpublish and archive preserve the last published revision and hide the public read-model row via
is_public_visible = falseinstead of deleting it. Re-publishing restores visibility. - Public projection SELECT policy filters on
is_public_visible = true; editors/admins retain full read access for admin surfaces.
[Website 1.1.0] — 2026-07-16
Tag: website-v1.1.0
Feature: FEAT-0010 — Built with AOD Community Showcase
Status: Production Ready · Release Candidate APPROVED
Added
- Built with AOD community showcase at
/built-with-aodwith anonymous project submission, moderation workflow, and public detail pages. - Anonymous submission form with Turnstile challenge, per-image alt text capture, conditional validation for private projects, and friendly user-facing error messages.
- Moderation dashboard (
/built-with-aod/moderation) with Pending → Approved → Published lifecycle, project verification status (internal), and reviewer notes. - Dual-bucket media pipeline:
project-media-privatefor pending submissions,project-media-publicmirror on publish. - Server-rendered detail pages with hero imagery, gallery, project highlights, and "The Story" section.
- Dynamic sitemap entries for published showcase projects.
- Analytics events:
Gallery Viewed(landing impression),Gallery Media Opened(detail interaction), submission funnel events.
Security
- Anonymous Data API access restricted to explicit column-level
GRANTs onprojectsandproject_media. Submitter PII, IP hash, moderator notes, review instructions, terms acceptance, verification status, and private storage paths are unreachable from the public Data API. - Row-scoped SELECT policies for
anonandauthenticated(status = 'published'); moderator and service_role paths unchanged. - Private media paths never included in any public server function projection.
Changed
- Verification status remains internal during MVP — not exposed in UI, API, JSON, SEO, or structured data.
- Published imagery always ships with meaningful alt text (submitter-provided or project name fallback).
Stage Gate
- Security Review: PASS
- Accessibility Review: PASS
- Regression Review: PASS
- TypeScript: zero errors
- Public Data API surface verified via direct probe
[Website 1.0.0] — 2026-07
Tag: website-v1.0.0
Added
- Public AOD Standard website with dark-only "Modern Engineering Minimalism" design system, IBM Plex Sans + JetBrains Mono typography, and signature blinking green cursor.
- Static-first content pipeline sourcing
/content/**/*.mdthrough the build-time registry. - Command palette search, intent-first "Start Here" onboarding, and clustered navigation.
- Machine-readable endpoints:
/llms.txt,/llms-full.txt,/manifest.json,/raw/<path>,/sitemap.xml. - SEO metadata and JSON-LD schemas across all routes.
- Plausible Analytics with custom event tracking, isolated in
src/lib/analytics.ts. - "Copy Bootstrap Prompt" flow on the Start Here page.
[Standard 1.0.0] — 2026-07
Tag: standard-v1.0.0
Initial public release of the AOD Standard. See content/VERSION.md for the full inclusion list covering methodology, lifecycle workflows, governance artifact specifications, and operational documentation.