---
# System prepended metadata

title: ai-lab-content-projects-table-concept

---

# ai-lab-content-projects-table-concept

awesome — two tables will work great:

# Airtable Schema: **Content Projects** + **Content**

## Table 1 — **Content Projects**

Represents the whole initiative spawned by an ask (often many pages + media).

**Fields**

* **Project Name** (Primary, Single line)
* **Project Status** (Single select)

  * New Ask → Evaluate → Plan/Map → In Execution → In Review → Ready to Publish → Published → Archived
* **Priority** (Single select): P0 / P1 / P2
* **Requestor / Stakeholders** (Linked to **People** or text for now)
* **RACI**

  * Responsible (Link to People)
  * Accountable (Link)
  * Consulted (Link)
  * Informed (Link)
* **Go-Live Window** (Date range)
* **Content Items** (Link to **Content**, allow multiple; show lookup of each item’s Status/Type)
* **% Complete (rolled up)** (Rollup of **Content.% Complete**, `AVERAGE(values)`)
* **Blocked Items (count)** (Rollup of **Content** where **Status = Blocked**, `COUNTALL(values)`)
* **Risks / Decisions / Notes** (Long text)
* **Architecture / Plan Doc** (URL to HackMD/GDoc/Figma/Miro)
* **Publishing Checklist (Project)** (Checkboxes or multi-select; optional)

**Useful Views**

* **Kanban: Project Status**
* **Dashboard: Health** (filter where `Blocked Items > 0` OR `% Complete < 100 AND Go-Live < today+7`)
* **Timeline: Go-Live**

---

## Table 2 — **Content**

Represents a single piece of content (page, image set, video, PDF, post, etc.) with its own lifecycle.

**Fields**

* **Title** (Primary)
* **Project** (Link to **Content Projects**)
* **Type** (Single select): Page / Section Index / News Post / PDF Download / Image Set / Single Image / Video / Audio / Social Asset / Data Viz / Other
* **Status** (Single select — combined “Stage + RACI” lifecycle)

  * New / Intake
  * Evaluate (content inventory for this item)
  * Plan (outline/placement/metadata decided)
  * Drafting / Production
  * **Needs Input / Blocked**
  * Internal Review
  * Leadership Review
  * Ready to Publish
  * Published
  * Archived
* **Responsible (Author/Producer)** (Link to People)
* **Accountable (Editor/Owner)** (Link to People)
* **Consulted / Informed** (Links)
* **Source / Draft URL** (URL to HackMD, GDoc, Figma, Frame.io, etc.)
* **Target URL / Slug** (Short text or URL)
* **Asset Location** (Multi-URL: CDN bucket, Airtable attachment, Drive path)
* **Due Date** (Date), **Review By** (Date), **Publish By** (Date)
* **Effort (pts)** (Number) — t-shirt size or story points
* **SEO / Metadata** (Group of fields; show/hide when Type = Page/Post)

  * Slug, Title Tag, Meta Description, Canonical, OG Title/Desc, OG Image
* **Accessibility / Compliance** (Group; vary by Type)

  * Pages: Headings valid, internal links checked
  * Images: Alt text, dimensions, optimized
  * Video: Captions, transcript, loudness, aspect, thumb
  * PDF: Tagged PDF, fonts embedded, title, language set
* **QA** (Checkbox): Passed
* **Change Log** (Long text)
* **% Complete** (Formula; simple heuristic by Status)

  ```text
  IF(Status="Published",100,
  IF(Status="Ready to Publish",90,
  IF(Status="Leadership Review",80,
  IF(Status="Internal Review",70,
  IF(Status="Drafting / Production",45,
  IF(Status="Plan",25,
  IF(Status="Evaluate",15,0)))))))
  )
  ```
* **Blocked Reason** (Long text; only when Status = Blocked)

**Useful Views**

* **Kanban: Status** (day-to-day)
* **Blocked** (Status = Needs Input / Blocked)
* **Ready to Publish** (Status = Ready to Publish AND QA checked)
* **By Type** (grouped)
* **By Project** (grouped)
* **Due Soon** (Due/Publish within 7 days)

---

## Short-Label Variants (nice for Kanban chips)

* **Projects**: Ask → Evaluate → Plan → Execute → Review → Ready → Published → Archived
* **Content**: Intake → Evaluate → Plan → Draft → Blocked → Int. Review → Stakeholder → Ready → Published → Archived

---

## Conditional Checklists (by Type)

Use a **single “Checklist” long text** with templates via automation (or multiple checkboxes with conditional visibility):

**Page / Post**

* [ ] Outline approved
* [ ] Links updated & validated
* [ ] SEO fields set (title/meta/canonical/OG)
* [ ] Accessibility headings pass
* [ ] Images compressed & alt text present
* [ ] Final copy edit

**Image / Image Set**

* [ ] Alt text written
* [ ] Dimensions / crop spec
* [ ] WebP/AVIF exported
* [ ] Thumbnail/social image
* [ ] License/credit stored

**Video**

* [ ] Captions (human-checked)
* [ ] Transcript stored
* [ ] Loudness normalized
* [ ] Thumbnail selected
* [ ] Player embed tested
* [ ] License/credit stored

**PDF / Download**

* [ ] Tagged PDF accessibility
* [ ] Fonts embedded
* [ ] Title/Subject/Language set
* [ ] File size optimized
* [ ] Version/date in footer

---

## Automations (lightweight, high-leverage)

* **Content → Status = Ready to Publish**

  * Notify **Accountable** in Slack/Email, include Target URL + checklist
  * If **QA** not checked, post reminder to run QA
* **Any Content → Status = Blocked**

  * Ping **Responsible + Accountable**, post **Blocked Reason**
* **All linked Content = Published**

  * Set **Project Status → Published**
* **New Content created**

  * If **Type** = Page/Post, create empty SEO fields + checklist template
  * If **Type** = Video, create caption/transcript tasks
* **Due/Publish reminders**

  * 48h before **Publish By**, if not Ready/Published, notify **Accountable**

---

## Why this works for mixed media

* **One Content table** handles pages **and** assets; **Type** governs which fields/checklists matter.
* Project metrics stay clean via rollups; you avoid mixing project-level planning fields into every asset.

---

## Optional Extras

* **People** table (centralize contacts; enables RACI links)
* **Taxonomies** (multi-select): Audience, Topic, Campaign, Site Section
* **Interfaces**:

  * **Publishing Queue** (Ready to Publish + QA)
  * **Project Health** (progress bar, blockers, dates)
  * **My Work** (Assigned to me, next 7 days)

---

If you’d like, I can give you:

1. a **CSV starter** for both tables (import-ready), or
2. an **Airtable JSON schema** you can paste into a base-builder script.
