Plan social content around calendar moments for a full year: build a year map from authoritative calendars, score every candidate moment on relevance, audience fit, and right to speak, apply lead time math by format tier and moment type, pick formats per platform, and keep a written skip list for moments the brand should sit out. Use when someone asks for a holiday content plan, a seasonal calendar, which awareness days to post about, when to start Christmas or back to school content, or whether a brand should post on a given day.
name: "seasonal_moment_marketing" description: "Plan social content around calendar moments for a full year: build a year map from authoritative calendars, score every candidate moment on relevance, audience fit, and right to speak, apply lead time math by format tier and moment type, pick formats per platform, and keep a written skip list for moments the brand should sit out. Use when someone asks for a holiday content plan, a seasonal calendar, which awareness days to post about, when to start Christmas or back to school content, or whether a brand should post on a given day."
Seasonal Moment Marketing
Purpose
Turn a year of holidays, observances, seasons, and the brand's own dates into a short, honest plan: a few moments done well, each started early enough to do properly, and a written list of the moments the brand will sit out and why. Most seasonal planning fails in two places. Teams start too late, so good ideas ship rushed. And teams post on days they have no business posting on, because the day was trending and nobody asked whether the brand had anything true to say.
Workflow
1. Gather the inputs
Collect these before mapping anything:
- The brand, what it sells, and who the audience is, including which countries they are in.
- The brand's own dates: launches, anniversaries, sponsored local events, stock and shipping cut-offs for anything sold.
- Proof on file: real stories, programmes, people, and history the brand can point to for a given topic. A claim with no proof behind it scores zero later, so find the proof now or admit there is none.
- Capacity: how many produced pieces the team can actually finish in a month. This caps how many moments survive scoring.
- The platforms in use and who approves posts, plus how many days approval normally takes.
2. Build the year map from real calendars
Work family by family, using references/year-map-sources.md for the source for each one:
- Fixed public holidays, from the official list for each audience country. In the US that is 5 U.S.C. 6103 for the holidays and their weekday rules, plus the Office of Personnel Management schedule for the observed dates in the target year.
- Awareness and observance days, checked against the United Nations list of international days and weeks or against the charity or body that owns the day.
- Movable and lunar dates, such as Easter, Ramadan, Passover, Lunar New Year, and Diwali. Re-verify each one for the target year. Never copy a movable date forward from last year's plan.
- Retail and industry seasons, from the body that runs them: the National Retail Federation for the winter holiday run, the league for a sports season, the school district for back to school.
- The brand's own dates, placed first. They usually carry the strongest right to speak.
Write on every row: name, exact date for the target year, source, fixed or movable, country, and owner. Expect a long raw list. That is fine. Scoring cuts it down.
3. Classify each moment by type
The type sets when the content should publish, which is usually not the day itself:
- Prep moments publish before the date, while the audience is still deciding: gift guides, menus, travel and booking content, outfit and gear posts, anything tied to a shipping or booking cut-off. Planning default: publish 10 days before.
- Day moments publish on the day: tributes, celebrations, remembrance, results, the brand's own launch day. Planning default: publish on the date.
- Season moments run as a short arc across a window: an opening post, a middle piece, a last call where a cut-off is real. Planning default: the arc opens 21 days before the window.
If a moment fits none of the three, it is probably a trending topic, not a calendar moment. Route it to reactive work, not this plan.
4. Score every candidate, and let the gates cut
Score each candidate in a CSV and run bin/score_moments.py. Score honestly, with the proof from step 1 in front of you:
- Relevance 0 to 5: how close the moment sits to what the brand actually does.
- Audience fit 0 to 5: whether this audience marks this moment at all, in their country, in their life.
- Right to speak 0 to 5: the brand's real link, story, programme, or standing. A logo and an opinion is a 1.
- Effort 1 to 5: an hour of work is 1, a produced shoot with approvals is 5.
- Sensitivity: low, medium, or high. Grief, tragedy, faith, and identity are high.
- Commercial: yes if a sale, discount, or product push is attached.
The tool applies the score (relevance 30, audience fit 25, right to speak 30, low effort 15, out of 100) and three hard gates that outrank any score:
- Right to speak of 1 or less: skip. No standing, no post.
- High sensitivity with a commercial push attached: skip. Never sell on a solemn moment.
- High sensitivity with right to speak under 4: skip. Quiet respect beats a tribute post from a brand with no link.
Verdicts: 70 and up is PLAN, 50 to 69 is SMALL (one light post, no campaign build), under 50 is SKIP. Run it like this:
python3 bin/score_moments.py references/example-moments.csv --today 2026-12-01
The example data shows all three gates firing: a sale attached to a remembrance day, and two posts cut for having no right to speak behind them.
5. Apply the lead time math
Work backwards from the publish date the type gave you. Production lead by tier, as planning defaults:
| Tier | Lead | | --- | --- | | Reactive text or reply | 3 days | | Static designed post | 10 days | | Carousel or document | 14 days | | Short video | 18 days | | Long video | 28 days | | Campaign, several pieces and approvals | 45 days | | Product tie-in, stock or a partner involved | 60 days |
Start-by date = publish date minus lead days. Add the approver's normal turnaround on top if approvals sit outside the production team. The scorer prints both dates for every surviving row.
Two rules keep the math honest:
- A LATE flag means drop a tier, not rush the same build. A campaign that should have started six weeks ago becomes a carousel, or it joins the skip list.
- Anything with a partner, a sponsor, print, or stock has a hard outside deadline. Work from that deadline, not from the moment date.
6. Pick the format per platform
Match the job of the post to the format, then adapt per platform instead of posting the same file everywhere:
- Guide or list (prep): a carousel or document post where saving matters, a long video where demonstration matters, a short video teaser that points to the guide.
- Demonstration (prep or season): short vertical video first. Show the thing being made, packed, cooked, fitted, or used.
- Tribute or recognition (day): one static post or a short text post, words written for that day, no product in frame. If the format needs a sale graphic, the moment was misclassified.
- Countdown and reminder (prep, near the cut-off): Stories, a short text post, or a pinned comment on the main piece. Reminders support the main piece, they are not separate content.
- Professional or workplace angle (day or season): a text or document post on the professional platform, only where the workplace claim is true and specific.
Instagram's own Reels guidance puts short clips to work on quick transitions, mid length clips on tutorials, and longer clips on storytelling. Use that split when choosing between a teaser, a how-to, and a story cut.
7. Write the skip list, with reasons
Every scored SKIP goes on the skip list in the plan, with the gate or the score that cut it, in plain words. The skip list does three jobs:
- It stops the same bad idea coming back next quarter as a fresh suggestion.
- It gives whoever gets asked "why did we not post on X" a one line answer that was decided in advance, in a calm week.
- It sets the default for breaking news. When a tragedy or a public death lands on a planned posting day, the default is pause the scheduled commercial content, post nothing borrowed, and resume when the moment has passed. Decide that rule now, not during the event.
Review the skip list at the start of each quarter. A skip can be revisited if the proof changes, for example a real programme launches. It does not get revisited because the day started trending.
8. Assemble the quarter, leave air in it
Plan in quarters, map in years. Pull the surviving moments for the next quarter into the working calendar with their publish and start-by dates, then check density:
- A small team should land around one planned moment every three to four weeks. More than that and the feed turns into a holiday account and regular content gets crowded out.
- No two campaign tier moments in the same month unless the team has already shipped at that pace before.
- Leave normal weeks normal. A moment plan supports the regular content calendar, it does not replace it.
The worked example in references/worked-quarter-plan.md shows a finished quarter for a small coffee roaster: three moments kept, four cut, every cut with its reason.
Output Contract
Deliver:
- The year map: every candidate row with date, source, fixed or movable flag, country, and owner.
- The scored plan: for each surviving moment, date, type, tier, score, verdict, publish date, and start-by date, as printed by
bin/score_moments.py.
- The skip list: every cut moment with the gate or score reason, in plain words.
- The quarter view: the next quarter's moments in date order, with format per platform for each one, and the density check result.
- The pause rule: the standing instruction for what happens to scheduled posts when a tragedy or major public event lands on a posting day.
Operating Rules
- Verify every date, every year. Fixed holidays shift their observed day, movable dates move, and last year's plan is not a source. Cite the calendar each date came from on the map itself.
- No proof, no post. Right to speak is scored from proof on file: a programme, a person, a history, a product that genuinely serves the moment. Vibes score 1 and the gate cuts them.
- Never attach a sale to a solemn moment. If the honest version of the post has no offer in it, post that version or post nothing.
- Disclose commercial ties in the post. Gift guides and seasonal offers built with a sponsor, an affiliate link, or a gifted product carry a clear disclosure in the post itself, hard to miss, not buried in hashtags, in line with the FTC Endorsement Guides.
- Publish prep content while it can still help. A gift guide on the day, a booking post after the cut-off, and a menu launch after the season turns are all waste, however well made.
- Late means smaller, not faster. Drop a tier or skip. Rushed seasonal work reads as rushed, and it burns the team for the next moment.
- Use the current year's numbers or none. Retail forecasts and season data get republished each year. Quote the current release with its year attached, or leave the number out.
- The brand's own dates come first. A launch, an anniversary, or a local event the business runs will almost always beat a national day on relevance and right to speak. Fit the national moments around them, not the other way round.
No ratings yet — be the first to rate it.