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.
These are hand-maintained data, not regenerable from code, so unlike
the dashboard snapshot they need a real backup rather than a
regenerate-on-demand exclusion.
- Hero banner now shows Follower Directory / Follower Study links on the
Followers tab only (not the sidebar), opening the standalone reports served
from assets/.
- Followers by Country: _COUNTRY_CENTROIDS expanded from 14 hardcoded entries
to a near-complete world table, so a country missing from the old dict no
longer vanishes from the map silently; added a console warning for any
country still missing a centroid, and a "N countries represented" caption
computed from the same rollup the map uses so the two can never disagree.
- Added visitor_history.py: append-only observation log for the Visitors
export's category breakdowns (Location/Seniority/Company size), since
LinkedIn only shows a category if it clears a per-export minimum-visits
threshold and otherwise silently drops it.
- Synced other accumulated app.py/build_static_export.py work not yet
committed: calendar month drill-down tiles, follower-breakdown expand
toggle, CTR explainer, manual post title overrides, and matching static-
export precompute/JS for the calendar and content tabs.
- .gitignore: exclude the newer generated snapshot outputs (follower study/
directory HTML copies, PDF report, visitor_category_history.json) using
the same rationale as the existing growth_history.json/snapshot rules —
regenerable from code + data, not itself code.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- All Posts table now scrolls within a fixed height instead of paginating/
growing indefinitely as more posts accumulate, with column widths tuned
so Short title gets the most room and narrow columns (dates, rates,
counts) stay compact.
- _find_latest_file/_find_all_files now only match real LinkedIn export
filenames (txproducts_*), so unrelated files sitting in the same folder
(a manual roster, an Office lock file) can no longer crash the loader.
Dash app with Overview, Content, Followers, Visitors, Competitors, and
Growth tabs. Includes weekly-pace tracking, PDF report generation, data
upload with live refresh, and a static HTML export builder for sharing
via NextCloud.