Includes: - Admin dashboard layout and page updates - API account auth module (routes, schemas, service) - Dashboard sign-up form extraction, middleware refactor - Marketplace proxy and middleware updates - CORS origins expansion for dev environment - Seed email domain correction (.com → .ma) - Docs: create-account guide, fleet page, signup plan - Various UI component and layout refinements
8.1 KiB
Create Account Guide
How to create a new company workspace on RentalDriveGo.
Overview
Creating an account registers a new rental company on the platform. The flow has 4 steps presented as a multi-step form on the dashboard's public sign-up page. After completion, the company owner receives a confirmation email and can sign in to manage their workspace.
Supported languages: English, French, Arabic
Billing currency: MAD (Moroccan Dirham)
1. Accessing the Sign-up Page
From the marketplace homepage (port 3000)
- Click "Create Agency Space" in the header navigation.
- Click "Get Started" on any pricing plan card (
/pricingpage).
Both actions navigate to:
http://localhost:3000/dashboard/sign-up
The marketplace proxies this request to the dashboard app (port 3001), which renders the multi-step form.
URL parameters (optional)
| Parameter | Example | Purpose |
|---|---|---|
plan |
STARTER, GROWTH, PRO |
Pre-selects a pricing plan |
billing |
MONTHLY, ANNUAL |
Pre-selects billing period |
currency |
MAD |
Pre-selects currency (only MAD) |
Example: /dashboard/sign-up?plan=GROWTH&billing=ANNUAL¤cy=MAD
2. Form Steps
Step 1 — Account User
Required fields marked with *:
| Field | Type | Details |
|---|---|---|
| Manager/Owner first name * | Bilingual (FR + AR) | Max 80 characters |
| Manager/Owner last name * | Bilingual (FR + AR) | Max 80 characters |
| Manager/Owner email * | Used as login identifier | |
| Password * | Password | Minimum 8 characters |
| Confirm password * | Password | Must match |
| Preferred language * | Selection | English / Français / العربية |
Note: The same email can be reused for the owner account, company contact, and responsible person.
Step 2 — Company Info
Legal Identity section
| Field | Type | Details |
|---|---|---|
| Commercial name * | Bilingual (FR + AR) | The public-facing business name |
| Legal company name * | Text | Max 160 characters |
| Legal form * | Select | SARL, SARL AU, SA, SAS, AUTO_ENTREPRENEUR, EI, OTHER |
| Commercial Registry (RC) * | Text | Max 120 characters |
| ICE number * | Text | Max 120 characters |
| Fiscal ID (IF) * | Text | Max 120 characters |
| Operating license number * | Text | Max 120 characters |
| License issue date * | Date | Format: YYYY-MM-DD |
| Issuing authority * | Text | Max 160 characters |
Company Contact section
| Field | Type | Details |
|---|---|---|
| Phone * | Text | Max 80 characters |
| Company contact email * | Max 254 characters | |
| Fax | Text | Optional |
| Years active * | Select | Less than 1 year, 1 to 5 years, More than 5 years |
| Street Address * | Bilingual (FR + AR) | Max 200 characters |
| City * | Bilingual (FR + AR) | Max 120 characters |
| Country * | Bilingual (FR + AR) | Max 120 characters |
| Zip code * | Text | Max 40 characters |
Legal Representative section
| Field | Type | Details |
|---|---|---|
| Legal representative name | Text | Optional, max 160 characters |
| Legal representative title | Text | Optional, max 120 characters |
Responsible Person section
| Field | Type | Details |
|---|---|---|
| Responsible person name * | Text | Max 160 characters |
| Responsible person role * | Text | Max 120 characters |
| Responsible person ID number * | Text | Max 120 characters |
| Qualification / diploma * | Text | Optional, max 200 characters |
| Responsible person phone * | Text | Max 80 characters |
| Responsible person email * | Max 254 characters |
Step 3 — Choose Plan
Select one of three plans:
| Plan | Description |
|---|---|
| STARTER | Core fleet, offers, and bookings |
| GROWTH | Featured marketplace placement and more room to scale |
| PRO | Full white-label and premium controls |
Additional options:
| Field | Options |
|---|---|
| Billing period | Monthly / Annual |
| Primary provider | AmanPay / PayPal |
Currency is fixed to MAD.
Step 4 — Review and Launch
Review all entered information. Click "Create workspace" to submit.
After successful submission, the page displays a confirmation with:
- The company name
- The owner email
- A link to "Enter dashboard" to start using the workspace
3. Backend API
Endpoint
POST /api/v1/auth/company/signup
Request body (validated by companySignupSchema)
{
"firstName": "string (max 80)",
"lastName": "string (max 80)",
"email": "valid email",
"password": "string (8-128 chars)",
"companyName": "string (2-120)",
"legalName": "string (2-160)",
"legalForm": "string",
"registrationNumber": "string",
"iceNumber": "string",
"taxId": "string",
"operatingLicenseNumber": "string",
"operatingLicenseIssuedAt": "string",
"operatingLicenseIssuedBy": "string",
"streetAddress": "string",
"city": "string",
"country": "string",
"zipCode": "string",
"companyPhone": "string",
"companyEmail": "valid email",
"fax": "string (optional)",
"yearsActive": "string",
"representativeName": "string (optional)",
"representativeTitle": "string (optional)",
"responsibleName": "string",
"responsibleRole": "string",
"responsibleIdentityNumber": "string",
"responsibleQualification": "string (optional)",
"responsiblePhone": "string",
"responsibleEmail": "valid email",
"preferredLanguage": "en | fr | ar",
"plan": "STARTER | GROWTH | PRO",
"billingPeriod": "MONTHLY | ANNUAL",
"currency": "MAD",
"paymentProvider": "AMANPAY | PAYPAL"
}
Response (201 Created)
{
"companyId": "uuid",
"companyName": "string",
"slug": "string",
"trialEndsAt": "ISO date or null",
"nextStep": "onboarding",
"emailDelivery": {
"attempted": true,
"success": true,
"error": null
}
}
4. After Sign-up
Sign in
Navigate to /sign-in (redirects to /dashboard/sign-in). Enter the owner email and the password set during sign-up.
Onboarding
After first sign-in, the user is directed to the onboarding page (/onboarding) where they can:
- Step 1 — Company profile: Set display name, tagline, brand color, and public location.
- Step 2 — Payments: Configure AmanPay merchant ID / PayPal email and marketplace listing preference.
- Step 3 — Completion: Redirect to the dashboard home.
Subscription
New accounts start on a 90-day free trial with the selected plan. The subscription status is shown in a banner on the dashboard home. Users can manage billing from the /subscription page.
5. Relevant Code Files
Frontend
| File | Purpose |
|---|---|
apps/marketplace/src/app/renter/sign-up/page.tsx |
Marketplace redirect page to dashboard sign-up |
apps/dashboard/src/app/sign-up/[[...sign-up]]/page.tsx |
Main multi-step sign-up form (4 steps, 937 lines) |
apps/dashboard/src/components/ui/BilingualInput.tsx |
Bilingual (FR/AR) input component |
apps/dashboard/src/components/layout/PublicShell.tsx |
Public layout wrapper for the sign-up page |
apps/dashboard/src/app/onboarding/page.tsx |
Post-sign-up onboarding (company profile, payments) |
apps/dashboard/src/app/forgot-password/page.tsx |
Password reset flow |
apps/dashboard/src/app/reset-password/page.tsx |
Reset password page |
apps/dashboard/src/app/onboarding/accept-invite/page.tsx |
Accept team invitation |
Navigation links to sign-up
| File | Location |
|---|---|
apps/marketplace/src/components/MarketplaceHeader.tsx |
"Create Agency Space" button |
apps/marketplace/src/components/WorkspaceTabs.tsx |
"Owner sign in" link |
apps/marketplace/src/app/(public)/pricing/PricingClient.tsx |
"Get Started" pricing CTA |
apps/marketplace/src/app/(public)/HomeContent.tsx |
Homepage CTA |
Backend
| File | Purpose |
|---|---|
apps/api/src/modules/auth/auth.company.routes.ts |
Express routes (POST /signup) |
apps/api/src/modules/auth/auth.company.service.ts |
Business logic: creates company, owner, workspace, sends email |
apps/api/src/modules/auth/auth.company.schemas.ts |
Zod validation schema for signup request body |
apps/api/src/lib/emailTranslations.ts |
Email templates in EN/FR/AR |