Duncanville Arts Foundation — Operations Infrastructure
Technical Specification — Airtable Base Design

DAF Operations
Database Schema

Seven tables. One source of truth for activations, program managers, governance, and compliance.

PlatformAirtable
Tables7
Connects ToPM Dashboard, ED Dashboard, Box Office
Year One Capacity16 activations, multiple PMs
Design Principle

Every dashboard — the PM's working checklist, the ED's operations view, the Box Office tracker — reads from and writes to this single Airtable base. No tool maintains its own data. The base is the record. The dashboards are views into it.

The schema is designed to scale from Year One's 16 activations to whatever Year Two and beyond require, without restructuring. New activations, new PMs, and new governance obligations are rows, not columns.

0
OverviewTable Relationships

Seven tables. T1 (Activations) is the spine of the entire base — every other table links to it. T7 (Purchasers) already exists and connects the Box Office to the activation record. The new tables add operational and governance layers on top of the financial infrastructure already built.

T1 Activations

T2 Program Managers

T3 PM Assignments

T4 Responsibility Progress

T5 Workshops

T6 Governance Events

T7 Purchasers

Extend, don't replace. The Box Office base currently has three tables: Programs, Purchasers, and Activations. Rename "Programs" to "Activations" (T1), keep "Purchasers" as T7, and migrate or archive the old "Activations" post-event scorecard rows into T1 as additional fields. Add T2 through T6 as new tables in the same base.
T1
Table OneActivations

One record per activation. This is the primary record every other table references. It holds the canonical identity, pipeline stage, financial parameters, CII inputs, and post-activation scores for each program.

Primary key convention: Activation ID format is ACT-YYYY-NNN where YYYY is the fiscal year the activation occurs in and NNN is a zero-padded sequence number. Example: ACT-2026-001. This ID appears in Stripe product metadata, Airtable URLs, PM Dashboard URLs, and all board reports. It never changes once assigned.
Identity & Pipeline
Activations Primary record — one row per activation
Field NameTypeNotes
Activation IDTextPrimary field. Format: ACT-YYYY-NNN. Never auto-generated — assigned manually to ensure intentional sequencing.Used in all external references: Stripe metadata, PM Dashboard URL, board reports.
Program NameTextFull public-facing program name. Example: Third Wednesday Jazz Series.
ProposerTextIndividual or organization proposing the program.
Proposer EmailEmailPrimary proposer contact. Used for go/no-go notifications and refund communications.
Pipeline StageSingle SelectOptions: Intake • Develop • Validate • Activate • Graduate • Archived. Updated manually by ED.This is the field the ED Dashboard uses for the pipeline view. Accuracy matters.
Validation StatusSingle SelectOptions: Campaigning • Validated • Did Not Validate • Cancelled.Distinct from Pipeline Stage. A program can be in Validate stage with status Campaigning.
Fiscal YearSingle SelectOptions: FY2026 • FY2027 • FY2028. DAF fiscal year is October through September.
DisciplineSingle SelectOptions: Music • Visual Art • Theater • Dance • Literary • Culinary • Film • Multi-Discipline • Other.
Activation DateDateThe program night. All deadline calculations derive from this field.
VenueTextDefault: Arts Junction at 202 West Center. Free text to accommodate future venues.
Validation DeadlineFormulaDATEADD({Activation Date}, -35, 'days')Campaign must close 35 days before activation. This is the go/no-go deadline date.
Pre-Activation OpensFormulaDATEADD({Activation Date}, -21, 'days')
Post-Activation DueFormulaDATEADD({Activation Date}, 7, 'days')
Days to ActivationFormulaDATETIME_DIFF({Activation Date}, TODAY(), 'days')Negative after activation night. ED Dashboard uses this for sorting and urgency flags.
Financial Parameters
Activations — Financial Fields
Field NameTypeNotes
CapacityNumberMaximum seats. Used as Stripe Payment Link quantity cap.
Cost to ActivateCurrencyTotal projected costs. Source of F1 denominator.
Ticket Price — GeneralCurrencyStandard admission.
Ticket Price — SupporterCurrencyPremium tier. Leave blank if not offered.
Tickets Required to ValidateFormulaCEILING({Cost to Activate} / {Ticket Price - General})
Stripe Product IDTextPopulated when Stripe product is created. Used for Zapier webhook routing.
Total CommittedRollupCOUNT of linked Purchasers where Refund Status = Active.
Total Revenue CommittedRollupSUM of Amount Paid (dollars) from linked Purchasers where Refund Status = Active.
Validation Progress %FormulaROUND({Total Committed} / {Tickets Required to Validate} * 100, 0)
Post-Activation CII Scores
Activations — CII Score Fields Populated after activation night from the Activation Report Generator. These fields feed the ED Dashboard CII summary view.
Field NameTypeNotes
Actual AttendanceNumberFinal reconciled door count from Resp. 23.
F1 ScoreNumber (0–100)Pre-commitment rate. Populated by Activation Report Generator.
F2 ScoreNumber (0–100)Resident share. Derived from Purchasers rollup.
F3 ScoreNumber (0–100)Substitution rate. From survey dataset (Resp. 24).
F4 ScoreNumber (0–100)Repeat participation. Zero on first activation by design.
F5 ScoreNumber (0–100)Adjacent business lift. From baseline comparison (Resp. 26).
CII CompositeFormula({F1 Score}*0.30)+({F2 Score}*0.25)+({F3 Score}*0.20)+({F4 Score}*0.15)+({F5 Score}*0.10)
CII ThresholdFormulaIF({CII Composite}>=70,"Graduate",IF({CII Composite}>=50,"Develop","Redesign/Retire"))
Survey Response RateNumber (%)From Resp. 24 submission. PM performance standard field.
ZIP Capture RateNumber (%)From Resp. 25 submission. PM performance standard field.
Start Time Variance (min)NumberPositive = late, negative = early. ±15 is the standard.
Debrief SubmittedCheckboxMarked true when Resp. 27 is received.
Financial Settlement SubmittedCheckboxMarked true when Resp. 28 is received and accepted.
Activation NotesLong TextED field. Narrative notes on the activation for board reporting and future reference.
T2
Table TwoProgram Managers

