How to build a help center and support desk with Lovable
One browser tab, prompt by prompt, and a working help center at the end of it. A library people can search, a contact form that answers before it files a ticket, a queue that keeps its history, and live chat, with the tables and the access rules designed in the same conversation that produces the screens.
Lovable
$ I want my own help center: articles in categories with a search that actually finds them, a contact form that shows likely answers while somebody types, tickets I can follow through to resolved, live chat with my team, and separate views for customers, agents, editors, and admins.
- Tables designed in chat
- Library and queue built
- Ready to preview
What a help center and support desk actually is
Two products sharing one database. A library your customers read without ever talking to you, and a queue for the questions the library did not answer, joined at the point where somebody gives up reading and starts typing.
The library half is the one with leverage in it. An article answers the same question for the hundredth person as cheaply as it did for the first, which is the only part of support that gets less expensive as you grow. The queue half is where your team actually spends its day, and where every hour costs the same as the last one.
That is also why nearly every reader arrives at this app already renting one. Support tools are priced against exactly those two halves: a monthly fee for each person working the queue and, across most of the market now, a second charge each time something gets answered. The bill is indexed to the two numbers you are trying to move.
What makes this genuinely hard to build is not the ticket list. It is that a help center only works if people find the answer, and finding is a search problem hiding behind an ordinary-looking page. Seventy-three per cent of customers try self-service somewhere in their journey, which means the article is usually the first thing your company says to somebody with a problem.
Search That Actually Finds the Answer
Search is the product here, not a widget in the header. A help center with fifty good articles and a search that matches on titles alone will send almost everybody to the contact form, and you will conclude you need more articles. Get search, categories, and related links right before you write article number fifty.
The Contact Form That Prevents Tickets Before They Start
The contact form is where the two halves meet. Suggesting likely articles while somebody types their question, before it becomes a ticket, is the single highest-leverage screen in the whole application, and it is usually the last one anybody builds.
Four Account Types, Each With Its Own Access
A customer, an agent working the queue, an editor writing the library, and an admin running all of it. Most applications have two kinds of user and get away with a flag on the account record. Four kinds, each of which may read some rows and not others, is where the access rules stop being an afterthought.
How often self-service actually works
14%
of customer service issues were fully resolved by the company’s own self-service channel, across the 5,728 customers in the survey Gartner published in August 2024. The most common reason it failed was not a hard question: 43% of the time, people simply could not find content relevant to their issue.
Gartner survey, published August 2024 (read on CX Today) · checked Gartner survey published August 2024
The parts every support desk is built from
Two of these six are systems wearing the costume of a page, and they are where the build time actually goes. The other four are where most of the visible work is.
Search That Looks Beyond Article Titles
Somebody types four words, half of them not the words you used in the article. Matching titles is not enough. You want the body text, the category, and ideally the questions people have asked before. This is the part worth over-building, because in the survey behind the figure above, the single most common reason self-service failed was that people could not find content relevant to their issue, and even for problems customers themselves described as very simple, only 36% resolved without contacting anybody.
Draft, Publish, Translate, and Retire Articles
A draft somebody is still writing, a published version customers read, a translation of it in another language, and eventually a version that is wrong and needs retiring. Model that from the start. Bolting a draft state onto a table of published articles later means every query in the application suddenly needs to remember which kind it is looking at.
Tickets With Their Full Conversation History
What a customer wants from their own ticket is the history: what they said, what your agent said back, when it changed hands, what got attached. Build the timeline as the primary thing and let the status be a property of it, rather than building a status field and discovering later that nobody can tell what happened.
Live Chat With Your Agents
This is the item people underestimate. A message has to arrive while both people are looking at the screen, which means subscriptions rather than page loads, and it brings its own questions: who is waiting, who picked this up, what an unread count means, and what the customer sees when every agent has gone home. Decide whether you are staffing a chat before you build one, because an unattended chat window is worse than no chat window.
Customer, Agent, Editor, and Admin Roles
Customers read and ask. Agents answer. Editors write the library, which is a genuinely different job from working a queue and usually a different person. Admins run users, settings, and the numbers. Four roles is the reason the access rules in this application multiply rather than add.
Analytics That Show Which Articles to Write Next
Which articles get read, which get marked unhelpful, and what people asked for anyway after reading them. That last one is the most valuable report in the whole application: it is a list of the articles you have not written yet, generated by your own customers.
Own the help center or pay per agent and per answer
Traditional support tools charge steep monthly fees for every team member you add, plus extra fees every time an AI answers a question, punishing your growth. Owning the help center is a single purchase, and neither of those numbers moves the bill.
Build your own
Own the help center outright: one purchase, the whole codebase, no seat count and no per-answer meter. Your fifth agent and your four-thousandth answered question cost exactly what the first did.
- Adding the fifth person to your support team costs nothing, so hiring is not also a software decision
- The same cost to run whether you answer forty questions a month or four thousand
- Your articles are pages on your own domain, indexed under your own name rather than a vendor’s subdomain
- Every question, article, and reply is in your own database, queryable without an export request
- What counts as resolved, how long a quiet ticket stays open, and which statuses exist are your decisions
- No surprise fees, subscription taxes, or per-answer charges when you add smart features to your app
Rent the help desk
Zendesk · Freshdesk · Intercom · Help ScoutWhat renting buys is a decade of accumulated support machinery. Routing rules, SLA timers, satisfaction surveys, a mature search, an inbox your agents will not fight, integrations with whatever else you run, and on three of the four an AI agent that resolves conversations on its own, which is a real product, not a checkbox.
- Working on day one, with search, routing, and reporting already good rather than described
- Email, chat, phone, and social arriving in one queue, which is weeks of work you never scope
- An AI agent that resolves conversations unaided, and this template has no version of that at all
- Integrations with your billing, your CRM, and your issue tracker, already written and maintained
- Every one of them bills per person on your team, so the cost of support grows with your headcount
- Three of the four bill again per answer, which prices the exact thing you are trying to increase
The category default, and the longest ladder. The page quotes each tier as “agent/month paid yearly” and advertises “20% off annual”, so month-to-month runs higher than every figure here. The top tier, Suite Enterprise + Copilot, publishes no price at all and sends you to sales. On AI it states the model without the rate: “Paying per automated resolution means that you pay only for customer requests that were successfully resolved by the AI agent.” We also opened its AI product page looking for that rate and it publishes none, so none is quoted here. Note where the knowledge base sits: not on the $19 tier, but from Suite Team at $55.
zendesk.com · checked August 2026
The cheapest top tier of the four, and the one that sells AI by the block rather than by the answer. All three plans state “First 500 sessions included”, then “$49/100 sessions”. The AI Copilot that helps your own agents is a separate “$29/agent/month billed annually”. The page shows “Save 20% Annually” and no monthly figures. Two details worth knowing: temporary agents are sold as day passes from $2 to $12 depending on tier, which is unusually honest pricing for seasonal support, and while the page’s own description mentions a free program for two users, nothing in the page itself documents it, so no free tier is claimed for Freshdesk here.
freshworks.com · checked August 2026
Included because it states the per-answer model more plainly than anybody else. Fin is “$0.99 per outcome”, and the page defines one: “An outcome is counted when: A customer confirms their issue is resolved, or They don’t ask for more help after Fin responds, or Fin completes a workflow (Procedure), including handoffs”, with “You’re only charged once per conversation, even if multiple questions are answered.” Do that multiplication before comparing seat prices: a thousand resolved conversations a month is roughly $990, on top of every seat. Fin will also run on top of a help desk you already have, with no seat cost and a minimum monthly commitment.
intercom.com · checked August 2026
The small-team end, and the only one of the four with a free tier we could confirm on the page: no cost, five users, one inbox, one Docs site. Paid plans are “per user/mo” with annual billing shown at −16%, and AI Answers is a separate add-on at “$0.75/resolution”. One line the entry prices hide: Pro’s seat count is “Unlimited (minimum 10)”, so the cheapest Pro bill is ten seats whether or not ten people work tickets. Genuinely the closest of the four to what a small team needs, which is exactly why the per-resolution meter is worth noticing on it.
helpscout.com · checked August 2026
Rule of thumb: if support is your product’s front line and several people work it full time, buy. Routing, SLA timers, an omnichannel inbox, and a genuinely good AI agent are worth real money, and none of them is a weekend of describing. If the shape of your problem is that the same twenty questions keep arriving and you would like people to stop having to ask them, you are renting a queue to solve a library problem, and the library is the half you can own. One more finding worth weighing before you decide either way: in a Gartner survey of 5,801 customers in early 2025, 60% of agents failed to promote self-service at all, and when agents did mention it, a doubling in the number of customers likely to use it next time followed. The cheapest deflection in any support product is an agent answering with a link to the article, and no plan tier sells it to you.
Why build with Lovable
A working app needs more than screens: something has to store what people enter, decide who may see it, and reject what does not make sense. That part is where a solo build stalls, not the parts a user sees.
Lovable turns that work into a conversation: describe a screen or a rule in plain language and watch it appear in the live preview, in the same tab:
Prompt
Say what you want to add or change, in plain language.
Watch
The live preview rebuilds in the browser as Lovable writes the code.
Try it
Click through the real app, with real buttons, forms and data rather than a mockup.
Refine
Select what’s off and describe the fix, or ask for what’s next.
None of that requires a computer science background or writing code, and the whole build happens in one browser tab, one request at a time.
Data & backendhandled automatically
Connect your database in a single step, right from the chat. Lovable builds the tables, sets up the logins, writes the server-side functions, and turns on live updates, each one an ordinary request in plain language, not a separate tool to learn.
Click to point instead of describing where
Select any element in the live preview with Lovable’s Select elements tool, and your next message applies to exactly that piece.
Full ownership and complete privacy
The app and the records in it are yours. Every change is saved automatically, and the repository Lovable syncs to GitHub is private on every plan, with no technical setup and not one Git command.
Pay a developer, or do it with AI
The only running costs are a database plan and hosting, and both start free. If you add an AI feature, you pay its model provider for the text you send, and nothing else on this page is metered.
Hire a developer
Custom build, from scratch- Developer
- ~$13k-$53k
- Supabase (backend)
- Free tier · $25/mo (Pro plan)*
- Hosting
- $0 free tier
- Build time
- ~265 hrs of their work
~$13k-$53k to build, then from $25/mo after launch
Our ~265-hour estimate, priced against the rate survey linked below. That survey puts senior US developers in the $100-$150+/hour bands and notes the 20-40% an agency adds over them, so $50/hr and $200/hr bracket the realistic ends. Where the hours land is the part worth reading twice: search, live chat, and four roles’ worth of access rules account for roughly a third of them, and not one of those three appears in a screenshot, which is the usual reason a quote for a help desk comes back higher than the mockups suggest.
Build it with Lovable
From scratch, with Lovable- Lovable
- Free (30 credits/mo) to $25+/month (Pro, from 100 credits)
- Backend (Supabase)
- Free tier · $25/month (Pro plan)*
- Hosting
- $0 on a Lovable subdomain
- Your time
- ~126 hrs
Free to try the idea, ~$25-$50+/month on Pro while you build a real one, then whichever credit tier you keep using
Lovable bills by credits, so what you pay tracks what you build: importing the pre-built template can fit inside the Free plan’s 30 credits a month, while a full from-scratch build burns through Free fast and usually needs Pro. Pro’s entry rung is $25/month (or $250/year, roughly $21/month effective) for 100 credits, the bottom of a ladder where 200 credits runs $50/month (or $500/year, about $42/month), and a multi-session build often lands on that rung or higher rather than the entry price.
* One line on the free tier matters more here than on most builds, and it is not the database size. Supabase Free comes with 500 MB of database space, 1 GB of file storage, and 5 GB of monthly egress. Articles and tickets are text and will not trouble any of that for years. What will is attachments: a support queue collects screenshots and PDFs, and 1 GB of them arrives faster than you expect. Free also pauses a project after a week without activity, which for a help center means the week you launch it and nobody has found it yet. Pro, from $25/mo, ends the pause, brings 250 GB of egress (then $0.09 per GB), and keeps a daily backup for 7 days.
What changes is which way the bill points. A rented help desk gets more expensive as your team grows and as more questions get answered. One you own costs the same either way, and the money moves to whichever AI model you choose to call and how much text you send it. The second shape suits a product whose support volume is going up, which is most products that are working.
Prices and rates from supabase.com, developex.com and docs.lovable.dev, checked August 2026.
Decide before you build
Six things to settle in writing before anything gets built. Every one of them is a promise you are making to somebody who has a problem with your product, and every one costs far less to decide now than to unpick after your team has spent three months working a queue whose shape nobody ever chose.
Whether asking for help requires an account
Settle this before the schema, because it reaches into every table. An account gives somebody their own history, which is where most follow-up questions get answered without you, but requiring one before they can report a broken checkout loses you the report. The middle path: accept the question from any email address, then let them claim it afterwards.
What resolved means, and who is allowed to say it
A status list is a workflow in disguise, and waiting on the customer is the state people forget. Without it your queue cannot tell an unanswered ticket from one waiting on a screenshot. Decide the list, whether an agent may close what the customer has not agreed is fixed, and what happens to a ticket nobody has touched in a fortnight.
Whether you are staffing a live chat at all
A rota question rather than a code question, and the expensive one to get wrong. A chat window implies somebody is there. If nobody is at 9pm it has to say so and turn into a ticket, by design rather than by accident. No chat and honest response times beats a chat nobody watches.
Which languages, and who owns the words
Translating the library is the cheapest way to serve customers who do not write in your language, and it changes the data model: an article becomes versions per language, each published or not, current or stale. Decide which languages, and who signs off a machine translation. An automatic translation of your refund policy is still a policy statement.
What people may attach, and what you do with it
Screenshots are how customers explain things, and a screenshot of an order confirmation carries a name, an address, and sometimes rather more. Decide the file types and size limit, who may open an attachment other than the sender, and how long you keep them.
Where email fits, given what it costs you
Support is the one product where people expect a reply to arrive without them checking. In-app notifications work while a customer is signed in. Email reaches somebody who filed a ticket and went back to work. A reply nobody sees is the most common reason a queue feels slow when it is not.
Comparing your build options
The hard parts of this app either get built deliberately or get discovered late, and which one happens depends on where you start. Three routes to the same place: entirely by hand, on a UI kit that hands you a document list and stops there, or in one Lovable chat where the tables and the screens are designed together.
Two of these parts are much larger than they look from a screenshot. Search has to be good enough that somebody stops typing and starts reading, and live chat is a real-time application wearing the same clothes as the rest of the app. Neither is a screen you can finish in an afternoon.
A starter kit gives you a document list, a form, and a dashboard shell. It has no opinion about whether an article answers the question somebody typed, no notion of an article that exists in three languages, and nothing that keeps four kinds of account out of each other’s records. All of that is still yours.
A browser tab and one message at a time. The tables, the search behind them, the real-time chat, and every screen above all get designed in a single conversation, with a live preview you click through before asking for the next thing.
Estimate your exact build timeframe
Plenty of teams need less than this. If you have no intention of staffing a live chat, or your customers all read one language, untick those and watch the estimate drop.
Your estimate
126 hrs
start to finish
Based on the 7 of 7 features you’ve selected, plus ~29h of groundwork. Toggle any on the left to watch the number move, and open the groundwork row to untick what you have already, such as a database that is already running or going live if you are only building a mock-up for now.
A rough estimate, not a quote. Real time depends on how much you customize and how clean your data is.
Let’s set up the tools you need
Nothing gets installed, because the whole workspace is a browser tab. Three things to sort out before step 01, and a fourth worth adding once the project matters to you. After that, you build by describing what you want.
Lovable account
Nothing to download. Sign up with an email, Google, or GitHub account and you land straight in the chat where you describe what to build.
Sign up for LovableLovable subscription
Lovable bills by build credits, so the plan you need follows what you build. Free gives you 5 credits a day, capped at 30 a month, which is enough to try it rather than to finish an app. Pro is $25/month for 100 credits ($250/year, about $21/month), and that is the bottom rung: a build spread over several sessions usually lands on 200 credits at $50/month, or higher.
Compare Lovable plansSupabase project
Where your app keeps its data. Connect your own Supabase project from the chat, or let Lovable create one for you. Either way it designs the tables, adds the logins, and wires the screens to them from there.
Connect Supabase to LovableGitHub connection
Not needed to build anything, since Lovable keeps its own history of every change. Link a GitHub account and it also keeps a private repository in sync, so a copy of the real code exists outside the browser tab. Worth doing before the project is one you would hate to lose.
Set up GitHub syncOnly the first three are needed to start, and none of it touches your computer. From here, you describe what you want and Lovable builds it in the browser.
Build your support desk, prompt by prompt
There is nothing to install. Describe a piece, watch Lovable build it, click through the preview, then ask for the next one. What shapes the order below is that a live preview flatters exactly two parts of this app (search and the access rules) because the only person testing them already knows where everything is and what it is called. Both get asked for in explicit terms, and both get tested against that flattery.
- 01
The database connection comes before the first screen
Any screen built over data that does not exist yet is a screen you rebuild once it does. Get the database attached first, and state the two rules this build rests on while the conversation is still short enough for them to stick.
PromptSet up the projectConnect my Supabase project before building any screens at all. Then set up a help center and support desk, and hold two rules for the rest of this project: whether an article is published is decided by the database access rules and never by whichever query is reading it, and every list of another person’s records (tickets, chats, attachments, and anything arriving over a real-time channel) is narrowed in the database rather than in a screen. Use these words consistently throughout: article, category, FAQ, translation, ticket, message, chat session, agent, editor. Confirm the connection is live, then tell me which of those two rules changes how you will design the articles table, before you design it.
That closing question earns its extra exchange. It is the cheapest available way to learn, right now, whether the model Lovable has in mind treats an unpublished article as a row anybody may read and a screen politely hides, or as a row the database refuses to hand over at all.
- 02
Describe the library, and watch the help center appear
The part Lovable is fastest at, and the part where looking at it beats specifying it. Get your category structure in front of your own eyes before a single ticket exists.
PromptModel the library and build the help centerDesign the tables and build the public reading side over them. Categories with a name, slug, and description. Articles in a category with a title, slug, Markdown body, published flag, view count, and helpful and unhelpful counts. FAQs with a question and an answer. Separate translation tables for articles, categories, and FAQs, each row carrying a locale and its own published flag, so a translation can sit as a draft while the original is live. Add six categories and about twenty articles of mixed length as sample data, two with a Spanish translation and one left unpublished. Then the public side: a home page, a category page, an article page that renders the Markdown with related articles under it, and a searchable FAQ. No sign-in and no tickets in this message.
Click your own category list in the preview before moving on. Categories are the one structural decision customers see directly, and the version that made sense while you were typing it often does not survive looking at it as a menu.
- 03
Ask for real search, in those words
A preview will not show you that search is weak, because you know what your twenty articles say. Ask for full-text search explicitly and test it with words you did not write.
PromptMake search actually workBuild search properly, and treat this as one of the two most important messages in the project. Use Postgres full-text search rather than matching on titles: a generated search column over each article’s title and body with the title weighted higher, an index on it, and a database function that takes a phrase and returns ranked results with a highlighted snippet of the passage that matched. Search FAQs in the same query and label which results are which. Add a category filter and make a misspelt word still return something sensible. Then show me two things by running them: a phrase that only appears in the middle of one article’s body finds that article, and a list of plausible customer phrasings that currently find nothing.
Bookmark where you are before sending this one. Of everything in this build, search is the likeliest to take two or three goes, and returning to a version you know worked is far easier than untangling a schema left half-changed.
- 04
The queue, and the screen that answers before it fills
Tickets with a real timeline, attachments, and the one screen that decides how much of your queue never arrives at all: a contact form offering answers while somebody is still typing the question.
PromptOpen the queueBuild the ticket side. Tickets carry a subject, body, category, a status of new, assigned, waiting on the customer, resolved, or closed, a priority, the customer they belong to, and the agent assigned to them. Messages belong to a ticket and record who wrote them and when, so the ticket page reads as a timeline rather than a status field. Add file attachments on tickets and messages, uploaded to Supabase Storage, capped at 10 MB, limited to images, PDFs, and plain documents. Then the contact form, and treat it as the most important screen here: while somebody types their subject, run the step 03 search against it and show the three best articles above the send button, so a ticket is only created if none of them answered. Add a "my tickets" list and a ticket detail page with the timeline.
Use Select elements on the suggestion panel rather than describing it. How prominent those three articles are, and how soon they appear, is the whole design of this screen, and it is far quicker to point at than to word.
- 05
Four roles, and the rules that read them
Customers, the agents answering them, the editors writing the library, and the admins running the whole thing. A rule per role on every table is what this comes to, and it is why the step takes longer than its description suggests.
PromptAdd auth, roles, and access rulesAdd email-and-password sign-up, login, logout, a persisted session, and a profile row per account. Add four roles (customer, agent, editor, and admin) in their own table rather than on the account record, since anything stored there is editable by the person it belongs to, with a security definer function to check a role. Then turn on row-level security across every table, with rules per role: a customer reaches only their own tickets, messages, chats, and attachments. An agent reaches the queue and its conversations but not the article editor. An editor reads and writes articles, categories, FAQs, and translations including unpublished ones and reaches no ticket at all. An admin reaches everything. A visitor who is not signed in gets published articles, categories, and FAQs only, with that published condition in the policy rather than in a query. Add explicit with-check clauses on inserts and updates, and scope the storage bucket so an attachment is reachable only by its customer, the agent on that ticket, and an admin. Then, in the preview, sign in as each role in turn and show me that a customer cannot see another customer’s ticket, an editor cannot see any ticket, and a signed-out visitor cannot see the draft article.
Ask to see it as three signed-in previews rather than as a summary of the policies. The editor role is the one to test hardest: writing documentation feels like a low-privilege job, which is exactly why an editor often quietly ends up with the whole tickets table.
- 06Destination
Chat, the admin panel, and one last bookmark
The real-time chat, the inbox, the admin panel with its numbers, and the tidy-up job. Then a full shift worked on your own queue, and a bookmark taken the moment that shift passes, before a domain points anywhere near it.
PromptAdd chat, the admin panel, and rehearseFinish the app. Live chat first: chat sessions between a customer and an agent, messages delivered over Supabase real-time rather than polling, a waiting queue an agent picks from, a clear state for when nobody is available that turns the conversation into a ticket, and the same access rules on the real-time channel as on the table. Show me somebody subscribing to a conversation they are not part of and getting nothing back. Then the agent inbox with assignment and filters, the editor’s article editor with drafts, publishing, and CSV or Markdown bulk import, and the admin panel over users, roles, categories, and settings. Add analytics: article views, helpful and unhelpful counts, ticket volume by category and status, and the searches that returned nothing. Add a scheduled function that closes tickets nobody has touched in a period I choose, protected by a shared secret rather than a sign-in. Then walk me through a whole shift in the preview: search as a stranger, fail to find something, open a ticket with a screenshot, answer it as an agent, take a chat, write the missing article as an editor, and check as an admin that every number agrees with what just happened.
The version that gets through that shift is the one to bookmark, before a domain or any further change touches it. It is your last recorded point where all four roles and both halves of the application demonstrably worked together, which makes it the version you will eventually want to return to.
Why customer data stays private by default
Support desks hold sensitive customer chats, private attachments, and internal notes. Pre-configured database security isolates customer data, enforces strict user permissions, and prevents data leaks.
Let the auth service do the passwords
Hand the whole of sign-up, sign-in, sessions, and password resets to your database provider’s auth service. It is a solved problem you gain nothing by re-solving, and the failure modes when it is written from scratch are silent ones. Keep it to email and password, too: somebody contacting support is already having a bad day, and an unfamiliar sign-in method standing between them and the report is a report you never receive.
Four pre-configured user roles
The template ships customer, agent, editor, and admin. A customer reaches their own tickets and chats and nothing else. An agent reaches the queue and the conversations in it. An editor writes and translates the library but has no business reading a stranger’s ticket. An admin runs users, settings, and the reports. That third role is the one people collapse into admin out of convenience, and it is worth keeping separate: writing documentation is a job you hand to more people than you hand the customer list to.
Database-level security (Row-Level Security)
A ticket list that narrows its results in the component is one forgotten condition away from putting somebody else’s problem, name, and email address on screen. Row-level security relocates that judgement to the moment the database hands rows out, and the point of moving it is what happens when somebody forgets: an unscoped query comes back empty rather than coming back with everything.
89 policies, because four roles read every table differently
The template ships 89 row-level security policies, and the count is structural rather than anxious. Take one table, tickets: the customer it belongs to may read and add to it, the agent it is assigned to may work it, an admin may see all of them, and an editor should see none. That is four rules on one table, and this application has more than twenty tables.
A draft is not a document with a flag on it
The moment your library has unpublished work in it, published status becomes a security property rather than a display property. An article table where anybody can read every row will happily serve a half-written policy page to a customer, or to a search engine. Put the published condition in the policy, not in the query that happens to be reading it today.
Real-time subscriptions are queries too
This one catches people, because it does not look like a data-access question. A chat that pushes messages to whoever is listening needs the same access rules as the table it reads from. Otherwise the way to read a conversation you are not part of is to subscribe to it rather than to query it. Ask specifically whether the real-time channel enforces the same rules as the table, and ask to be shown it refusing.
An attachment is a file, not a row
Files live in storage, which has its own permission model, and the default on most buckets is more generous than the default on a table. A support attachment is exactly the wrong thing to serve from a public URL: it is a screenshot somebody sent you privately, and a link that works for anybody who has it will eventually be somewhere you did not put it. Scope the bucket to the ticket it belongs to, cap the file size, and decide which types you accept.
Keep the role off the account record
The four roles need a table of their own, and the reason is narrow: anything stored on an account can be edited by the person that account belongs to. Put the role there and a customer is one profile update away from calling themselves an agent, and an agent reaches every other customer’s tickets, chats, and attachments.
Some rules cannot live in a policy
Creating a user and giving them a role, calling an AI model with your own key, and sweeping up tickets nobody has answered are each several operations at once, and each has to be permitted to do more than the person who triggered it. The template gives 4 of those their own server-side edge function, running above the access rules and carrying the rule in its own code. That is what lets the policies stay as strict as they are without any of these three becoming impossible.
A scheduled job needs its own secret
The one that closes tickets nobody has touched is not called by a person, so it cannot be protected by a sign-in. It gets a shared secret instead, checked on every call, and that secret belongs with your other server-side secrets rather than in the code. A scheduled endpoint with no check on it is a public endpoint that changes your data, and it will be found.
Automated backups & disaster recovery
No backup is taken of your articles or of a single conversation your team has had. Daily backups, kept for a week, start on Supabase Pro at $25/mo. The library is what makes that urgent here rather than merely prudent: a year of articles is a year of your team working out how to explain things, and nothing else in your business holds a second copy of it.
Review the access rules (row-level security policies) on every table. For each one, tell me in simple terms who can view, add, edit, and delete records, confirm that people can only reach their own data while the right roles can reach more, and flag anything left open that shouldn’t be.
Paste this into the chat before launch so Lovable checks nobody can see data they shouldn’t.
The one rule that matters: the database service key, any AI provider key, and the shared secret protecting your scheduled job never belong in the app or in a public repo. If one of them gets out, assume it is compromised and rotate it that day.
What speeds the build, and what slows it
Speeds the build
- One small request per message, such as a field, a screen or a rule, rather than the whole app at once
- Connecting your database before building screens that need real data, not after
- Using Select elements to point at the exact thing that should change, instead of describing its location in words
- Bookmarking a known-good version before a redesign or a change to the data model
- Reading each response before sending the next request, so small mistakes don’t stack up
Slows the build
- Asking for an entire app in one message instead of one screen at a time
- Building screens for data your database does not hold yet
- Describing which button or section to change instead of selecting it
- Skipping bookmarks, then scrolling far back through history to undo a bad change
- Approving several messages in a row without previewing what actually changed
Connecting GitHub (Optional)
Every change in Lovable is saved automatically without any technical setup. You only need to link GitHub if you want a private copy under your own control or plan to hand the codebase over to external developers.
What Git actually is
A recorder for a project: every change becomes a version you can go back to, and nothing is ever overwritten. GitHub is the service that keeps those versions online.
Lovable already saves every change
A new version is created each time Lovable changes your project. No save button, no Git command, and the full history is there to scroll back through.
Version history, Lovable docsReverting undoes the code, not your data
One click restores an earlier version of your code and redeploys it, but nothing already written to your database rolls back with it. A UI or logic change is safe to undo. A change that touched real records is not.
Bookmark before a big change
Before a redesign or a change to your data model, bookmark the version you are on: one click back instead of a long scroll through history.
Connecting it, if you want to
Open your project settings, pick GitHub, and authorise the account. Lovable creates a private repository and keeps it in sync both ways: changes in Lovable reach GitHub, and anything pushed to that branch comes back in. Free on every plan.
GitHub integration, Lovable docsIt’s also how you leave, if you ever want to
The synced repository is a standard Vite and React project: clone it, hand it to a developer, or deploy it yourself.
Deployment, hosting, and ownership, Lovable docsWhere to host your application
Hosting gives your app a home on the internet so anyone can open it via a web link. Choose a service below to make your site live. (Your database, logins, and business records are stored separately in Supabase, covered below).
| Host | Best for | Notes | Free tier |
|---|---|---|---|
| LovableBuilt in | Publishing from the chat | The project you have been previewing publishes itself, with nothing to configure and no account to open anywhere else. Free on any plan at a lovable.app address. Paid plans put it on your own domain: buy one through Lovable and the DNS is done for you, or point one you already own at it using the two records the setup screen shows. Certificate issued automatically either way. | Free on a lovable.app subdomain · own domain on paid plans |
One button, and the app you have been previewing is live.
Hosting it somewhere else
Only for a setup Lovable does not offer: a host you already pay for, or the exported code on your own account. None of it is needed to go live.
| Host | Best for | Notes | Free tier |
|---|---|---|---|
| Vercel | One-click deploys | Connect the repository once and every push goes live on its own, with nothing to configure for a Vite project. Read the plan terms before you point a company domain at it: Hobby permits personal, non-commercial use only, so a help center for a product you sell belongs on Pro at $20/user/mo. | Pro from $20/user/mo (Hobby is non-commercial) |
| Netlify | Drag-and-drop or Git | Connect the repository, or drag the built folder onto the page and be live in about a minute. It needs one redirect rule so a link straight to a single article opens that article rather than a not-found page, which matters more here than on most builds, because a link to one article is how most of your readers will arrive. | Free tier |
| Cloudflare Pages | Readers in several countries | Copies of the site sit near your visitors rather than in one place. Worth choosing if you have translated the library, since the reason you translated it is that your readers are somewhere else. | Generous free tier |
| GitHub Pages | Not really this app | Free publishing straight out of your GitHub project, after changing one routing setting. Listed mainly to be ruled out: publishing free requires the repository to be public, and this one sits alongside an app holding your customers’ questions and attachments, so the free path is one you would not want to take. | Free from a public repo only |
| Firebase Hosting | Teams already on Google | Set it up once, then release with a single command each time. The reason to choose it is almost always that your other accounts are already Google ones. | Free Spark tier |
| AWS Amplify Hosting | Teams already on AWS | Publishes from the AWS console, with one rewrite rule so a direct link to an article resolves. Worth choosing when AWS is already on your invoices and you would rather not add a vendor. | Free tier (build + hosting) |
| Surge | Publish from the terminal | One terminal command puts the built folder online, with no repository anywhere in the process. Good for showing a colleague what the help center looks like, though not for the address you put in your product’s footer. | Free - unlimited publishing |
| DigitalOcean App Platform | DigitalOcean users | Builds and serves from the account that already holds whatever else you run. That consolidation is the whole reason to pick it over the rest of this list. | Free - 3 static sites, 1 GB/mo transfer |
All of them will serve the app perfectly well, so judge them on three questions instead of one. Whether the plan permits commercial use, since Vercel’s Hobby tier does not and a help center for something you sell is commercial by any reading. Whether it can publish from a private repository, because this code sits next to an application holding your customers’ questions and whatever they attached to them. And whether you can put it on a subdomain of your own product’s domain, which matters more on this build than on any other in the catalogue, for the reason directly below.
Of every app in this catalogue, this is the one that has to be findable. Half the value of a help center is that somebody searching for your product’s problem lands on your answer rather than a forum thread from 2019, and that only happens if every article has its own real URL that returns the article, not a home page with the content swapped in by JavaScript. So: add the redirect rule your host asks for, check a direct link to a deep article in a fresh browser window before you announce anything, and host it on your own domain rather than a vendor’s subdomain, because the reputation the pages build belongs to whichever domain they sit on.
Keep your data in Supabase
Articles, tickets, chats, accounts, and every file somebody attached. This is also where the rules that outrank the person asking live, and where the scheduled job that tidies up your queue belongs.
| Service | Best for | Notes | Free tier |
|---|---|---|---|
| Supabase | Data, auth, functions, files, real-time | The library and the queue sit in Postgres, all four kinds of account come from its auth service, the chat messages travel over its real-time channel, the attachments go into its storage, and its edge functions carry the jobs that have to be permitted more than the person triggering them: creating a user with a role, calling an AI model with your key. Setup amounts to opening a free project and handing the app its URL and publishable key. One piece belongs here rather than with your host: the scheduled job that closes tickets nobody answered. A static host serves files and cannot run anything on a timer, so that schedule lives beside the database. | Free tier, then usage-based |
Where AI genuinely helps a support team
Each of these is one more prompt once the library and the queue work. All five go through one server-side function holding your provider key, which is how the template already works, its translation feature being exactly that function.
Translate the library into the languages people write to you in
The cheapest way to serve customers who do not read your language, and the one AI feature this template already ships. Translation is also the safest starting point, because a human still approves the result before a customer sees it.
Add a "Translate" action on an article that sends its title and body to my ai function and stores the result as a draft translation for the language I picked, never as a published one. Keep the article’s structure (headings, lists, and links stay where they are) and leave any product names, code, and UI labels I have marked as do-not-translate exactly as they were. Show it beside the original for approval before anything publishes, and mark a translation stale when the source article changes afterwards.
Turn a solved ticket into the article that stops the next one
The best help articles are already written, badly, in your ticket history. Somebody explained the fix properly at 4pm on a Tuesday and then the explanation went into an archive nobody reads. This is the feature with the most compounding value in the whole list.
Add a "Draft an article from this" action on a resolved ticket. Send the conversation to my ai function and get back a draft article: a title phrased the way a customer would search for it, the steps that actually fixed the problem, and a suggested category from my existing list. Strip every specific detail first (names, email addresses, order numbers, account identifiers, and anything in an attachment) and save it as a draft for an editor to approve rather than publishing it. Where the fix depended on something specific to that customer, say so in the draft instead of writing a general instruction that will not work for anybody else.
Put the right article in front of the agent, mid-reply
The finding that most agents never mention self-service is not laziness, it is that finding the right link mid-conversation costs more than typing the answer again. Remove that cost and the behaviour changes on its own.
While an agent is reading a ticket, retrieve the three most relevant published articles for it and show them beside the reply box with a button that inserts a link and a one-line summary into the draft reply. Do the retrieval against my own published articles only, in the language the customer wrote in, and pass just those articles to my ai function for the summary line. Never invent an article that does not exist, and show nothing rather than a weak match. A bad suggestion costs the agent more attention than an empty panel does.
Answer from your own articles, and only from them
This is the feature the vendors charge per resolution for, and it is buildable, with more care than anything else here. An assistant that answers from your library is useful. One that improvises a refund policy has made a commitment on your behalf. Read the last line of the prompt below as the point of the feature rather than a caveat on it: the log of questions it could not answer is worth more than the answers.
Add an assistant on the help center that answers only from my published articles. Retrieve the relevant articles first and pass their text to my ai function, and constrain the answer to what is in that text: no general knowledge, no inference. Every answer cites the articles it came from as links the reader can check. When the retrieved text does not contain the answer, say exactly that and offer the contact form rather than attempting one. Never state a policy on refunds, delivery, warranty, cancellation, or account closure that is not written verbatim in the source it was given, and log every question it could not answer, because that log is my list of articles to write.
Ask what this week’s tickets were actually about
Your reporting answers the questions you had when you built it. What turns up later is which release caused the spike, whether the new pricing page created work, and which twenty questions are one missing article.
Add a panel on the admin dashboard that groups the last period’s tickets and chats by what they were about, using my ai function, and returns the themes with a count each, a representative example per theme, and, where the theme maps to nothing in my library, a suggested article to write. Send the subject and body text with names, email addresses, and order numbers removed, never attachments, and state the counts as figures rather than describing them vaguely. Print the period it covered beside the result so I am never reading last month as though it were this one.
You bring no key and pick no provider: Lovable manages an API key per project, and if you do not name a model it chooses one from what you describe. Match the model to the job: fast and cheap for anything that runs on every record, stronger only where the reasoning matters. Send every feature above through that one integration.
Get a head start with our template
All of the above starts from nothing, and nothing is not the only place to start from. This app is already built and already working, which turns the weeks that search, chat, and four roles’ worth of access rules would take into an afternoon of loading in your own articles.
Help Center & Support Desk
The exact support desk this guide builds, packaged so you can open it, point it at your own backend, and make it yours from there. A help center and support desk in one, so customers can find answers themselves and your team handles the rest. Articles and FAQs cut down the repeat questions, tickets and live chats land in role-scoped dashboards, and an admin panel keeps users, content, and analytics in one place.
The key benefits of starting with a template
The search already searches the body text and the chat already arrives in real time. That is most of what this saves you. Behind it, the ticket timeline, the attachments, the translations, the analytics, and a four-role permission model are done too.
Building the core from scratch
~126 hrs
Opening the template, already built
~1 hr
~125 hrs of building you skip
Two different things, measured deliberately. The ~126 hrs buys you the application. The ~1 hr is what it takes to open the finished one, point it at a database of your own, and get a first category of articles into it. Writing those articles is work either way, so it sits outside both numbers.
A help center that already answers
Articles in categories with search across the body text, a FAQ of its own, related articles under each one, was-this-helpful voting that counts one vote per reader, comments, and a contact form that suggests likely articles by keyword while somebody is still typing their question, the screen where a ticket does not get opened.
A queue and a chat, both finished
Tickets with a full timeline, five statuses including the waiting-on-the-customer one people forget, file attachments up to 10 MB on tickets and chats, a shared agent inbox with assignment, live chat between a customer and a human agent, direct messages between staff, and a scheduled job that closes what nobody has touched.
Four roles enforced 89 ways
Customer, agent, editor, and admin accounts with 89 row-level security policies behind them, so an editor writing the library cannot read a stranger’s ticket and a customer cannot reach anything but their own, plus 4 server-side functions for the rules that have to outrank the person asking, and a per-user set of notification preferences on top.
Translations and analytics, already wired
Per-article, per-category, and per-FAQ translations with a one-click AI translation into Spanish, French, and German through a server-side function that is the only place your provider key exists, and article views, helpfulness scores, and ticket volume charted in the admin panel, which is where you find out which article to write next.
A codebase your AI tool can keep extending
Types everywhere, files grouped by the feature they belong to rather than by what kind of file they are, and a comment anywhere the reasoning would not be obvious to somebody meeting the code for the first time. The access rules are where that pays: with four roles spread over twenty-odd tables, a change that ignores the pattern already in place is how one customer ends up looking at another customer’s problem.
From founders who build on our templates
The distance between an idea and a live, production-ready system used to be massive. This foundation collapses that gap entirely. It allows us to deploy enterprise-grade tools at the speed of thought.
Jeevan ThomasFounder & CEO, Hado.aiCommon questions
No, and this is the most important thing to know before you compare it with anything. The chat in this template connects a customer to a human agent, a real-time conversation, not an assistant answering on your behalf. The only AI in it is article translation. If what you want is an assistant that resolves questions unaided, that is a feature to build (the AI section above has the prompt and the constraints it needs), and it is the same feature three of the four vendors above charge per resolution for.
Not as it stands, and it is worth deciding about early. The template notifies people inside the app and keeps a per-user set of notification preferences, but it carries no outbound email anywhere. The contact form writes a ticket and stores its attachments rather than sending a message. Connecting an email service is a small, well-defined addition, and one to make before real customers use it: on a support desk, a reply the customer never sees is the most common reason a fast team feels slow.
No. That is the half an AI coding tool is strongest at. Say what you want in ordinary language and out come the tables, the four kinds of account, the rule deciding what each of them may reach, the real-time channel carrying the chat, and the server-side functions for the jobs that have to be permitted more than the person who triggered them. The only part left to you is opening a free Supabase project for it all to be written into.
Reading, yes: the whole library, the FAQ, and the search are open, which is the point of a help center. Opening a ticket in this template goes through an account, so a customer can come back and follow their own request. Accepting a question from anybody with an email address and letting them claim it into an account later is a described change rather than a rebuild, and it is the right one if a lot of your questions come from people who are not customers yet.
The translation feature ships pointed at Spanish, French, and German, and adding a language is a change to one map in one server-side function rather than a new feature. On quality: a machine translation of a how-to article is usually fine, and a machine translation of your refund policy is a policy statement in another language, which is why the template stores translations for approval rather than publishing them. Decide who signs those off before you switch it on.
Yes. Bulk import takes CSV and Markdown files, with a Markdown file split into separate articles on its top-level headings, which is close to how most existing documentation is already stored. Anything in another format is a conversion into one of those two rather than a manual re-typing, and it is worth doing properly: the library you import is the asset, and article number fifty is where search starts to matter.
Rules in the database rather than filtering on the page: 89 of them across the tables, which is what four roles over twenty-odd tables comes to. The one worth asking your AI tool to prove is the chat: a real-time subscription is a query too, so ask to be shown somebody subscribing to a conversation they are not part of and getting nothing. A demonstration rather than a description, because that is the check people skip.
A place to keep the data and a place to serve the app, and both have a free tier. The upgrade worth making once real customers depend on it is Supabase Pro, from $25/mo, not because articles and tickets are large, since they are text, but because attachments are, and because a free project goes to sleep after a quiet week. Beyond those two lines nothing here grows with the size of your team or with how many questions you answer. Add an AI feature and you pay whichever model you call for the text you send it, which bills quite differently from paying per answer.
Yes, and it needs no structural change to do it. The customer role becomes the employee filing a request, agents become whoever handles them, and editors write the internal documentation. Two things are worth adjusting: restrict sign-up to your own email domain, and think about which roles may read which tickets, since an internal desk mixes IT requests with things people would rather their colleagues could not read.
Nothing here is proprietary. Your articles, tickets, and conversations sit in plain PostgreSQL tables, which any Postgres host will accept from a standard dump, and the attachments are files you can copy like any other files. That is worth more in this category than most: a support archive is years of your team’s accumulated answers, and it is exactly the asset that makes a platform expensive to leave.
Yes, and here it is worth more than reassurance. Every host listed above attaches a domain in a few clicks with HTTPS included, and the pages you are about to write are meant to be found by people searching for your product’s problems, so putting them on a subdomain of your own site means that traffic and that reputation accrue to you rather than to a vendor’s. It is the difference between building an asset and renting a shelf.
No. Everything happens in a browser tab: you describe what you want in the chat, and Lovable writes and previews the code. The setup section above covers the handful of things you connect first: an account, a plan, and your own Supabase project.
A sketch on the Free plan is fine for testing an idea, with no real backend behind it. A project connected to your own Supabase account is the one you can actually launch, with real logins, real data, and your own domain.
Build credits reset every day (Free) or on your billing cycle (paid plans). If you run out mid-session, the app you’ve built stays exactly as it is. You either wait for the reset or move up a credit tier to keep going right away.
References
Sources checked August 2026- 01Only 1 in 7 customer service queries resolved with self-service (Gartner survey, August 2024). cxtoday.com (Gartner survey published August 2024)
- 02Only 14% of customer service issues are fully resolved in self-service (same Gartner survey, second read). destinationcrm.com (published September 2024)
- 0360% of customer service agents fail to promote self-service (Gartner survey, 5,801 customers, early 2025). directorsclub.news (published June 2025)
- 04Pricing (per-agent tiers, Copilot add-on, per-automated-resolution AI billing), Zendesk. zendesk.com
- 05Pricing (per-agent tiers, AI agent sessions, day passes), Freshdesk. freshworks.com
- 06Pricing (per-seat tiers, Fin per-outcome pricing and its definition), Intercom. intercom.com
- 07Pricing (free tier, per-user tiers, AI Answers per resolution), Help Scout. helpscout.com
- 08Pricing (Pro plan, egress, backups, free-tier pause), Supabase. supabase.com
- 09Web developer hourly rates 2026 (freelance and agency benchmarks). developex.com
- 10Row Level Security, Supabase docs. supabase.com
- 11Storage access control, Supabase docs. supabase.com
- 12Realtime authorization (access rules on subscriptions), Supabase docs. supabase.com
- 13Sign up, Lovable. lovable.dev
- 14Subscription plans (Free, Pro, Business), Lovable docs. docs.lovable.dev
- 15Connect Supabase, Lovable docs. docs.lovable.dev
- 16GitHub integration, Lovable docs. docs.lovable.dev
- 17Deployment, hosting, and ownership, Lovable docs. docs.lovable.dev
- 18Version history and reverting, Lovable docs. docs.lovable.dev
- 19Preview toolbar (Select elements), Lovable docs. docs.lovable.dev
- 20AI features and model selection, Lovable docs. docs.lovable.dev
- 21Custom domains, Lovable docs. docs.lovable.dev
This guide is general information, not legal advice. What you may keep in a support record, how long you may keep an attachment somebody sent you, and what a customer may ask you to delete vary by country and by state, so check your own rules before you collect anything. Third-party prices, plan terms, and market rates are quoted from the sources above and were last checked on the date shown. Vendors change them without notice, so confirm before you budget. Build hours and the cost estimates derived from them are our own estimates, not quotes. Lovable is a product of Lovable Labs. Verify current capabilities and pricing before relying on them.