One service layer, many surfaces
Thesis
A browser, a Claude agent, and a background worker should all go through the same code. Anything else drifts.
The temptation, when you add an AI surface to an app, is to give it its own path to the data. Resist it. The moment the agent endpoint and the browser endpoint run different code, they start to disagree, and the disagreement always turns up in production.
MeTime has one business-logic layer and three ways in: a REST API for the browser, an MCP endpoint for a Claude agent, and background workers for the slow work. All three delegate to the same services. When an agent answers whether I’m free on Thursday, it’s reading the exact schedule the interface would show, through the exact code the interface uses. The same pattern shows up in AI Hub, Roler.ai, and Connect Layer: thin surfaces, one service core.
The payoff is that correctness lives in one place. Encryption, validation, the categorization logic: write it once, and every surface inherits it. The surfaces stay thin, which is what surfaces should be. Agent context formats are the handoff cousin of the same idea: one contract, many consumers.
Portfolio graph
Maps how the work here connects. Open the Portfolio graph →
- Professional
- Personal
- Skill
- Writing