Master roster of all Program Managers engaged by the Foundation. One record per person. A PM may have multiple assignments across multiple activations; those live in T3, not here.

Program Managers Master roster — one row per person
Field NameTypeNotes
PM Display NameTextPrimary field. Format: Last-First. Example: Thompson-Ron. This is the reference that appears on all activation records and the ED Dashboard.Formatted Last-First to sort correctly in Airtable views and ED Dashboard tables.
First NameText
Last NameText
EmailEmailUsed to send PM Dashboard URL on assignment.
PhonePhone
Contract StatusSingle SelectOptions: Active • Inactive • Prospective.
Year One ActivationsNumberCount of activations in FY2026. Manual entry; used for workload tracking.
NotesLong TextED field. Performance observations, re-engagement notes, anything not captured in the performance standard fields on T4.
T3
Table ThreePM Assignments

One record per PM per activation. This is the join table between T1 and T2, and the record the PM Dashboard URL is built from. Creating a T3 record is the act of assigning a PM to an activation. It generates the dashboard URL and scopes all of the PM's Responsibility Progress records in T4.

Assignment ID convention: Format is ASSIGN-ACT-YYYY-NNN-LAST. Example: ASSIGN-ACT-2026-001-MARTINEZ. This ID is the URL parameter for the PM Dashboard: daf.netlify.app/pm?id=ASSIGN-ACT-2026-001-MARTINEZ. The PM opens this URL and their dashboard is pre-configured. The ID is also how Airtable scopes all T4 records to the correct PM and activation combination.
PM Assignments One row per PM per activation
Field NameTypeNotes
Assignment IDTextPrimary field. Format: ASSIGN-ACT-YYYY-NNN-LAST. This value is the URL parameter.Manually assigned. Copy-paste into PM Dashboard URL to generate the shareable link.
PM Display NameFormulaLookup from T2. Displays Last-First for all ED Dashboard views.
Program NameFormulaLookup from T1. Populates PM Dashboard header automatically.
Activation DateFormulaLookup from T1. All deadline calculations in the PM Dashboard source from this.
Contract IssuedCheckboxED marks true when activation contract is sent to PM.
Contract SignedCheckboxED marks true when signed contract is received.
Dashboard URLURLThe full shareable PM Dashboard URL. Format: daf.netlify.app/pm?id={Assignment ID}. Copy and send to PM on assignment.
Date AssignedDateWhen the assignment was created.
Responsibilities CompleteRollupCOUNTIF of linked T4 records where Completed = true.
Progress %FormulaROUND({Responsibilities Complete} / 28 * 100, 0)
T4
Table FourResponsibility Progress

