Frontline

A customer-support AI chat for the same TV and internet provider: it resolves the issue in conversation when it can, and books a technical visit when it can't. Shipped by reusing 60% of the Self-Booking core, which is exactly what that core was designed for.

Role
Second product on the reusable core. I set the resolve-first design and directed the build.
Stack
LangGraph · SQLite · systemd · nginx · SOAP API
Status
Live demo against real production data, 271 automated tests

Self-Booking answers "I need to move my visit". But most support contacts don't start as a scheduling request, they start as a problem: no signal, no internet, a decoder that won't turn on. Many of those never needed a technician at all, yet every one of them was either a call-center call or a truck roll.

Frontline is resolve-first: it walks the customer through safe checks in plain conversation, in their language, and only when the problem survives that triage does it offer to book a technician. The booking flow it hands off to is the Self-Booking engine itself, not a copy of it.

The same bounded-agency rules apply end to end: the model translates the conversation into a bounded set of actions, a deterministic layer decides what is possible, and nothing is written to the backend without the customer confirming first.

  • Multi-language and mobile-first, because a support chat gets opened on a phone that may be the only working device in the house.
  • Escalation is a feature, not a failure: when conversation can't solve it, the visit is booked in the same thread, no hand-off to a human queue.

This is the proof of the reusable-core thesis: 60% of Self-Booking, the state machine, the bounded action layer, the SOAP integration and the per-client JSON profile, carried over unchanged. The new 40% is the resolution loop. The whole product is covered by 271 automated tests.

screenshots coming soon
Core reuse
60% of Self-Booking carried over unchanged: state machine, bounded action layer, SOAP integration, per-client JSON profile.
New layer
The resolution loop: safe checks in plain conversation before any visit is offered.
Escalation
Unresolved cases become a booked visit in the same thread. No hand-off to a human queue.
Languages
Spanish, English, Portuguese and Hebrew. Mobile-first UI.
Test coverage
271 automated tests covering the product.
Demo
support.ot-demo.xyz, running against real production data.

The second product shipped on the same engine, which is what turns Self-Booking from a project into a platform: onboarding the next use case is a config profile plus the parts that are genuinely new.

60%of the Self-Booking core reused, as it was designed to be
271automated tests covering the product
2products running on one engine, each defined by a JSON profile