January Marketing Spend Cap Worksheet When Contractors Return Mid-Fest Prep - 2026

January 6: your art contractor invoices the winter capsule refresh. January 7: your social contractor wants $800 for a February fest creator push. January 8: you still have not filed January re-entry smoke, but Meta Ads Manager is open because "we need wishlists before signup week ends."
January 2027 is the inverse of December's contractor blackout: paid help returns while marketing cash competes with February RC engineering (branch label receipt, 7-day RC challenge) and the evidence stack you froze in December defer scope.
December engineering floor capped founder engineering hours when contractors went offline. October fest spend cap capped total fest marketing pool months ahead. October fest time-box split founder hours across engineering vs marketing during fest week. This Money & Business worksheet caps weekly marketing cash for Jan 6 through February promote week when contractors return mid-prep—not engineering floor hours, not annual runway math alone.
Non-repetition note: October spend cap owns runway-month pool + category caps for the whole fest arc. December engineering floor owns engineering_floor_hours per day during blackout. Contractor vs hire owns role dollars. This URL owns weekly_marketing_cap_usd + january_marketing_cap_receipt_v1.json + BUILD_RECEIPT marketing_spend_planned when contractors return and ads restart.
Pair BUILD_RECEIPT beginner pipeline, February signup trend playbook, contractor vs hire fest week, and jq January reentry capstone pointer.
Why this matters now (January 2027 / contractor return)
- Contractor invoices stack — Art, motion, and social contractors return Jan 3–Jan 10 with backlogged deliverables that feel like marketing but hit cash the same week as Steam ads.
- February signup clock — February fest signup playbook sets evidence dates; this worksheet sets spend dates—paid bursts before signup proof is theater.
- Smoke stop rules — Fest marketing cap discipline says pause ads on smoke RED; January needs weekly caps wired to RC challenge gates, not a single October number.
- Engineering vs marketing cash confusion — Founders who capped December engineering hours still overspend January marketing cash because hours and dollars live in different worksheets.
- BUILD_RECEIPT row gap — Partners see
founder_hours_plannedfrom December but notmarketing_spend_plannedfor January—cash surprises in diligence zips.
Direct answer: Fill january-marketing-cap-2027.md with weekly marketing caps Jan 6–Feb promote, contractor_return_ramp rows, category splits, stop rules tied to smoke/RC receipts, file january_marketing_cap_receipt_v1.json, set BUILD_RECEIPT marketing_spend_planned before any paid burst.
Who this worksheet is for
| Audience | Outcome |
|---|---|
| Solo founder | Printable weekly cash caps you can refuse in Slack |
| Producer | Receipt proving ads paused when smoke RED |
| Working dev | marketing_spend_planned row aligned to invoice schedule |
Time: ~60 minutes first worksheet; 10 minutes each Sunday update actual_spend_usd.
Prerequisites: Bank balance post-holiday, contractor return dates, October fest spend cap annual pool (or honest January remainder), January re-entry smoke scheduled.
Format ladder (January cluster)
| Artifact | Role |
|---|---|
| This worksheet | Weekly marketing cash caps when contractors return |
| December engineering floor | Daily engineering hours during blackout |
| October fest spend cap | Annual fest marketing pool + runway |
| October fest time-box | Founder hour lanes during fest week |
| Contractor vs hire | Who you pay per role |
| February signup playbook | Participate evidence before spend |
Order: January re-entry smoke GREEN → jq January pointer GREEN → this worksheet → February RC label evening → 7-day RC challenge.
Beginner path — weekly marketing cap table
Copy into release-evidence/ops/january-marketing-cap-2027.md:
| Week starting | Contractors back | Weekly marketing cap (USD) | Paid social cap | Contractor marketing cap | Trailer/motion cap | Stop rule active |
|---|---|---|---|---|---|---|
| Jan 6 | art Jan 6, social Jan 8 | $400 | $0 | $250 | $150 | No ads until smoke GREEN |
| Jan 13 | audio Jan 10 | $600 | $150 | $300 | $150 | Pause if smoke YELLOW |
| Jan 20 | all lanes | $900 | $300 | $400 | $200 | Pause if RC label receipt missing |
| Jan 27 | — | $1,200 | $500 | $400 | $300 | Pause if jq pointer RED |
| Feb 3 (RC week) | — | $800 | $400 | $200 | $200 | 7-day challenge daily gate |
| Feb 10 (promote week) | — | $1,500 | $800 | $400 | $300 | Full stop rules from October cap |
Beginner rule: paid_social + contractor_marketing + trailer ≤ weekly_marketing_cap. If a contractor invoice exceeds the contractor marketing column, defer the invoice week or lower paid social—do not borrow from February without updating the receipt.
Success check: Each week has one primary marketing outcome (e.g., "capsule refresh live") and one engineering outcome (e.g., "RC label receipt filed")—not twelve parallel launches.
Category definitions (what counts toward weekly cap)
| Counts | Does not count (track elsewhere) |
|---|---|
| Meta / TikTok / Reddit ads | Founder salary |
| Social contractor invoices (fest prep) | Engineering contractor bugfix |
| Trailer/motion deposits | Steam revenue share |
| Influencer paid posts | Tool subscriptions (Figma, Adobe) |
| PR list sends with cash fee | BUILD_RECEIPT evidence labor you value at $0 cash |
Quasi-paid: Founder Discord hours belong in October time-box—this worksheet tracks cash out the door only.
Developer path — gates K1–K6
| Gate | Check | Fail action |
|---|---|---|
| K1 | weekly_caps[] covers Jan 6 through Feb promote week |
Block receipt until table complete |
| K2 | Each contractor_return_date ≤ first spend row using that lane |
Defer spend or update return date honestly |
| K3 | marketing_spend_planned on BUILD_RECEIPT equals sum(weekly_caps) |
Fix BUILD_RECEIPT row before partner zip |
| K4 | stop_rules[] reference smoke + RC receipt paths |
Wire pause triggers in ads manager notes |
| K5 | category_totals ≤ january_marketing_pool_usd |
Lower caps or document written exception |
| K6 | january_marketing_cap_ok: true |
No promote-week paid burst until GREEN |
january_marketing_cap_receipt_v1.json (template)
{
"schema": "january_marketing_cap_receipt_v1",
"generated_at": "2027-01-06T18:00:00Z",
"january_marketing_pool_usd": 4400,
"weekly_caps": [
{
"week_start": "2027-01-06",
"cap_usd": 400,
"paid_social_usd": 0,
"contractor_marketing_usd": 250,
"trailer_motion_usd": 150,
"actual_spend_usd": null,
"stop_rule": "no_ads_until_smoke_green"
},
{
"week_start": "2027-01-13",
"cap_usd": 600,
"paid_social_usd": 150,
"contractor_marketing_usd": 300,
"trailer_motion_usd": 150,
"actual_spend_usd": null,
"stop_rule": "pause_on_smoke_yellow"
}
],
"contractor_return_ramp": [
{ "lane": "art_capsule", "return_date": "2027-01-06", "first_invoice_allowed": "2027-01-06" },
{ "lane": "social_comms", "return_date": "2027-01-08", "first_invoice_allowed": "2027-01-08" },
{ "lane": "audio_trailer", "return_date": "2027-01-10", "first_invoice_allowed": "2027-01-13" }
],
"stop_rules": [
{
"id": "SR1",
"trigger": "january_reentry_smoke_ok != true",
"action": "paid_social_usd = 0"
},
{
"id": "SR2",
"trigger": "february_rc_label_ok != true",
"action": "pause_paid_social"
},
{
"id": "SR3",
"trigger": "february_rc_challenge_day_red",
"action": "pause_all_marketing_except_owned_channels"
}
],
"pointers": {
"january_reentry_smoke": "release-evidence/smoke/JANUARY_REENTRY_SMOKE_RECEIPT.json",
"january_reentry_capstone": "release-evidence/capstone/JANUARY_REENTRY_CAPSTONE.json",
"february_rc_label": "release-evidence/steam/branch/FEBRUARY_RC_BRANCH_LABEL_RECEIPT.json",
"october_fest_spend_cap": "release-evidence/ops/FEST_SPEND_CAP_2026.json"
},
"gates": {
"K1": "pass",
"K2": "pass",
"K3": "pass",
"K4": "pass",
"K5": "pass",
"K6": "pass"
},
"january_marketing_cap_ok": true
}
Store canonical copy at release-evidence/ops/JANUARY_MARKETING_CAP_RECEIPT.json.
BUILD_RECEIPT row (marketing_spend_planned)
{
"marketing_spend_planned": 4400,
"marketing_spend_actual": null,
"marketing_spend_currency": "USD",
"january_marketing_cap_receipt": "release-evidence/ops/JANUARY_MARKETING_CAP_RECEIPT.json",
"january_marketing_cap_ok": true
}
Working dev rule: marketing_spend_planned is the sum of weekly caps in the receipt—not your October annual pool headline. January is a sub-ledger of the fest cap.
verify_january_marketing_cap.sh
#!/usr/bin/env bash
set -euo pipefail
RCPT="${1:-release-evidence/ops/JANUARY_MARKETING_CAP_RECEIPT.json}"
jq -e '.schema == "january_marketing_cap_receipt_v1"' "$RCPT" || exit 1
POOL=$(jq -r '.january_marketing_pool_usd' "$RCPT")
SUM=$(jq '[.weekly_caps[].cap_usd] | add' "$RCPT")
[[ "$SUM" -le "$POOL" ]] || { echo "K5 fail: weekly sum $SUM > pool $POOL"; exit 5; }
jq -e '.january_marketing_cap_ok == true' "$RCPT" || exit 6
SMOKE=$(jq -r '.pointers.january_reentry_smoke' "$RCPT")
if [[ -f "$SMOKE" ]]; then
jq -e '.january_reentry_smoke_ok == true' "$SMOKE" || {
PAID=$(jq '[.weekly_caps[0].paid_social_usd] | add' "$RCPT")
[[ "$PAID" -eq 0 ]] || { echo "SR1 fail: smoke not green but paid social > 0"; exit 4; }
}
fi
echo "january_marketing_cap verify: OK"
Exit codes: 1 schema, 4 stop rule SR1, 5 K5 pool, 6 K6 latch.
Contractor return ramp (mid-fest prep)
When contractors return, marketing spend often front-loads before engineering is ready. Map return dates to first_invoice_allowed:
| Lane | Typical return | Spend allowed when | Block if |
|---|---|---|---|
| Art / capsule | Jan 3–6 | Capsule assets merged + February safe-zone pass Z-gates planned | Smoke RED |
| Social / comms | Jan 6–10 | Signup evidence filed per G1–G6 | Participate date unknown |
| Trailer / motion | Jan 8–15 | RC branch label declared | RC label receipt missing |
| PR / outreach | Jan 10+ | Demo scope hash stable | Defer SHIP exception open |
Cross-link contractor vs hire: if you hired social part-time in January, move dollars from contractor_marketing to payroll row in your burn sheet—do not double-count in weekly cap.
January pool math (derive from October cap remainder)
october_marketing_pool_usd = # from fest-spend-cap-2026.md
spent_oct_through_dec_usd = # invoices + ads actuals
january_marketing_pool_usd = min(
october_marketing_pool_usd - spent_oct_through_dec_usd,
cash_on_hand_usd * 0.08,
5000
)
| Runway after holiday | Default January pool cap |
|---|---|
| < 4 months | $0 paid social; contractor caps only if invoice already signed |
| 4–6 months | ≤ 8% cash on hand, max $3,500 |
| 6+ months | ≤ 10% cash on hand, max $5,000 |
Subtract February engineering evidence reservations (QA contractor, Steam fees) before marketing pool—cousin to October cap Step 2 evidence reservation.
Stop rules (wire to receipts, not vibes)
| Stop rule ID | Trigger receipt / field | Marketing action |
|---|---|---|
| SR1 | january_reentry_smoke_ok != true |
paid_social_usd = 0 all weeks until GREEN |
| SR2 | january_reentry_capstone_ok != true |
Pause influencer + PR sends |
| SR3 | february_rc_label_ok != true |
No boost posts pointing at store URL |
| SR4 | RC challenge day gate RED | Pause paid social for 48h |
| SR5 | Refund blocker row open | Per October fest cap stop rule |
Post stop-rule fires to #marketing-ops with receipt path—reduces "we didn't know smoke failed" threads during RC week.
jq gate sketch (CI optional)
jq -e '
.january_marketing_cap_ok == true
and (.weekly_caps | length) >= 4
and ([.weekly_caps[].cap_usd] | add) <= .january_marketing_pool_usd
' release-evidence/ops/JANUARY_MARKETING_CAP_RECEIPT.json
Pair jq January pointer—marketing cap verify runs after pointer GREEN in CI graph.
Proof table (fill before first paid social)
| Row | Evidence | Owner | GREEN when |
|---|---|---|---|
| P1 | JANUARY_REENTRY_SMOKE_RECEIPT.json |
Engineering | january_reentry_smoke_ok: true |
| P2 | JANUARY_REENTRY_CAPSTONE.json |
Engineering | january_reentry_capstone_ok: true |
| P3 | JANUARY_MARKETING_CAP_RECEIPT.json |
Producer | K1–K6 pass |
| P4 | FEBRUARY_FEST_SIGNUP_RECEIPT.json |
Producer | G1–G6 pass |
| P5 | Ads manager screenshot (spend = 0 pre-smoke) | Marketing | Matches SR1 |
| P6 | BUILD_RECEIPT marketing_spend_planned |
Engineering | Matches receipt sum |
Scenarios A–G
A — Solo founder, $0 paid social January
Weekly caps cover contractor capsule only ($150–$250/wk). SR1 stays active until smoke GREEN. Engineering owns receipt filing Sunday nights.
B — Two-person team, contractor social returns Jan 8
K2 blocks Jan 6 invoice for social lane. Shift $250 from week 1 to week 2 contractor_marketing_usd in receipt—update marketing_spend_planned same day.
C — October pool exhausted in December trailer
january_marketing_pool_usd = 0 paid social; organic + owned channels only. Document in receipt notes—partners prefer honest zero to borrowed ads.
D — Smoke GREEN Jan 7, RC label missing Jan 20
SR3 fires: pause paid social week Jan 20 even though cap allows $300. Founder hours go to RC label evening.
E — jq pointer RED after holiday hotfix
SR2 fires: influencer deposits refunded or deferred. Weekly cap table unchanged—actual spend must respect stop rules even when caps allow more.
F — Publisher asks for marketing plan in diligence zip
Export january-marketing-cap-2027.md + receipt JSON + BUILD_RECEIPT row. Cross-link Q3 diligence packet structure.
G — Contractor returns early (Dec 28)
Do not raise January caps for "early" work—that belongs in December engineering floor or SHIP exception defer rows, not marketing cash.
Sunday retrospective (10 minutes)
Each Sunday update actual_spend_usd per week row:
- Export ad platform spend CSV → sum
paid_social_actual. - Match contractor invoices to
contractor_marketingcolumn. - If
actual > cap, document overage_reason in receiptnotesand lower next week—do not silently borrow from February promote week. - Re-run
verify_january_marketing_cap.sh. - Touch Thursday row review column marketing_spend_planned vs actual.
Comparison pack (January vs October vs December)
| Worksheet | Unit | Window | Contractor story |
|---|---|---|---|
| October fest spend cap | USD pool | May–October arc | Quote season |
| December engineering floor | Hours/day | Dec 13–Jan 2 | Contractors offline |
| January marketing cap | USD/week | Jan 6–Feb promote | Contractors return |
| October fest time-box | Hours/day | Fest week | Founder lanes |
Integration with February RC week
During 7-day RC challenge:
| Challenge day | Marketing cap guidance |
|---|---|
| C1–C2 | paid_social_usd = 0 unless smoke + pointer GREEN |
| C3–C5 | ≤ 50% of that week's paid social cap |
| C6–C7 | Full cap only if all challenge gates GREEN |
Pair February capsule safe-zone—do not run $800 ad burst on outdated capsule art; cap is not permission to amplify stale store truth.
Printable sign-off block (producer)
## January marketing cap sign-off — 2027-01-06
- [ ] Weekly cap table K1 complete
- [ ] Contractor return dates K2 verified
- [ ] BUILD_RECEIPT marketing_spend_planned K3 filed
- [ ] Stop rules SR1–SR5 written in ads manager notes
- [ ] january_marketing_cap_receipt_v1.json committed
- [ ] verify_january_marketing_cap.sh exit 0
Signed: __________ Date: __________
Common mistakes
"December defer said FREEZE so marketing is zero."
FREEZE is scope, not cash. Contractors returning in January still invoice—this worksheet caps those dollars.
"October fest cap already decided marketing."
October pool is annual; January is weekly execution against remainder—different grain.
"Smoke passed—we can max ads."
Smoke proves baseline; RC label, signup evidence, and challenge gates still gate SR2–SR4.
"Contractor quote is under cap so we skip receipt."
K3 requires BUILD_RECEIPT row—quotes without receipt are invisible to partners.
"Founder Discord is free marketing."
Hours belong in time-box; cash belongs here—do not hide contractor invoices as "founder time."
"One big February ad buy simplifies the sheet."
Weekly caps exist to catch early January overspend before promote week—lump sums hide SR1 violations.
Outbound references
- Steam Next Fest documentation — participate timing vs marketing bursts
- Meta Ads billing — daily spend limits as stop-rule backup
- BUILD_RECEIPT pattern — receipt discipline cousin
Related GamineAI reads
- December engineering floor cap
- October fest marketing spend cap
- October fest week founder time-box
- Contractor vs hire fest week
- January re-entry Wednesday smoke
- jq January reentry capstone pointer
- February signup trend playbook
- 7-day February RC smoke challenge
- February capsule safe-zone art pass
- Thursday BUILD_RECEIPT row review
Key takeaways
- January marketing needs weekly cash caps—not December engineering hours, not October annual pool alone.
january_marketing_cap_receipt_v1.jsonrecords caps, contractor ramp, and stop rules K1–K6.- BUILD_RECEIPT
marketing_spend_plannedmust equal the sum of weekly caps before paid bursts. - SR1 blocks paid social until January re-entry smoke is GREEN.
- Contractor return dates gate first_invoice_allowed—K2 prevents pre-return spend.
- Pair October fest spend cap for annual pool; this worksheet is January sub-ledger.
- December engineering floor is the blackout hour mirror; this is the return cash mirror.
- February signup playbook sets evidence dates; this sets spend dates.
- RC challenge days tighten paid social—do not treat weekly cap as daily permission.
verify_january_marketing_cap.shgives partners one exit code for marketing discipline.- Forward #10 opinion on numbered SHIP exceptions—marketing unfreeze pairs engineering unfreeze policy.
- Sunday
actual_spend_usdupdates keep Thursday row review honest.
FAQ
Is this the same as the October fest marketing spend cap?
No—October cap sets annual pool and runway; this URL sets weekly January–February execution when contractors return.
How is this different from December engineering floor?
December caps engineering hours when contractors go offline; January caps marketing cash when they return.
Do I need jq for a money worksheet?
Optional—verify_january_marketing_cap.sh uses jq for K5/K6; spreadsheet-only studios can manual-check sums.
Can I spend before February signup?
Only on contractor deliverables in the cap table—not paid social aimed at store URL until signup G-gates pass.
What if my October pool is already $0?
File receipt with january_marketing_pool_usd: 0 and organic-only stop_rules—honest zero beats borrowed ads.
Does contractor vs hire replace this worksheet?
No—contractor vs hire picks role economics; this caps weekly cash after you decide who to pay.
Where does Monday capstone reconciliation fit?
Backlog #11 row review expects marketing_spend_planned filed here first—pair jq pointer #8 and this receipt before first February upload.