Self-Signup
The self-signup flow lets new customers register and subscribe to a paid plan without sales team involvement. It’s a 4-step wizard at /signup that takes approximately 5 minutes to complete.
Flow Overview
Step 1: Contact details
→ name, email, mobile, country, password
Step 2: Company details
→ company name, website, industry
Step 3: Tax & region (India only — skipped for non-India)
→ state, GST number, SEZ status, PAN
Step 4: Plan selection & billing address
→ plan picker, billing address, T&C acceptance
→ account creation
→ Razorpay payment
→ welcome emailNon-India users skip Step 3 entirely (it’s marked complete automatically) and go straight from Step 2 to Step 4.
Session Management
A signup session is created when the user submits Step 1. The session is valid for 1 month.
- All form data (except the password) is saved after each step.
- If the user closes the browser, they can resume via the link emailed after Step 1:
/signup?session={sessionId}. - On return, a modal prompts for the password (passwords are never stored in the session for security).
- Expired sessions show a “Your Signup Link Has Expired” page with a “Start New Signup” button.
Session states: step_1 → step_2 → step_3 → step_4 → payment_pending → complete
Step Details
Step 1 — Contact Details
| Field | Required | Notes |
|---|---|---|
| Country | Yes | Determines Step 3 visibility, currency, phone code |
| First/Last Name | Yes | 2+ characters, letters only |
| Yes | Checked for uniqueness against existing accounts | |
| Mobile | Yes | Country code auto-set from country selection |
| Password | Yes | Min 8 chars, must include letters and numbers; generate button available |
Validation fires on “Continue” click only (not on blur).
Step 2 — Company Details
| Field | Required | Notes |
|---|---|---|
| Company name | Yes | Used in billing and invoices |
| Company website | No | URL format if provided |
| Industry | Yes | Predefined dropdown |
Step 3 — Tax & Region (India only)
| Field | Required | Notes |
|---|---|---|
| State | Yes | Determines SGST rate |
| GST registered? | Yes | Yes/No radio |
| GST Number | If GST = Yes | 15-char alphanumeric format |
| SEZ? | If GST = Yes | Yes/No radio |
| PAN Number | No | 10-char alphanumeric |
Tax calculation logic:
- Non-India → 0% (Overseas)
- India, no GST → 18% IGST (Unregistered Business)
- India, GST = Yes, SEZ = Yes → 0% (Special Economic Zone)
- India, GST = Yes, SEZ = No, Kerala → 9% SGST + 9% CGST
- India, GST = Yes, SEZ = No, other state → 18% IGST
Step 4 — Plan & Billing
- Two plan cards with pricing (India: ₹34,999 / ₹49,999 per month; UAE: AED 2,800 / AED 3,500).
- Billing address (auto-fills country from Step 1; India also auto-fills state from Step 3).
- Terms of Service + Privacy Policy checkboxes (both required).
Account creation happens on Step 4 submission, before payment. This ensures the account exists even if payment fails.
Payment Flow
- Step 4 submitted → tenant, user, subscription, and invoice records created → Razorpay order created.
- Razorpay modal opens.
- On success: invoice marked paid, subscription activated, welcome email sent, redirect to login.
- On failure: account remains active, invoice stays
unpaid, three options shown: Retry / Bank Transfer / Contact Sales. User can also log in and pay later from the dashboard.
Emails
| Trigger | Recipients | Subject |
|---|---|---|
| Step 1 or 2 abandoned (1h) | User | ”Complete Your Leadmetrics Signup” |
| Step 1 or 2 abandoned (24h) | User | ”Complete Your Leadmetrics Signup” (repeat) |
| Step 3 abandoned (1h, 24h, 3d, 5d) | User | ”You’re Almost There! Complete Your Leadmetrics Signup” |
| Any step abandoned (1h, once) | Internal sales team | ”Client Sign Up Incomplete” |
| Step 4 submitted | User | ”Welcome to Leadmetrics” |
Internal alert goes to: jithin@leadmetrics.ai (TO), sana@leadmetrics.ai, vishnu@leadmetrics.ai, vibin@leadmetrics.ai (BCC).
The welcome email must NOT include the password or login credentials — it uses the company name in the greeting, not the first name.
Data Captured
Session stores all form fields (except password), UTM source/medium (if in URL), step history with timestamps, and current stage. On account creation, the session ID is stored on the Tenant record and vice versa. createdVia = "self-signup" is set on the Tenant.
Related Docs
- Onboarding — what happens after signup: AI onboarding, context file generation, strategy
- Tenant Lifecycle & Billing — how tenant status progresses from
onboarding→active→locked - Full BRD — original business requirements document with complete field specs and acceptance criteria