Files
LinkedIn-Analytics-Dashboard/monthly_report_notes.py
T
beantownbabe cbb308cf37 Add Core Message/Roadmap/Monthly Notes cards and cross-page nav to Reports tab
Restructures the Reports tab into a CSS Grid layout (Core Message + Campaign
Roadmap stacked, spanning Follower Growth below, alongside All Posts; Audience
Composition + Follower Study + Monthly Notes as a second row), each card
carrying a short abstract with a link to its full detail. Adds three new
"insights" sub-pages (Roadmap, Core Message, Monthly Notes) reachable via a
shared hero-banner nav so hopping between them doesn't require detouring
through the main Reports page each time. Also fixes two content-type
misclassifications (23/07, 30/07 should be Carousel) and trims chart chrome
(legend, axis labels/padding) to reclaim vertical space without shrinking bar
height.

PDF (report.py) and static export (build_static_export.py) intentionally not
yet updated to mirror these Reports tab changes — deferred until layout
iteration is done.
2026-08-07 12:29:21 +02:00

78 lines
4.6 KiB
Python

"""Curated, hand-written narrative for each month of the 3-month LinkedIn campaign
(July, August, September 2026, plus an end-of-campaign report). Growth numbers are
computed live from the exports elsewhere (see report.compute_period_stats), this file
only holds the "why", which lives in git history and project context, not in any
dataframe. Keyed by the same "YYYY-MM" strings report.report_month_options() produces.
Add August's and September's entries here as those months are written up, no other
code changes are needed for the Reports tab or PDF to pick them up.
"""
NOTES = {
"2026-07": {
"core_message_abstract": [
("\"We reveal the processes inside your materials,\"", True),
("", "br"),
(" This defines TXproducts' central value proposition. It's the foundation "
"of all outreach and content.", False),
],
"roadmap_abstract": [
("Find the Voice.", True),
(" Establish a consistent brand voice and discover the tone that resonates. "
"Identify which posts and formats drove the most engagement.", False),
],
"features_shipped": [
"Initial dashboard build (Jul 21): Overview, Content, Followers, Visitors, "
"Competitors, and Growth tabs, weekly-pace tracking, PDF report generation, "
"data upload with live refresh, and a static HTML export builder for sharing "
"via NextCloud.",
"Posts table made scrollable instead of growing indefinitely, and the file "
"finder hardened to ignore non-export files sitting in the same folder (Jul 22).",
"Follower Directory and Follower Study linked directly from the Followers tab "
"hero banner (Jul 31).",
"Followers by Country map expanded from 14 hardcoded country centroids to a "
"near-complete world table, with a console warning for any country still "
"missing one (Jul 31).",
"Calendar month drill-down tiles, a follower-breakdown expand toggle, a CTR "
"explainer, and manual post title overrides added across the Followers and "
"Content tabs (Jul 31).",
],
"data_quality": [
"File finder no longer crashes when a stray non-export file, a manual roster "
"or an Office lock file, sits in the same folder as the real LinkedIn exports.",
"Country map no longer silently drops a country if it is missing a centroid, "
"it now warns in the console instead, and the on-screen country count is "
"computed from the same rollup as the map so the two can never disagree.",
"Visitors category breakdown (Location, Seniority, Company size) is no longer "
"lost month to month. LinkedIn only reports a category once it clears a "
"per-export minimum-visits threshold, so a single-snapshot approach was "
"silently losing real categories that dipped below the threshold one week and "
"reappeared the next. Replaced with an append-only running-total log "
"(visitor_history.py).",
"Conversion Rate chart no longer silently drops days with zero tracked "
"visitors but a real follower change (LinkedIn lets people follow a Page "
"directly from a feed post, with no page visit at all). Every day now shows, "
"with those days flagged instead of hidden.",
],
"follower_study": [
"Grew and was actively reclassified throughout July as new followers were "
"screenshotted and profiled by hand.",
"A seniority and sector classification fix landed Jul 31 (backup preserved as "
"follower_directory_BACKUP-before-student-sector-fix.html), plus several "
"individual profile confirmations (Dominique Elser, Anna Bujak, Emma Xia, "
"Marten Edwards, Mudabar Ahmad Mubashar, Martin Schroter) that corrected "
"taglines into real titles and employers.",
"Not yet brought under git version control during July itself, that happened "
"Aug 3 and falls outside this report.",
],
"outstanding": [
"The end-of-week report explaining every dashboard chart to the bosses was "
"due Fri Jul 31, status needs confirming with the user before marking this "
"done.",
"The conversion-rate weekly-bucket and 3 to 7 day match-window widening "
"discussed Jul 28, to make the follow-attribution pattern more convincing "
"across multiple weeks, is still conceptual, not implemented.",
],
},
}