Legend
  • ⭐️ Something new!
  • πŸš€ Milestone
  • πŸ‘€ UI/UX improvements (hopefully)
  • πŸ›  Technical improvements (definitely)
  • 🐞 Bugs
v0.7.6

Cancel Doesn't Mean Reschedule

Aug 10th 2026

Canceling a call no longer means Kit jumps straight into offering new times. Kit can cancel first, then ask if you'd like to reschedule. No pressure.

Daily Changelog | Aug 10th 2026
Aug 10th β€” Cancel Without Rescheduling
  • πŸ‘€ When you cancel a call, Kit can now just cancel β€” and ask if you want to reschedule before offering new times
  • πŸ›  Made pause/unpause scheduling more reliable when you ask Kit to change that setting
  • πŸ›  Deploy process got an extra safety step
v0.7.5

Pause Scheduling

Aug 9th 2026

Need a break from scheduling? You can now pause Kit for up to 60 days β€” and if you go quiet for a month, Kit will pause itself so it isn't chasing you while you're away. Ask Kit to pause or unpause whenever you're ready.

Daily Changelog | Aug 7th - Aug 9th 2026
Aug 9th β€” Pause Scheduling
  • ⭐️ You can pause scheduling for up to 60 days, and unpause whenever you're ready
  • ⭐️ If there's been no engagement for a month, Kit automatically pauses scheduling so it isn't nudging you while you're away
  • πŸ‘€ Internal tools dashboard got a visual refresh
  • πŸ›  New tool for running one-off scripts (used to backfill data after the new pause settings rolled out)
  • πŸ›  Strengthened our test coverage around pausing and unpausing, plus a few related reliability fixes
Aug 7th β€” Deploy Reliability
  • 🐞 Fixed a deploy issue where archived logs couldn't be moved, which could leave a worker down after an update
  • πŸ›  Deploy tool now keeps release archives as tarballs instead of extracted copies
v0.7.4

Deploy Kit

Aug 6th 2026

This is the first version of Kit shipped with our new deployment tool β€” a milestone that means faster, safer updates from here on out. On the product side: Kit now checks in with contacts who've gone quiet, and you can reschedule a call a few minutes off the usual time slots when you're running late.

Daily Changelog | Aug 4th - Aug 6th 2026
Aug 6th β€” Scheduling Fixes
  • 🐞 Fixed a bug where accepting or declining a time could fail if Kit referenced an offer that was no longer valid
  • 🐞 Fixed a case where Kit wasn't showing scheduling options even though you had availability and a contact had open offers
Aug 4th β€” Keep In Touch, Running Late & Deploy
  • πŸš€ First version deployed using our new deployment tool
  • ⭐️ Kit now reaches out to contacts who've gone unresponsive to confirm they still want to keep in touch
  • ⭐️ Running a few minutes late? You can now reschedule a call off the usual :00 / :20 / :40 marks β€” as long as it doesn't conflict with another call
  • πŸ›  Deploy tool upgraded to pull a specific tagged release instead of checking out the latest branch tip
v0.7.3

Summer Break's Over

Aug 3rd 2026

Been quiet on the updates this summer, but plenty happening behind the curtain. Kit helped our core users keep in touch with friends and family all summer long to - exactly as intended. This release preps us to move faster moving forward β€” a killer test suite runs a "Golden Journey" onboarding users/contacts and every scheduling tool to ensure we didn't break anything, a proper tool for deploying updates to the live site, and a stack of reliability fixes. The best thing about time passing, is that as AI evolves Kit get automatic intelligence upgrades. This release bumps Kit's brain from Grok 4.3 to 4.5.

Daily Changelog | Apr 27th - Aug 3rd 2026
Aug 3rd β€” Smarter Time Handling
  • ⭐️ If you suggest a time that's a little off the mark (like the :30), Kit now lets you know it adjusted things slightly instead of silently rounding
  • πŸ›  Improved how Kit handles times that aren't right on the :00, :20 or :40 mark when confirming availability
  • πŸ›  Our new deploy tool now archives logs automatically every time it runs
Jul 31st β€” Deploy Tooling & Scheduling Fixes
  • πŸ›  New tool for safely and consistently deploying updates to the live site
  • 🐞 Kit no longer lets you create a call in the past, or offer past times when declining/rescheduling
  • 🐞 Fixed a bug where rescheduling a call that was already queued to dial didn't cancel the old dial
Jul 26th β€” Bug Squashing
  • 🐞 Fixed a handful of behind-the-scenes issues with how Kit identifies who it's talking to on inbound calls
  • 🐞 Fixed a rare bug that could have bridged the wrong contact into someone else's call
  • 🐞 Fixed missing priority information for some contact relationships
Jul 13th β€” Recover Rollover Offers & How Kit Works
  • ⭐️ Missed a call time Kit offered you last week? Now you can still accept it β€” and once old offers pass, Kit automatically offers you fresh ones instead of letting things pile up
  • πŸ›  Fixed a bug where, in certain schedule rollover situations, Kit could lose track of a contact relationship entirely
  • ⭐️ Taught Kit a "How Kit Works" primer so it can better explain itself when you ask questions
Jul 11th β€” Testing Overhaul (Merged!)
  • πŸš€ Merged months of work rebuilding our entire test suite into a "Golden Journey" that walks through onboarding, contacts, scheduling and calls end-to-end before every release
Jul 5th β€” Scheduling Fix
  • 🐞 Fixed an issue where Kit would ask for your availability again even though there weren't any more contacts left to schedule
β˜€οΈ Somewhere In Between β€” Summer Break

Took a couple months off to touch grass. Worth it. Back to it in July.

May 1st β€” Context & Messaging Cleanup
  • πŸ›  Simplified which past messages Kit considers when deciding how to reply
  • πŸ›  Performance improvement: only re-checks a contact's info on messages that actually need it
  • 🐞 Some technical message types weren't being included when Kit reviewed conversation history
  • 🐞 Fixed a mislabeled AI provider name behind the scenes
Apr 30th β€” Reliability & Admin Tweaks
  • πŸ›  Fixed a rare timeout issue that could prevent Kit from retrying a failed AI request
  • πŸ›  Improved how Kit understands vague dates/times when updating your availability
  • πŸ‘€ Hid the "clear queue" button from admin tools when running on the live site
  • πŸ‘€ Stopped repeatedly sending the "forward this text" template to contacts who already got it
Apr 27th - 28th β€” Small Fixes
  • 🐞 Fixed a bug where entering dates/times on mobile Safari wasn't working properly
  • 🐞 New users created from an existing contact weren't getting scheduled for up to 24 hours
v0.7.2

More Control Over Scheduling

Apr 26th 2026

Sometimes you talk to someone outside of Kit. It happens. Now you can let Kit know the last time you talked with your contacts so Kit doesn't reach out too soon. You can also (more easily) update how often you want to keep in touch β€” all right from the dashboard.

Daily Changelog | Apr 21st - Apr 26th 2026
Apr 26th β€” Frequency/Catchup Settings
  • ⭐️ New screen to update how often (frequency) you want to keep in touch with a contact
  • ⭐️ Caught up with a contact outside of Kit? Now you can update your last catch-up date from the dashboard so Kit doesn't reach out too soon
  • πŸ›  Simplified how Kit determines whether a contact is already scheduled β€” no more unnecessary priority overrides
  • 🐞 Fixed an issue where contacts with a call already scheduled were still showing up as available to push or request availability for
Apr 21st β€” Scheduling & Messaging Fixes
  • 🐞 Fixed a bug where weekly scheduling wasn't starting on Sunday when everything was ready on Saturday
  • 🐞 Fixed missing call duration information
  • 🐞 Fixed an issue where technical messages were not being properly filtered out
v0.7.1

Backup Brains & Persistant Timezones

Apr 17th 2026

Sometimes AI is overwhelmed or slow to reply. This release ensures you always get a response, even when the worker crashes! Kit also now allows users/contacts to update their timezone and remembers it no matter who you're talking to!

