136 Commits
Author SHA1 Message Date
beantownbabeandClaude Sonnet 5 452908e9a7 Add new follower: Ephrem Pius (Working student, Lehmann + Partner GmbH)
Directory grows 143→144. Full recompute of all six Study charts and
affected prose. LEHMANN + PARTNER is a transportation-infrastructure
surveying firm (Erfurt), not photonics/research-related, so classified
as Other named company with industryOther text from a verified web
lookup rather than left blank.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-02 08:43:56 +02:00
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
beantownbabeandClaude Sonnet 5 50bfb9025f Draft August and September Executive Summaries
Grounded in the actual per-post data (Real Eng % by post/format/
weekday) and post titles, not just the abstract pros/cons July
started with:

August (Find the Audience, Goal Met: Yes) — audience composition
answer (Academia/Research-heavy, Germany-heavy, Researcher/Scientist
seniority), the TXServices launch arc across 6 posts, Carousel
repeating July's win but a plain value-prop post (13/08) nearly
matching it, and the Tuesday/Thursday day-vs-format confound still
unresolved.

September (Find the Trigger, Goal Met: Partial) — 08/09's pain-point
post was the only one with real discussion and the month's best Real
Eng %, but that ceiling (18.75%) is the campaign's lowest yet, no
Carousel was tried all month, growth decelerated to the slowest pace
of the campaign (+11.1%), and the direct pilot-partner ask (17/09)
underperformed. Honest "Partial" verdict rather than forcing a Yes:
one trigger instance was found but not turned into a repeatable
pattern, and the numbers moved the wrong direction.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-01 10:27:38 +02:00
beantownbabeandClaude Sonnet 5 1d2c9c4e6a Rebuild EOM report as one condensed page, matching Mckinley's edit
Mckinley hand-edited July's report down to a single page and showed
exactly what an Executive Summary should look like: the deep dive's
actual findings pulled straight into prose (which post drove
engagement, the 14/07-28/07-30/07 trilogy story, best posting day and
its format confound, audience composition's three dimensions), the
Key Metrics table flowing right after the goal/verdict with no extra
heading, one chart (Follower Growth), and nothing else. Confirmed
directly: this is the whole report now, not a summary page ahead of
a longer appendix — readers go to the live dashboard for every other
table/chart/register the old 8-page version duplicated.

report.build_report_docx() rewritten from scratch to this shape, now
reading everything from an expanded "executive_summary" dict in
monthly_report_notes.py (goal_line, goal_met, growth_note, engagement
findings, the trilogy, best-posting-day note + caveat, the validation
gap, audience composition line + dimensions) instead of the old
pros/cons list — the function itself is now a pure renderer, every
month-specific fact lives in monthly_report_notes.py same as every
other narrative section.

build_report_pdf() and its reportlab machinery deleted entirely
(genuinely dead code — the only call site switched to docx already),
along with every helper that existed only to serve it. report.py
drops from ~1260 lines to ~300. August and September don't have an
executive_summary yet, so their reports fall back to Key Metrics +
Follower Growth + a note that the summary isn't written up, rather
than silently reusing July's content or crashing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-01 10:19:54 +02:00
beantownbabeandClaude Sonnet 5 e0ef610733 Keep Key Metrics on the Executive Summary's own first page
A summary page that leaves out the actual numbers isn't a summary —
moved the Key Metrics table (and its Monthly Growth Rate note) up
onto the same page as the Executive Summary's goal/verdict/pros/cons,
ahead of the page break. A reader who only reads page 1 now gets
both the verdict and the real numbers behind it; everything else
(Core Message, Roadmap, Follower Growth, All Posts, deep dives) stays
as the optional detail past the break for whoever wants more than
one page.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-01 09:24:39 +02:00
beantownbabeandClaude Sonnet 5 6ba31b6be0 Add new follower: Mike Jin (MBA Candidate, Harvard Business School)
Directory grows 142→143. Full recompute of all six Study charts and
affected prose. Also traced and fixed a long-opaque figure: the
"students or trainees" count in Key Findings is Seniority Student/
Trainee + Postdoc/PhD Researcher combined, not Student/Trainee alone -
relabeled now that the derivation is confirmed, not just approximated.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-01 09:15:17 +02:00
beantownbabeandClaude Sonnet 5 9cbfe83f41 Label Avg. Eng. Rate as raw/unaudited everywhere, resolve the open item
Real Eng % is Mckinley's own per-post hand audit (name-level Likes/
Comments/Reposts, Team excluded one person at a time). Avg. Eng. Rate
is LinkedIn's own daily page-level aggregate with no name-level
breakdown at all, so there's nothing to audit it against and no way
to exclude Team from a single blended daily number the way it can be
excluded from one post's own Reactions list. That's not a pending
methodology question, it's just two genuinely different metrics, so
every "Avg. Eng. Rate" label (Overview, Roadmap insights, Reports tab
KPI row, PDF/docx tables) now reads "raw, unaudited" instead of
leaving the distinction implicit. Removes the now-resolved item from
July's Executive Summary cons and August's outstanding list.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-30 17:47:10 +02:00
beantownbabeandClaude Sonnet 5 40c8ccc01e Add Executive Summary as the report's first page
A standalone first page ahead of any detailed numbers: the month's
goal (from the Roadmap), a Yes/No/Partial verdict on whether it was
met, and a Pros/Cons list, color-coded (green/red/amber). Hand-
authored per month in monthly_report_notes.py's new
"executive_summary" key, same pattern as the other narrative
sections, since "did we meet our goal" is a judgment call, not
something computed from the export data. Renders only when present,
so August/September are unaffected until written up. A page break
separates it from the rest of the report so it stands alone as
page 1.

