HX-001 · Client-Success Assistant for Agencies
Halix Solutions
In developmentCo-Founder & CTO2026 — PresentSLACK-FIRST · 7 INTEGRATIONS
Outcome
A Slack assistant that briefs agency account managers before every client call — built by two co-founders with me as CTO, and running in production for one internal team since September 2026.




Screens from the redesigned web app, not yet released. The agency and its clients are synthetic test data — no real client appears here.
Halix Solutions is a Slack assistant for marketing-agency account managers, co-founded with Joshua Mohammed-Ali. Before a client call, an account manager has to pull context from the calendar, the CRM, the ad accounts, and memory — and under load, that step gets skipped. Halix does it for them. It reads the agency's calendar, CRM, and ad and analytics accounts, matches each upcoming meeting to a client, and DMs the account manager a private briefing 45 minutes before the call. After the call they log what they promised in Slack, and Halix follows up on overdue work and upcoming renewals. As CTO, I lead the product, the architecture, and the engineering.
A briefing in Slack beats a dashboard nobody opens
The July version of Halix was built around a client-health dashboard. A dashboard only works if someone remembers to check it, and the account managers we talked to — more than 100 of them — were already stretched across back-to-back calls. So the daily surface moved to Slack, where the team already works. The briefing arrives as a DM at the moment it's needed, before the meeting, and nobody has to go looking for it. The web app shrank to setup and admin: connecting integrations, adding clients, assigning account managers. Building Halix Slack-native was my call, and it decided most of what came after.
- Slack is the daily surface; the web app is setup and admin only
- Briefings arrive as a DM, 45 minutes before the call by default
A wrong briefing is worse than none
Every briefing starts with a match: which client is this meeting about? The matcher uses two rules and nothing else — an attendee's email domain, then the client's name in the meeting title. There's no fuzzy matching and no model involved. If two clients could fit, the meeting goes to a review queue instead of a guess. The reason is the failure mode. A guessed match sends one client's numbers and commitments to an account manager walking into a call with someone else. A missed briefing is annoying; a wrong one breaks trust in the whole product.
- Two rules only: attendee domain, then client name in the title
- Ambiguous matches go to review — never a guess
The model writes the words. A template guarantees the briefing.
A language model writes the six briefing sections — status, overdue items, what changed, numbers, risks, and sources — from data Halix has already stored. It never decides what's true. Its output is checked against a strict schema and thrown out whole if it invents a commitment, a link, or a Slack mention, or if it comes back malformed or late. There's no retry-and-repair loop. Instead, a fixed template writes the same six sections from the same data, labelled as a template. A missing model key, a model failure, and a spent daily allowance all end the same way: the account manager still gets a plain, correct briefing before the call.
- Output thrown out whole if it invents a commitment, link, or mention
- A labelled template fallback means a briefing is never skipped
- 36 of 36 briefing evaluation cases passed, on synthetic test data
Answers come from stored data, and stale data says so
Scheduled jobs sync calendar, CRM, and analytics data into Halix's own database, with read-only access to every provider. Slack replies read from that store instead of calling provider APIs live, which keeps them fast and stops a flaky third-party API from turning into a failed reply. The cost is that stored data can go stale, so staleness is part of the answer. Every source carries a freshness label from a fixed set — not connected, stale, partial, first sync pending — and a metric the provider didn't return shows as 'unavailable', never as zero. A zero would read as a real number.
- Read-only access to every provider; replies come from Halix's own store
- Missing metrics show as 'unavailable', never as zero
Four versions in six months
Halix didn't start as a Slack app. In April 2026 it was Halix Workspace, automated per-client trend reports for short-form video. By July it was a custom AI back-office studio for social-media agencies, building lead gen, outbound, and reporting systems client by client. Late in July it became a done-for-you client-retention system. In September it became what it is now: self-serve software on flat monthly tiers, built for one person — the account manager — and one moment, the minutes before a client call.
- April: trend reports · July: custom automation studio · late July: retention service · September: Slack product
- In production for one internal team since 11 September 2026; first live briefing on the 12th
- Credits
- Co-founded with Joshua Mohammed-Ali — I'm CTO and lead product, architecture, and engineering; Joshua leads customer discovery and growth.
- AI
- Wrote the codebase by directing Claude Code — owning the architecture and every product call, and reviewing every diff.