Skip to content
Carlo Miguel Dy
← Back to the specimen catalogue

Acc. XVIII · Sermo taglicus — Taglish reply network, cultivated 2026

Bukas AI — Filipino small-business Messenger assistant

Technical founder · Product engineer · 2026 · Independent studio

An AI assistant that answers Filipino small-business customer messages on Facebook Messenger in English, Tagalog, and Taglish, currently a supervised-pilot build gated on owner decisions.

Sermo taglicus — Taglish reply network, cultivated 2026

Field notes

The context

Filipino small businesses run customer conversations on Facebook Messenger in a mix of English, Tagalog, and Taglish, and owners handle bookings, complaints, and refunds manually inside that thread. Meta's 24-hour messaging window and the code-switching nature of the conversations make an assistant here a harder integration problem than a single-language chatbot.

Cultivation

What I built

  • Built the Messenger webhook integration with 24-hour messaging-window enforcement and multi-language handling for Taglish code-switching.
  • Built booking capture from freeform conversation with idempotent writes, and intent classification that routes complaints, refunds, and low-confidence turns to human escalation.
  • Built Telegram owner alerts with retry, conversation history with tenant isolation, and an owner console covering team management, business hours, and exports.
  • Built a Mission Control admin panel for platform operators, on top of a modular-monolith Fastify API.

Root system

How it works

A modular monolith: a Fastify API serving three clients (owner console, admin panel, customer PWA) across a Turborepo of 15+ packages split by concern — agent (LLM pipeline), booking, channels, inference (multi-provider), database (Postgres with RLS multi-tenancy), jobs (queue), telemetry, and UI. Webhook ingestion from Meta feeds an async job queue, and alerts go out over Telegram; deployment topology is a single VPS running Docker Compose behind Caddy.

Harvest

Outcomes

  • The approved specification is implemented in part — 44/44 turbo tasks and 1,958 tests passing — but no production infrastructure is provisioned.
  • Seven owner approvals remain untaken before launch: VPS, backup, domain, paid inference, Sentry, Meta business verification, and business registration.
  • The agent pipeline is disabled pending an inference-provider decision, with two decision gates still open — extractive vs. grounded reply surface, and the acceptable false-escalation rate for a supervised pilot.
  • Reply quality and Taglish handling have not yet been measured against a real design partner; scope is a P0 supervised pilot on one Page over a four-week measurement window, not general availability.

Herbarium

The work itself

