Updates

The build log for Ajar, written as it happens. What shipped, in plain words, newest first. No roadmap promises, only things that exist.

The market moved to where the prices are

We measured twenty UK dental and physiotherapy sites, one city each, queries free of price words. Eighteen publish a visible price — all ten dental practices, eight of ten physios — yet none put a price anywhere a machine reads reliably, and none have anywhere an assistant can send a request. Four serve a real llms.txt. That is the sharpest version of the gap this product closes, so outreach turns to UK service businesses that already publish prices, and two new pages state the finding plainly: for dentists and for physios. Under the hood, the surface grew to seven MCP tools: every service now has its own page and a get_service tool, with a parity test so the published tool count can no longer drift from what the endpoint serves. Claim links started counting views, so sent, viewed, claimed now reads off one table. And the Stripe rail is built, tested and flag-gated, waiting on an account rather than on code.

The loop closes: from email to live page

The homepage email capture now goes somewhere. Leave your address and the worker drafts a page from what is already public about your business, on an hourly cron, no human in the assembly line. Drafted mails land in an outbox that drains to real email, so the preview actually reaches you. Tier provisioning landed in the tenant state, and the /discover directory went public: every claimed business, listed and linked. A daily metrics snapshot now records whether any of this is working.

Counting traffic, closing holes

Agent traffic ingest went in: an authenticated route feeds per-domain visit counts into the operator dashboard, which is where they stay. Then a security review of our own endpoint, followed by fixes the same evening: the token secret fails closed instead of open, request bodies are capped, writes are rate-limited, and the responses carry proper security headers. The page generator also got stricter about what counts as a service name after testing against real business websites.

Live on ajarhq.com

The site went up at ajarhq.com, in English and Swedish, and the endpoint moved to agents.ajarhq.com with data held in the EU. Compliance gates went in before anything else could: quote requests are held for owner approval, nothing is sent on a business's behalf without a yes. The claim flow works end to end, an electrician demo tenant shows the whole thing running, and a weekly agent-traffic report started keeping score.

Day one

Ajar exists. The first commit had the endpoint agents talk to, a generator that drafts a structured page from a business's public web presence, and the claim flow that hands the page to its owner. Same day, the first full agent transaction loop ran: an AI assistant read a page, asked a question, and placed a request that waited for approval. Small, but the whole idea in one pass.