What does building a headless support portal on Plain involve?
Plain handles the backend. Your team builds the front end and renders it inside your own product, using Plain's TypeScript SDK or REST API.
If you are still deciding whether you need a custom portal at all, see Should I use the Help Center or a headless support portal?.
What Plain provides
- Thread infrastructure: thread state, the Todo, Snoozed and Done statuses, priority, labels, SLAs and the timeline.
- Customer and tenant model: customers grouped into tenants.
- Routing: portal threads go through your existing workflows and labels automatically.
- TypeScript SDK:
@team-plain/typescript-sdkwraps the GraphQL API for creating, listing and replying to threads. - Notifications: email and Slack to your team on new threads and replies.
What your team builds
- Tenant sync: on customer login, call
upsertCustomerandupsertCustomerToTenantsto register the customer and their company in Plain. Usually a single server-side function. - Thread listing: query the customer's threads with the SDK and render a list with title, status and last reply time. Plain returns paginated results scoped to the authenticated customer.
- Thread creation: a form that calls
createThreadwith a title and opening message. You can also add thread fields for structured intake, such as plan or environment. - Reply flow: load a thread's timeline and post messages with
replyToThread. Plain returns the full timeline, including team member replies, notes hidden from customers, and status changes.
How long it takes
- Basic portal that reads and creates threads: 1 to 3 days for an engineer who knows your front-end stack. The main effort is UI and authentication wiring.
- Full portal with listing, creation, replies and status display: 1 to 2 weeks, including polish, error handling and mobile responsiveness.
- Production-grade portal with custom thread fields, file attachments and real-time updates: 3 to 6 weeks.
Plain does not provide a pre-built portal UI. For something faster to ship, the chat widget
@team-plain/customer-chatis a hosted alternative that needs no UI build.