beantownbabeandClaude Sonnet 5 6722b29fe8 Build the End of Campaign report (3-month synthesis + Oct recommendations)
The "campaign-end" dropdown option existed but was a placeholder ("not
built yet") in the live tab and explicitly blocked in the download
callback. Built it out properly, same condensed Executive Summary
philosophy as the monthly reports, not a merge of all three:

- report.py: "campaign-end" is now a real timeframe_value throughout
  _filtered/_period_label/compute_period_stats, scoped to the fixed
  campaign window (CAMPAIGN_START/CAMPAIGN_END, 2026-07-01 to
  2026-09-30) rather than "all" (which would pull in pre-campaign
  June data). Its Posts Published excludes the repost and the one
  non-campaign post, unlike a single month's own count, since a
  capstone number should mean genuine campaign content. Monthly
  Growth Rate anchors to the campaign's own start instead of a
  calendar month's.

- monthly_report_notes.py: new NOTES["campaign-end"] executive_summary
  synthesizing all three months — what each stage actually proved
  (Carousel wins, a stable Academia/Research/Germany audience, one
  real trigger found but not repeated), the campaign-wide best-posting
  -day finding, and a new "recommendations" field: concrete, data-
  grounded ideas for October and beyond (bring Carousel back, lead
  with named pain points, move asks into direct outreach using the
  21 already-engaged non-followers sitting in outreach_contacts.py,
  track conversion as its own funnel, properly separate the day/
  format confound next time).

- build_report_docx() renders "recommendations" as a new section when
  present. app.py's download callback no longer blocks campaign-end,
  and the live Reports tab gets a real (if intentionally simple)
  preview via a new _render_campaign_end_summary(), built as its own
  self-contained renderer rather than stretching the 7 per-month
  insights pages (built around a single YYYY-MM, not a 3-month span)
  to fit.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-01 10:49:47 +02:00
S
Description
No description provided
2.2 MiB
0 Stars 1 Watchers 0 Forks
Languages
Python 50.8%
HTML 48.9%
CSS 0.3%