Daily Changelog | Apr 10th - Apr 17th 2026
Apr 17th β€” Timezone Smarts & AI Resilience
  • ⭐️ When you add a contact who already chats with Kit through someone else, Kit now inherits the timezone they've already confirmed instead of guessing
  • ⭐️ New contacts without a known timezone are asked for one directly β€” and any update flows to every account linked to that phone number
  • πŸ›  Kit can now fall back to a backup AI provider/model if the primary one times out or fails β€” fewer stalled conversations
  • πŸ›  Messages that fail or time out are automatically retried with increasing delays instead of dropping silently
  • 🐞 Replies with empty or malformed content now retry instead of silently returning nothing
Apr 13th β€” Small Fix
  • 🐞 Fixed a rendering glitch where "β–Ά Next Week" was showing as raw HTML code
Apr 12th β€” Workers & Polish
  • ⭐️ Team is alerted when a worker crashes or respawns
  • πŸ›  New cron that ensures workers are working at all times
  • πŸ‘€ Small button label tweak: "Nextβ†’Week" β†’ "β–Ά Next Week"
  • πŸ‘€ A few template adjustments
  • 🐞 Fixed a bug where the "on deck this week" list was including contacts who already had a call scheduled
  • 🐞 Fixed a bug where cancelling or rescheduling a call from the dashboard wasn't working properly
Apr 10th β€” Scheduling Tweaks
  • 🐞 Contacts can no longer be pushed forward once Kit has already sent them an offer
  • πŸ›  Weekly schedule creation now runs at 9:55am UTC, right ahead of Saturday's 10am availability request
v0.7

Push To Next Week

Apr 10th 2026

Kit:"You've got 115 people on your schedule this week! When are you available?"
Me:πŸ€¦β€β™‚οΈ fml

This release I reimagined how the weekly scheduling flow should work and added a new feature to help when managing lots of contacts.

  1. Kit now requests your availability on Saturday giving you 24 hours to respond before scheduling begins Sunday @ 10am.
  2. Kit lets you know who is on deck this week, and if it's too many, allows you to push people to next week.
  3. Instead of auto scheduling when you already availability set for next week, Kit still reaches out and lets you know your availability giving you a chance to update it/push contacts before scheduling begins.
Lots of reliability improvements and bug fixes in here too, including a one line bug that took 4.2 million AI tokens to track down. The most yet!

Daily Changelog | Mar 26th - Apr 10th 2026
Apr 10th β€” Smarter Onboarding
  • 🐞 Fixed a mixup where Kit could confuse name and location fields during onboarding setup
Apr 9th β€” Schedule Smarts
  • 🐞 Fixed a race condition that caused your contacts' schedules to appear stale (this one cost 4.2M AI tokens to track down)
  • πŸ›  When offering call times, Kit now includes all of your available times instead of just a subset (trying this out)
  • πŸ›  A contact's priority is now refreshed whenever their status or call frequency changes
Apr 8th β€” Push Contacts
  • ⭐️ New "Push" button in the dashboard β€” bump a contact to the front of your schedule when you're ready to connect with them soon
  • 🐞 Fixed an issue where duplicate messages could be sent in certain situations
Apr 7th β€” Better Availability Messages
  • ⭐️ Availability messages now include a list of who's on your schedule for the week
  • πŸ›  Available times are now grouped into ranges and easier to read (e.g. "Mon Apr 7th: 2-4pm" instead of one line per slot)
  • πŸ›  Availability request messages now offer the option to skip or push a contact
  • πŸ›  New accounts won't have a schedule generated within their first 72 hours β€” no pressure right out of the gate
Apr 6th β€” Schedule Timing Tweaks
  • πŸ›  Weekly availability requests now go out on Saturdays instead of Sundays, giving you more time to respond before the week starts
  • πŸ›  Follow-up reminders moved from Wednesday to Monday
Apr 2nd β€” Scheduling Flexibility
  • πŸ›  Call frequency is no longer limited to a fixed number of days β€” as long as you want to connect at least once a week, Kit can work with it
  • πŸ›  Kit now gives a slight preference to "on the hour" times when selecting from your availability
Mar 26th β€” Bugfixes
  • 🐞 Fixed an issue identifying who a message is about in certain edge cases
  • 🐞 Fixed a bug where cancelling or rescheduling a call wasn't resolving correctly

v0.6

Friends Will Be Friends

Mar 18th 2026

In the early days of building Kit I remember thinking, "Someday, users are going to have eachother as contacts, which will cause all sorts of chaos. I'll deal with that when it happens.". Well, that day has arrived β€” and it took 3 weeks.

No user facing ⭐️⭐️!NEW FEATURES!⭐️⭐️, but everything should work more smoothly now, especially if you are a contact of another user and have contacts of your own.

Daily Changelog | Feb 28th - Mar 18th 2026
Mar 18th β€” Stop Guessing (Merged!)
  • πŸš€ Merged the stop-guessing-who branch into master!
Mar 17th β€” Direct Response
  • πŸš€ Merged the stop-guessing-who branch into master!
  • πŸ›  Use direct_response correctly and audited every tool to ensure direct_response is set correctly
  • 🐞 Don't assume Kit should request new times when a contact declines (Brandon's bug!)
  • πŸ›  Updated the message users forward to their contacts when they add them
Mar 16th β€” Testing & Fixes
  • 🐞 New user creation was failing
  • 🐞 Converting a contact to a user still assumed perma-waitlist and never created a schedule
  • 🐞 Incoming calls were not being hung up successfully
  • πŸ›  Optimization: stopped fetching context twice when replying to a message
  • πŸ›  Included instructions in the system prompt for how/when Kit should convert a contact into a user
  • πŸ›  Prompt update telling Kit to include current availability when updating availability - not fully replace it. And created/tested a new eval - it works! (Thanks Coran!)
  • πŸ‘€ Small usability update to our worker management tools
Mar 13th β€” Bugfix
  • 🐞 Fixed AMD phone calls route that wasn't marking user_status=answered when the user picked up
Mar 12th β€” Evals & Context Cleanup
  • πŸ›  Updated eval tool to allow per test case context override
  • πŸ›  Updated evals and eval tools to handle the new "contact of" paradigm and include all the necessary tools
  • πŸ›  Identity fields within each contact_of should be about that user, not you
Mar 11th β€” Pipeline Overhaul
  • πŸ›  Updated the messaging pipeline to "not guess"
  • πŸ›  Updated all tools to utilize contacts_of from context
  • πŸ›  Updated accept/decline availability tools to use the new offer_id
  • πŸ›  Include more tools more often, no longer based on the last request sent
  • πŸ›  Simplified how we choose which past messages to include when chatting with Kit
  • πŸ›  Added start_assistant() test support
Mar 5th-10th β€” System Reboot
  • πŸ›  Major overhaul of the system prompt β€” ALL context is now included for every user, contact, and contact-of
  • πŸ›  Moved communication rules from the system prompt into the reply tool description
  • πŸ›  Removed an erroneous parent property from the accept_availability tool
Mar 3rd β€” Bugfix
  • 🐞 Kimi K2.5 Sometimes calls the same tool multiple times when we loop back for a response after including a system message. Now, when we loop back, we only include the reply tool.
Mar 2nd β€” No More Guessing
  • πŸ›  Rewrote context() to return not only the user's contacts, but users the user is a contact of
  • πŸ›  Removed guess_who() β€” no more guessing who's on the other end of a message
  • πŸ›  Rewrote the system prompt to include the offers/availability/calls/etc for you AND everyone you're a contact of
  • πŸ›  Pass the contact_id of the person you're accepting/declining availability for
Mar 1st β€” Planning Mode

πŸ€” Spent all day planning. Currently, Kit tries to "guess" who it's talking to based on the last messages sent/received. Is it a user? Is it a contact? What if they are a contact of multiple users? What if this person is a user AND a contact? What if they are a user AND a contact of multiple users! The answer, is to stop guessing. Give Kit everything it needs to handle every scanerio and let AI figure it out.

v0.5

Don't Reschedule, Unless You Have To...