Drafted July's as a first pass grounded in facts already established
in this report (the emotional-vs-rational engagement gap, the poll's
zero engagement, the 27/08 audit gap) — needs Mckinley's review since
the goal-met verdict is inherently a judgment call, not something to
assert unilaterally.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-30 14:33:34 +02:00
beantownbabeandClaude Sonnet 5 292bd21abe Generate EOM reports as editable .docx instead of fixed-layout PDF
Mckinley's PDFs kept cutting off content mid-page with no way to fix
it short of regenerating the whole report — a fixed-layout PDF isn't
the right format for something meant to be edited. Adds
report.build_report_docx(), a python-docx equivalent of
build_report_pdf() sharing the exact same compute_period_stats() data
and section order (KPI table, section abstracts, weekly pace,
audience composition, follower growth chart, all posts table with
the same excluded-post strikethrough treatment, format performance,
competitor snapshot, and the full Section Deep Dives for a monthly
campaign report), so the two can never silently drift apart on
numbers even though the rendering layer is completely different.
Word reflows content automatically, so there's no more fixed page
grid to fight when editing.

The Reports tab's download button now produces .docx instead of PDF.
Verified via python-docx re-read (KPI values, the 10/07 repost row's
strikethrough, embedded chart images) and strict OOXML schema
validation (including fixing a `w:zoom` attribute python-docx's own
default template omits). build_report_pdf() is left in place, only
report.py's ctx docstring rewritten since the doubly-stale "sidebar's
generic PDF control" no longer exists as an actual call site.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-30 14:19:29 +02:00
beantownbabeandClaude Sonnet 5 f254a9f10f Strike through excluded posts in Reports tab's mini All Posts card
The Reports > July landing page's own "All Posts, July 2026" card
(_reports_posts_table, fed by report.compute_period_stats()'s simple
date-range filter, not app.py's REPOST_DATES/NON_CAMPAIGN_DATES-
excluding _reports_posts_f()) showed the 10/07 repost as a plain,
unmarked row with "Pending audit" — inconsistent with the dedicated
All Posts insights page one click away (struck through, "Excluded")
and confusing on its own, since "Pending audit" reads as an
unfinished job rather than a deliberate, permanent exclusion.

