60-second verification
Firestore (Console → Firestore → Documents)

Slug doc

Path: templates / business-plan / types / business-plan-general-blank-template

Expect fields:

title: "Business Plan General Blank Template"

slug: "business-plan-general-blank-template"

category: "General"

industries: ["general","business","startup"] (or your final tags)

currentVersion: "v1"

isActive: true

isMaster: true

storagePaths.docx: "templates/business-plan/docs/business-plan-general-blank-template/v1.docx"

storagePaths.preview: "templates/business-plan/previews/business-plan-general-blank-template/v1-preview.webp"

storagePaths.thumb: "templates/business-plan/thumbs/business-plan-general-blank-template/v1-thumb.webp"

createdAt, updatedAt (server timestamps)

Version doc

Path: templates / business-plan / types / business-plan-general-blank-template / versions / v1

Expect fields:

version: "v1"

isMaster: true

storagePaths.docx|preview|thumb (same as above)

Optional notes, sections, timestamps

Master pointer

Path: settings / templates.business-plan

Expect fields:

masterSlug: "business-plan-general-blank-template"

masterVersion: "v1"

lastRotatedAt (timestamp)

Uniqueness check

Query templates/business-plan/types where isMaster == true → expect exactly 1 doc in this category.

Storage (Console → Storage → Files)

Confirm all three exist and are readable:

templates/business-plan/docs/business-plan-general-blank-template/v1.docx

templates/business-plan/previews/business-plan-general-blank-template/v1-preview.webp

templates/business-plan/thumbs/business-plan-general-blank-template/v1-thumb.webp

Quick API/pipeline spot-checks (optional)

/api/bp-templates-firebase/list includes the slug with isMaster: true, currentVersion: "v1", and the three storagePaths.

Open the preview.webp and thumb.webp URLs in a browser → both load (200 OK).

Try an anon write to /templates/business-plan/... → denied (rules good).

If anything’s off

Wrong thumb path? Move the file under /thumbs/… and update storagePaths.thumb.

Two masters show up? Run the promote transaction again (it demotes all others atomically).

Preview missing? Re-generate from the admin page; confirm it writes to /previews/<slug>/v1-preview.webp.