Methodology

SeasonPost pages are generated from static JSON at build time. We disclose how dates, test windows, and hook slots are produced — and what we never claim.

What each URL must include (Info Gain)

Holiday dates

Fixed-date holidays use calendar ISO dates for the current planning cycle (e.g. Christmas 2026-12-25). Moveable US holidays (Thanksgiving) use the official rule for the stated year. Floating retail nodes (Prime Day adjacent, Back to School) use documented anchor dates in data/d/holidays.json — update annually at rebuild.

Test windows & posting slots

test_start = holiday_date - lead_days_start
test_end   = holiday_date - lead_days_end
anchor_city = primary city for primary_country (from Plan A cities.json)
peak_slots  = top 3 local hours from buildHeatmap(city.profile)

We never label these as "official TikTok best times." Copy uses "test angles" and "suggested window" language only.

Hook slots

Hooks are structure templates with [BRACKETS] for creator-specific values — not 50 finished captions scraped from the web. Each holiday × niche pair has distinct slots stored in data/d/calendar-pages.json.

Indexing gate

Similarity CI (Scaled Content guard)

At build time, scripts/validate-d-data.mjs compares hook + avoid fingerprints across niches for the same holiday. Jaccard similarity >85% fails the build — forces differentiated hooks per niche.

What we do not do

Q4 season push titles

For Q4 holidays (Halloween through Boxing Day) within 90 days of the holiday, calendar and hub pages use search-aligned titles such as Beauty TikTok Ideas for Halloween 2026 — Post Oct 1–Oct 30 via src/lib/d/seo-meta.ts. Outside the push window, titles fall back to ISO-date format.

Update log

Back to SeasonPost hub