Changelog
What shipped.
504 changes in the last 30 days across odilelabs.com, the After Hours worker and Dusklin, taken from the commit messages as written. One person ships these; if it is not in a commit it is not here. Generated 23 September 2026.
23 September 2026
Added
- odilelabs.com Facts for assistants: llms-full.txt, site-info.json, the pay-back sentence on the price
- odilelabs.com Line check and calculator pages say what the code does
- odilelabs.com Free line check page, linked from After Hours
- After Hours worker Line check and free greeting hardened after Codex's review
- After Hours worker Free main greeting for an email address, from the paid pool
- After Hours worker Free line check: a business asks us to dial its own line tonight and email what answered
- Dusklin Facts for assistants (llms-full.txt, site-info.json) and the pay-back sentence in six languages
- Dusklin Dusklin: free line-check page; Codex translation findings applied (meaning, calques, greeting disclosure); money and tax copy by market and language
- Dusklin Processing terms after Codex's Article 28 read: instructions and unlawful-instruction duty, return or deletion at end of service, sub-processor flow-down, Article 32 to 36 assistance, audit, the real provider chain (LLM via ElevenLabs, Workers AI and Anthropic for the rescue draft, Telegram, Resend's legal name), scoped encryption, transfer safeguard signed before any caller data
- Dusklin Processing terms page (Article 28) linked from privacy and every footer
- Dusklin Dusklin: dusklin.com marketing site and dusklin.ai placeholder, one worker
Changed
- odilelabs.com A public changelog generated from the three repos' commits
- odilelabs.com Privacy: what the free line check and free greeting keep, and for how long
- odilelabs.com Home: a Free section for the four tools that cost nothing to use
- odilelabs.com Missed-call calculator on the visitor's own numbers, linked from After Hours
- odilelabs.com Privacy: say what the speech provider keeps and how long messages live
- Dusklin Privacy: the free line check's data and retention
- Dusklin Line-check page: claims aligned with the hardened worker
- Dusklin FR and NL greetings re-rendered with the recording disclosure
- Dusklin Dutch euro before the amount, even in Belgium
- Dusklin Dusklin rebuilt: six languages, phone-frame demo with a real voice line per language, product tabs (receptionist, meeting notes, automations), missed-call calculator on the visitor's numbers, animated call timeline, light-first design
- Dusklin dusklin.ai root served in place; extensionless page links
- Dusklin Dusklin copy after Codex: retention as it is, delivery path as built, roles and transfer in the privacy notice, VAT, numbers, geography
- Dusklin Solo tier: text only where the line supports it
- Dusklin The United Kingdom takes its article
- Dusklin Country names in the nav; złoty after the number
22 September 2026
Changed
- odilelabs.com Every page links to /machine, and the sitemap names every product
- odilelabs.com The static half of the site goes dark with the other half
- After Hours worker Lock change: the net goes in before the question, and every answer is waited for
- After Hours worker Lock change: three holes the cross-family reader's scratch tests pointed at
- After Hours worker Ops line: emergency exception outranks the name rule, not the consent guard
- After Hours worker Meeting notes: the summariser is asked outside the queue's lock
- After Hours worker Give the ops line the push sidecar every other agent already has
- After Hours worker Meeting notes: four defects a cross-family reader found, each reproduced first
- After Hours worker The ops line asks for the name, and the file matches the line again
- After Hours worker Bring the console, the proof surface and the voice defaults into git
- After Hours worker Record what the automations saved, as they run
- After Hours worker The console wears the same theme, and the gateway shows shape over time
- After Hours worker The site is direction A, and the console is not
- After Hours worker The console says what is working, and the page shows the work
21 September 2026
Changed
- odilelabs.com TikTok Shop: the arithmetic, the gates, and a return policy to paste
- odilelabs.com A LinkedIn banner, from the same no-dependency generator
- odilelabs.com Club posts, rewritten against what is actually live
- odilelabs.com The demos run on our own site now
- odilelabs.com Clubs: say what happens after the call, not just during it
- odilelabs.com List the free sample so crawlers and assistants can find it
- odilelabs.com Give each product its own link preview
- odilelabs.com One type scale: 22 sizes down to 8
- odilelabs.com Remove the half-pixel font sizes
- odilelabs.com A menu instead of three rows of nav on a phone
- odilelabs.com Tighten the measure: ch is not a character
- odilelabs.com Cap the measure and make the nav tappable on a phone
- odilelabs.com Tell llms.txt the API and MCP server exist
- odilelabs.com Link Guardrails from the footer, not the nav
- odilelabs.com Make /guardrails reachable
- odilelabs.com Say seven languages in the schema on every page, not just /contractors
- odilelabs.com Say seven languages on the trades pages, not three
- odilelabs.com Florida in the legal lines too, not a city
- odilelabs.com Florida, statewide -- and stop naming a city in structured data
- odilelabs.com One automation page, not two
- odilelabs.com Put the three worker-served product pages in the sitemap, and say what we sell
- odilelabs.com Put the product films on the pages that sell them
- After Hours worker How to publish the MCP registry entry
- After Hours worker The GM finds out what the club did
- After Hours worker An events desk that chases the enquiry for the director
- After Hours worker Say what would be built, not how nice it will feel
- After Hours worker A phone number of "1" is not a contact
- After Hours worker Publish one of the twenty, whole
- After Hours worker Ask for three things, not thirty-two
- After Hours worker Let a sale say which post produced it
- After Hours worker Make the worker half of the site measurable, opt-in
- After Hours worker A text that matches no call now reaches a human
- After Hours worker Same collapsed menu on the worker half of the site
- After Hours worker Same 44px nav tap targets on the worker half of the site
- After Hours worker Say out loud that the MCP server exists
- After Hours worker Guardrails in the worker footer too, so the two halves of the site agree
- After Hours worker Six money guardrails: the half the skills never had
- After Hours worker Fast ask path, without logprobs through the binding
- After Hours worker Reapply "The landing ask box answered in 4.4s; now it answers in one small round trip"
- After Hours worker Revert "The landing ask box answered in 4.4s; now it answers in one small round trip"
- After Hours worker The landing ask box answered in 4.4s; now it answers in one small round trip
- After Hours worker Sell something: The Guardrails, 14 skills, $29, behind Stripe
- After Hours worker One clock, one design system, and three things nothing was showing
- After Hours worker Accept the Zoom links people actually paste
- After Hours worker One person, one lead row
- After Hours worker A call now shows on the console while it is happening
- After Hours worker Leads you can open, with a status that sticks
- After Hours worker The queued card was printing every task on top of itself
- After Hours worker Sign in was a dead end: /app?s=1 was routed to nobody
- After Hours worker Footer says Florida, not a city
- After Hours worker A trailing slash was a 404 on every page this worker serves
- After Hours worker Show the films on /automations and /notes, and let the policy allow them
- After Hours worker Put the queue of owed work on the dashboard
- After Hours worker Send who converted, not just that someone did
- After Hours worker Read the Stripe fields the reconciliation actually writes
- After Hours worker Show what the ads actually cost, next to who actually paid
- After Hours worker Keep the occurrence key that tells a rescheduled meeting from the same one
- After Hours worker Give the owner console the same dashboard, and stop it waiting too
- After Hours worker A real dashboard on the master console, drawn from what is actually there
- After Hours worker Read the opt-in field, not the truthiness of the object holding it
- After Hours worker Charge the lobby time Recall actually recorded, whatever order events arrive in
- After Hours worker Put every system's health on the web console
- After Hours worker Push the cold-email queue to KV so the console can read it
- After Hours worker Let the console send mail as odilelabs.com
- After Hours worker Give the console a Leads screen, because nothing read them
- After Hours worker Make the Studio a conversation instead of a page of questions
Fixed
- After Hours worker Stop printing a confident zero for a number nobody could read
- After Hours worker Stop a dead bot's retried webhook from killing the attempt that replaced it
- After Hours worker Stop the master console waiting on 75 reads one at a time
20 September 2026
Added
- odilelabs.com Add /creators and link it from the home and automation pages
- After Hours worker Ship the brief's first question with the page
Changed
- odilelabs.com Sell the text back: a hang-up stops being a dead end
- odilelabs.com Put the ask box on the landing page itself
- odilelabs.com Sell Automations on the homepage, not only the phone line
- odilelabs.com Homepage: lead with the work, not with one product for one trade
- odilelabs.com Nav: Automations leads the product line
- odilelabs.com Clubs: drop the same outdated walkthrough video
- odilelabs.com After Hours: drop the outdated walkthrough video
- odilelabs.com Homepage: four products, one sign-in, one balance
- odilelabs.com Nav: Meeting notes joins the product line
- odilelabs.com Nav: Sign in goes to the app home, not straight to the phone-line console
- odilelabs.com Sitemap: list /drafts and /automation
- odilelabs.com Disclose the speed audit, and say what the email field is for
- odilelabs.com Make the homepage fast where Google measures it: 73 to a median of 99
- odilelabs.com Say the audit is instant, because it is now
- odilelabs.com Say the same three things the menu says
- odilelabs.com Drafts appeared twice in its own footer
- odilelabs.com Rename Creator Studio to Drafts: two products cannot share one name
- odilelabs.com One navigation, not five
- odilelabs.com Put Make in the nav: the product was live and unreachable
- After Hours worker Receive the replies we have been asking for since September
- After Hours worker Say that After Hours texts the caller back
- After Hours worker Send the person with no photos somewhere that helps
- After Hours worker Say on the Studio's front page that there are three ways in
- After Hours worker Let the products that exist describe themselves
- After Hours worker Answer what we would build, from what someone types
- After Hours worker Catch the marketing site charging a price no source names
- After Hours worker Let Odile ask about the build without giving ours away
- After Hours worker Keep gpt-oss on the recaps: Workers AI leads the chain now
- After Hours worker Automations can be bought, not only asked about
- After Hours worker The line stops quoting prices; the website keeps them
- After Hours worker A page for real estate, because one of them rang us
- After Hours worker Scope the creator-intake guard to the page, now that the nav lists every product
- After Hours worker Automations: an offer priced against what the market actually charges
- After Hours worker Four pictures a credit, and a balance of nought that says so
- After Hours worker A picture from a sentence: the second way into the Studio
- After Hours worker A developer page, because the Developers card led into the notes app
- After Hours worker One offer for a new account, and a receipt that says what was bought
- After Hours worker A page that sells Meeting notes, at the prices the checkout charges
- After Hours worker Migrate a session made before the cookie moved, in one hop, without asking anyone to sign in again
- After Hours worker The sign-in is the account's, not the Studio's: scope its cookie to the whole site
- After Hours worker An app home, and a way to reach it
- After Hours worker Voice lines: record what each one actually used
- After Hours worker ZAP: scan the new surfaces too (minutes, recipients, keys, /v1), minus the three calls that spend money or send a real bot
- After Hours worker Meeting Notes: buy minutes, 30 free minutes for a new account, and a saved list of people who always get the recap
- After Hours worker Console: give the content area its padding back; Meeting notes in the rail for Tolga's sessions
- After Hours worker ZAP accepted list and docs: what the strict pages changed, and why /owner keeps media-src https: (measured preview hosts)
- After Hours worker Strict CSP for the owner console
- After Hours worker Strict CSP for the agent consent screen and the Creator Studio; the too-short alert states its charge
- After Hours worker Meeting Notes: every minute on the call is charged; Teams' short links are accepted
- After Hours worker Meeting Notes: a 'no recap' alert is not shown once the notes exist -- decided in the view, so records written earlier are covered
- After Hours worker Meeting Notes: gpt-oss-120b writes the fallback recap; a skipped engine is not hidden; a stale alert goes
- After Hours worker Meeting Notes: a present Anthropic key is not a working one -- fall back to Workers AI, and say why a recap failed
- After Hours worker Meeting Notes: cap the owner API body on bytes read; the recap button saves before it sends
- After Hours worker Meeting Notes: recaps switched on, a strict CSP for the page, and "too short" says so
- After Hours worker ZAP: a signed-in pass that is really signed in, and a gate that knows what is already known
- After Hours worker DAST with OWASP ZAP for the Meeting Notes routes
- After Hours worker The switch's label says On once it is on
- After Hours worker Point the calendar callback at Recall's regional address for this workspace
- After Hours worker Meeting Notes: what two independent reviews found, fixed
- After Hours worker Meeting Notes on Recall v1.11: a link or a calendar event in, a transcript out
- After Hours worker Odile Meeting Notes in the worker, dark until a provider exists
- After Hours worker Turn the agent connection on: OAUTH_KV and its three routes
- After Hours worker Measure purchases by where the buyer came from, from Stripe, without new storage
- After Hours worker Let a customer's own agent work their Make account, as them and only them
- After Hours worker Email the speed audit, now that this worker can send mail at all
- After Hours worker Rate-limit the endpoint that spends money, not just the form
- After Hours worker Put forwarding and billing in the console rail
- After Hours worker Serve one menu, and give /greetings a way back to the site
- After Hours worker Mac renders first, the droplet takes what is left
- After Hours worker Render agent: keep localhost reachable, or DNS dies
- After Hours worker Harden the render agent before it ever sees a stranger's file
- After Hours worker Runbook: retention rules are set, and the last step is credits
- After Hours worker Bind the Google sign-in state to the browser that started it
- After Hours worker Creator Studio: the review findings that were real, fixed
- After Hours worker Creator Studio "Make": raw footage in, platform-ready files out, paid in credits
- After Hours worker Push: a locked line is never regenerated
- After Hours worker Every receptionist's first line is the disclosure and the recording question
- After Hours worker Studio: paragraph breaks in generated drafts, and no edge rewriting of pages
- After Hours worker Creator Studio API: generate, publish, verify and withdraw an approved page
Fixed
- After Hours worker Stop the /app route from eating the /apps page
- After Hours worker Fix what the first real agent journey found
- After Hours worker Stop handing players a recording that does not exist
- After Hours worker Fix what the review found in today's changes, and defer gtag to after paint
- After Hours worker Actually run the speed audit instead of promising an email
19 September 2026
Changed
- odilelabs.com [verified] Publish quote-first business automation service inquiry
- odilelabs.com [verified] clarify demo request and surface live phone demo
- After Hours worker [verified] Add automation intake queue and repair forwarding responses
- After Hours worker [verified] connect enterprise status and owner forwarding checker
18 September 2026
Added
- odilelabs.com Add /demo: the demo-gated arm, with no price on it
Changed
- odilelabs.com Link Odile Greetings from the homepage, footer, sitemap and llms.txt
- odilelabs.com Put the OpenAI Ads pixel on /demo, the ChatGPT campaign's destination
- odilelabs.com Sitemap: /privacy lastmod from git
- odilelabs.com Send security headers on odilelabs.com; disclose the OpenAI pixel
- odilelabs.com Bring seven stale sitemap dates back into line with git
- odilelabs.com Make the site legible to AI search, and let it announce its own changes
- After Hours worker Payment status survives the line purchase; reconciler reads paid_at+subscription
- After Hours worker Signup links the owner's email for Google sign-in automatically (adds to the chooser list for a second business)
- After Hours worker Ops line: sells Odile Greetings; base is West Palm Beach (registered office St. Pete)
- After Hours worker Odile Greetings: phone greeting packs, $29 one-off, paid via Stripe Checkout
- After Hours worker Ops line: state the company's real city
- After Hours worker Ops line: informative per business, books only Odile setup calls
- After Hours worker Take demo requests through the waitlist path, with the phone number
17 September 2026
Changed
- odilelabs.com Lead with one product, in the register a buyer expects
- odilelabs.com Collapse a directory index in the same hop as everything else
- After Hours worker Close the defects the overnight sweep found in the worker
- After Hours worker Cancel the Reviews subscription when the Reviews customer is refunded
Fixed
- odilelabs.com Stop promising a cap of fifty that nothing enforces
- odilelabs.com Stop promising review replies we cannot post, and close the third duplicate
- After Hours worker Stop the solo page promising a cap of fifty the coupon does not enforce
- After Hours worker Stop claiming a fictitious name on the five worker-served pages
- After Hours worker Correct the two things stripe.json still says about money that are not true
16 September 2026
Added
- odilelabs.com Add the two images an RCS sender registration requires
Changed
- odilelabs.com Keep the side projects out of the index
- odilelabs.com Give Google a sitemap to crawl
- After Hours worker Find the subscription on an invoice Stripe no longer shapes that way
- After Hours worker Hear it when money actually arrives
- After Hours worker Let a customer cancel without emailing anyone
- After Hours worker Buy the number when a card lands, not when a form is submitted
- After Hours worker Send Google one redirect URI, not one per hostname
Fixed
- odilelabs.com Stop claiming a fictitious name that is not registered
- odilelabs.com Stop serving every page at two URLs
- After Hours worker Stop counting a free trial as a paying customer
- After Hours worker Stop the welcome email selling a trial the customer already started
- After Hours worker Fix what the cross-check found on its first working run
15 September 2026
Changed
- odilelabs.com Send every page to one address, and name it on the page
- After Hours worker Odile Labs is open 24 hours, because that is the product
- After Hours worker Disclose the AI on the guest path too, and put it before the consent ask
- After Hours worker Never tell a prospect their line is dead when we mistyped the number
- After Hours worker Report an unreachable number as its own finding, and stop inflating the headline
- After Hours worker Prove the missed call on the prospect's own line
- After Hours worker Open in the caller's language, decided before the agent speaks
- After Hours worker Widen the funnel to a fortnight, and cap the lines that spend the pool without earning
- After Hours worker Say we are an AI before asking to record
- After Hours worker Let the phone answer the questions the text line already could
- After Hours worker Publish one read-only state blob so a phone can ask the business anything
Fixed
- After Hours worker Fix what a cross-family review found in one night's work
14 September 2026
Changed
- odilelabs.com Say every call is answered, describe Odile Labs as an operator, and put the Organization schema on every page
- odilelabs.com Let assistants find Odile Labs by any spelling
- odilelabs.com Report conversions to Google Ads, disclose it, and host the hot-honey sample
- odilelabs.com Count a tap on the phone number as a call, everywhere
- odilelabs.com Lead the contractors page with the one action anyone has ever taken
- odilelabs.com Give the machines something to read: JSON-LD on the three real pages
- odilelabs.com Let a contractor hear it in the browser, on their own trade
- odilelabs.com Retire FOUNDER6, publish the pilot, and give the trades a page
- After Hours worker Only rescue a call somebody could still ring back
- After Hours worker Rescue a callback the receptionist promised and never saved
- After Hours worker Let an express signup leave with the product the leave-behind promises
- After Hours worker Asking for a website and reading it are two turns
- After Hours worker Raise the provisioning cap, cap call duration, and stop the welcome email being eaten by the cold-outreach lock
- After Hours worker Bind a tool call to the agent that made it, not to its URL
- After Hours worker Reuse a spare number before buying another one
- After Hours worker Move the prices off the agent and into the record
- After Hours worker Guard the numbers, not the character count
- After Hours worker Refuse a push that would delete what nothing regenerates
- After Hours worker Give electricians and roofers a receptionist that knows what to ask
- After Hours worker Never render a discount code the checkout will refuse
Fixed
- odilelabs.com Stop publishing a phone number we do not own
- After Hours worker Stop the receptionist inventing dates, promising callbacks it never saved, and hanging up on a yes
- After Hours worker Actually apply the dry-run guard that 19a97a9 claimed to
13 September 2026
Added
- odilelabs.com Add /trust: what the receptionist may not do, and what is checked every morning
- odilelabs.com Add the X header, and the HTML it was rendered from
- odilelabs.com Add the 120x120 mark Google's OAuth consent screen wants
- After Hours worker New agents switch language silently (pre_tool_speech off)
- After Hours worker New agents get a language_detection tool that switches only on a whole sentence
Changed
- odilelabs.com missed-calls: send a landing event and the right data type on the phone CTA
- odilelabs.com Drop the invented "$1,162 in bonuses" stack from /offer
- odilelabs.com Name the pipeline on /afterhours: answers, works out the need, does one of three things
- After Hours worker Charge the pilot on day one, and stop quoting a code that no longer works
- After Hours worker Sign in with Google on the phone, and stop quoting prices the checkout will not honour
- After Hours worker An explicit request for a language is a switch however short; the stand-in model is named as such
- After Hours worker Lily on every demo line and Odile Labs (voice_id on the records, so pushes keep her)
- After Hours worker Text the owner the moment a stranger's call starts (opt-in per business)
- After Hours worker ask_claude: Groq stands in while the Anthropic key is over its monthly limit
- After Hours worker GET /ops/ask/probe: the ask_claude answer without a call, for proof and for the shell
- After Hours worker ask_claude answers on the call: the worker asks Claude with the live board, and queues only when it cannot
- After Hours worker The line dialling Tolga is an owner call: good morning first, the details after
- After Hours worker The digits rule names the caller's language first, so the sentence stays in it
- After Hours worker Prices as digits plus the word for dollars, and no tag about a language switch
- After Hours worker Money is dollars in every language
- After Hours worker A one-word thank-you in another language is not a language switch
- After Hours worker Never invent a URL, and a push-all route so a rule change reaches every live agent
- After Hours worker Keep the Python twin of CONSENT in step with the consent backstop
- After Hours worker Ask for recording consent even when the caller talks over the greeting
- After Hours worker Keep 'WRITE in <language>' in the reworded rule
- After Hours worker Say the language rule so a model cannot read it as English-only
- After Hours worker Count a call on the ElevenLabs path
- After Hours worker Keep call recordings for the 90 days the privacy page promises
- After Hours worker Ask Google for the scope a free/busy lookup actually needs
- After Hours worker Pin the numbers the sales line is allowed to say, and stop it confirming bookings it has not made
- After Hours worker trial_started now means somebody paid, not that a page loaded
- After Hours worker Ask to record in the language the greeting is spoken in
Fixed
- odilelabs.com Stop telling the reader what happened to them, and show the tier they can actually buy
12 September 2026
Added
- After Hours worker Add a five-field way in, for traffic that arrived thirty seconds ago
Changed
- odilelabs.com Install the ChatGPT Ads pixel on the landing page
- odilelabs.com A square ad image built for a thumbnail, not a banner
- odilelabs.com Give the ad slot a square image, and let the page be crawled
- odilelabs.com Say only what the product is measured to do
- odilelabs.com Give Google a favicon it can actually show
- odilelabs.com Point the ad CTAs at the short form
- odilelabs.com Link the trades tier, and add a landing page paid traffic can convert
- After Hours worker One voice model that speaks the languages we sell
- After Hours worker Report the conversion server-side too, deduped against the pixel
- After Hours worker Fire trial_started where a trial actually starts, and let the pixel load there
- After Hours worker Give every new agent the confirm-before-promising rule, and drop a duplicate key
- After Hours worker Carry the real icon in the worker's shell too
- After Hours worker Carry the trades link in the worker's nav and footer too
- After Hours worker Route odilelabs.com/solo, so the trade link is short enough to say out loud
- After Hours worker Never text ourselves: the missed-caller cron was talking to its own lines
- After Hours worker Sell After Hours to sole traders at $29, on its own tier
- After Hours worker Step a calendar day, not 24 hours, when reading the day keys
Fixed
- After Hours worker Stop counting demo fixtures as signups in /ops/funnel
11 September 2026
Added
- After Hours worker Add a visits log for prospects met in person
Changed
- odilelabs.com Take the Research page off the public site
- odilelabs.com Ignore .env before this repo goes to GitHub
- odilelabs.com The example call bubble is no longer a link to an empty console
- odilelabs.com Pause the club offer: no price, no checkout, not in the nav
- odilelabs.com Show the club price clubs actually pay in the share preview
- After Hours worker Drop the Research link from the shared site shell
- After Hours worker File the owner's own calls under odile-labs so they reach his console
- After Hours worker Never resolve a tool-config entry as a business; give odile-labs its agent id
- After Hours worker Tell the owner about a hang-up, not only the caller
- After Hours worker File ops-line calls under odile-labs, so they reach a console and an owner
- After Hours worker Ignore .env before this repo goes to GitHub
- After Hours worker Remove the Coban Barber demo
- After Hours worker A probe is not a call
- After Hours worker Tell the sales line to actually use site_read
- After Hours worker Let the sales line read a caller's own website while they are on it
- After Hours worker Gate /signup before it spends, not after
- After Hours worker Delist the club offer from the nav
- After Hours worker Make bookings actually work, and let the console turn them on
- After Hours worker Keep outbound SMS in GSM-7 so the 7 AM briefing can actually be delivered
Fixed
- After Hours worker Stop the signup form shipping a half-filled Saturday
- After Hours worker Stop the GSM-7 fold from gutting names
10 September 2026
Added
- odilelabs.com Ship the Commish page, the ad creatives, and the analytics disclosure together
Changed
- odilelabs.com Make every page agree: one nav, seven languages, and no impossible arithmetic
- After Hours worker Remove the DTMF test rig from the production API
- After Hours worker Send the real conversation id with every tool call
- After Hours worker Read spoken numbers back, and narrow a rule I wrote too broadly
- After Hours worker Move the club line off gpt-4o-mini, and stop it qualifying members as leads
- After Hours worker Switch call logging on — it was off for every business except the ops line
- After Hours worker Protect the recording disclosure from being talked over
- After Hours worker Give worker-rendered pages a share card
- After Hours worker Point the checkout at the coupon that is actually active, from one constant
- After Hours worker Make every console rail item land on a real page
- After Hours worker Give worker-rendered pages the same nav and footer as the marketing site
- After Hours worker Count calls answered on the line in "calls today"
- After Hours worker Show who called, the outcome and the summary on the overview's call rows
- After Hours worker Widen the GM monitor, add a Weekly/Monthly range, and close the layout gap
- After Hours worker GM monitor: weekly or monthly, and use the width the page already had
- After Hours worker Make call recordings playable: route /listen on the console's own origin
- After Hours worker Send security headers on every response, and Secure the logout cookie
- After Hours worker Set up HawkScan against a localhost-over-https target, with a verified spec
Fixed
- After Hours worker Stop /el/init rewriting a club's agent into a software studio, and remember the caller
- After Hours worker Stop the receptionist talking over the caller
- After Hours worker Stop the console changing tenant, and fix three dead ends in it
- After Hours worker Fix what today's audit found, and make the checks able to fail
9 September 2026
Changed
- After Hours worker Expose the one number the campaign turns on
- After Hours worker Sign in with Google for the owner console
8 September 2026
Added
- After Hours worker Add the screen-site intake line
Changed
- odilelabs.com Publish the registered agent address and a statewide service area
- odilelabs.com Route both marketing checkout buttons through /signup
- odilelabs.com Odile Labs gets a mark: an aperture with a voice leaving it
- odilelabs.com Public SMS pages the carriers actually read
- After Hours worker Announce recording in every greeting a caller can reach
- After Hours worker Confirm before removal, and meter the plan allowance per business
- After Hours worker Make the demo removal permanent, rate-limited and honest
- After Hours worker Make the reviews demo honest about what it is and what Places returns
- After Hours worker Sign-up form carries A2P-compliant SMS consent; owner texts carry STOP
Fixed
- odilelabs.com Stop showing the same button twice
7 September 2026
Added
- odilelabs.com Add the Impact site-verification tag
- odilelabs.com Add the tracker every video has been promising
Changed
- odilelabs.com audit: track the reachable-score script used for rebuild prospecting
- odilelabs.com copy: the founding offer is the first 50 shops, not the first ten
- odilelabs.com Turkish page: go through /start, not the raw lira link
- odilelabs.com Trial is 14 days, everywhere
- odilelabs.com Turkey: take payment in lira
- odilelabs.com Turkey: 4.990 TL
- odilelabs.com Draft: Turkish page for the hotel line (NOT deployed)
- odilelabs.com Say the receptionist is theirs to change
- odilelabs.com Offer page: six languages, and say it follows a mid-call switch
- odilelabs.com Restore the 30-day trial I wrongly deleted, and cap the plan
- odilelabs.com Offer page: drop a competitive claim we cannot stand behind
- odilelabs.com Homepage demo, mobile nav, and two claims that did not match the product
- odilelabs.com Homepage rebuilt; hours to 24h; Plate withdrawn from the site
- After Hours worker SMS behind the A2P switch: Messaging Service routing, missed-caller texts, setup text
- After Hours worker el/init: keep the guest caller's full number on the call record
- After Hours worker Owner API: a shop can choose the receptionist's language
- After Hours worker owner API: JSON for the iPhone app, a voice switcher, and honest call attribution
- After Hours worker agent: the public line can confirm OdileUSA L.L.C., and quotes 14 days
- After Hours worker gitignore: keep call recordings out of the repository
- After Hours worker stripe: record the FOUNDER re-issue, the friends code, and two API traps
- After Hours worker signup: rate limit the one route that spends money, and cap it daily
- After Hours worker lines: verify provisioned numbers, and add the first release path
- After Hours worker reconcile: count trialing and past_due subscriptions as live
- After Hours worker Master really does get the business picker now
- After Hours worker start: a trailing slash should not 404
- After Hours worker Price by country, so the Turkish rate stays Turkish
- After Hours worker Signup: 14-day trial, and stop calling it a free month
- After Hours worker Record the TRY price and link
- After Hours worker Turkey: the hotel's number stays theirs, and no URL goes to a +90
- After Hours worker Give shops a calendar choice, including one we host
- After Hours worker Calendar: notice, buffer and a daily cap, per business
- After Hours worker Mint the caller link that /caller now requires
- After Hours worker Russian and German at signup, and a hotel pack
- After Hours worker Russian formality, and a guard so the next language cannot be missed
- After Hours worker Follow every language switch, and write the message the owner can read
- After Hours worker Turkish: the packs matched nothing, and the agent was being familiar
- After Hours worker Signup: state the call allowance with the price
- After Hours worker Skills: fix the routing, the promises, and the advice that was wrong
- After Hours worker Site CSS: define the three variables the new pages already use
- After Hours worker Waitlist: name the app the person actually signed up for
- After Hours worker Close /caller/lookup, and five more findings from the review
- After Hours worker Dental pack: send emergencies to 911, stop telling callers to come in
- After Hours worker Receptionist: trade skills, starting with tires
Fixed
- After Hours worker Fix the rest of the review: dead links, wrong times, open CORS, KV burn
6 September 2026
Changed
- After Hours worker Make both Business Profile checks say the same thing
- After Hours worker Reviews: a zero quota is its own outcome, not approval or refusal
- After Hours worker gbp-connect: send a User-Agent, Cloudflare 403s urllib's default
- After Hours worker Connect Business Profile over localhost: the client is a Desktop app
- After Hours worker Reviews: the approval check could report a confident wrong answer
- After Hours worker Reviews: a real check for Business Profile API access
- After Hours worker Wire GA4, and add the Business Profile client
- After Hours worker Reviews: fall back to Workers AI when Anthropic refuses
- After Hours worker worker: GA4 on the public pages, and a named export so the suite can drive the app
- After Hours worker booking: a Square Appointments connector beside the Google one
- After Hours worker booking: the caller gets their own confirmation text
5 September 2026
Added
- odilelabs.com Add a privacy policy and terms of service
- After Hours worker New signups get book_appointment too
Changed
- odilelabs.com E1: Reviews as a feature of After Hours, staged on a preview worker only
- odilelabs.com Walkthrough video on the After Hours page
- odilelabs.com Odile Reviews card on the home page
- odilelabs.com Forwarding help page
- odilelabs.com Plate preview page at /calories
- odilelabs.com Forms post to odilelabs.com/signup and /waitlist
- odilelabs.com $199 list price, founding-shops offer, new checkout link
- odilelabs.com attach-domain.sh: bind odilelabs.com to the worker once the zone exists
- odilelabs.com afterhours: remove the private call recording from the public page (name + number spoken in it)
- odilelabs.com workers_dev route
- odilelabs.com Odile Labs: studio site — After Hours (live, demo call, signup, Stripe), calorie counter + recipes waitlist, about, contact
- After Hours worker B2/B3/B4: heartbeats, Stripe reconciliation, and no silent worker errors
- After Hours worker ElevenLabs tools and init webhook on api.odilelabs.com
- After Hours worker api.odilelabs.com custom domain; signup tool callbacks use API_BASE; Stripe webhook moved
- After Hours worker Demo Pizzeria: overflow/catering receptionist that never takes the order itself; online-ordering link in prompts
- After Hours worker review reply prompt: no instruction echo
- After Hours worker Review replies in the reviewer's language; hotel tone
- After Hours worker wrangler: vars under the real [vars] header
- After Hours worker wrangler: Stripe links belong in [vars], not under the last table
- After Hours worker Reviews digest + subscribers endpoints
- After Hours worker Odile Reviews: live demo from Places reviews, $19/mo trial signup, Stripe webhook for rev_ references
- After Hours worker bizidx index; /ops/funnel never lists
- After Hours worker /ops/funnel for the supervisor; bookings counter
- After Hours worker Turkish hotel demo (Demo Otel): Turkish primary, English/German/Russian presets; primary-language support in both agent builders
- After Hours worker Zero-touch signup: Twilio number bought and attached, welcome email with forwarding codes queued, Stripe checkout tied to the shop, webhook marks paid/cancelled
- After Hours worker Receptionists speak Spanish, Portuguese, French and Turkish: language presets + detection tool; signup picks languages
- After Hours worker Receptionists save the message as soon as they have a name and number
- After Hours worker Plate: current text model, truncation repair, step-labelled errors
- After Hours worker Plate: calorie estimate endpoint (Claude when keyed, else Llama 3.2 Vision + Llama 3.3 JSON mode), rate-limited
- After Hours worker signup test expects four tools
- After Hours worker book_appointment on every receptionist agent and the Odile Labs line
- After Hours worker Booking: check_availability answers from Google free/busy and book_appointment creates the event; message-taking stays the fallback
- After Hours worker Brand paths on odilelabs.com (/signup, /waitlist, /partners) as zone routes; workers.dev kept on
- After Hours worker KV: index keys instead of list ops for questions and answers (free tier: 1,000 list/day, exhausted 5 Sep 06:23 UTC)
- After Hours worker After Hours is $199/month; FOUNDER promo (first 10 shops, half price for life); old $99 link retired
- After Hours worker Trade demo receptionists: demo-roofing (new) and demo-hvac built on ElevenLabs
- After Hours worker Odile speaks with Nova's voice
- After Hours worker Odile speaks with the receptionist voice (Mark)
- After Hours worker Fail-closed gate: receptionist by default, ops persona only from /el/init
- After Hours worker Gate the public line by caller ID
- After Hours worker /waitlist for the Odile Labs apps
- After Hours worker partners: back link
- After Hours worker /partners: wholesale-account requests from odilewholesale.com (KV + Telegram, honeypot)
- After Hours worker Odile: emails held for business hours unless told 'now'
- After Hours worker actions: immediate-consistency index for the pending list
- After Hours worker Odile acts: action mailbox (pending -> /yes on Telegram -> Mac executes -> result), six tools (email, event, reminder, note, lead status, lookup), unique ids
- After Hours worker Jarvis is now Odile: female British voice (Alice), name and greeting; Telegram label
- After Hours worker Jarvis: round numbers for speech, local time
- After Hours worker number moved from the barber demo to Jarvis
- After Hours worker Jarvis: /ops mailbox (board push, question queue, answers -> Telegram), four read-only agent tools, jarvis_setup.py
- After Hours worker stripe: plan + payment link created; mode read from the key prefix (restricted keys lack Balance)
4 September 2026
Changed
- After Hours worker scripts/stripe_setup.py: product, monthly price, payment link with a 30-day trial (key from a file)
- After Hours worker /signup: shop owner form -> business in KV -> ElevenLabs agent built by the worker -> talk link; Telegram to Tolga; KV businesses override the bundled file
- After Hours worker take_message forwards to the owner: Twilio SMS + Telegram, non-fatal, result tells the agent what to say
- After Hours worker coban-barber: Twilio number attached (phone_number_id recorded)
- After Hours worker coban-barber: demo record for Marko's shop (typical barber hours/services, marked to confirm), agent built
- After Hours worker scripts/elevenlabs_phone.py: attach a Twilio number to a business's agent (creds from files, never printed)
- After Hours worker check_availability: move a past date to the next same weekday
- After Hours worker agent prompt: handle 'anytime' without re-asking for a date; never repeat a question
- After Hours worker SETUP: ElevenLabs path
- After Hours worker ElevenLabs Conversational AI path beside Vapi: /el/<tool> webhook route, shared tools module, agent setup script, simulated-call check
- After Hours worker Count a call once per id, not once per assistant-request
- After Hours worker SETUP.md: the dashboard-side checklist, with the values to paste
- After Hours worker gitignore: keep .env out of history
- After Hours worker voice-agent: Vapi receptionist backend on Workers + KV
Products: After Hours · Meeting notes · Automations · Dusklin.