Feb 24th 2026
  • ⭐️ We get it, things come up. You don't want to reschedule/cancel on your favorite humans but sometimes you have to! Now, let Kit know if you can't make your call and Kit will offer new times (tomorrow onwards).
  • ⭐️ So much to squeeze in during those final 60 seconds! Now when you hear the beep, you have 5 seconds to squeeze in your final goodbyes!
  • πŸ‘€ Those calendar invite's don't work on iPhones! So we removed them. But Google/Apple turn the date/time into a link. So just tap that to add it to your calendar!
Daily Changelog | Feb 15th - 24th 2026
Feb 24th β€” OS Models?
  • πŸš€ Using an open source model as a backup for Grok 4 Fast! Kimi K2.5 is impressive!
  • πŸ‘€ Crunched the daily's into a single changelog entry for each release
  • πŸ‘€ Updated the language Kit uses when offering you call times
  • πŸ›  Changed the way "no response needed" is handled
Feb 17th β€” Beeps, Rescheduling & Linkification
  • ⭐️ BEEP, BEEp, BEep, Beep, beep...
  • ⭐️ Allow both parties to cancel/reschedule their calls
  • πŸ‘€ iPhone doesn't support calendar events! But it does "linkify" dates/times in SMS messages. Let's try that.
  • πŸ‘€ Improved "forward this txt so your contact doesn't think I'm a spammer" messages
Feb 15th β€” Quick fix
  • 🐞 Fixed a bug which was causing schedule creation to fail and Sunday txts to not get queued up
v0.4

New Dashboard UI

Feb 9th 2026

πŸš€ Tapping your profile, a call or a contact on the dashboard previously displayed a edit form. Now, it shows a menu of options – prepping us for a future with loads more features!

v0.3

Onboarding 2.0 & Contact Cards

Feb 7th 2026

My initial vision was for everyone to interact with Kit exclusively via SMS/TXT messages. But the more I tried, the more I realized AI just wasn't consistent enough to reliably onboard new users. In the months since I built the onboarding flow, AI has come a long way (and so has my ability to leverage it).

Starting today, new users can go from their first message with Kit all the way through their first K.I.T. Call with their contact 100% via txting with Kit!

⭐️ With this release, we've also removed the waitlist and made it so you can TXT Kit a contact card to create/add new contacts! Give it a try and let Kit know what you think!

Daily Changelog | Jan 27th - Feb 7th 2026
Feb 7th β€” Contact cards & Bug fixes
  • ⭐️ Send Kit a contact card to create a contact
  • 🐞 Missed calls were not being updated to canceled
Feb 6th β€” Refactored Messaging

Wasn't planning on doing this today! But it had to be done... Now we can have messages as attachments.

  • πŸ›  New vendor and vendor_user_id fields for messages
  • πŸ›  No better message resolution without using the type field inappropriately
  • 🐞 New onboarding methods weren't including tool_response messages
Feb 5th β€” Improved onboarding more
  • πŸ‘€ Removed the Add Availability step from onboarding. Now Kit will ask for availability when a contact confirms.
  • πŸ‘€ Don't require 3 contacts during onboarding via the dashboard.
  • πŸ‘€ A template to text your contact when you add them.
Jan 29th - Feb 3rd β€” Improved onboarding
  • πŸ›  Added new stats about contacts to schedule_stats
  • πŸ›  Removed onboarding logic while checking the schedule and incorporated new contact stats for an early exit when no active contacts exist.
  • πŸ›  Updated dashboard/web onboarding flow to utilize our new onboarding state logic.
Jan 29th - Feb 2nd β€” Improved onboarding

Been working on this for days!

  • ⭐️ Now we can turn on/off the waitlist
  • ⭐️ Now we can toggle onboarding via the dashboard or via fully txt message
  • πŸ›  Track what stage of onboarding a user is in
  • πŸ›  Schedules are created at user creation
Jan 27th β€” Improved date/time selection
  • πŸ‘€ Simplified the way Kit selects/submits times when accepting availability – now all times are in the user's local timezone
  • πŸ‘€ Improved Kit's visibility of offers contacts make to the user
  • πŸ‘€ Improved Kit's ability to handle ambiguous time frames like "monday anytime"
  • πŸ‘€ At the beginning of a call, don't inturrupt while Kit's trying to dertermine whether you're a human or machine
v0.2

Are You There?

Jan 25th 2026

First public release of the year! Now that this AMD monkey is off our back, we can start pushing more fun/useful updates, more frequently.

  • ⭐️ Does Kit think you are an answering machine? Now Kit will ask you a question to confirm before dialing your contact – and will listen to your contact answer in the background to confirm they're not an answering machine either!
  • ⭐️ Better "on the hour" and more "spread out" times offered to contacts.
  • ⭐️ More diverse availability/contact requests from Kit sent out Sunday mornings.
Daily Changelog | Dec 22nd 2025 - Jan 25th 2026
Jan 24th β€” Latest Answering Machine Detection Updates
  • πŸ‘€ Use an AI assistant to determine whether a user answered, but use realtime transcription to confirm whether a contact answered. This way, they can hear eachother while we wait for the results.
Jan 22nd β€” Bug fixes & availability offering improvements
  • πŸ‘€ Better selection of times being offered. New "on the hour" priority and "proximity" penalty
  • πŸ‘€ When we fallback to Haiku, Kit was not responding to confirmations with tool calls, rather calling "reply" with "no-response: true"
  • 🐞 Sometimes Grok calls tools AND responds with a message, the message was being dropped
  • 🐞 Old/stale contact requests prevented Kit from ever speaking with the user
Jan 20th β€” Scheduling improvements
  • πŸ‘€ Clearer communication around whether a proposed date/time is this week, next week, or in the future
  • πŸ‘€ Improved Kit's system prompt to (hopefully) improve scheduling for contacts
  • πŸ‘€ Better communication with unconfirmed/declined contacts
Jan 19th β€” Chipping away
  • πŸ‘€ Disallow AI from updating an unconfirmed contact's status. Only they can do that.
  • πŸ‘€ Disallow adding yourself as a contact.
  • πŸ‘€ Nicer time formatting when a contact offers you their availability
  • πŸ‘€ Stop sending those annoying "I'm all done scheduling!" messages
  • 🐞 Stop sending message metadata to the user when Grok mistakingly includes it
  • 🐞 Don't offer calls in 0 minutes
  • 🐞 Don't offer calls to recently inactivated contacts
Jan 16th β€” Guess who?
  • πŸ‘€ Kit asks for availability on Sunday, then follows up Monday. Bumped that to Wednesday.
  • πŸ‘€ Tons of new messages for requesting availability and contacts
  • 🐞 When a user is also a contact, Kit should skew more heavily towards assuming it's speaking with the user.
  • 🐞 Schedules were only being created with 1 call
  • 🐞 When converting a contact to a user, Kit bugged out when it already knew their timezone
  • 🐞 Stop sending error messages to people via SMS
Jan 15th β€” AI Agent AMD
  • πŸ‘€ Answering machine detection should have been done as an agent... Not using gather. But the agent has it's own set of problems... Work in progress.
Jan 15th β€” New Year Update
  • ⭐️ Locked in Kit's Mission: Helping you build relationships with your contacts.
  • ⭐️ Published: Kit's Mission for 2026 (and Beyond)
  • ⭐️ New tool for sending bulk SMS messages to everyone
  • 🐞 Blog post open graph image paths were incorrect
Jan 13th β€” Infinitly logged in
  • πŸ‘€ Dashboard sessions changed from 30 days to infinite
Dec 22nd β€” AI Gather AMD
  • ⭐️ Instead of relying on built in answering machine detection, Kit asks you a questions and LISTENS to your response. Asks a follow up if it's unclear if you're human or machine.
v0.1.7

Missed Call Handling

Dec 9th 2025

Life happens! If you miss your K.I.T. Call, Kit will send you a text. Call Kit back within 5 minutes to get reconnected with your contact. If not, Kit will cancel the call and try to reschedule.

