Files
alrahma_sunday_school_api/docs
root 304fa6bfd0
API CI/CD / Validate (composer + pint) (push) Successful in 3m5s
API CI/CD / Test (PHPUnit) (push) Failing after 7m12s
API CI/CD / Build frontend assets (push) Successful in 1m2s
API CI/CD / Security audit (push) Failing after 49s
API CI/CD / Deploy to shared hosting (PHP) (push) Has been skipped
fix test issues
2026-07-06 02:39:13 -04:00
..
2026-06-11 11:06:32 -04:00
2026-06-11 03:22:12 -04:00
2026-06-11 03:22:12 -04:00
2026-06-11 03:22:12 -04:00
2026-07-06 00:55:01 -04:00
2026-07-06 02:39:13 -04:00
2026-06-11 03:22:12 -04:00
2026-06-11 03:22:12 -04:00
2026-07-06 00:55:01 -04:00

🚗 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.RentalDriveGo.com where 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:

  1. Company pays RentalDriveGosubscription → RentalDriveGo'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 RentalDriveGo.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}.RentalDriveGo.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: RentalDriveGo.com              — B2B marketing site
Layer 1B: RentalDriveGo.com/explore      — B2C marketplace (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, 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