PRD.md

RentNGo - Product Requirements Document

Last Updated: January 22, 2026


Product Overview

RentNGo is a car rental platform with VIP transfer services for the Romanian market. Built with Next.js 15, Convex, and Clerk. Supports Romanian (default) and English.

Core Features:

  • Vehicle browsing and reservations with tiered pricing
  • VIP transfer bookings with distance-based pricing
  • Seasonal pricing multipliers
  • Admin dashboard for managing all resources
  • Email notifications for bookings

Completed Tasks ✅

TaskDateNotes
Default Pickup/Drop TimesJan 18Both default to 10:00
Sequential Calendar FlowJan 18Return calendar opens after pickup selection
Transfer Pricing UpdateJan 19Tiered km pricing + class multipliers
Remove Unused ComponentsJan 19~2,500 lines removed
Deprecated Fields CleanupJan 19Removed class, pricePerDay, payments table
Transfer Vehicle Selection UXJan 19Sticky floating card for selection
Rename Vehicle Classes AdminJan 19"Ordering" → "Classes"
Component Directory RestructuringJan 20Feature-based organization
Email Components ConsolidationJan 20Single source in convex/emails/
Vehicle Slug URLsJan 20SEO-friendly /cars/[slug] routes
Vehicle Class Multiplier ManagementJan 20UI in class detail page
Transfer Email - Vehicle DetailsJan 20Full vehicle info in confirmation
Transfer Booking - T&C LinksJan 20Terms & Privacy links added
Transfer Vehicle Seats ConfigJan 20Separate transferSeats field
Admin Role AuthorizationJan 22Clerk publicMetadata role check in middleware
File Naming CleanupJan 2224 files renamed to kebab-case, typo fixed
Translation Files CleanupJan 22Removed unused namespaces, consolidated keys, ~18% reduction
Barrel Import OptimizationJan 22Added optimizePackageImports for lucide-react, date-fns in next.config.ts
Dynamic Import Admin DialogsJan 2210 admin dialogs now lazy-loaded with next/dynamic
Memoize Expensive ComponentsJan 22React.memo() for 6 components, useMemo() for 5 calculations
Reduce getImageUrl CallsJan 22Moved imageUrl into queries (getAllVehiclesWithClasses, getFeaturedVehicles)

Planned Tasks

PriorityTaskDescription
P2Copy & Content UpdateReview translations for tone, grammar, consistency
P2Replace next lintnext lint deprecated in Next.js 16; migrate to ESLint CLI
P3Time Picker Dark Theme FixWhite-on-white text on Windows in dark mode
P3React Performance OptimizationApply Vercel best practices (memoization, splitting, etc.)
P3.1└─ Memoize Expensive Components✅ Completed Jan 22
P3.2└─ Lazy State InitializationUse function form for useState with expensive initial values
P3.3└─ Functional setState UpdatesUse functional setState for stable callbacks and prevent stale closures
P3.4└─ CSS content-visibility for ListsApply content-visibility: auto to vehicle/blog grids for faster initial render

Key Business Rules

Reservations:

  • Minimum 1 day rental
  • Same-day = 1 day; return 2+ hours late = extra day
  • Payment: cash, card on delivery, or card online

Transfers:

  • Distance via Mapbox; supports one-way and round-trip
  • Pricing: base fare (covers first 15km) + tiered per-km rate × class multiplier
  • Payment: cash or card on delivery only

Seasonal Pricing:

  • Season with most overlap applies
  • Default multiplier: 1.0

Revision History

VersionDateSummary
1.0Jan 18Initial PRD
2.0Jan 20Major features complete
3.0Jan 22Simplified to task-focused format
3.1Jan 22Admin role authorization via Clerk publicMetadata
3.2Jan 22File naming cleanup; added lint migration task
3.3Jan 22Translation files cleanup and consolidation
3.4Jan 22Barrel import optimization; added React perf subtasks
3.5Jan 22Dynamic import admin dialogs
3.6Jan 22Reduced getImageUrl calls - imageUrl now included in queries