110 lines
4.3 KiB
Markdown
110 lines
4.3 KiB
Markdown
# 🚗 RentalDriveGo— Multi-Tenant Car Rental SaaS + Marketplace
|
|
|
|
## Platform Model
|
|
|
|
**Rental Companies (B2B)** — pay RentalDriveGoa subscription (AmanPay or PayPal), get:
|
|
- A fully private dashboard (zero data overlap with any other company)
|
|
- Fleet management with vehicle photo upload (photos auto-appear on global marketplace)
|
|
- Promotional offers management
|
|
- A white-label site at `company.rentflow.com` where renters book and pay
|
|
|
|
**Renters (B2C)** — free account, can:
|
|
- Browse ALL companies' vehicles and offers on `rentflow.com/explore`
|
|
- Click a vehicle → **redirected to the company's site** to book and pay
|
|
- Receive full notifications (Email + SMS + WhatsApp + Push + In-App)
|
|
- Track all bookings across companies in one account
|
|
|
|
---
|
|
|
|
## ⚠️ Payment Providers — Stripe Has Been Removed
|
|
|
|
| Provider | Purpose |
|
|
|----------|---------|
|
|
| **AmanPay** (amanpay.net) | Primary. National/international cards, cash (3000+ points), e-wallet. Moroccan PCI-DSS Level-1 PSP. |
|
|
| **PayPal** | Secondary. Global coverage. |
|
|
|
|
**Two payment contexts:**
|
|
1. Company pays RentalDriveGosubscription → RentFlow's own AmanPay/PayPal account
|
|
2. Renter pays company for rental → Company's own AmanPay merchant + PayPal account (direct, no intermediary)
|
|
|
|
---
|
|
|
|
## 🌐 Marketplace is Discovery Only — No Booking on rentflow.com/explore
|
|
|
|
The global marketplace shows all vehicles with photos from all companies. When a renter clicks "Book this vehicle", they are **redirected to the company's branded site** (`{slug}.rentflow.com/book?vehicleId=X&from=Y&to=Z&ref=marketplace`). The booking form is pre-filled. All payment happens on the company site using the company's own payment accounts.
|
|
|
|
---
|
|
|
|
## 📸 Vehicle Photos → Marketplace Visibility
|
|
|
|
```
|
|
Company uploads photos in /dashboard/fleet
|
|
→ Stored in Cloudinary
|
|
→ Vehicle.photos[] holds the URLs
|
|
→ First photo = cover image on marketplace cards
|
|
→ All photos shown in marketplace vehicle gallery
|
|
→ isPublished=true makes vehicle appear on marketplace
|
|
```
|
|
|
|
---
|
|
|
|
## 🏗 Five-Layer Architecture
|
|
|
|
```
|
|
Layer 1A: rentflow.com — B2B marketing site
|
|
Layer 1B: rentflow.com/explore — B2C marketplace (discovery + redirect only)
|
|
Layer 2: app.rentflow.com — Company dashboard (private, subscription-gated)
|
|
Layer 3: {slug}.rentflow.com — Company branded site (booking + payment here)
|
|
Layer 4: api.rentflow.com — REST API
|
|
```
|
|
|
|
---
|
|
|
|
## 📁 Project Structure
|
|
|
|
```
|
|
rental-car-site/
|
|
├── README.md
|
|
├── docs/
|
|
│ ├── ARCHITECTURE.md ← Payment providers, marketplace redirect model, photo flow
|
|
│ ├── DESIGN_SYSTEM.md
|
|
│ ├── PAGES.md ← All pages. Marketplace = discovery only. Booking = company site.
|
|
│ ├── FEATURES.md
|
|
│ └── DEPLOYMENT.md
|
|
└── skills/
|
|
├── rental-car-website/
|
|
├── rental-car-components/
|
|
├── rental-car-backend/
|
|
│ └── references/
|
|
│ ├── schema.md ← AmanPay/PayPal fields, no Stripe
|
|
│ ├── api-routes.md ← All routes
|
|
│ ├── payment-service.md ← AmanPay + PayPal implementation ← KEY FILE
|
|
│ ├── subscription-service.md ← Manual renewal, plan prices in MAD/USD/EUR
|
|
│ ├── subdomain-service.md ← Marketplace redirect + company site
|
|
│ └── notification-service.md ← All 5 channels
|
|
└── rental-car-i18n/
|
|
```
|
|
|
|
---
|
|
|
|
## 🛠 Tech Stack
|
|
|
|
| Concern | Technology |
|
|
|---------|-----------|
|
|
| Subscription payment | AmanPay (primary) + PayPal (secondary) |
|
|
| Rental payment | Company's own AmanPay merchant + PayPal |
|
|
| PDF generation | `@react-pdf/renderer` — server-side, on-demand, never stored |
|
|
| Damage diagrams | SVG top-down car map (22 zones, React interactive + PDF static render) |
|
|
| Insurance | Per-company configurable policies with per-day/flat/% charge types |
|
|
| Pricing rules | Age/experience-based surcharges & discounts (configurable per company) |
|
|
| Email | Resend |
|
|
| SMS + WhatsApp | Twilio |
|
|
| Push | Firebase FCM |
|
|
| Real-time in-app | Socket.io + Redis |
|
|
| Images | Cloudinary |
|
|
| Company auth | Clerk |
|
|
| Renter auth | JWT (custom) |
|
|
| API | Node.js + Express + Prisma + PostgreSQL |
|
|
| Frontend | Next.js 14 + React 18 + Vite |
|
|
| Deployment | Vercel + Railway |
|