Daily Changelog | Dec 2nd - 9th 2025
Dec 7th β€” Bug fixes & Improvements
  • ⭐️ SMS notification 5 minutes before your call!
  • ⭐️ SMS notification when a contact schedules a call!
  • ⭐️ Txt your new contact before Kit does. Giving contacts a heads up should help!
  • πŸ‘€ Availability modal shows 12am-11pm now insteaad of 8am-8pm. Scrolls to 8am though when you open it.
  • 🐞 Initial availability was not being set correctly when a previous schedule doesn't exist
  • 🐞 Kit kept asking for availability when a contact proposed their own
Dec 2nd β€” Bug fixes & Improvements
  • πŸ‘€ Tweak last name input while onboarding
  • πŸ‘€ Captalized first and last names when creating/updating users/contacts
  • 🐞 Don't dial calls canceled at the last minute
v0.1.6

First Users, First Fixes!

Dec 1st 2025

I can't be the only K.I.T. user forever. Time to invite users who can have their own contacts! Tons of bug fixes and improvements to support Kit's first peeps!

Daily Changelog | Nov 24th - Dec 1st 2025
Nov 30th - Dec 1st β€” Onboarding improvements, bugs & tweaks
  • πŸ‘€ Kit should be better at scheduling calls across timezone day boundaries
  • πŸ‘€ Swapped Add Availability and Add Contacts steps during onboarding
  • πŸ‘€ Tap any day in the availability list to edit availability
  • πŸ‘€ Let contacts know they can suggest alternative dates/times
  • 🐞 never_started should have been never-started
  • 🐞 When a contact accepts an offer, Kit shouldn't wait until expiration to check the schedule again
  • 🐞 Calls in the dashboard were showing as in 1 day when they were in 2 days
  • 🐞 Properly assign the last message sent to the newly converted user
Nov 28th β€” Less chatty
  • πŸ‘€ Kit no longer replies to EVERY message. Only when necessary.
  • 🐞 Don't call the same tool a second time after a success!
  • 🐞 If there's a call scheduled, Kit thought it was NOW!
Nov 24th β€” Bug squashing
  • πŸš€ Onboarded our first user!
  • 🐞 iOS is stricter about date formats then desktop browsers
  • 🐞 Fixes for onboarding logic when checking the schedule
  • 🐞 Kit thought everyone's time was UTC time!
v0.1.5

Kit, The App!

Nov 24th 2025

Did you know there's an interface for managing your calls/contacts/availability? Just ask Kit for a login link! And now you can install the web app to see Kit's pretty face on your phone's homescreen.

Daily Changelog | Nov 20th - 24th 2025
Nov 23-24th β€” System prompt & UI improvements
  • ⭐️ Option to notify the contact when a call is canceled
  • ⭐️ Install Kit as a PWA on Android/iOS!
  • ⭐️ Web app icons for Android/iOS!
  • πŸ‘€ Remind Kit that they can only perform actions using the tools provided
  • πŸ‘€ Let contact's schedule a K.I.T. Call at any available time, not just the times offered
  • πŸ‘€ When creating/updating a call, the date/time now stay on the same row on mobile
  • πŸ‘€ Timezone abbreviation when creating/updating a call
  • πŸ‘€ Toggle extra fields when creating/updating a contact
  • πŸ‘€ Removed the Signup step from onboarding progress bar
  • 🐞 Don't send "scheduling compeleted" message if the schedule was already marked as complete
  • 🐞 Onboarding logic within check_schedule was not being reached
Nov 20-22nd β€” Tweaks
  • πŸ‘€ Instead of a hard limit of only scheduling 3 new contacts per week, we now it's only 3 of the same frequency
  • πŸ›  Improvement to which messages Kit sees when replying
  • πŸ›  Now Kit sees every tool regardless of whether a request was made or not
  • 🐞 When checking the schedule hours from now, override any checks in the queue
  • 🐞 The list of contacts we can reach out to in the schedule shrinked as calls were scheduled
  • 🐞 AI caching parameter wasn't being set correctly
  • 🐞 If a contact declines an offer with alternative availability multiple times, Kit kit updates the offer instead of creating a second one
v0.1.4

Week 2 Tweaks

Nov 20th 2025

Quick dashboard glow-up – and stop re-sending offers to contacts who don't reply. They're busy this week.

Daily Changelog | Nov 17th - 20th 2025
Nov 20th β€” Dashboard Improvements
  • πŸ‘€ Improved contact/call label colors
  • πŸ‘€ Sort calls in dashboard by date
Nov 17th β€” Week 2 Squashing
  • ⭐️ How much money we got left?
  • πŸ›  Only one offer per contact per week
  • 🐞 The dial call queue was colliding on the hour causing the same call to be queued up twice! Now every 20 on the 5.
  • 🐞 Availability follow up wasn't using the templating engine
v0.1.3

Week 1 Wrap Up

Nov 16th 2025

Quick fixes and improvements after the first week of Kit helping me keep in touch with MY contacts!

Daily Changelog | Nov 17th - 20th 2025
Nov 16th β€” Week 1 Wrap Up
  • ⭐️ Emoji react to a message with 🐞 to flag it as a bug for the team
  • ⭐️ Now we can convert timezones like America/Denver -> MST or MDT depending on time of year
  • πŸ‘€ An emoji reaction to a message probably isn't testimonial worthy
  • πŸ‘€ Crashing out with generic error messages now. You didn't need to know that.
  • πŸ‘€ Try not to send initial outreach to a contact outside of 8am-8pm
  • πŸ›  Logging caught exceptions as well now
  • 🐞 When requesting availability, it only auto forwarded to checking the schedule if availability matched unscheduled contacts exactly.
  • 🐞 Message flagging was STILL failing
v0.1.2

OMG, Humans!

Nov 14th 2025

Added my first contacts and Kit is off to the races! Lots of things are working beautifully, but lots of discoveries along the way.

Daily Changelog | Nov 11th - 14th 2025
Nov 14th β€” Bugs & Tweaks Galore
  • πŸ›  Manually change who we're talking to depending on the last message sent. For example, after converting a contact to a user.
  • πŸ‘€ Reformatted calls on the dashboard which now shows all calls for the week in the past/present/future
  • πŸ‘€ Show the month/date in the availability modal
  • 🐞 Call to action buttons were putting+plus+signs+between+every+word but only on iPhones
  • 🐞 Fixed issue where txt messages said: "Expected messages array in content per response_schema=reply"
  • 🐞 Kit hung up after telling you there were 60 seconds left!
  • 🐞 Message flagging was failing causing errors in txt messages
  • 🐞 SMS previews of the onboarding link were showing 404
  • 🐞 Can't make an offer with no availability!
  • 🐞 Don't offer a call to a contact who just had a call!
  • 🐞 Only allow scheduled calls to be edited/canceled
  • 🐞 Don't bug the user about availability during onboarding
  • 🐞 Converting a contact to a user was only setting the phone number, not the name or timezone
v0.1.1

Kit, Meet The Family

Nov 10th 2025

I pushed Version 0.1.0 live over a month ago, a bit prematurely. Kit wasn't ready for human interaction... But it is now!

Daily Changelog | Sep 30th - Nov 10th 2025
Nov 10th β€” Testing, debugging, launchinggg
  • πŸ‘€ Updated Kit's contact card
  • πŸ‘€ Updated The default txt to Kit and website qr code
  • πŸ‘€ First call outreach get's special treatment
  • πŸ›  Update the schedule when a call starts/ends
  • πŸ›  Use our new template engine when requesting availability
  • 🐞 Don't add availability when there is a scheduled call
  • 🐞 Dashboard wasn't updating when availability, calls, contacts, or messages were empty after updating
  • 🐞 Past calls were showing on the dashboard
  • 🐞 Contacts were getting a priority of -20,000 in some edge cases
Nov 9th β€” AI Dialed
  • πŸš€ I got Grok 4 Fast and Claude Haiku 4.5 to basically match in evals. Set Grok as default with Haiku as a fallback.
  • 🐞 Fixed a bug where new user's name/location wasn't being set when onboarding