Fixed in both places this table renders: the live Reports tab
(app.py's _reports_posts_table) and its PDF equivalent (report.py's
"All Posts" table), both now applying the same pale-red/strikethrough
"Excluded" treatment already used by the register table and the
dedicated All Posts insights page. Added non_campaign_dates to
_build_report_ctx() so the PDF can apply the same exclusion set, not
just repost_dates.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-30 12:50:48 +02:00
beantownbabeandClaude Sonnet 5 9eb636bf79 Fix misleading "Pending audit" label on excluded posts in Overview
The Overview/Content tab's Posts table labeled every unaudited Real
Eng % as "Pending audit", including the 10/07 repost and other
REPOST_DATES/NON_CAMPAIGN_DATES posts that are deliberately never
audited (see engagement_audit.py) rather than simply not gotten to
yet. That read as an incomplete job rather than an intentional
exclusion. Those dates now show "Excluded" instead, matching the
wording already used in the Reports tab's All Posts and Core Message
treatment of the same dates. Fixed in both the initial table render
and the month-dropdown callback path.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-30 12:05:04 +02:00
beantownbabeandClaude Sonnet 5 1718a56ea6 Add Total Followers (month end) tile to Reports tab and PDF
Month Start and New Followers already existed, but neither answers
"how many followers do we actually have as of this month" without
the reader doing the addition themselves. Adds a third tile, Total
Followers (month end) = Month Start + New Followers, placed between
them so the row reads Start -> New -> End as one story. Pinned to
that specific reporting period like Month Start already is, so it
never drifts with "today" the way the tile removed earlier did.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-30 11:48:24 +02:00
beantownbabeandClaude Sonnet 5 36933c2c31 Recompute Study against corrected 142-record Directory
Track #6's a677056 removed 5 non-follower records (Philipp Brandt,
Arunangshu Debnath, Simon Sebold, Chen Shen, Martin Uhlig) that had
contaminated the 147-record set my previous recompute (572887b) was
built against. Namrata Sharma and Renske M. van der Veen are confirmed
genuine followers and were unaffected by the removal.

Full recompute of all six charts and all affected prose against the
corrected 142-record dataset, verified via script. Re-checked the two
figures flagged as drifted/unreconcilable in the prior commit:
1st-degree connections correctly returns to 6%/94% at 142 (the 5%/95%
was an artifact of the contaminated 147 count); "Research/Engineering
readers 38%" still can't be reconciled against any live field
combination and stays flagged as a pre-existing stale figure.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-30 11:28:13 +02:00
beantownbabeandClaude Sonnet 5 a6770565f1 Correct Follower Directory scope: move engaged non-followers out
Mckinley checked LinkedIn directly and confirmed Arunangshu Debnath
does not follow the Page, despite being added to the Follower
Directory. Root cause: this session added 15 people to the Directory
straight from post-engagement audits (08/09, 15/09, 22/09) without
verifying follow status — the exact mistake outreach_contacts.py's
own docstring warns against ("assumed every remaining entry was a
real follower"). A separate session (Demographics, which owns the
Directory) picked up 5 of these placeholders this morning, enriched
them further, and recomputed Follower Study's charts against the
resulting inflated 147-record dataset.

Moves all 15 people (Arunangshu Debnath, Simon Sebold, Martin Uhlig,
Chen Shen, Philipp Brandt, Dr. Sonia Utermann, Dr. Jefferson do
Rosario Stelzer, Sani Harouna-Mayer, Shrouk Ehab, Harish
Purushothaman, Mallika K., Sebastian Sell, Azat Khadiev, Ali A.,
Maximilian Harr) from the Directory to outreach_contacts.py, where
engaged-non-follower records belong. Directory count: 156 -> 142
(140 baseline + 2 legitimate new followers the Demographics session
added this morning, Namrata Sharma and Renske M. van der Veen, not
yet reflected in the Sep 26 export). Follower Study's charts/prose
in assets/follower_study.html are now stale against the corrected
dataset — that file belongs to the Demographics session, flagging
rather than editing it here.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-30 11:04:49 +02:00
beantownbabeandClaude Sonnet 5 6ca84d1b84 Write August EOM report narrative
Adds the 4 missing sections (features_shipped, data_quality,
follower_study, outstanding) for August's End of Month report,
sourced from August's actual commit history (Reports tab build-out,
GOTO Messaging Handbook, Engagement Composition polish, Real Eng %/
CTR % formula callouts, follow-date corrections, the Mihail Petev
repost correction, git-tracking the Follower Directory for the first
time, and the 107-to-126 follower growth). August's audit data was
already complete; this was the only piece blocking its report.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-30 10:51:19 +02:00
beantownbabeandClaude Sonnet 5 98b939446c Audit 22/09 post — September fully audited
Real Eng % audit for September's final post, 22/09: 24 total
reactions (likes A20/T3, TXproducts Page like excluded entirely),
no comments, reposts A0/T3 (Mckinley Black, Peter Gaal, Aleksandra
Kotenko, all internal). Adds 10 new Follower Directory entries
surfaced by this post (Dr. Sonia Utermann, Dr. Jefferson do Rosario
Stelzer, Sani Harouna-Mayer, Shrouk Ehab, Harish Purushothaman,
Mallika K., Sebastian Sell, Azat Khadiev, Ali A., Maximilian Harr)
and extends engagement_notes for 7 existing repeat engagers.