Three-pane owner console for Sampaguita Hair Studio. The left sidebar lists the brand mark, the owner's account chip 'Sampaguita Hair Studio · Owner', and grouped nav — OVERNIGHT: Today; INBOX: Conversations (active); BUSINESS: Price list, Knowledge, Channels, Business hours; ACCOUNT: Team and access, Settings; REFERENCE: Reports, Exports, Design system — with Search and Daybreak pinned at the bottom. The centre pane's top bar reads 'CONVERSATIONS / Conversations' beside a search field, an EN/TL/Taglish language toggle, and an avatar. Below it a 'CONVERSATIONS 14' badge sits over a scrollable thread list, each row a customer name, channel label (Telegram or Messenger) and timestamp, several rows carrying a coloured left spine — amber on a few rows, red on others — to flag urgency; the top row, 'Jomar Pascual · Telegram · 7:15 PM', is selected and highlighted. To its right, the open Telegram thread with Jomar Pascual is marked 'OPEN'. It shows a customer bubble at 6:15 PM asking 'Magkano po ang hair colour tapos may slot pa po ba bukas ng hapon?', an amber agent-reply bubble at 6:25 PM answering 'PHP 2,200 po ang Hair Colour (Full), mga dalawa at kalahating oras. May bakante po bukas ng 2:00 PM at 4:30 PM. Alin po ang mas okay?', and a customer reply at 7:15 PM, 'Yung 4:30 PM po. Salamat!'. Below the thread sit a 'Pause the agent' button, a 'Type your reply…' composer, and a Send button. The right-hand Agent rail carries a status pill reading 'ANSWERING', the line 'Speaking as Sampaguita Hair Studio — Never as Bukas. Customers see only your business.', a Provider row reading 'glide · glide-small', 'Cost this week ₱0.01', 'Median reply 0.8s', 'Fallbacks ready 0/0', an OVERNIGHT ACTIVITY feed of five timestamped entries such as 'Answered Jomar Pascual · Telegram · 7:15 PM' and 'Escalated to you · Messenger · After hours · 3:15 PM', and three quick actions: 'Pause the agent', 'Send a test alert', 'Correct this answer'.
Fig. 1The owner console keeps a live thread on the left, the full inbox and a real Taglish exchange in the middle, and the agent's own status — speaking-as identity, provider, cost and reply latency — always visible on the right.
The Today screen, with the same sidebar and top bar as the Conversations view but the 'Today' nav item active. Under a 'Today' heading, three KPI tiles read 'OPEN CONVERSATIONS 2', 'ESCALATIONS PENDING 3' and 'BOOKING REQUESTS PENDING 3'. Below them, a 'NEEDS YOU' section header carries a count badge of 5 over five stacked rows, each with a coloured left spine and small type icon: three escalation rows in red — Marilou Deguzman 3:15 PM, Lourdes Fajardo 6:15 AM, Divina Rosales 6:15 AM — each labelled 'Escalation', and two booking-request rows in amber — Jomar Pascual 7:15 PM and Ana Villamor 4:15 PM — each labelled 'Booking request'. The same Agent rail from the Conversations screen repeats on the right, showing the 'ANSWERING' status, the speaking-as line, provider, cost, median reply time, the overnight activity feed and the three quick actions.
Fig. 2Today collapses the inbox into what actually needs the owner — a KPI strip plus a single triaged queue of escalations and booking requests, typed and time-stamped, with the agent's own status still pinned alongside it.
The Knowledge screen, 'Knowledge' active in the sidebar, heading 'Knowledge' with the subtitle 'What the agent may say — FAQs and policies you have told it are true.' and an 'Add an answer' button top right. Below it sit a 'Search knowledge' field and a 'Columns' button over a table with headers Type, Question (optional), Answer and Updated. Ten rows are visible, each dated 'Aug 8' and typed FAQ, POLICY or NOTE: 'Where is the studio located?' (FAQ), 'What is your cancellation policy?' (POLICY), 'Anong oras po kayo bukas?' (FAQ), 'Do you offer home service?' (POLICY), 'How much is a rebond?' (FAQ), 'What are your opening hours?' (FAQ), 'Tumatanggap po ba kayo ng walk-in?' (POLICY), an untitled NOTE row about chemical services not being offered to certain clients, 'Saan po kayo nakalocate?' (FAQ), and 'Magkano po ang rebond?' (FAQ) — the English and Tagalog phrasings of the same location, hours and rebond-price questions each appearing as separate rows with their own written answers. A 'Page 1 of 2' indicator with left/right arrows sits at the bottom left.
Fig. 3The knowledge table is the agent's whole license to speak: FAQs, policies and free-form notes that the owner authored themselves, with English and Tagalog phrasings of the same question stored as distinct answerable entries.
The same Conversations screen reflowed to an 800px-wide single column. The sidebar has collapsed to a narrow icon rail — the brand mark and account avatar at top, a stack of unlabelled nav icons below, and search and theme icons at the bottom — and the right-hand Agent rail has dropped away entirely. The top bar reads 'CONVERSATIONS / Conversations' with the EN/TL/Taglish toggle, a moon icon, an activity icon and the avatar. Below it, the full 'CONVERSATIONS 14' thread list stacks top to bottom with the same names, channel labels, timestamps and coloured urgency spines as the wide layout, and directly beneath the list the open Telegram thread with Jomar Pascual continues in the same column: the 'OPEN' badge, the same three-message exchange about the hair-colour price and the 4:30 PM slot, the 'Pause the agent' button, the reply composer and the Send button.
Fig. 4At narrow width the layout drops to a single column — sidebar to icon rail, the agent-status rail gone, thread list and open conversation stacked in reading order — rather than truncating any of the same data.
Pressed leaf — what it taught
Structuring the build as a manifest of scoped tasks with owner-driven decision gates kept the system from guessing past points that genuinely needed a human call — inference provider, escalation thresholds, reply surface. A working test suite is not the same claim as a working product; the honest state here is implemented-but-ungated, and that distinction matters more than the pass count.