Blog · Building Hellofew, week by week, part 8 of 8

Week of 26 October 2026: the week the replies came, and what broke on the way

Adarsh Mamgain · 31 October 2026

By Friday 30 October the three accounts had sent 131 invitations in the week, had 55 accepted, and had 39 replies, against 14 the whole of the week before. My own account went from 7 replies to 24. I want to be careful about the causes, because the week also had the most commits of any since the launch, and a week with that many changes does not let you point at one. But the writing changed on the Wednesday of the previous week and the replies came in the week after, and that is the order a person would expect.

What the published accounts did, the last four weeks

Invitations sent, accepted, and replies across the accounts on the numbers page, read from the admin report on 2026-10-30. The last week was five days old when it was read.

What the published accounts did, the last four weeksInvitations sent, accepted, and replies across the accounts on the numbers page, read from the admin report on 2026-10-30. The last week was five days old when it was read.0501001505 Oct12 Oct19 Oct26 Oct
Show as a table
What the published accounts did, the last four weeks
Week ofSentAcceptedReplied
5 Oct001
12 Oct38200
19 Oct916014
26 Oct1315539

Check it: the numbers page, which reads the same rows live

Monday: the provider's second version, learned the expensive way

The session provider shipped a new version of its API, and every account was moved to it on Monday. The move is one dispatch on the account id: every read and every send goes to whichever version the account is on, one signed endpoint receives every event, and an admin page can move an account. Then LinkedIn messaging on the new version failed three times in a day. The account-wide chat routes answer that LinkedIn is not supported and to use the inbox routes. The inbox id the documentation names is not what a real account calls it. And the inbox to use is the one the provider itself asks for, not the shortest id in the list. Three fixes, three commits, each one a fact the documentation did not have, each written into the code's comments with the date so the next person does not pay for it again.

Monday also brought pooled learning: what every account learns about which kind of person replies, by segment, pooled with nobody named and handed to every new account on day one, and published on the numbers page once enough workspaces stand behind a bucket. Reply alerts went to the phone, a thumbs-up on a message was noted as the warm signal it is, Today put the one number first, and the inbox got a yardstick beside the reply box: their message was this many words, so yours should not be longer.

Tuesday: the cap on the model, and the hiring play

On Tuesday a priced spend ledger went in, every model call recorded with its tokens priced against the workspace it was for, and with it a hard cap of $0.50 per workspace per day. The system prompt is cached on every call, the batch is the rule rather than the exception, and the repair pass for drafts that failed a check runs as a second batch rather than one direct call per draft. The fifty-cents post has the arithmetic. The same day: the hiring play, where a company that posted the job this week is a buyer this week, found under 6 reads a day; the company's own words from the website on their profile as evidence a message may use; and the guard that reads every message again in the moment before it goes and refuses any that carry a line the workspace no longer says about itself, which exists because of a message that went out under my name claiming I was an affiliate.

Tuesday was also the day of thirty-two commits that are not features: the poller taking the provider's cache and going quiet on a long refusal instead of making two hundred and sixty requests and sending fifteen emails about them; the reconcile running four times a day against the per-route budget; a phone menu on every header; the help docs, one article per task; three posts on this blog; a quadrant of eleven tools on two axes from their own words; and the effort setting on the model, which left unset had been thinking at the highest level and billing it as output for three quarters of a day.

Wednesday: a reason of their own

The daily run was rebuilt as a funnel. Only somebody with a reason of their own is written to: they wrote about the problem, they commented under a post about it, their company posted the job, or they are a close fit the reading can defend. A title match alone is no longer enough, a student or a job seeker is not a buyer, and an industry alone is not relevance. The sender's own posts are always watched. Replies the inline classifier missed are tagged once a day in one batch across every workspace. The reply poller runs every twenty minutes and reads one page, because three accounts had been filling the provider's day window, and it remembers what it read.

What broke

  • The worker was silent for ten hours on one night. The heartbeat from week one raised the alarm; nobody was awake for it. The admin report now carries the worker's last word at the top, and the loop that failed and why.
  • The model budget being spent was raised as a failed loop twenty-seven times in a week. It is a warning now. A cap doing its job is not an error.
  • A refused profile read, a company post without the flag that says it is a company's, a queue page where approved people pushed the drafted ones off the bottom, the model's batch answer arriving wrapped in an object named after the schema and being paid for twice. Each one a commit, each one found by a real account.
  • A reply arriving twice in the inbox under two different ids, and the customer's own replies sent from LinkedIn never appearing at all, so threads read as if nobody had answered. That one is the last commit of the series, below.

Thursday: the voice, the graph, and the thread

Thursday's nineteen commits finish the writing work: the product is never described as an agent, first messages are held to shorter bounds with the machine habits named and checked in code, each sender's voice is learned daily from the first messages of theirs that got a reply, a suggested reply is checked for the same habits and rewritten once, and a no ends it, meaning the classified intent of their last message decides whether a suggested reply may sell at all. Hourly, daily and weekly database backups now go to object storage with a restore drill written down. And a data graph of companies, people and posts, pooled across workspaces and readable by the operator alone, got its own locked tables and a canvas to draw it on.

How the inbox thread is assembledThe ledger of what the product sent, the replies table that drives cancellation and alerts, and a mirror of the chat from the poller and the webhook are merged into one thread, deduplicated by the provider's message id or by the words. Ledger (actions)what the product sent Replies (inbound)what they said; cancels, alerts Mirror (thread)the chat as LinkedIn shows it Mergeby id, else by words One threadin order, both sides Poller + webhookboth directions, reactions The replies table stays the record of "they answered". The mirror only makes the thread whole.
The last fix of the series, on 31 October. The replies table stays the record that drives cancellation and alerts; a mirror of the chat, filled by the poller and the webhook in both directions, makes the thread whole. Two deliveries of one reply with the same words a few minutes apart are one reply.

The inbox fix is the right one to end on, because it is the shape of every fix in the series. A customer said they could not see what they had sent on LinkedIn and that some replies appeared twice. The cause was two decisions made in good faith weeks apart: the inbox only recorded what the other person said, because holding a second copy of a conversation is how you end up telling somebody they never answered when they did; and the dedupe trusted the provider's message id, because why would the same message have two. Both were right until the provider had two versions and the customer answered from their phone. The fix holds our side of the chat too, reads the chats we spoke last in, and treats the same words from the same person a few minutes apart as one message.

The three accounts' funnels on 2026-10-30, from the admin report. Found is people the daily run read; approved is the owner's yes; the rest is what LinkedIn and the people did.
AccountFoundApprovedInvitedAcceptedReplied
Adarsh2331961196114
Shifali21513265366
Abhishek18111976346
The three accounts' funnels on 2026-10-30, from the admin report. Found is people the daily run read; approved is the owner's yes; the rest is what LinkedIn and the people did.

304 commits from an empty repository to here, counted on 2026-10-29. The limits have not moved since week two: 20 a day, 80 a week, 5 to begin with, nothing under 150 connections, on the limits page. What the accounts did under them, this week and every week, including the ones with zero in the replies column, is on the numbers page, read live. If next week's number is lower, it will be there too.