Nov 7th β€” Evals Galore
  • πŸ‘€ Insane amount of tweaks to the system prompts and tool descriptions
Nov 4th β€” Reply Tool
  • πŸ›  Now replying to messages via a tool vs the response schema! This chould be a game changer...
  • 🐞 Every tool requires parameters, and they can't be empty!
Nov 3rd β€” Let's train Kit
  • ⭐️ Evals tool!
  • πŸ‘€ KIT becomes K.I.T. But Kit is still Kit.
  • 🐞 Timeline entry for schedule creation now shows the number of unscheduled contacts (should schedule - already scheduled)
Nov 2nd β€” Mega renaming sesh
  • πŸ‘€ Renamed allllll the tools to make them more ai/tool calling friendly
  • πŸ›  Rewrote the waitlist removal tool, it was weird
  • πŸ›  Merged the onboarding_link and login_link tools
  • πŸ›  Rewrote the calendar_link tool. What idiot built that?
Nov 1st β€” Flagging Messages
  • πŸ‘€ Improved the feedback tool. AI can flag a message as a bug, feedback, testimonial, support, or unknown.
  • πŸ›  Removed FAQ Unknown tool. Flagging should handle this.
  • πŸ›  Onboarding tools simplified.
Oct 31st β€” Conditional Statements in Prompts
  • πŸ‘€ Improved the scheduling tool flow. Now, if a contact declines an offer, they can reply with alternative dates/times.
  • πŸ›  Prompts can now include conditional statements and messages include metadata.
Oct 28th β€” Schedule/Tool Improvements
  • ⭐️ Now we can add availability instead of replacing it entirely.
  • πŸ›  Updated message context to include the schedule instead of BE the schedule. Then updated every tool to account for it.
  • πŸ›  Don't offer to convert a contact to a user if they are already.
  • πŸ›  Everybody needs to speak UTC, except users and contacts of course.
Oct 27th β€” New System Prompts
  • πŸ›  AI didn't understand "You are speaking to a user or a contact", and certainly didn't like all the json I was cramming into the faux tool call. Hopefully now they understand better.
  • πŸ›  The AI messaging filtering we added a couple days ago wasn't working. Simplified it to only include messages from the last 20 minutes + recent requests from Kit.
  • πŸ›  Woah... I think schema's gotta be strict!
Oct 26th β€” OpenRouter integration
  • πŸ›  OpenRouter integration! Should make swapping between models a lot easier.
  • 🀯 Kkkk Ii Ttttt
Oct 24th β€” AI message filtering
  • πŸ›  Only show AI messages since the last successful tool call. Don't wanna confuse it!
  • πŸ›  Letting the parent method catch/log 400 level errors for now
  • πŸ›  ai()->chat() now handles all providers itself since everybody follows the openai schema these days
Oct 23rd β€” Spacing out new contacts
  • ⭐️ Add as many contacts as you want, but Kit will only add 3 new contacts to your schedule per week to prevent overload.
Oct 23rd β€” Dashboard improvements

While in San Diego, instead of coding, I just made notes of all the things I came up with. Today, I banged them ALL OUT.

  • πŸ‘€ 404, default, get started and dashboard open graph images
  • πŸ‘€ Main website buttons link to the dashboard if logged in
  • πŸ‘€ Users don't need to chat from the dashboard. Right?
  • πŸ‘€ Ellipsis long user names in the dashboard header
  • πŸ‘€ Put contact's relationship and frequency on the same line to make contact cards shorter on the dashboard
  • πŸ‘€ Hide "clear availability" action during onboarding
  • πŸ‘€ Hide header buttons during onboarding
  • πŸ‘€ Swapped dashboard πŸ‘‹ emoji to the far left
  • 🐞 The word "Availability" in the dashboard's Get Started progress bar was busted
  • 🐞 When an sms message contains an attachment, it might arrive AFTER the next message. Ensure attachments are in the last message (for now)
Oct 21st β€” Teaching Kit patience
  • πŸ‘€ Kit no longer responds to EVERY incoming txt message. Kit patiently waits for you to stop spamming multiple messages before replying.
  • πŸ›  Added a tool for running/testing crons
  • πŸ›  Fixed our tests to account for new reply queuing
  • πŸ›  Logs now prepend the date to the filename
  • πŸ›  Don't check the schedule if there's already a check schedule queued up
  • πŸ›  The database knows what time it is right NOW(), not the server.
  • 🐞 Messages posted via the dashboard were being included twice when handed to our AI overlords
Oct 18th β€” Back to coding ~ Unique tasks
  • πŸ›  Tasks can now be unique so we don't check the schedule more times than necessary
  • πŸ›  Tasks can now be reschedled so we can wait before replying to a txt message
  • πŸ›  Updated worker/queue tests for new functionality and successfully ran it after tons of debugging
  • 🐞 Worker was crashing on fatal errors
Oct 17th β€” Blogging
Sep 30th β€” Immediate fixes
  • πŸ‘€ Haden't looked at the homepage in a long time. Updated the CTA section.
v0.1.0

It's Time

Sep 30th 2025

πŸš€ Finished "Availability" and merged it into the main branch. Leaving tomorrow for 2 weeks in San Diego, so now is good a time as any to mint our first release and take it live.

It's been a wild 6 months of building – from the first database table to AI-powered messaging, voice calls, a dashboard, scheduling, and everything in between.

Daily Changelog | Apr 3rd - Sep 29th 2025
Sep 29th β€” Testing Availability
  • πŸ‘€ During onboarding, warn the user that kit works best with 3 or more contacts, but allow them to proceed anyway
  • πŸ›  Fixed mock data and create_schedule tools for availability update
  • πŸ›  Overhauled the error logging system for the 10th time
  • 🐞 Weekly schedule creation wasn't considering upcoming calls
  • 🐞 When a user accepted a contact's offer, the calls wasn't being added to the schedule
  • 🐞 Was erroring out when receiving a message from a phone number we've never seen before
  • 🐞 Only output json on error when hitting the api
  • 🐞 When a contact confirms their timezone during onboarding, we need to include them in the schedule
  • 🐞 The schedule checker couldnt tell the difference between a new contact and new availability being added
Sep 27th β€” Advanced Offers & Calendar Enhancements
  • ⭐️ Kit is sooooo much smarter about the availability offered to contacts
    • max 3 dates
    • max 3 times per date (this means there will only ever be a max of 3 days with 3 times each per offer (9 slots total))
    • never times already offered
    • if previous offers exist, new dates/times offered should be outside of 1 hour before/after previously offered times
    • prefer times 8am-8pm in contact's timezone
    • prefer availability slots just before, or just after currently scheduled calls
    • prefer a day of the week/time same as any one of the last 3 successful calls
    • prefer variety, times should from each of: morning (8-12pm), afternoon (12-4pm), evening (4-8pm)
    • prefer dates not offered yet
  • πŸ‘€ Override calendar default notifications so NO notification annoys users for Availability, and a 5 minute popup before calls
  • πŸ‘€ Stuck a ☎️ emoji in calendar events which are a call to visually differentiate them from availability events
  • πŸ‘€ When adjusting your availability, you don't know if there are times selected which are overflowing outside of the modal view. Now, the day is always green as long as there are times selected.
  • πŸ›  Major refactor of context, once again...
  • 🐞 Availability was showing on the calendar, but not calls
Sep 26th β€” Availability UI
  • ⭐️ Georgous new availability UI
  • ⭐️ Set and clear your availability for the week
  • ⭐️ Status labels for each contact in the contacts list
  • ⭐️ Now you can see all the hard work Kit has been doing in the scheduling modal on the dashboard
  • πŸ‘€ Calendar feed now shows availability AND calls with smart start/end times so it's not dozens of 20 minute availability events.
  • πŸ‘€ Since the beginning, I thought it would be fun if the user didn't know who their upcoming call was with. I've been fighting for it, but its just confusing. Finally labeled each call with the contact's name.
  • πŸ›  Updated the onboarding flow to use the new availability UI