Every September campaign post (03/09, 08/09, 15/09, 17/09, 22/09)
is now audited — September's Real Eng % / Follower Study data is
complete, unblocking that month's outstanding narrative sections.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-30 10:47:54 +02:00
beantownbabeandClaude Sonnet 5 73c6093286 Audit 17/09 post
Real Eng % audit for September's 17/09 post: likes A1/T2 (Johannes
Blum, shown as "Johannes Tenten" on this post but the same Hi-Acts/
DESY Innovation Manager as every other audited post, is Audience;
Aleksandra Kotenko and Mckinley Black are Team), no comments, and
reposts A0/T3 (Peter Gaal, Aleksandra Kotenko, Mckinley Black, all
internal). Extends Johannes Blum's Follower Directory engagement_notes
to include this post. Only 22/09 remains unaudited for September.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-30 10:44:54 +02:00
beantownbabeandClaude Sonnet 5 572887b218 Add 2 followers, complete classification of 5 track-6 stubs, full recompute
Directory grows 145→147 (2 new: Namrata Sharma, Renske M. van der Veen,
both Helmholtz-Zentrum Berlin) plus classification completed for 5
followers the End of Month Report session (track #6) added directly
via post-engagement audit but correctly left flagged as pending
(Philipp Brandt, Arunangshu Debnath, Simon Sebold, Chen Shen — all
DESY/academia-affiliated researchers; Martin Uhlig left unclassified,
two real candidates found, couldn't confirm which without a screenshot).

Full recompute of all six Study charts and all affected prose against
the live 147-record dataset. Caught and fixed two long-stale figures
along the way: the "1st-degree connections" stat had drifted to 7%/93%
across several past additions when the data actually rounds to 5%/95%;
flagged a separate "Research/Engineering readers 38%" figure as
unreconcilable against any live field combination, left un-recomputed
rather than guessed.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-30 09:01:29 +02:00
beantownbabeandClaude Sonnet 5 5eafbd972b Remove Total Followers tile from Reports tab and PDF
"Total Followers (as of today)" was confusing on a monthly report
read days or weeks after the month closed, since the live/global
follower count keeps drifting past whatever month is being reported
on. Month Start already gives the one followers figure that's
actually pinned to that specific reporting period, so the redundant
tile is dropped entirely rather than repurposed. Live dashboard tabs
outside Reports are unaffected and keep showing the live total.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-30 08:26:59 +02:00
beantownbabeandClaude Sonnet 5 573046c275 Audit 08/09 and 15/09 posts, update Follower Directory
Real Eng % audit for two more September campaign posts: 08/09
(likes A3/T3, comments A2/T1, reposts A0/T3 - Arunangshu Debnath's
reply thread was the standout) and 15/09 (likes A9/T3, no comments,
reposts A0/T4). Extends engagement_notes for five repeat engagers
(Johannes Blum, Marc Thiry, Dr. Palvan Seyidov, Katrin Schmidt,
Sabine Brock) and adds five placeholder entries (Arunangshu Debnath,
Simon Sebold, Martin Uhlig, Chen Shen, Philipp Brandt) pending full
profile details.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-29 11:42:44 +02:00
beantownbabeandClaude Sonnet 5 e2343044d4 Add manual title override for 03/09 (was showing as blank)
LinkedIn's export has no caption text for this post, so it fell back to
"(no text — image/video-only post)" instead of its actual content, "Come
meet us at SNIB2026" — looked like a missing/unaudited post even though
it was already fully audited underneath.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-29 10:31:18 +02:00
beantownbabeandClaude Sonnet 5 5522174c5c Audit 27/08, completing all of August's posts
Sabine Brock is the only audience like; the rest (likes and all 3 reposts)
are internal (Daniel Schmidt, Aleksandra Kotenko, Mckinley Black). Page's
own link-drop comment excluded as usual. This closes out August's
post-level auditing entirely, 4 real gaps remain campaign-wide, all in
September (08/09, 15/09, 17/09, 22/09).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-29 10:28:05 +02:00
beantownbabeandClaude Sonnet 5 8f4fc51122 Add new follower: Nima Amousa (Doctoral Researcher, Helmholtz-Zentrum Berlin)
Directory grows 139→140. Full recompute of all six Study charts and
Key Findings/limitation/messaging-takeaway prose. HZB already
established as a Research & Collaborations partner via the Simone
Vadilonga precedent, applied consistently here.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 08:08:29 +02:00
beantownbabeandClaude Sonnet 5 316130d770 Correct Antonio Cillis's Company City: Frankfurt am Main, not Berlin
Web lookup confirmed INFOMOTION GmbH is HQ'd in Frankfurt am Main;
Berlin was his personal location, not the employer's HQ. Same
personal-location-vs-employer-HQ split already documented for
Rajkumar Rengaraj and Maximilian F. Company City field corrected,
Personal Location stays Berlin, confidence on the country/city
assignment downgraded from High to Medium (101/18 split, was 102/17).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-23 11:36:21 +02:00
beantownbabeandClaude Sonnet 5 06779cacfa Add new follower: Antonio Cillis (Data and AI engineer, INFOMOTION GmbH, Berlin)
Directory grows 138→139. Full recompute of all six Study charts and
Key Findings/limitation/messaging-takeaway prose. INFOMOTION is a
German data/AI consultancy, no fit for the more specific sector
categories, so classified as Other named company.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-23 11:34:31 +02:00
beantownbabeandClaude Sonnet 5 5f2d784d2b Add new follower: Tim Kokerbeck (Nanoscience M.Sc. student, University of Hamburg)
Directory grows 137→138. Full recompute of all six Study charts,
Key Findings/limitation/messaging-takeaway prose, and the Notable
Clusters table (University of Hamburg row 4→5, Hamburg/DESY cluster
distinct headcount 29→30). Classified as a plain-university case
(Academia industry value), consistent with other Uni Hamburg students.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 13:27:42 +02:00
beantownbabeandClaude Sonnet 5 c83b1a2375 Add new follower: Pradeep Kumar V. (IT Systems Administrator, Bremen)
Directory grows 136→137. Full recompute of all six Study charts,
Key Findings/limitation prose, and the methodology log. No company
listed on his profile, so Sector/Industry stay blank/Unknown per the
established no-guessing rule.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 07:25:25 +02:00
beantownbabeandClaude Sonnet 5 0ae4eb699b Fill last 9 LinkedIn URLs (Mckinley-supplied) - 100% coverage, 136/136
Mckinley provided the remaining 8 URLs directly (9 records, since the
two Mckinley Black entries needed separate URLs for their two real
LinkedIn identities), closing out the gap the web research pass
couldn't resolve on its own (namesake collisions, internal accounts).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-21 08:18:15 +02:00
beantownbabeandClaude Sonnet 5 8e4799df3b Research and fill 17 of 26 missing LinkedIn URLs
Web-searched each of the 26 followers with a blank linkedin_url (mostly
the batch added via individual screenshots rather than a bulk export,
which never captured the profile URL). Applied 17 confirmed matches
(verified against name + company + role, not guessed from name alone).
Sabine Brock's URL was derived from her public post slug (linkedin.com/
posts/sabinebrock_...), not a directly-confirmed profile link - flagged
as slightly lower confidence than the rest.

9 remain unresolved: too many namesakes with no way to confirm
(Iryna Platonova, Almira Tolstova, Francesco Marzari, Kilian Frank,
Rishabh Moolya, Dr. Ravinder Reddy Mogulla, Sourav Kumar - blank
profile to begin with), plus 2 internal TXproducts people (Mckinley
Black, Niklas Meidow) better sourced directly than via web search.

Side finding, not yet acted on: search results show Bernhard H. is
CEO of XPLORAYTION GmbH, not an unspecified individual contributor as
currently classified (no title was visible on his original screenshot).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-21 07:52:58 +02:00
beantownbabeandClaude Sonnet 5 a4a7c98782 Fill Industry for 37 of 39 "Other named company" gaps via Outreach's per-company research
Outreach researched all 39 blank-Industry "Other named company" records
against Twenty's closed Industry enum. 2 genuine enum hits (Stuart Hayes/
European XFEL -> Research & Collaborations, Eleni Mumtsidu/SGS -> Device
Testing), 35 correctly stay Other with a researched industryOther value,
2 left blank as genuinely inconclusive (Muhammad Yousaf/Vital Group,
Iryna Platonova/UMeter - couldn't confirm actual company affiliation).

3 of the 35 flagged as domain-adjacent worth a second look: Bernhard H./
XPLORAYTION GmbH, Alice Autuori/Cycle GmbH, Valentina Shumakova/UltraFast
Innovations GmbH - all synchrotron/ultrafast-laser-adjacent businesses,
potential peers or competitors, not routine "Other" cases.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 20:25:59 +02:00
beantownbabeandClaude Sonnet 5 f308202171 Shorten Role Level Note on 4 records per Mckinley's spec (short label, no explanation)
CRM Research/Outreach caught this in review: the guidebook §8 spec says
notes should be "just the original bucket label, no explanation," but my
last edit put verbose reasoning in these 4 notes, including one that
claimed a specific Mckinley confirmation inline. Fixed to the terse
"LinkedIn Seniority: <bucket>" format the guidebook itself examples.
The reasoning for each call stays in git history, not in CRM-facing data.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 20:12:53 +02:00
beantownbabeandClaude Sonnet 5 378635fff5 Fix 4 Role Level calls to follow highest-authority rule, not literal rule 2
Confirmed by Mckinley 2026-09-20: when a title has a "Senior"/"Sr." qualifier
AND an unambiguous higher-authority base role (Manager, named Group/Ecosystem
Leader), resolve to the highest authority implied by the full title, not
mechanically to IC-Senior/Lead/Principal. Corrected: Dr. Eleni Mumtsidu
(Sr. Business Development Manager), Veronika Reichboth (Innovation Ecosystem
Leader), Bridget Murphy (two named Group Leader titles outrank her secondary
"Senior Research Scientist" credential), Dr. Ravinder Reddy Mogulla (Sr. Dy.
General Manager — confirmed correct, was flagged as a possible rule conflict,
Mckinley confirmed Director is right).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 20:01:50 +02:00
beantownbabeandClaude Sonnet 5 3bd8e1f696 Add Twenty CRM-mapped fields (roleLevel, department, industry, industryOther) to Follower Directory
Additive only, per Mckinley's direction not to disturb the Study page's
existing Seniority/Function/Sector taxonomy. New fields prep a clean
Twenty migration export per the CRM Research data model guidebook §8:

- roleLevel: derived from each person's raw job title text via the
  guidebook's §1 decision-order rules (not copied from the Seniority
  bucket, since it's coarser than Twenty's 9 tiers). Ambiguous cases
  left blank or fallback-mapped with a roleLevelNote explaining why.
