0394f0ea2a66c36bd07d35c0e14e29b2e053d34d
Build & Deploy / Build & Push Docker Image (push) Successful in 2m53s
Test / Type Check (all packages) (push) Successful in 54s
Build & Deploy / Deploy to VPS (push) Successful in 4s
Test / API Unit Tests (push) Successful in 46s
Test / Homepage Unit Tests (push) Successful in 43s
Test / Storefront Unit Tests (push) Successful in 40s
Test / Admin Unit Tests (push) Successful in 41s
Test / Dashboard Unit Tests (push) Successful in 42s
Test / API Integration Tests (push) Successful in 58s
Configure production defaults to pull images directly from the VPN registry at 10.0.0.4, with the VPS reachable at 10.0.0.1, and disable archive handoff by default.
🚗 RentalDriveGo— Multi-Tenant Car Rental SaaS + Storefront
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 storefront)
- Promotional offers management
- A white-label site at
company.RentalDriveGo.comwhere renters book and pay
Renters (B2C) — free account, can:
- Browse ALL companies' vehicles and offers on
RentalDriveGo.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:
- Company pays RentalDriveGosubscription → RentalDriveGo's own AmanPay/PayPal account
- Renter pays company for rental → Company's own AmanPay merchant + PayPal account (direct, no intermediary)
🌐 Storefront is Discovery Only — No Booking on RentalDriveGo.com/explore
The global storefront 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}.RentalDriveGo.com/book?vehicleId=X&from=Y&to=Z&ref=storefront). The booking form is pre-filled. All payment happens on the company site using the company's own payment accounts.
📸 Vehicle Photos → Storefront Visibility
Company uploads photos in /dashboard/fleet
→ Stored in Cloudinary
→ Vehicle.photos[] holds the URLs
→ First photo = cover image on storefront cards
→ All photos shown in storefront vehicle gallery
→ isPublished=true makes vehicle appear on storefront
🏗 Five-Layer Architecture
Layer 1A: RentalDriveGo.com — B2B marketing site
Layer 1B: RentalDriveGo.com/explore — B2C storefront (discovery + redirect only)
Layer 2: app.RentalDriveGo.com — Company dashboard (private, subscription-gated)
Layer 3: {slug}.RentalDriveGo.com — Company branded site (booking + payment here)
Layer 4: api.RentalDriveGo.com — REST API
📁 Project Structure
rental-car-site/
├── README.md
├── docs/
│ ├── ARCHITECTURE.md ← Payment providers, storefront redirect model, photo flow
│ ├── DESIGN_SYSTEM.md
│ ├── PAGES.md ← All pages. Storefront = 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 ← Storefront 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) |
| 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 |
Description
Languages
TypeScript
93.6%
CSS
3%
Shell
2.3%
JavaScript
1%