Sep 25th β€” Call Creation
  • ⭐️ Let users schedule their own calls. Why not!?
  • πŸ›  Major refactor of call creation/updating. Now we create only 1 scheduled call at a time requiring a contact_id. Also can't edit/update the contact on a call (just cancel it if you want that).
  • πŸ›  When a user offered their availability to a contact, we called it an offer. But when a contact offeried theirs we called it a proposal!? That was dumb. Renamed all contact proposals to offers.
  • πŸ›  Dashboard now fetches the schedule instead of context!
  • πŸ›  Dashboard now fetches messages when the modal is opened.
  • 🐞 Getting a schedule was very busted...
Sep 24th β€” Availability bug squashing
  • 🐞🐞🐞🐞🐞🐞🐞🐞 Had gpt-5-codex do a code review of everything I refactored yesterday. Uncovered and squashed 8 bugs.
Sep 23rd β€” Unscheduled Calls -> Availability
  • πŸ›  Spent the 16th using gpt-5-codex to create a master planning doc for migrating to availability. Spent all day yesterday attempting to implement it using gpt-5-codex. Scrapped ALL of it today and started banging through it manually with trusty old claude-4-sonnet. SO much cleaner. Worked through the scheduling flow step by step, but still a lot more to do.
Sep 15th β€” Call Actions & AI Chat Testing tools
  • ⭐️ Built a tool for testing call actions like speak, play, hangup, etc.
  • ⭐️ Built a test for AI messaging
  • πŸ›  They fixed calendar event file names in MMS messages, thanks!
Sep 13th β€” Working & Dialing
  • ⭐️ Built a tool for dialing calls between me and my burner phone
  • ⭐️ Built a tool for testing workers, and it work(er)s
  • πŸ›  Added support for premium answering machine detection
  • πŸ›  Refactored the worker a bit
  • πŸ›  Made the worker less chatty, dumps an aggregate summary every 30 iterations
  • 🐞 get_logs() was timing out
  • 🐞 Answering machine detection, technically, we could receive: detection AND greeting OR one or the other
  • 🐞 Duplicate error logging
Sep 12th β€” βœ… Scheduling
  • πŸš€ Walked through every scheduling scenario imaginable, scheduling is complete until I break it again...
  • ⭐️ If a contact declines our initial outreach, let the user know
Sep 11th β€” Testing Scheduling
  • 🐞 During check_schedule, was canceling unscheduled calls when none exist
  • 🐞 When a call becomes scheduled from a proposal, current offers remained pending
Sep 9th β€” Schedules Get() 2.0
  • ⭐️ Summary sent when scheduling is complete
  • πŸ›  Updated schedules class to utilize a standardized get() method
  • πŸ›  Re-activate completed schedule if new availability/contacts were added
  • πŸ›  Queue up sms messages during scheduling instead of sending them directly
  • 🐞 Don't send a schedule completion summary if there were no contacts in the first place
Sep 8th β€” Get() 2.0 & Unit Tests
  • πŸ›  Updated users & contacts, classes to utilize a standardized get() method
  • πŸ›  Created a test for the users & contacts classes, ran and debugged em
Sep 5th β€” Testing Scheduling Dueover...
  • πŸš€ Successfully scheduled 1 call for 1 user with 1 contact, it's a start
  • ⭐️ Scrapped yesterday's schedule testing tool and created a tool for creating schedules and another tool for checking schedules
  • πŸ›  New flag for overriding do not disturb times during scheduling, I can't wait until 8am tomorrow!
  • 🐞 Update all calls()->get_full() to use calls.user_id instead of user_id to avoid ambiguity errors
Sep 4th β€” Testing Scheduling
  • ⭐️ New tool for creating/updating/deleting fake user/contact/schedule combos to test the system
  • ⭐️ Started tool for testing the scheduling flow... It's a work in progress.
  • πŸ›  Merged tests into tools
Sep 2nd β€” Back to testing
  • πŸš€ Contact onboarding tested and working
  • ⭐️ Built admin tools for sending SMS messages to Kit
  • ⭐️ Built admin tools for manually running queued tasks
  • πŸ›  Combined contact creation methods (dashboard and AI tool) to always take an array of contacts instead of a single contact
  • 🐞 Reset contact modal on page load
Aug 30th β€” Web Onboarding Done Done
  • πŸ‘€ Removed the calendar link from the dashboard
  • πŸ‘€ The green buttons during onboardingwere too much...
  • πŸ‘€ Only show required fields when adding contacts, and ability to toggle optional fields
  • πŸ‘€ Updated "Add Availability" onboarding step to show how much time they need to add
  • πŸ‘€ Add new contacts to the current schedule and trigger a check_schedule task to get scheduling flowing ASAP!
  • πŸ›  Cleaned up onboarding flow to trigger off the progress bar
  • πŸ›  Only include supported countries (+ Canada) when initializing the phone number input
  • πŸ›  Update tools()->contact_convert_to_user() to create a user with only a phone number, and confirm their information before adding them to the waitlist
  • πŸ›  Major refactor of the tools class and elimination of ai()->tools()
  • πŸ›  Don't allow duplicate contacts (user_id/phone)
  • 🐞 Typo when updating contacts
  • 🐞 Create the first schedule during onboarding, otherwise no scheudling would happen until Sunday
Aug 29th β€” Web Onboarding Done
  • πŸ‘€ Onboarding flow + progress bar start to finish
  • πŸ‘€ Default Add Contact modal's Frequency to Monthly
  • πŸ‘€ Frequency -> Keep In Touch in the Add Contact modal
  • πŸ‘€ Moved the messages button from a floater to the header
  • πŸ‘€ Fix for the burried input field in the chat modal on mobile
  • πŸ‘€ Moved calendar link creation from onboarding_link to a new GET /api/user/calendar_link route which calls tools()->calendar_link. It's triggered when the "Success" step is reached during onboarding.
  • 🐞 Adding/updating calls returning ALL calls, even in the past
  • πŸ›  Updated contacts()->get() to always return an array (and all places that call it)
Aug 27th β€” Web Onboarding Again
  • πŸ‘€ Reverted ALMOST everything I did yesterday, except the phone number validation. Instead of an independant onboarding page, we'll make the dashboard dynamic.
  • πŸ‘€ Changed "Schedule Calls" modal to "Add Availability" and changed from +/- number of calls to +/- 20 minutes of availability
Aug 26th β€” Web Onboarding
  • πŸ‘€ Onboarding via SMS with Kit is spotty... Moving to a web flow. Taking Qoder for a spin.
  • πŸ‘€ Better phone number entry/validation for contacts
Aug 21st β€” Tooling
  • πŸ›  New tools area for admin operations, like removing users from the waitlist!
Aug 20th β€” Access Granted
  • ⭐️ Forgot we needed a way to remove users from the waitlist...
  • πŸ›  Updated a bunch of methods to return false instead of throwing when no changes are made
Aug 19th β€” Mocking
  • πŸš€ Onboarding is working: phewwww
  • πŸ‘€ Let user's know how the waitlist works
  • πŸ›  Created test-onboarding-new-user.php - And it worked!
  • πŸ›  When a new user is first created, update their initial inbound message with their newly minted user_id
  • πŸ›  Ability to simulate API calls with fake data when in build mode
  • 🐞 When messaging via the dashboard, if a tool returns multiple
Aug 18th β€” Stage is set
  • πŸš€ Staging/development environment is set
  • πŸ›  Created the first test, still being tortured by how testing is going to work
Aug 16th β€” New Home
  • πŸš€ Live on build.kitcall.com!
  • πŸ›  Updated Flight to 3.17.0
  • πŸ›  Including image assets in the repo
Aug 15th β€” Quick Fixes & Testing begins
  • 🀯 Wracking my brain all day thinking through how to build proper testing tools... Documented the steps for onboarding a new user to the waitlist (at least)
  • πŸ‘€ Fix for the "jumping" page layout when a scrollbar is shown/hidden by the modal appearing/disappearing in Bootstrap 5
  • πŸ›  Don't include tools when user is on the waitlist
