Clients.Express
The preview of the site may differ from the current version. All information is provided for presentation purposes only and may be partially or completely outdated.
Development of a B2B SaaS platform Clients.Express for automating appointment scheduling and billing in the service industry with built-in AI agents and Telegram integration, where I served as the architect and sole developer.
- Year
- 2026
- Website
- clients.express
- Technologies
- AI, API integrations, SaaS, Web application
- Role
- Architecture, development, product — solo
- Format
- My own product, B2B SaaS
- Timeline
- 37 days to production
- Backend
- PHP 8.4, no frameworks
A Solo Marathon: From init to Production
March 25, 2026, first commit — a laconic “init”. 37 days later — a live B2B SaaS in production taking real payments. Between those two points: 373 commits, one developer and not a single framework.
Clients.Express is a platform for service businesses: barbershops, clinics, salons, auto shops, hotels, gyms. Under one roof:
- Client base — a full CRM with tags, notes and custom fields;
- Online booking — a calendar with five modes and conflict checking;
- Team and roles — owner, manager, employee, ownership transfer in one click;
- Public pages — a ready company landing page on its own subdomain;
- Billing — plans, client wallet, promo codes, payments via Monopay;
- An AI agent in Telegram — books an appointment from the phrase “book me with Olia tomorrow afternoon”.
Exactly what I build for clients as web apps and portals and AI agents — except this time the product is my own. Below: what it is made of — the numbers, the palette, the stack, the commit history, and the parts that broke against reality.
The Marathon in Numbers
37
days to production
March 25 – May 1, 2026
373
commits
Ten a day on average, solo
62
core modules
Custom architecture — I can explain every module
3
AI providers
OpenAI, Claude, Gemini — with token and cost accounting
Why From Scratch, Not on Something Ready
For the first few days I honestly tried the “fast” route — Laravel + Filament. In a demo it is magic: one command and the admin panel is there. Then you need a non-standard billing flow, and you are no longer writing features — you are negotiating with someone else’s framework.
So the final stack is brutally simple: plain PHP 8.4 with no frameworks, Twig, MySQL over PDO, and a dozen hand-picked Composer libraries. My own router, my own admin, my own data model. No inherited technical debt — 62 core modules, and I can explain every one of them.
The code was written by two AI assistants — Codex and Claude Code — human-in-the-loop: the architecture, the module boundaries and the contracts stayed with me. AI accelerates the person who already knows what they are doing.
Palette
Typography
Three Features I Am Proud Of
The product has more than fifty features, but three of them are matters of principle.
- The AI agent in Telegram — not a menu of buttons but an agent loop with tool calls: the model checks free slots and creates the booking itself. No operation writes to the database without an inline confirmation from the user — a hallucination simply never gets the “Confirm” button.
- Billing with graceful degradation — the plan belongs to the company, not to the account. An overdue subscription blocks only new bookings for that company; the profile, the wallet and everything else keep working. No broken interfaces in front of a client.
- Grown-up security — three kinds of 2FA (TOTP, SMS, Passkeys via WebAuthn), geo-tracking of sessions, automatic logout on anomalies, and an active-session manager modelled on Apple’s: a freshly created session cannot terminate an older one.
Stack and Integrations
- AI
- API integrations
- SaaS
- Web application
- PHP 8.4
- Twig
- MySQL
- Redis
- Telegram Bot API
- OpenAI
- Claude
- Gemini
- Monopay
- AlphaSMS
- WebAuthn / Passkeys
- Google OAuth
- Cloudflare Turnstile
37 Days in Commits
-
March 25
The “init” commit
The marathon starts: router, Twig, sessions. Twenty-five commits on day one.
-
March 27
2FA on day three
TOTP, SMS and Passkeys via WebAuthn — security went into the foundation instead of “we will add it later”.
-
March 31
Live booking + AI
A calendar with five modes, conflict checking — and the first AI integration with token accounting.
-
April 10
Billing
Checkout, PDF invoices, client wallet. The money became real.
-
April 27
Monopay
After LiqPay said no, Monobank gave me acquiring — fast and like a human being.
-
May 1
The AI agent in Telegram
An agent loop with tool calls on top of the booking engine — the hardest module in the product.
-
May 2
Production
A new landing page and the first live client — a barbershop. The marathon finished in 37 days.
Crash-Tested by Reality
For 37 days everything worked: demo accounts, a pretty grid of slots, tidy scenario tests. Then I visited the first live client — a barber — and heard: “listen, I can squeeze a client in between 14:15 and 14:40”. Between. Not at 14:00 and not at 14:30.
Not one of my booking patterns allowed for that — I was thinking in slots, and the barber thinks in living people. Two nights later barbers got manual editing of appointment boundaries in five-minute steps that does not break the price list.
The second thing to fall was the QR onboarding: the elegant “scan the code, land in the bot” flow died on a client with a single phone, who was shown that QR code on that same phone. A deep link instead of a QR — and the flow came back to life. UX is tested on people, not on the developer’s monitor.
Frequently Asked Questions
A SaaS platform for service businesses: a CRM with a client base, online booking with a calendar, a team with roles, public company pages on subdomains, billing and AI integration — more than fifty features in one service.
Because ready-made solutions cover the first 60% of the work — the part you see in a demo. The remaining 40% — multi-tenancy, non-standard billing, an AI agent — turns into a fight with someone else’s architecture. Plain PHP 8.4 gave full control and zero inherited technical debt.
The agent never writes to the database on its own. Every operation — a booking, a wallet top-up — requires an inline confirmation in Telegram. Add context isolation: one company’s agent physically cannot see another company’s data, and that is enforced in code, not in the prompt.
37 days from the first commit to production with real payments. 373 commits, one developer, two AI assistants in a human-in-the-loop setup.
This is the short version of the case. The full story of the marathon — LiqPay’s refusal, Monobank’s purring, and the barber who rewrote my architecture — is in the article “Solo Marathon: Building a SaaS with AI in 37 Days”. The product itself lives at clients.express — signing up is free.