Chat grew up, Projects landed, and the AI stopped dying with the tab
Tuesday is a teaching and training day. Kids Muay Thai and kids jiu-jitsu first, then fitness kickboxing, Muay Thai, beginner jiu-jitsu, advanced jiu-jitsu, and five long rolling rounds to finish. At the gym by four, out around ten. Wednesday and Thursday look the same. Around that, the largest window this log has carried. Team Chat stopped being a message list and became something you can run a company inside: presence dots driven by real browser heartbeats, a status you set yourself with an expiry, Do Not Disturb windows that genuinely hold notifications back, a colleague local time on their card before you ping them, channel pictures, an in-chat image viewer, search inside a conversation, quoting, starring, an archive with a home of its own, and message bodies encrypted at rest. It reached the phone too, with a Chat tab in the native app and push notifications to the device. Projects landed as a native app rather than a link out - a directory, creation flows, a contained task board, files, collaboration and per-person membership overrides - and the Teamwork migration finished bringing conversations, direct messages, projects and profile photos across, then kept syncing new messages in behind it. The AI employees became real processes: isolated, bounded, privately deployed, checkpointed before every tool call, and able to pick a terminated job back up from where it stopped without repeating anything uncertain. They run whether or not a browser is open. GitHub connected, with code activity, multiple accounts, and a watching duty that reports into team chat and stays quiet when there is nothing to say. Stripe gained secure OAuth business connections and an import that reports its stages and resumes from a checkpoint every minute. Underneath it all, API execution moved onto a verified jobs worker, four more RLS predicate hoists came out of per-row evaluation, and a failed deploy now emails a diagnosis instead of a red X.

Chirply