One record per responsibility per assignment. When an assignment is created in T3, a script creates 28 T4 records automatically — one for each numbered responsibility in the Scope of Work. The PM Dashboard reads and writes these records. When a PM checks a box, it updates the Completed field on the corresponding T4 record.

Record creation: T4 records are generated by an Airtable automation triggered when a new T3 Assignment record is created. The automation creates 28 records, each with the Assignment ID, Activation ID, and Responsibility Number pre-populated. No manual T4 entry is required.
Responsibility Progress 28 rows per assignment — auto-generated
Field NameTypeNotes
Record IDTextAuto-generated by Airtable. Format: {Assignment ID}-R{NN}. Example: ASSIGN-ACT-2026-001-MARTINEZ-R09.
Responsibility NumberTextTwo-digit zero-padded. Values: 01 through 28.
PhaseSingle SelectOptions: Pre-Activation • Activation Day • Post-Activation. Pre-populated on record creation.
Responsibility TitleTextShort title. Pre-populated on record creation from responsibility definitions.
CompletedCheckboxThe PM Dashboard writes to this field when a checkbox is ticked. This is the primary field the ED Dashboard reads for progress tracking.
Completed DateDateTimestamp set automatically when Completed is changed to true.
NotesLong TextOptional. PM can add notes on a responsibility — used for documenting Resp. 20 incidents and Resp. 27 debrief observations.
DeadlineFormulaCalculated from Activation Date lookup and the responsibility's deadline offset. The PM Dashboard reads this to display deadline dates and urgency flags.
StatusFormulaIF(Completed, "Done", IF(TODAY() > Deadline, "Overdue", IF(DATETIME_DIFF(Deadline, TODAY(), 'days') <= 3, "Due Soon", "Pending")))
T5
Table FiveWorkshops

Five records per activation — one for each workshop in the proposer curriculum. Created when an activation enters the Develop stage. The ED Dashboard displays workshop status alongside PM progress. The PM Dashboard shows workshops as read-only awareness rows.

Workshops 5 rows per activation
Field NameTypeNotes
Workshop IDTextFormat: {Activation ID}-W{N}. Example: ACT-2026-001-W3.
Workshop NumberNumber1 through 5.
TitleTextAudience Mapping • Pricing Strategy • Commitment Campaign • Production Planning • Financial Management.
Scheduled DateDateSet when the proposer enters the Develop stage. Calculated from activation date and workshop interval.
DeliverableTextThe required deliverable for this workshop. Pre-populated from the CIS curriculum.
StatusSingle SelectOptions: Scheduled • Completed • Missed • Rescheduled.
Deliverable ReceivedCheckboxED marks true when the workshop deliverable is submitted and accepted. Stage 3 authorization requires all five true.
NotesLong TextFoundation observations on deliverable quality. Used for proposer development support.
T6
Table SixGovernance Events

Every board meeting, compliance filing, reporting deadline, and operational obligation that belongs to the Foundation as an institution rather than to a specific activation. This table does not link to T1. It is the ED's governance calendar — standalone, comprehensive, and growing.