Aug 14th β€” Calendar Events
  • ⭐️ Now we attach calendar events to the SMS when a contact confirms a call!
  • ⭐️ Feedback tool so Kit can forward user feedback to the team
Aug 11th β€” Dynamic Prompts
  • ⭐️ Kit got smarter! Now Kit knows everything in our FAQ.
  • πŸ›  AI is not just used for messaging and tool calling. Now it can accept dynamic prompt types.
Aug 11th β€” Excepting Exceptions
  • πŸ›  Overhauling the exception handling system. No need to have a custom KitException class.
Aug 9th β€” Kit GPT-5

Don't believe a word Kit says. It's nano.

Aug 9th β€” Rescheduling
  • ⭐️ If a user cancel's a scheduled call, update the schedule and notify the contact
  • ⭐️ If a user reschedules a scheduled call, unschedule it and make a rescheduling offer to the contact
  • πŸ‘€ Encourage 3 contacts during onboarding but don't require it
  • πŸ›  System messages are now persistant
Aug 8th β€” Contacts get onboarding treatment
  • πŸš€ Contact Onboarding
  • πŸš€ GPT 5 fucking crushed this, and for free this week only ;)
  • ⭐️ New contacts()->relationship method maps user/contact relationships properly
  • πŸ›  Added a few missing timeline events to the scheduling flow.
  • πŸ›  New contact statuses of `unconfirmed`, `declined`
  • πŸ›  Contacts created as status=unconfirmed
  • πŸ›  Create contacts with user's timezone then ask/update it later
  • πŸ›  New message()->handle_post_send() helper method called after send_sms for handling success/fail of various message types asynchronously
Aug 7th β€” Scheduling code-athon
  • πŸš€ OMG GPT-5 just lanuched WHILE I was working on this... Switched, and not feeling his vibe. But the code is decent. I miss claude tho.
  • πŸš€ Bought phpstack-1507789-5789667.cloudwaysapps.com for $636.65
  • πŸš€ And got kitcall.me, kitcall.org, kitcall.app, kitcall.ai and kitcall.co for $279.84 and got kitcall.site for freeeeeeeee
  • ⭐️ New scheduling class for creating/updating schedules/offers/proposals
  • ⭐️ Cron creates schedules for every user weekly and requests call blocks (or more contacts) based on the schedule
  • ⭐️ Follow up if scheduling hasn't started
  • ⭐️ Check the schedule when new calls or contacts are created
  • ⭐️ Adds new contacts to this week's schedule
  • ⭐️ Decided to make every scheduling event a timeline viewable by the user so they know what Kit is up to!
  • πŸ›  Updated the old calls_schedule tool for our new scheduling lifestyle
  • πŸ›  Optimized the scheduling code to work in memory eliminating 60-70% of the queries
  • πŸ›  Modified phonecalls()->update() to enable bulk updates
Aug 3rd β€” Scheduling for everyone

I spent the entire day mapping out how scheduling calls will work. I've never liked scheduling calls with people because it's so complicated. So instead, I'm taking on scheduling calls between every human on the plan for all of eternity. Cool.

Decided to add the ability for contacts to propose slots back to the user as well. Just to add to the madness.

  • 🐞 Consider unscheduled calls when requesting call blocks
Jul 29th β€” Documenting & Scheduling
  • πŸš€ Mega documentation overhaul moved to /readme.md and /docs
  • ⭐️ New SMS message sent every Sunday at 10am requesting to schedule call blocks OR add more contacts
  • πŸ›  New method for figuring out which contacts you need to keep in touch with
  • πŸ›  New Cursor modes for planning, implementing and documenting
  • 🐞 Include the message_id within the context when receiving new messages via SMS OR API
Jul 28th β€” Cronning
  • πŸš€ Calls get queued up every 15 minutes
  • ⭐️ First worker task, dial the calls!
  • ⭐️ New route for manually calling crons
Jul 25th β€” Squashing demo bugs
  • πŸ‘€ Action dropdowns in the bottom of dashboard modal footers instead of buttons
  • πŸ‘€ Changed label on unscheduled calls from Contact TBD to just TBD
  • πŸ›  Added a ton of telephony webhook/response test data
  • πŸ›  Only logging the file name without the path in exceptions now
  • 🐞 call status validation didn't have the full range of statuses
  • 🐞 ai()->chat() didn't know about OpenAI's new developer role
  • 🐞 error() was literally causing a 500 error
  • 🐞 updating the contact's date_last_call properly
Jul 24th β€” Demos!
  • ⭐️ I want to start showing people Kit, so I need a couple features, like the ability to trigger a call and set the contact for a call from the dashboard.
Jul 22nd β€” Scheduling
  • πŸ›  Merged try/catch, no going back now
  • πŸ›  Added date_created and date_last_call to contacts table
  • πŸ›  Record date_last_call on contact at the end of a successful call
  • πŸ›  AI context() now gets all calls > 7 days ago regardless of status
  • πŸ›  The start of a new project overview document to help with AI context for future feature building
  • πŸ›  New /crons directory and test cron (which is working)
  • πŸ›  OpenAI is moving away from system prompts and to "developer" prompts, so updated that everywhere
  • πŸ›  Merged multiple methods into a single ai()->format_chat_request()
Jul 18-20th β€” Messaging Pipeline
  • πŸ›  Created robust testing framework, and then bailed on it... It's overkill for now.
  • πŸ›  Massive overhaul of Tools. No more calling them from both the AI class AND the Tools class. Someday AI will just call the tools directly.
  • πŸ›  Instead of trying to guide the LLM with my tool_response message, we'll include a system_message after the tool_response. WOW - this works so much better!
Jul 17-18th β€” Try, catch

A perfect example of how projects take longer than expected. It's not feature creep, it's just that I learn as I go, and I should do things right, especially now that I have AI to help me. Now that we have a queuing system, how do I know whether a task should be retried? Requires a complete overhaul of the entire system. But worth it.

  • πŸ›  Created KitException class
  • πŸ›  Updated Medoo to throw exceptions
  • πŸ›  Added an error field to the tasks table
  • πŸ›  Updated EVERYTHING to use try/catch patterns and new KitException class
Jul 15th β€” Get to work(ers)
  • πŸ›  Extended db() to offer health checks and implemented them in the worker
  • πŸ›  Wow, what a wild ride today. Got workers working, but not without A LOT of debugging and some added pressure from Claude. It literally said:

URGENT: This worker is completely out of control - it's logging database errors twice per second and consuming resources! We need to stop it immediately.

Jul 13th β€” Get in line
  • ⭐️ New Tasks class for queuing stuff up
  • ⭐️ Created API endpoints for starting, stopping and listing workers
  • ⭐️ Created worker.php V1, doesnt actually execute tasks yet
  • πŸ›  Upgraded to MariaDB 10.6 so we can use FOR UPDATE SKIP LOCKED which keeps workers from stepping on each other
Jul 8th β€” Calendar Feed
  • πŸš€ K.I.T. Calls are now showing on my calendar!
  • ⭐️ New /calendar route for adding upcoming Kit Calls to your calendar
  • πŸ›  Major update to the "calls" table. $date became $date_call and added $date_created and $date_scheduled
  • πŸ›  Don't show tool calls to users in the dashboard messages feed
Jul 7th β€” Send pics!
  • ⭐️ Kit can txt pics! (and his contact card)
  • ⭐️ You can logout from the dashboard now
  • πŸ›  Auth class now check client(s)
  • πŸ›  Dashboard now checks client(s)
Jul 5th β€” Refactoring
  • ⭐️ Admin mode activated!
  • πŸ›  MAJOR refactor of tools. Now the dashboard API endpoints and AI call tools in the Tools class
  • πŸ›  New pattern/function for required fields at api endpoints
  • 🐞 Improve success()/fail() response to ensure the HTTP response is sent and connection closed immediately when exit=false
  • 🐞 Add time_ago() function back to theme.js
  • 🐞 When a message is sent from the dashboard and fails, the message is removed from the list and added back to the input field
  • 🐞 AI context() now gets the last call for each contact AND all unscheduled calls