- department: direct copy of Function, except Admin/Assistant and
  Executive/Management (Role Level signals, not department names).
- industry / industryOther: Sector reclassified per-record against
  Twenty's Industry enum (Academia/Research Institute split into
  Research & Collaborations vs Academia vs blank; Semiconductor/
  Aerospace/Defense split per-company; Photonics/Laser/Optics direct;
  TXproducts internal routes to Category=Internal, not Industry).
  Medical/Life Sciences (not covered by §8) mapped to Other with
  industryOther text, flagged back to CRM Research as a spec gap.
  "Other named company"/Unknown/no-company buckets left blank per
  §8's own no-guessing default.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 19:09:08 +02:00
beantownbabeandClaude Sonnet 5 a1006a9d76 Add 2 new followers: Tinka Spehr-Bechmann (DESY Projektträger), Dr. Ravinder Reddy Mogulla (Bharat Electronics Limited)
Directory grows 134→136. Full recompute of all six Study charts,
Key Findings/limitation/messaging-takeaway prose, and the Notable
Clusters DESY row/footnote (10→11 linked entries, 28→29 distinct
Hamburg/DESY cluster headcount).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 17:54:49 +02:00
beantownbabeandClaude Sonnet 5 385f7add62 Add Bernhard H., XPLORAYTION GmbH (133->134)
Notable match for TXproducts' own space: XPLORAYTION provides synchrotron-
based analyses as a service to industry and academia, same business
model category. No explicit personal title stated, so Seniority stays
Other Individual Contributor rather than assuming a founder/executive
role from tagline alone. Full chart/prose recompute across all six
charts, sums verified.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-18 08:52:25 +02:00
beantownbabeandClaude Sonnet 5 1c0d463686 Add Kilian Frank, Rishabh Moolya, Artem Zaidman (130->133)
Kilian Frank: PhD physicist (X-ray scattering), no current employer named,
classified as research-adjacent per the Marc Thiry precedent. Rishabh
Moolya: Master's student, University of Hamburg. Artem Zaidman: Research
Assistant at DESY (tagline-over-logo precedent), 12th DESY-linked entry.

