Julia, Oct 5: the tile "should dynamically update the numbers if things come earlier", then "let's keep C and H, so now think through every single stage of the campaign and what it should look like, and every edge case, including early and late", and "including the stragglers at the very end of campaign, but don't want to draw too much attention to those."
So this page now does three things. It shows the one tile that was kept, live. It walks that tile through every stage of a campaign in three columns: early, on plan, late. And it lists the edge cases with what the tile does in each.
Julia, Oct 5, after the first pass of this page: "let's not do quiet late move then if the delay is on creators' side? If it's because the brand has yet to review I'm ok with that. We can just have the old date crossed in small and the new date normal."
Campaign 1, launched Sep 10 with 10 creators. Planned: creators accepted by day 7, first order delivered by day 21, first draft by day 35, first post by day 42 (the week of Oct 19), last posts by day 56 (Nov 4). In the full timeline the phases overlap: filming opens 6 days after shipping starts, review 10 days after filming opens. Pick what happens, then drag the day or press play.
Each tile below is drawn by the same rule as the live one, frozen on one day of one campaign. Read across: the same stage when things came early, on plan, and late. Late has two kinds: the brand's side, where the date moves, and the creators' side, where it holds.
First the label above the date, then the one line that can sit under it.
| When | Label | Value | |
|---|---|---|---|
| Before the first post | First content expected | Week of Oct 19 | Tony · Sep 8 |
| After the first post | First content landed | Oct 22 | Julia · Oct 5 |
| Every post is live | All 10 posts are live | Nov 4 | Julia · Oct 5 |
| The campaign is complete | (none) | Campaign complete | Julia · Oct 6 |
One line, at most, and only when something is later than planned. Having grey and amber lines is decided (Julia, Oct 5: "grey lines ok", "yes amber"). The wording went through the copy desk on Oct 5 and Julia signed it off on Oct 6 Julia · Oct 6; "First content expected" is the label already agreed (Tony, Sep 8).
| Tone | When | The line | The date |
|---|
No line at all is the normal state: a campaign that is on plan or early shows the date and nothing under it.
There is no green line. An early date carries the Early tag and nothing else: the line "The first order was delivered 7 days early." was removed. Julia · Oct 5
* This one says the team is doing something, so it only shows when the log backs it up.
The team's check-ins and follow-ups are logged but never shown on the tile. "Katie's team is checking in with your creators." and "Katie's team is following up on the last 2." were removed. Julia · Oct 5
Amber never says "waiting on you" (cut as a nag in earlier rounds). It gives the count and what is ready.
# the plan, in days from launch PLAN = { accepted: 7, delivered: 21, first_draft: 35, first_post: 42, last_post: 56 } REMAIN = { accepted: 35, delivered: 21, first_draft: 7, first_post: 0 } # days to first content ALLOWED = { accepted: 7.days, delivered: 14.days, first_draft: 14.days, review: 3.business_days } # + 3.business_days when the brand does the final review # reached_on(step) = the day the FIRST creator got there # 1. days lost while the ball was with the brand brand_delay = 0 for step in [accepted, delivered, first_post] when the brand owns it: # owns = approves its creators / ships its own orders / reviews its own drafts due = [PLAN[step] + brand_delay, reached_on(previous step) + ALLOWED[step]].max brand_delay += [(reached_on(step) || today) - due, 0].max # 2. the realistic date, from the first creator latest = last of [delivered, first_draft] reached # accepted never pulls the date earlier base = latest ? reached_on(latest) + REMAIN[latest] : [42, reached_on(:accepted) + 35].max floor = today + REMAIN[next step not yet reached] realistic = [base, floor].max # 3. what the tile shows: early pulls it in, only the brand pushes it out first_content_expected = first_post_reached ? reached_on(:first_post) : [realistic, 42 + brand_delay].min early = monday(first_content_expected) < monday(launch + 42) # the tag crossed_out = early || (later && (first order not delivered yet # up to Film || a draft waits on the brand)) # and during their review # 4. the full timeline: windows overlap opens = { ship: creators accepted, film: ship.start + 6, review: film.start + 10, post: first_content_expected } # + the brand's days on that step phase.start = [reached_on(first creator), opens[phase]].min phase.end = planned_end + brand_delay so far # 7, 21, 35, 49, 56 now(phase) = phase is the furthest reached || (reached && today < phase.end)
| Phase | Opens | Closes | Launch Sep 10 |
|---|---|---|---|
| Match | Launch | Day 7 | Sep 10 to 16 |
| Ship | Creators accepted, day 7 | Day 21 | Sep 17 to 30 |
| Film | 6 days after shipping opens, day 13 Julia · Oct 5 | Day 35 | Sep 23 to Oct 14 |
| Review | 10 days after filming opens, day 23 Julia · Oct 5 | Day 49 Julia · Oct 5 | Oct 3 to 28 |
| Post | First content expected, day 42 | Day 56 | Oct 22 to Nov 4 |
Before this round the windows did not overlap: Film Oct 1 to 14, Review Oct 15 to 21 (7 days). Film and Review now open earlier, and Review closes a week later, on Oct 28, so that it overlaps Post (Julia, Oct 5: "post can overlap with review", and the Oct 28 close confirmed the same day). "Started 4 days early." is measured against these openings, so it shows less often than before; that is accepted too. Post still opens on the day first content is expected, so the Post row never starts before the date on the tile.
| Four dates per campaign | The first creator accepted, the first order delivered, the first draft submitted, the first post live. |
| Counts | Creators on the campaign, posts live, and how many creators are in each stage (for Now on two rows). |
| Three flags | Who approves creators, who ships (Shopify or the brand), who reviews drafts (Benable or the brand). They decide whether the date moves, not only the colour of the line. |
| Where it shows | The tile, the full timeline inside it, and the campaign card on the overview. One computed value feeds all three. |
The 6-week promise for first content (confirmed by Julia on Oct 5: review at 3 business days does not shorten it) and the campaign's month name, frozen at launch. "Week 4 of 8" stays a calendar count. Local and gift card campaigns have no tile.
| Case | What the tile does | |
|---|---|---|
| Timing | ||
| Early by a few days only | The date is shown by week, so a small gain often stays in the same week. No tag, no crossed-out date: the tile does not change. | Julia · Oct 5 |
| A small gain flips the week | A gain of 4 days can move the Monday. The tag says "Early" and nothing about how much, so it never overstates. | Julia · Oct 5 |
| The expected week is the current week | The tile keeps its format: "Week of Oct 19". "This week" was considered and dropped at the copy desk: it reads as a promise, and it would not match the crossed-out date beside it. | Julia · Oct 5 |
| The expected week ends with nothing live | Brand's side alone: cannot happen, the date moves with every day they take. Creators' side: the tile keeps the planned week after it has ended, and always carries one grey line in that state. On the overview card the line takes the place of the date: "Week 7 of 8 · Katie's team is reviewing the first draft". This is the only time the tile shows a week that has gone. | Julia · Oct 5 |
| Early, then the next step is slow | The gain drains away day by day, back to the planned week, and stops there. The tag and the crossed-out date leave when it gets there. Scenario "Early, then filming drags". | Julia · Oct 5 |
| A brand delay, then a fast step | The date comes back earlier. The crossed-out date leaves if it returns to the week promised at launch. | Julia · Oct 5 |
| The date moved later | Only the brand can cause it. New week at normal size, no tag. The old date, small and crossed out, shows up to Film; once filming starts it goes and the tile just shows the new date. It shows again while a draft waits on the brand's own review. Amber line while they hold a step, grey line once they have acted. | Julia · Oct 5 |
| Month name | Frozen at launch, even when first content now lands a month earlier or later. | Julia · Oct 2 |
| "Week 4 of 8" | A calendar count from launch. Early and late change dates, never the week number. | Julia · Oct 5 |
| Midnight | Dates change at midnight in the brand's time zone (the one the cadence already uses), not the browser's. | Julia · Oct 5 |
| Who we are waiting on | ||
| The brand has not approved its creators | Amber: "10 creators are ready for your review." The date moves a day for every day past day 7. | Julia · Oct 5 |
| A brand step held more than 4 weeks | The date stops: "5 weeks after you approve your creators", "3 weeks after the first order is delivered", or "Once you approve the first draft", with the amber line under it and no crossed-out date. The overview card reads "Week 6 of 8 · 5 creators are ready for your review". From 6 weeks past the step it drops the week number and reads "5 creators are ready for your review". Katie's team is flagged at 4 weeks. | Julia · Oct 6 |
| The brand ships its own orders and has not shipped | Amber: "10 orders are ready for you to ship." The date moves. | Julia · Oct 5 |
| The brand reviews its own drafts and one is waiting | Amber: "1 draft is ready for your review." The brand gets 3 business days after Katie's team's 3-business-day pre-check. Past that, and past day 42, the date moves to today and keeps moving, and the old date shows crossed out while the draft waits. The amber line can show a little earlier, as soon as the draft is with them and the promised week is at risk. | Julia · Oct 5 |
| Matching is still on us after week 1 | Grey: "Katie's team is filling the last spots." The date holds. | Julia · Oct 5 |
| The carrier is slow | Grey: "The first order is on its way." Only once an order has actually shipped. The date holds. | Julia · Oct 5 |
| No draft after the filming window | Grey: "Your creators are filming." The date holds. The team's check-ins are logged but not shown. | Julia · Oct 5 |
| A draft is in review, or was sent back for a change | Grey: "Katie's team is reviewing the first draft." The date holds. | Julia · Oct 5 |
| Approved but not posted yet | Grey: "First draft approved, posting next." The date holds. | Julia · Oct 5 |
| Both sides are late | Only the brand's days are added. If creators accept 5 days late and the brand then ships 4 days past its own 14, the date moves 4 days, not 9. | Julia · Oct 5 |
| Several phases at once | ||
| Some creators are filming while others are in review | Both rows are marked Now and both names are bold on the tile's bar. The date and the tag follow the first creator. | Julia · Oct 5 |
| A window is open but nobody is in it yet | No Now. Film shows Sep 23 to Oct 14 from launch, but it is only marked Now once the first order is delivered. | Julia · Oct 5 |
| One creator is still filming in week 7 | Film's window closed on Oct 14, so Film is no longer marked Now. That creator is part of the quiet tail. | Julia · Oct 5 |
| Nobody has moved on and the window has closed | The furthest phase reached is always Now, even past its window, so the tile never shows no Now at all before the campaign ends. | Julia · Oct 5 |
| A draft waits longer than 3 business days | On our side: nothing on the tile until first content would slip past the promised week, then one grey line. On the brand's side, after their own 3 business days: amber, and the date moves. | Julia · Oct 5 |
| The end of the campaign | ||
| Every post is live before week 8 ends | "All 10 posts are live · Oct 24" with the Early tag. | Julia · Oct 5 |
| The brand's delay moved the date | Every later end date, and the end of the campaign, moves later by the same days. | Julia · Oct 5 |
| Creators ran late | The end of the campaign holds at the plan. Posts that land after it are the quiet tail. | Julia · Oct 5 |
| Stragglers after week 8 | The tile says "8 of 10 posts live." and Post stays marked Now (Julia, Oct 6). No amber, no count of what is missing. The full timeline's last row says "Any last posts go live." The follow-up is logged but not shown. | Julia · Oct 5 |
| A straggler never posts | The tile keeps "9 of 10 posts live." for as long as the campaign is open. It never turns into a warning. When the team completes the campaign, the tile reads "Campaign complete" with "9 posts live." When and how the team decides to complete it is the NPS study's question, not the tile's. | Julia · Oct 6 |
| The first post goes live, then nothing for weeks | "1 of 10 posts live." The date on the tile is a fact by then and does not move. | Julia · Oct 5 |
| The campaign is complete | The tile becomes the record: "Campaign complete", no date, with "All 10 posts are live." or "8 posts live." under it. Nothing is marked Now and the "After week 8" row is gone. The overview card reads "8 live · campaign complete". The word is "complete" with no date; "closed" is never used. | Julia · Oct 6 |
| Completed by hand with no post live | "Campaign complete" and nothing under it, because the tile never shows a zero. The overview card reads "Campaign complete". | Julia · Oct 6 |
| Every post is live and nobody completes it | The campaign completes on its own 7 days after its last post. Production today completes a campaign only when every creator is thanked, or by hand, so campaigns where the brand never thanks stay active for months. A campaign with posts still missing never completes on its own. | Julia · Oct 6 |
| People | ||
| The first creator stalls or drops out | The date they earned drains back toward the plan until someone else reaches the next step. | Julia · Oct 5 |
| A replacement joins in week 3 | They run on their own clock. Nothing on the tile moves for them and the end of the campaign stays where it is. Their post lands in the quiet tail. | Julia · Oct 6 |
| A creator drops out and is not replaced | Counts are out of the creators on the campaign at that point, so "9 of 10 posts live." becomes "9 of 9" and then "All 9 posts are live". | Julia · Oct 6 |
| A campaign of 100 creators | The first creator anchors every step, so the Early tag will show on almost every big campaign. That is fine. | Julia · Oct 5 |
| Campaign state and data | ||
| Paused | No line and no rule. The backend has a "paused" campaign status, but a brand cannot pause or resume a campaign today: the only thing that sets it is an automatic Shopify data-removal request. If a pause control is ever built, this needs deciding then. | Not in this build |
| No delivery signal | A brand that ships without tracking gives us no delivery date. That step is skipped: the date can next move when the first draft comes in, and a late shipment cannot be counted against the brand. | Nisarg |
| Rollout | The moving tile launches for new campaigns only, plus Pair. Every other campaign already running keeps today's tile. | Julia · Oct 5 |
| Before the Dashboard exists | In week 1 the campaign page is still the launch confirmation. Its timeline card is static: nothing has happened that could move a date. | Julia · Oct 5 |
| Local and gift card campaigns | No tile (months are product only). | Julia · Oct 1 |
| Version | Why it is out |
|---|---|
| Plan only (today's tile) | Right at launch and never again. It undersells every campaign that runs fast. |
| Quiet swap, no trace | Honest but the good news is easy to miss. Still the smallest first build: the kept tile is this plus a tag. |
| "7 days ahead" chip on an unchanged date | Julia liked the chip with the word Early instead. That became the tag. |
| "Week 3 of 7" | The end of the campaign does not move when a creator is early, so there is nothing to shrink. |
| Countdown ("in 9 days") | Changes every day by itself, so a real jump is invisible. |
| Tag in the card head, tinted card, tick on the line, its own tile | All further from the date than the tag beside it. |
| "1 week early" on the tag | Can overstate: the date is shown by week. |
| A green line under the date saying why | "The first order was delivered 7 days early." Removed by Julia, Oct 5. The tag is enough. |
| Every delay moves the date later, quietly | The first pass of this page: any late step moved the date, with nothing crossed out. Dropped by Julia, Oct 5: a delay on the creators' side must not move the date, and when the brand's delay moves it, the old date is shown crossed out. |
| "Within 3 business days" in the Review row | Removed by Julia, Oct 5. The 3 business days stay as an internal rule; the row does not mention them. |
| Lines about the team's follow-ups | "Katie's team is checking in with your creators." and "Katie's team is following up on the last 2." Hidden by Julia, Oct 5: the follow-ups happen and are logged, the tile does not show them. |
| "Paused Oct 3. The date updates when you resume." | Removed Oct 5. It promised a resume the brand cannot do: there is no pause control in the portal. |
| A "Late" tag | Never. Late is carried by the date and one grey or amber line. |
The first round, with every version live, is kept at round1.html.
Still worth doing with no build: Katie's team says it in the weekly text. "Good news, the first order arrived early, so first content is now expected the week of Oct 12."
| Question | What the study assumes | Who |
|---|---|---|
| What production shows today | The months work shipped on Oct 5. Its timeline card is the static 8 weeks with the old phases (Match 1, Ship 2 to 3, Film 4 to 5, Review 6, Post 7 to 8). This study is the change on top of it. | Nisarg |
| Can the moving tile be in Preview for all brands? | Asked by Julia on Oct 5. It launches for new campaigns and Pair only. | Nisarg |
| Do we store the day each creator reached each step? | Yes, since the Dashboard's stage history shows dates. To confirm. | Nisarg |
| Brands that ship without tracking | No delivery date, so that step is skipped and a late shipment cannot move the date. | Nisarg |