Jul 3rd β€” Dash enhancements - now time to party πŸŽ‡
  • πŸ‘€ Show the relationship of the caller in the call list
  • πŸ‘€ Change from 20 minute increments to number of calls when scheduling calls
  • πŸ‘€ Call status from 'Unscheduled' to 'Contact TBD'
  • πŸ›  Check if empty() everywhere instead of doing it manually
Jul 1st β€” Full Dash
  • ⭐️ Dashboard now lets you see/add and update/cancel calls!
  • ⭐️ Dashboard now lets you see/add and update/deactivate contacts!
  • πŸ›  Dates/times get converted immediatly at the edge so the system is always working in UTC
Jun 30th β€” Context aint easy...
  • ⭐️ Dashboard now lets you update your profile
  • πŸ›  context() got a major upgrade and removed phone numbers from the messages table
  • πŸ›  context() now adjustable depending on whether it's for the AI or the UI
  • πŸ›  onboard new users as waitlisted
  • πŸ›  dont reply to blocked users
  • πŸ›  considered making vendor_id unique for each message to avoid duplicate messages, but tool calls/responses both need the same id
Jun 26th β€” Kit Lives!
  • πŸš€ Mega milestone. Kit can reply via SMS.
Jun 22-26th β€” Going Neo Brutal
  • πŸš€ OMG Kit is an octopus! πŸ¦‘
  • πŸš€ MNO_PROVISIONED ~ I think that means we can send text messages now!
  • πŸ‘€ New bootstrap theme
  • ⭐️ New homepage. Mid Century Modern wasn't cutting it. Going w/ a Neo Brutalist vibe.
  • ⭐️ New blog post: Neo Brutalism
Jun 20th β€” 10DLC App
  • πŸš€ Applied for 10DLC and got approved (but still waiting on carrier approval)
  • ⭐️ Added a quick qr code generator at /qr
  • ⭐️ Added an FAQ at /faq
  • ⭐️ New blog post: Who is Kit?
Jun 17th β€” Dashboard Messaging
  • ⭐️ See your messages and send/receive messages with Kit from the dashboard!
  • ⭐️ Toasties.
  • πŸ›  Storing AI tool_responses in the database.
Jun 15th β€” Dashboard kickoff
  • ⭐️ I wasn't going to build a user interface, especially this early, but I can't do all the ai/chat testing I need via txt message, its too limiting. So today, the dashboard begins.
  • πŸ›  Auth system built. And you can request a login link from Kit.
  • πŸš€ Fired up the dashboard. You can login and out.
Jun 3-15th β€” AI building AI
  • ⭐️ Biggest feature drop to date. Kit is now a full-fledged AI assistant. Who can chat about anything, but more importantly, Kit can do things like:
    • Onboard users and collect their first set of contacts and call blocks
    • Update user's profiles
    • Add and update contacts
    • Convert contacts to users
    • Create and update calls
    • Schedule calls
    • Log feedback (with sentiment analysis)
    • COMING SOON: Answer FAQ questions
  • πŸš€ Asked Kit (OpenAI Class with no tools), "Hey Kit, what's up?" and Kit replied, "Hey! Not much, just here to help you stay in touch! 😊 How's everything with you?"
  • πŸš€ Then I asked Kit to update my location to Boulder, "Location updated to Boulder! πŸŒ„ Anything else?"
May 29th β€” Back to AI...
  • πŸš€ Architected the entire messaging process. Now AI is gunna buidl it for us.
  • 🐞 Forgot to set the vendor_id on the call when it was created. Fixed.
  • πŸ›  get_full() now returns an array of calls if no id is provided.
May 27th β€” βœ… Voice calls
  • πŸš€ Got voice calls where they need to be. Time to move to messaging/AI
  • πŸ›  Changed Kit's default voice and added ability to pass a voice id to /speak
  • πŸ›  Added ability to pause before speaking using SSML tags
  • πŸ›  Added ability for /speak to to inturrupt itself
  • πŸ›  Only record the user leg
  • πŸ›  Added a flag (state=test) for skipping the webhook switch entirely. Good for testing.
May 22nd β€” Kit Voice 2.0
  • πŸ›  Since Twilio banned us, and our new provider's XML API doesn't do what we need, I ripped out ALL the multi-vendor campatibility and simplified everything down to just supporting Call Commands.
  • πŸš€ Both the user AND the contact heard Kit speak! It's a miracle!
May 20th β€” Tooling up Kit
  • πŸ›  Mappout out allllll of Kit's tools. It's gunna be wilddly capable.
May 16th β€” Confirmed, gotta rearchitect all the voice features
  • πŸ›  Updating a voice call drops the dialed call. It's just not going to work using the XML API.
May 10th β€” Getting started with AI integration
  • ⭐️ Created AI class
  • πŸš€ Talked to Kit for the first time! Asked: "I'm Greg. Who are you and what do you do?" and Kit said: "Hi Greg, I'm Kit, your personal assistant. I help you stay in touch with friends & family by sending reminders, scheduling messages, and keeping track of special occasions. How can I help you today?. Kit's going to be tough to tame lol. Total cost: $0.0000852
  • πŸš€ Kit called our first function. I told it, "I'm Greg from Boulder, CO" and it replied with json: {"first_name": "Greg", "timezone": "America/Denver", "last_name": "Gerber"}
May 10th β€” Telephony provider FTW!
  • πŸš€ Telephony provider gave us Level 2 Approval
May 5th β€” Facelift!
  • πŸ‘€ Looks like a real website now! Still needs graphics, a logo and content that doesn't sound like Claude wrote it.
  • ⭐️ New blog post: Timeless Utility
May 1st β€” Struggle bus
  • 🐞 Struggling with dialing out via telephony provider's XML API. Pivoting to work on other stuff while I wait for the provider to reply to my support ticket.
Apr 26th β€” Platform Risk
  • πŸš€ Hopped on my first call from Kit via the new telephony provider
  • 🀬 Twilio regrets to inform me that they are unable to reactivate my account at this time
Apr 24th β€” Messaging πŸ’ͺ
  • πŸ›  Handling inbound and outbound messages swimingly from both telephony providers
Apr 21st β€” Telephony provider, decided
  • ⭐️ Integrated new telephony provider
  • πŸš€ Sent first message with the new telephony provider
  • πŸš€ Made our first call with the new telephony provider
Apr 19th β€” Redundency
  • πŸ›  Refactored and standardized all the telephoney stuff to support multiple providers
Apr 15th β€” Killing time with content
  • 🐞 STILL waiting for Twilio to unsuspend my - radio silence
  • ⭐️ Published User Journey! A massive deep dive into how I see Kit working.
Apr 11th β€” Typical
  • 🐞 Cool, Twilio suspended my account.
  • ⭐️ Published the first blog post while I wait.
Apr 9th β€” Just one of those days
  • 🐞 Struggled with the Twilio API all day... It won't tell me when a call goes unanswered!
Apr 8th β€” Sup Kit!?
  • ⭐️ Created a class for phonecalls
  • πŸš€ KIT just called me and played this hold music...
Apr 7th β€” Messaging
  • ⭐️ Added messages class (send, get)
  • 🐞 Still waiting for Twilio to approve our phone number and send us callbacks...
Apr 5th β€” Twilio day
  • ⭐️ Added a qr code to signup for KIT on the homepage
  • ⭐️ Added a tos and privacy policy
  • ⭐️ Got a phone number with Twilio! 1-715-IN-TOUCH (1-715-468-6824) but I have to wait for them to approve it...
  • πŸ›  Added webhooks for Twilio!
  • πŸ›  Added the ability to create and update users
  • πŸ›  Added the ability to create and update contacts
Apr 4th β€” We have a database
  • πŸ›  Mapped out the database structure and created the initial tables.
Apr 3rd β€” Let's get crack'n
  • πŸš€ Day 1 of buidling KIT!