Also fixed a pre-existing drift in the Notable Clusters table found while
auditing it for this batch: DESY row's count was correct but Cecilia
Farias Marchant's role was never added to its note text, and the row-sum/
distinct-headcount footnote had accumulated a real error (claimed two
cross-row dual-affiliations, only one exists). Rewrote the DESY row from
the underlying data directly and corrected the footnote (29 row-sum, one
dual-affiliation, 28 distinct headcount, was incorrectly stated as 26).

Full chart/prose recompute across all six charts, sums verified.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-17 08:17:01 +02:00
beantownbabeandClaude Sonnet 5 9859b379c9 Show the repost as an excluded row in All Posts, not silently absent
10/07 was fully filtered out of the Engagement Composition table by
_reports_posts_f() (correct for calculations, but invisible to a reader).
Now it appears struck through with a pale-red background and "Excluded"
written next to it, same transparency treatment Core Message's register
table already gives it — visible and clearly marked, not hidden.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-14 08:59:21 +02:00
beantownbabeandClaude Sonnet 5 27a6ef77ba Correct stale Real Eng % audit coverage note in July's outstanding list
Was framed as a big "backfill full history or accept the gap" decision;
now that pre/non-campaign posts are properly excluded, the real remaining
gap is just one missed post (27/08) plus the newest post not yet sent over
(08/09) — never a large historical question.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-14 08:53:20 +02:00
beantownbabeandClaude Sonnet 5 3ea96e1521 Exclude the two pre-campaign June posts from campaign analytics
The branding campaign only runs July-September; 19/06 and 24/06 predate it
entirely, same treatment as 02/09. Added to NON_CAMPAIGN_DATES.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-14 08:52:32 +02:00
beantownbabeandClaude Sonnet 5 400ae42a6b Close the conversion-rate attribution-window item as deprioritized
Decided against the 3-7 day match-window/weekly-bucket idea for now: at
current follow/visit volumes, a week can have as few as 1-3 real follows,
too small for weekly aggregation to meaningfully reduce noise over daily
data. Moved from "outstanding" to "data_quality" as a recorded decision,
not silently dropped. Revisit if monthly volumes grow enough for the
technique to pay off.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-14 08:47:11 +02:00
beantownbabeandClaude Sonnet 5 f08fb1d1c4 Exclude non-campaign posts from format/day/traction breakdowns
Added NON_CAMPAIGN_DATES (starting with 02/09), excluded the same way
REPOST_DATES already is — a real TXproducts post, but not part of the
24-post branding campaign, so it shouldn't skew "what worked" findings
that are specifically about the campaign's own content.

