Signup and onboarding¶
Signup¶
One URL, /signup. Without ?as= it shows a persona picker. Picking Institution sends the visitor to the demo form on kwilo.ai.
| Method | Verification |
|---|---|
| Phone (default) | 6-digit SMS OTP via MSG91 |
| Google's verified email | |
| Email and password | 6-digit email OTP before a session exists |
Signup or login on either domain sets kwilo_access and kwilo_refresh as HttpOnly cookies on .kwilo.ai, so the app is already signed in after the redirect.
Email verification¶
An email signup gets no session until the OTP is verified. An unverified user who tries to log in is sent back to OTP entry with a resend option. The check applies only to b2c_user. Institutional accounts aren't affected. B2C_EMAIL_VERIFICATION_REQUIRED turns it off if email delivery breaks.
Google collisions¶
If a Google email matches an existing Learner account that was created with a password, Kwilo doesn't auto-link. The user is sent to /login with a prompt to sign in with the password or reset it. Institutional accounts are never matched by email, so a Google account can't take over a faculty login.
Institutional email domains¶
A trainer who signs up with an email on a domain an institution has verified is asked whether to join that institution's workspace. It's never a silent join. Institutional learners request to join and an admin approves. Institutions verify domains with a DNS TXT record.
Fraud signal¶
Signup stores a device fingerprint hash. Three or more accounts on one fingerprint are logged for review. Nothing is blocked automatically.
Onboarding¶
After signup, learners who haven't onboarded are sent to /onboarding. Kwi asks each question as a chat bubble:
- Education stage: primary, secondary, PU, undergrad, postgrad, working professional, exam prep
- Class level
- Exam intent (JEE or NEET)
- Subjects
- Goal: homework help, understand coursework, score well, learn something new
Every step can be skipped. A learner who skips sees a banner on /learn asking them to finish, and everything still works with neutral defaults.
Answers are saved to the learner's profile and drive the home, chat context, the Practice Hub exam family and Study Plan subjects.
Learning preferences¶
Settings → Learning preferences edits the same answers later: stage, class, subjects, exam and goal. It saves in place and personalisation follows immediately.
Attribution¶
Every signup records where it came from:
- External: UTM parameters and ad click IDs, both first touch (frozen on the first visit) and last touch.
- Internal: which site page and button sent the visitor to signup.
- Referrer and landing page.
Captured through a cookie shared across kwilo.ai subdomains, under the cookie consent rules. Details in Attribution and UTM.