Voice and Tone¶
The canonical Kwilo writing reference. It governs product UI strings (buttons, empty states, errors, emails, push, AI output) and marketing copy (flyers, LinkedIn, WhatsApp, outreach, decks, site).
Written for everyone who ships words: engineers, PMs, designers, marketers, founders. Not a marketing-only artifact.
If a rule here disagrees with any other doc or skill, this file wins.
How to use it¶
Voice is fixed. Tone flexes by moment. Get the voice from Voice, then find your moment in Tone by moment and write to that row.
The stack, in order:
- Plain modern English. We do not borrow an outside house style. Where a rule is not written down here or in the
copywritingskill, use the plainest form a reader would expect, and add the rule here once the question comes up twice. - Global
copywritingskill. Mechanics: no em dashes, sentence case, straight quotes, banned phrases. Applies everywhere. - This doc. Voice, tone, names, terminology, claims.
kwilo-brand-voiceskill plus its channel skills, for marketing execution.
Voice¶
Plain, confident, a little blunt. Short sentence, then a longer one that earns it.
We sound like a colleague who has seen the problem before, not a vendor. We name the problem before we name the fix. We sell with what the product does, not with adjectives.
| We are | We are not |
|---|---|
| Direct | Blunt to the point of cold |
| Specific | Vague and impressive |
| Calm under failure | Apologetic or panicked |
| Plain | Simplified for a beginner who is not there |
| Confident about what we built | Confident about what we have not measured |
| On the reader's side | Clever at the reader's expense |
Three failure modes to catch in review: breathless, apologetic, and clever.
Tone by moment¶
Find the row, write to it. The moment decides the tone before anyone starts drafting, which is the whole point of having this table.
| Moment | Reader state | Tone | Write like |
|---|---|---|---|
| First run, onboarding | Curious, unsure it is worth the time | Low pressure, concrete | "Upload one script. You'll see the marks in about a minute." |
| Empty state | Nothing to look at, needs a reason to act | Invitation, never apology | "Upload a script to start marking." |
| Waiting, processing | Impatient, wondering if it broke | Concrete progress, no jokes | "Marking 24 of 60 scripts." |
| AI output on screen | Cannot tell if it is right | Plain, sourced, hedged only where it matters | "Marked against your scheme. Review before you publish." |
| Low-confidence AI output | About to trust something shaky | Name the doubt, name the fix | "Two answers were hard to read. Check pages 3 and 7." |
| User input error | Slightly annoyed at us | Neutral, name the fix, no blame | "Roll number must be 10 digits." |
| Our failure | Losing trust by the second | Own it, direct, one next step | "Upload failed on our side. Try again, nothing was lost." |
| Destructive confirm | One click from regret | Literal, name the consequence | "Delete 60 marked scripts? This cannot be undone." |
| Exam-critical surface: marks, eligibility, attainment | Accountable to a board or a parent | Formal, precise, zero personality | "Eligibility is based on 74% attendance as of 12 Aug 2026." |
| Milestone, streak (Learner) | Pleased, wants it acknowledged | Warm, brief. One exclamation allowed | "Seven days straight!" |
| Paywall, upgrade | Weighing spend | State the value, never fear | "Pro adds unlimited mock tests. Your free practice stays." |
| Marketing asset | Skeptical, pitched by six vendors already | Problem first, proof second | "Your faculty lose three weeks a semester to marking. We counted it." |
Never carry personality into the exam-critical row. A mark, an eligibility decision and an attainment number are records, and a record has no voice.
Product names¶
| External name | What it is |
|---|---|
| Kwilo Campus | The B2B line that runs the institution: students, admissions, fees, timetable, exam ops, HR, payroll, library, attendance, face attendance, helpdesk, ID cards, forms |
| Kwilo Classroom | The B2B line where teaching and learning land: courses, curated content, assignments, AI tutor, AI content, AI grading, online classes, class recording, messaging, gamification, marketplace |
| Kwilo Learner | The B2C learner app and web experience |
- Campus and Classroom pair on purpose. Campus is the institution, Classroom is where the teaching lands. One sentence explains the split.
- Internal SKU and pricing keys are internal. Never lift one into copy, whatever it says.
- The mandatory floor is not a product name. Org and identity, SMS notifications and org analytics are "included with every plan", never a third line a buyer picks.
- Never mix lines with the B2C app. Kwilo Learner does not appear in campus copy. Payroll does not appear in learner copy.
- Module lists are code, not memory. Check
apps/site/src/constants/pricingModules.tsandERP_MODULESinapps/backend/src/erp/registry.pybefore enumerating. Transport, hostel, alumni and placements are not built.
Words we use¶
Trainer and learner in everything we write. Flyers, posts, emails, decks, site copy. No exceptions on our side.
Inside the product the label is the org's call, not ours. The trainer label resolves per org type from the terminology API (apps/backend/src/core/terminology.py) and renders as Teacher, Faculty, Instructor or Trainer. A school seeing "Teacher" is correct behaviour. So never hardcode the word in a UI string: go through tp() and ROLE_TERMINOLOGY_MAP (apps/web/src/constants/roles.ts) and let the org decide.
Roles are platform_admin, org_admin, unit_manager, instructor, learner, guardian, external_educator, b2c_user. B2C is the single b2c_user role, with a user_type bucket of creator, learner or operator. The family-side role is guardian.
Same concept, same term, everywhere. Pick one and stop rotating: "practice", not practice then drill then exercise across three screens. A term that means two things in two places costs more trust than a dull word ever does.
Inclusive by default. No gendered assumption about a trainer or a learner. No ability metaphors ("blind to", "crippled by"). Aim at a Class 9 reading level in learner-facing copy and do not go above Class 12 anywhere.
Product UI strings¶
- Never hardcode a user-facing string. Everything through i18n. English is the source locale.
- Second person. "your practice", "you'll get".
- Sentence case for buttons, headings, labels: "Save", "Add subject", "Your study plan". No Title Case, no ALL CAPS. Single-word status badges are statuses, not titles.
- 15 to 20 words per sentence, maximum. Two ideas, two sentences.
- Use names when known. "Return Priya's script" beats "Return the learner's script". Twice per screen is the ceiling.
- Active voice. "We counted 14 papers" beats "14 papers were counted".
- Positive phrasing. Hunt for "can't", "don't", "not" and try to flip them.
- No emoji as UI chrome. Emoji live in user-generated content only.
- No exclamation marks outside the milestone row above.
- No abbreviations the reader has to decode. Spell out "previous year questions" once, then PYQ is fine.
- No repetition inside one sentence. "3 of 5 topics are weak" beats "3 of 5 of your topics are weak topics".
- Numbers, not adjectives. "24 of 60 marked" beats "almost done".
Writing for AI features¶
Most of the product is AI. These rules keep it trustworthy, and they are the ones reviewers miss.
- The AI suggests, a human decides. Every AI surface ends at accept, edit or reject. Copy must make the human's authority obvious, never imply the output is final.
- Never a mark from a machine. No copy anywhere may suggest a grade was issued without a trainer approving it.
- Say what it ran on. "Marked against your scheme", "from your set book", "counted from 11 years of papers". Grounding is our strongest claim and it is free to state.
- Flag doubt where it changes what the reader should do, and nowhere else. Label every output as uncertain and readers discount all of it equally. Label none and they over-trust. Flag the specific page, answer or topic that needs a human eye.
- Never invent a confidence number. No percentage we did not compute.
- Correct the two wrong mental models. Readers arrive thinking the AI is either a search engine or omniscient. Copy for a tool that drafts and gets checked.
- No fake humanity. The tutor does not have feelings, opinions, or a body. It can be warm without pretending.
- Failure is a normal state, not an exception. Every AI surface needs a written failure line with a way forward.
India-first English¶
- Indian English. Indian boards (CBSE, ICSE, VTU, AICTE), Indian exams (JEE, NEET), Indian scenarios. No US framing, no US spelling of grading terms.
- Short forms by default. "you'll", "it's", "we're".
- Rupees, symbol first, no space: ₹399, ₹3,990.
- Indian digit grouping at six digits and above: ₹1,20,000, ₹12,00,000. Decimals with a period: 2.1%, no space before the percent sign.
- Lakh and crore are fine in body copy, spelled out, never "L" or "Cr". Avoid them in a table where a figure gets compared to a plain number.
- Dates as 12 Aug 2026. Never 08/12/2026, which reads two ways.
Claims¶
These lines are load-bearing and true. Reuse them. Do not soften, do not exceed.
- "We counted it. We do not predict it." PYQ frequency comes from real past papers.
- "The AI never posts a mark. A trainer does."
- "Your data leaves when you do. Full export, any time, no exit fee."
- "The pilot costs nothing. We mark your own scripts, not our demo data."
- The tutor is free and never metered.
Never claim a rank, a result, a NAAC or NBA score, or an OCR accuracy number we have not measured on the customer's own scripts. If a sentence reaches for "guaranteed" or "best", stop and write what the product does.
Everything in the Classroom line runs on the institution's own syllabus, set books, question bank and marking scheme, and a trainer approves every output. Evaluation and proctoring both end at a human decision, and the copy says so.
Every module carries its own feature flag, so "switch on one module at a time" is a product fact, not a sales promise.
Positioning spine¶
B2B. Kwilo provides AI solutions for education. The word AI is not a modifier we can drop, it is what separates us from every ERP vendor a college has already been pitched. Two named lines, always branded: Kwilo Classroom and Kwilo Campus. Marking is the strongest proof and the usual pilot entry, not the identity. Sit beside the existing ERP, never lead with rip-and-replace.
The strongest argument is the work neither line does alone: exam eligibility from attendance, at-risk learner detection, CO-PO attainment, accreditation. That is where a college loses weeks to spreadsheets and email.
B2C. The free unmetered tutor is the spine. Counted-PYQ practice and Quests hang off it. Kwilo Learner is the practice hour between the classes a learner already pays for, not a coaching replacement.
Tagline: "Delivering the future of education." Brand lockup only: covers, closing slides, signatures. Never inside an argument, because it fails the "could anyone say this?" test on purpose.
Before and after¶
The part people actually copy. Add rows as review catches things.
| Instead of | Write |
|---|---|
| "No data found." | "Upload a script to start marking." |
| "Oops! Something went wrong 😕" | "Upload failed on our side. Try again, nothing was lost." |
| "Our AI-powered platform leverages cutting-edge technology to transform outcomes." | "Your faculty lose three weeks a semester to marking. We counted it." |
| "The assignment has been successfully submitted by the student." | "Priya submitted her assignment." |
| "AI Grade: 78/100" | "Suggested: 78 of 100. Approve or change before publishing." |
| "We're excited to announce our brand new Quests feature!" | "Quests are live. Pick a path, keep a streak, watch skills add up." |
| "Best-in-class exam automation guaranteed to improve NAAC scores." | "Attainment reports built from the attendance and marks already in Kwilo." |
| "Are you sure?" | "Delete 60 marked scripts? This cannot be undone." |
Product facts worth keeping straight¶
- Quests (Learner): gamified adventure map. Pick a path, do short activities (quiz, rapid mock, puzzle, flashcards, story, coding challenge, spot-the-bug). Daily streak, skills add up. Bands: Starter, Builder, Advanced. Live subjects: HTML, Thinking skills, Python, JEE Physics.
- Learner pricing: Free (₹0) does real work. Pro ₹399/mo, ₹3,990/yr, two months free. No card to start.
- B2B status: in pilot with engineering colleges in Karnataka and Telangana.
- Mobile: Kwilo Campus ships from
apps/mobile-b2b, bundleai.kwilo.campus, version 0.1.0. Say "in build". No date, no store link until it ships.
Guardrails¶
A guide nobody enforces drifts back to generic in a quarter. Three enforcement points:
- Skills carry it.
kwilo-brand-voiceloads this doc for marketing work. The globalcopywritingskill catches mechanics. Both fire automatically on writing tasks. - Review checks it. Any MR touching a user-facing string or a marketing asset gets read against the tone row it belongs to. Wrong tone for the moment is a review comment, same as a bug.
- Prose linting is the gap. There is no Vale config in the Kwilo repos yet. Until there is, points 1 and 2 are the only enforcement, and they depend on people. Worth closing.
Changing this doc: open an MR against kwilo-docs and say which rule you are changing and what broke to prompt it. New rows in the tone and before/after tables need no debate, add them.
Reference material¶
kwilo-marketing/research/india-market.mdfor ICP, personas, why-now.kwilo-marketing/research/competitors.mdfor the three fronts and where Kwilo wins each.kwilo-marketing/research/use-cases.mdfor concrete scenarios.kwilo-marketing/collateral/flyers/*.htmlfor rhythm. Read one before writing long-form.