Also closed out July's "end-of-week boss report" outstanding item per
Mckinley: discarded, no longer tracked.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-14 08:37:24 +02:00
beantownbabeandClaude Sonnet 5 736d101d6a Resolve Davood Momeni's location (Greater Hamburg Area)
Full profile card confirms Germany/Hamburg, merging him back into the
Geography chart (Germany 69->70, Hamburg 39->40) and restoring Geography's
population to match Sector's exactly (112, both up from 111). No open
items remaining in the follower dataset.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-14 07:54:02 +02:00
beantownbabeandClaude Sonnet 5 3867f8161a Correct William Joo's name/title, add Davood Momeni (129->130)
Cross-checked today's additions against LinkedIn's own New Followers list:
"Joo William" corrected to William Joo (name order), fuller title added
(Chairman of KAMUG, Professor at Inha University). Added Davood Momeni
(Founder, XDefine, semiconductor reliability/SiC/WBG) - C-Level/Founder,
Executive/Management, Semiconductor/Aerospace/Defense. His location wasn't
shown on the profile card, so he's included in Sector's 112-person
population but explicitly excluded from Geography's 111-person population
until confirmed, flagged in the report rather than guessed.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-14 07:49:06 +02:00
beantownbabeandClaude Sonnet 5 7b64271b8f Add Niklas Meidow, Joo William, Francesco Marzari (126->129)
Niklas Meidow: confirmed internal TXproducts employee (Product Engineer),
5th internal follower. Joo William: Inha University Professor, South Korea
(first SK follower), Director/Head/Principal per the Professor precedent.
Francesco Marzari: PhD Student at Università di Trento, Italy (crosses
2-follower threshold, own Geography row), Postdoc/PhD Researcher per the
PhD-candidate precedent. Full chart/prose recompute across all six charts,
sums verified.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-14 07:38:25 +02:00
beantownbabeandClaude Sonnet 5 c810d19cb6 Audit September's first post (03/09, SNIB2026 announcement)
Hand-audited against LinkedIn's own Reactions/Comments/Reposts lists.
Denny Droßmann is a new engaged non-follower; Marc Thiry's repeat-engager
streak extends to 3 posts (16/07, 28/07, 03/09).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-08 09:09:40 +02:00
beantownbabeandClaude Sonnet 5 6173768036 Add Ablimit Ablez and Cecilia Farias Marchant (124->126)
Ablimit Ablez: Los Angeles, no current employer named (Chiba University
is his PhD alma mater, not current company), classified Unknown/Engineering-
Technical/no-company-listed. Cecilia Farias Marchant: DESY (11th DESY-
linked entry, 27th Hamburg/DESY cluster member), Senior IC/Lead, Marketing/
Comms/Ops. Full chart/prose recompute across all six charts, sums verified.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-01 13:26:45 +02:00
beantownbabeandClaude Sonnet 5 ce773717d5 Add Los Angeles Metropolitan Area to location-country overrides
Fixes "no centroid for X" console warning surfaced on the Aug 31 export
that closes out August (a new US-metro follower without a country suffix
in their location string, same pattern as San Francisco Bay Area and
Greater Madison Area).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-31 17:09:18 +02:00
beantownbabeandClaude Sonnet 5 3c005b8424 Record the Audience Composition/Follower Study fix as completed for July
This was the long-standing unnamed "specific gap" flagged earlier — now
resolved and recorded in features_shipped, since it was never actually
written down as an outstanding item in the first place (tracked only in
conversation until now).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-31 17:02:16 +02:00
beantownbabeandClaude Sonnet 5 9155e708b4 Make Follower Study's cumulative tables tell the monthly story, not just repeat it
Per feedback: a monthly report showing the same near-identical cumulative
tables every month, marginally bigger each time, isn't earning its keep.
Fixed by making the cumulative views themselves show where this month's
people landed, instead of adding that only as a separate summary:

