Files
alrahma_sunday_school_api/docs
root e0dfc3ec82
API CI/CD / Validate (composer + pint) (push) Successful in 3m15s
API CI/CD / Test (PHPUnit) (push) Failing after 5m4s
API CI/CD / Build frontend assets (push) Successful in 1m3s
API CI/CD / Security audit (push) Failing after 49s
API CI/CD / Deploy to shared hosting (PHP) (push) Has been skipped
Fixed many feature failures around preferences, route coverage, administrator enrollment, assignment section names, attendance tracking controller access, finance PDF generation, and finance notification logging.
2026-07-07 21:26:47 -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