Year One pre-populated events. On base creation, add the following records immediately: four quarterly board meetings (dates TBD but fix them now), Form 990 deadline (February 15, 2027, extended August 15, 2027), Texas franchise tax report (May 15, 2027), Texas public information report (May 15, 2027), and four CIS quarterly summary windows (closing: December 31, 2026 • March 31, 2027 • June 30, 2027 • September 30, 2027).
Governance Events Standalone — Foundation-level obligations
Field NameTypeNotes
Event NameTextPrimary field. Descriptive and specific. Example: Q1 FY2027 Board Meeting • Form 990 Filing Deadline FY2026 • CIS Q2 Summary Draft Due.
Event TypeSingle SelectOptions: Board Meeting • IRS Compliance • State Compliance • CIS Reporting • Financial • Operational • Grant • Other.Grant type is placeholder for Year Three. Add now so the field exists when needed.
DateDateThe hard deadline or scheduled event date.
Preparation DeadlineDateOptional. Date by which preparation must begin. Example: Board meeting on March 15 requires board packet by March 8.
Fiscal YearSingle SelectFY2026 • FY2027 • FY2028. Allows multi-year filtering in ED Dashboard.
RecurrenceSingle SelectOptions: One-time • Annual • Quarterly • Monthly.Airtable does not auto-generate recurring events. Create each instance as a separate record. This field is for documentation and filtering only.
StatusSingle SelectOptions: Upcoming • In Preparation • Complete • Overdue • Waived.
OwnerSingle SelectOptions: Executive Director • Board • CPA • Foundation (joint). For Year One, most will be Executive Director.
External DeadlineCheckboxTrue if the deadline is set by an external authority (IRS, State of Texas, board bylaws). These are hard. Internal deadlines are soft.
Board Packet RequiredCheckboxTrue for board meetings. Triggers a preparation reminder 7 days before the event date.
NotesLong TextFiling instructions, relevant statutes, CPA contacts, prior year notes. This field grows over time into an institutional knowledge base.
Related DocumentsURLLink to Google Drive folder, IRS.gov page, or Squarespace page where supporting materials live.
Year One Governance Calendar — Pre-Populate These Records
T6 Seed Records Create these records immediately on base setup. Dates marked TBD require a board decision before they can be fixed.
Event NameTypeDateHard Deadline
Q1 FY2027 Board MeetingBoard MeetingTBD — Saturday, Dec 2026No
Q2 FY2027 Board MeetingBoard MeetingTBD — Saturday, Mar 2027No
Q3 FY2027 Board MeetingBoard MeetingTBD — Saturday, Jun 2027No
Q4 FY2027 Board Meeting & Annual ReviewBoard MeetingTBD — Saturday, Sep 2027No
CIS Q1 Summary — Draft DueCIS ReportingJanuary 15, 2027No
CIS Q2 Summary — Draft DueCIS ReportingApril 15, 2027No
CIS Q3 Summary — Draft DueCIS ReportingJuly 15, 2027No
CIS Q4 Annual Summary — Draft DueCIS ReportingOctober 15, 2027No
Form 990 Filing Deadline — FY2026IRS ComplianceFebruary 15, 2027Yes
Form 8868 Extension Deadline (if filed)IRS ComplianceAugust 15, 2027Yes
Texas Franchise Tax Report — FY2026State ComplianceMay 15, 2027Yes
Texas Public Information Report — FY2026State ComplianceMay 15, 2027Yes
Engage CPA / Tax PreparerOperationalNovember 1, 2026No
Annual Budget ApprovalBoard MeetingTBD — before Oct 1, 2027No
T7
Table SevenPurchasers

This table already exists in the Box Office base. No structural changes are required. The only addition is ensuring the linked record field to T1 (Activations) uses the new Activation ID field as the join key rather than the old Programs record ID. Verify the Zapier webhook still writes to the correct linked record field after the Programs table is renamed to Activations.

Migration note. When renaming the existing Programs table to Activations and adding the new Activation ID field, update the Zapier Zap to pass the Stripe metadata field program_id to the new Activation ID field. Test with a Stripe test mode purchase before going live with any active campaign.
8
Section EightAPI Access & Security
Airtable Personal Access Token

Create one Airtable Personal Access Token with read/write scopes on the DAF base. Store it in the Netlify environment variables under the key AIRTABLE_API_KEY — exactly where the CIS Toolkit proxy already stores the Anthropic key. The existing serverless function handles all API calls. The dashboards never receive the token directly.

URL-Based Access Control

The PM Dashboard URL contains the Assignment ID. Knowledge of the URL is the access credential. This is appropriate for a small-team Year One operation. The PM cannot access any other PM's dashboard because they do not have the other URL. The ED Dashboard is Netlify password-protected and not accessible via URL alone.

Read vs. Write Permissions by Dashboard
API Operations by Dashboard
DashboardReadsWrites
PM DashboardT3 (assignment config), T4 (responsibility status)T4 only (Completed field and Completed Date)
ED DashboardT1, T2, T3, T4, T5, T6, T7T1 (stage, status, CII scores), T6 (event status). All other tables read-only from ED Dashboard.
Box Office (existing)T1 (validation progress)T7 (via Zapier, not directly)
Build sequence after schema approval. Step 1: Extend Airtable base with T2–T6. Step 2: Create the Airtable automation to generate 28 T4 records on new T3 assignment. Step 3: Add Airtable token to Netlify environment variables. Step 4: Extend the serverless proxy to handle Airtable API calls alongside the existing Anthropic calls. Step 5: Rebuild PM Dashboard to read/write Airtable instead of localStorage. Step 6: Build the ED Dashboard. Step 7: Seed T6 with Year One governance events.