- Account Clusters now annotates each company's growth inline (e.g. "DESY:
  5 (+3 this month)") instead of a flat all-time count with no monthly
  story.
- Notable Contacts highlights rows added this month in place, in context
  with everyone else at that seniority level, instead of only being named
  in a separate bullet list above.
- Dropped the cumulative Sector/Function/Seniority/Country table entirely —
  Audience Composition already owns that exact breakdown for the month,
  so repeating the all-time version here was pure duplication with no
  monthly-specific value.
- Kept the Sector x Seniority crosstab as pure cumulative reference (still
  needs the full ~100+ scale to mean anything, no individual-level "new"
  story to tell).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-31 13:51:24 +02:00
beantownbabeandClaude Sonnet 5 5e20823947 Add "what changed this month" to Follower Study, ahead of the cumulative picture
Feedback: showing "102 followers to date" as the headline of a monthly
report answers the wrong question — a reader wants to know what happened
in the month the report covers, with the cumulative numbers as supporting
context, not the other way around. Audience Composition already did this
correctly (month-scoped "22 new followers" by design); Follower Study now
leads the same way: which new Notable Contacts joined this specific month,
and which Account Clusters grew, computed live for whatever month is
selected. The existing cumulative "bimodal seniority"/"shallow-network"
findings stay, just demoted to a clearly-labeled "full picture, to date"
section beneath.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-31 10:48:50 +02:00