refactor: rename marketplace to storefront across the entire monorepo
Build & Deploy / Build & Push Docker Image (push) Successful in 1m2s
Test / Type Check (all packages) (push) Failing after 28s
Test / API Unit Tests (push) Has been skipped
Test / Homepage Unit Tests (push) Has been skipped
Test / Storefront Unit Tests (push) Has been skipped
Test / Admin Unit Tests (push) Has been skipped
Test / Dashboard Unit Tests (push) Has been skipped
Test / API Integration Tests (push) Has been skipped
Build & Deploy / Deploy to VPS (push) Successful in 3s

Comprehensive rename of all marketplace references to storefront:
- API module: apps/api/src/modules/marketplace/ → storefront/
- Components: MarketplaceHeader → StorefrontHeader, MarketplaceShell →
  StorefrontShell, MarketplaceFooter → StorefrontFooter
- Types: marketplace-homepage.ts → storefront-homepage.ts
- Test files: employee-marketplace-* → employee-storefront-*
- All source code identifiers, imports, route paths, and strings
- Documentation (docs/), CI config (.gitlab-ci.yml), scripts
- Dashboard, admin, storefront workspace references
- Prisma field names preserved (isListedOnMarketplace, marketplaceRating,
  marketplaceFunnelEvent) as they map to database schema

Validation:
- API type-check: 0 errors
- Storefront type-check: 0 errors
- Dashboard type-check: 0 errors
- Full monorepo type-check: only pre-existing admin TS18046
This commit is contained in:
root
2026-06-28 01:14:46 -04:00
parent bffda95a7c
commit 8aab968e09
147 changed files with 829 additions and 829 deletions
+2 -2
View File
@@ -40,13 +40,13 @@ export const PLAN_FEATURES: Record<string, string[]> = {
'Up to 10 vehicles',
'1 user account',
'Basic analytics',
'Marketplace listing',
'Storefront listing',
],
GROWTH: [
'Up to 50 vehicles',
'5 user accounts',
'Full analytics',
'Priority marketplace placement',
'Priority storefront placement',
'Custom branding',
],
PRO: [
+1 -1
View File
@@ -1,4 +1,4 @@
export * from './damage'
export * from './fuel'
export * from './api'
export * from './marketplace-homepage'
export * from './storefront-homepage'
@@ -1,35 +1,35 @@
export type MarketplaceLanguage = 'en' | 'fr' | 'ar'
export type StorefrontLanguage = 'en' | 'fr' | 'ar'
export type MarketplaceHomepageMetric = {
export type StorefrontHomepageMetric = {
value: string
label: string
}
export type MarketplaceHomepagePillar = {
export type StorefrontHomepagePillar = {
title: string
body: string
}
export type MarketplaceHomepageStep = {
export type StorefrontHomepageStep = {
step: string
title: string
body: string
}
export type MarketplaceHomepageTestimonial = {
export type StorefrontHomepageTestimonial = {
quote: string
author: string
role: string
company?: string
}
export type MarketplaceHomepageHowItWorksStep = {
export type StorefrontHomepageHowItWorksStep = {
number: string
title: string
description: string
}
export type MarketplaceHomepageSectionType =
export type StorefrontHomepageSectionType =
| 'hero'
| 'surface'
| 'pillars'
@@ -40,8 +40,8 @@ export type MarketplaceHomepageSectionType =
| 'testimonials'
| 'closing'
export type MarketplaceHomepageContent = {
sections: MarketplaceHomepageSectionType[]
export type StorefrontHomepageContent = {
sections: StorefrontHomepageSectionType[]
heroKicker: string
heroTitle: string
heroBody: string
@@ -60,19 +60,19 @@ export type MarketplaceHomepageContent = {
renterKicker: string
renterTitle: string
renterBody: string
pillars: MarketplaceHomepagePillar[]
metrics: MarketplaceHomepageMetric[]
pillars: StorefrontHomepagePillar[]
metrics: StorefrontHomepageMetric[]
featureLabel: string
features: string[]
howitworksKicker: string
howitworksTitle: string
howitworksSteps: MarketplaceHomepageHowItWorksStep[]
howitworksSteps: StorefrontHomepageHowItWorksStep[]
stepsTitle: string
steps: MarketplaceHomepageStep[]
steps: StorefrontHomepageStep[]
stepLabel: string
testimonialsKicker: string
testimonialsTitle: string
testimonials: MarketplaceHomepageTestimonial[]
testimonials: StorefrontHomepageTestimonial[]
readyKicker: string
readyTitle: string
readyBody: string
@@ -80,9 +80,9 @@ export type MarketplaceHomepageContent = {
createWorkspace: string
}
export type MarketplaceHomepageConfig = Record<MarketplaceLanguage, MarketplaceHomepageContent>
export type StorefrontHomepageConfig = Record<StorefrontLanguage, StorefrontHomepageContent>
export const defaultMarketplaceHomepageSections: MarketplaceHomepageSectionType[] = [
export const defaultStorefrontHomepageSections: StorefrontHomepageSectionType[] = [
'hero',
'surface',
'pillars',
@@ -94,9 +94,9 @@ export const defaultMarketplaceHomepageSections: MarketplaceHomepageSectionType[
'closing',
]
export const defaultMarketplaceHomepageContent: MarketplaceHomepageConfig = {
export const defaultStorefrontHomepageContent: StorefrontHomepageConfig = {
en: {
sections: defaultMarketplaceHomepageSections,
sections: defaultStorefrontHomepageSections,
heroKicker: 'RentalDriveGo',
heroTitle: 'The operating system for modern fleet management.',
heroBody:
@@ -120,7 +120,7 @@ export const defaultMarketplaceHomepageContent: MarketplaceHomepageConfig = {
renterBody:
'RentalDriveGo powers discovery and conversion — not a walled garden. Browse here, book there, and pay directly to the fleet owner.',
pillars: [
['Unified command', 'Vehicle inventory, dynamic pricing, and promotional offers flow from one admin hub into marketplace discovery and your own branded storefront.'],
['Unified command', 'Vehicle inventory, dynamic pricing, and promotional offers flow from one admin hub into storefront discovery and your own branded storefront.'],
['Smart discovery', 'Location-aware search, reputation scoring, and AI-curated listings help renters find the right vehicle in seconds.'],
['Direct revenue', 'Every booking routes through your own payment gateway — you own the customer relationship and the cash flow.'],
].map(([title, body]) => ({ title: title!, body: body! })),
@@ -147,7 +147,7 @@ export const defaultMarketplaceHomepageContent: MarketplaceHomepageConfig = {
{
number: '2',
title: 'Onboard Your Fleet',
description: 'Upload vehicles, configure pricing, and publish offers that appear on the marketplace instantly.',
description: 'Upload vehicles, configure pricing, and publish offers that appear on the storefront instantly.',
},
{
number: '3',
@@ -174,7 +174,7 @@ export const defaultMarketplaceHomepageContent: MarketplaceHomepageConfig = {
},
{
quote:
'The white-label booking engine is a game-changer. Our customers never leave our brand experience, yet we get marketplace-level visibility.',
'The white-label booking engine is a game-changer. Our customers never leave our brand experience, yet we get storefront-level visibility.',
author: 'Ahmed Hassan',
role: 'Operations Director',
company: 'Desert Wheels',
@@ -195,7 +195,7 @@ export const defaultMarketplaceHomepageContent: MarketplaceHomepageConfig = {
createWorkspace: 'Create workspace',
},
fr: {
sections: defaultMarketplaceHomepageSections,
sections: defaultStorefrontHomepageSections,
heroKicker: 'RentalDriveGo',
heroTitle: "Le système d'exploitation pour la gestion de flotte moderne.",
heroBody:
@@ -219,7 +219,7 @@ export const defaultMarketplaceHomepageContent: MarketplaceHomepageConfig = {
renterBody:
'RentalDriveGo alimente la découverte et la conversion — pas un jardin fermé. Parcourez ici, réservez là-bas et payez directement au propriétaire de la flotte.',
pillars: [
["Commande unifiée", "L'inventaire, la tarification dynamique et les offres promotionnelles circulent depuis un hub d'administration unique vers la marketplace et votre vitrine de marque."],
["Commande unifiée", "L'inventaire, la tarification dynamique et les offres promotionnelles circulent depuis un hub d'administration unique vers la storefront et votre vitrine de marque."],
['Découverte intelligente', 'Recherche géolocalisée, score de réputation et annonces optimisées aident les clients à trouver le bon véhicule en quelques secondes.'],
['Revenus directs', 'Chaque réservation passe par votre propre passerelle de paiement — vous gardez la relation client et la trésorerie.'],
].map(([title, body]) => ({ title: title!, body: body! })),
@@ -246,7 +246,7 @@ export const defaultMarketplaceHomepageContent: MarketplaceHomepageConfig = {
{
number: '2',
title: 'Intégrez votre flotte',
description: 'Ajoutez vos véhicules, configurez les tarifs et publiez des offres visibles instantanément sur la marketplace.',
description: 'Ajoutez vos véhicules, configurez les tarifs et publiez des offres visibles instantanément sur la storefront.',
},
{
number: '3',
@@ -273,7 +273,7 @@ export const defaultMarketplaceHomepageContent: MarketplaceHomepageConfig = {
},
{
quote:
'Le moteur de réservation en marque blanche change la donne. Nos clients ne quittent jamais notre expérience de marque, tout en bénéficiant de la visibilité marketplace.',
'Le moteur de réservation en marque blanche change la donne. Nos clients ne quittent jamais notre expérience de marque, tout en bénéficiant de la visibilité storefront.',
author: 'Jean-Claude Barbier',
role: 'Directeur des Opérations',
company: 'Sahara Cars',
@@ -294,7 +294,7 @@ export const defaultMarketplaceHomepageContent: MarketplaceHomepageConfig = {
createWorkspace: "Créer l'espace",
},
ar: {
sections: defaultMarketplaceHomepageSections,
sections: defaultStorefrontHomepageSections,
heroKicker: 'RentalDriveGo',
heroTitle: 'نظام التشغيل لإدارة الأساطيل الحديثة.',
heroBody:
@@ -318,7 +318,7 @@ export const defaultMarketplaceHomepageContent: MarketplaceHomepageConfig = {
renterBody:
'RentalDriveGo يشغّل الاكتشاف والتحويل — وليس حديقة مغلقة. تصفح هنا، احجز هناك، وادفع مباشرة لمالك الأسطول.',
pillars: [
['قيادة موحدة', 'المخزون، التسعير الديناميكي والعروض الترويجية تتدفق من مركز إدارة واحد إلى marketplace السوق وواجهة متجرك الخاصة.'],
['قيادة موحدة', 'المخزون، التسعير الديناميكي والعروض الترويجية تتدفق من مركز إدارة واحد إلى storefront السوق وواجهة متجرك الخاصة.'],
['اكتشاف ذكي', 'بحث حسب الموقع، تقييم السمعة وقوائم منسقة بالذكاء الاصطناعي تساعد المستأجرين في العثور على المركبة المناسبة بثوانٍ.'],
['إيرادات مباشرة', 'كل حجز يمر عبر بوابة الدفع الخاصة بك — أنت تملك علاقة العميل والتدفق النقدي.'],
].map(([title, body]) => ({ title: title!, body: body! })),
@@ -345,7 +345,7 @@ export const defaultMarketplaceHomepageContent: MarketplaceHomepageConfig = {
{
number: '2',
title: 'أضف أسطولك',
description: 'أضف المركبات، واضبط الأسعار، وانشر العروض التي تظهر فوراً في marketplace السوق.',
description: 'أضف المركبات، واضبط الأسعار، وانشر العروض التي تظهر فوراً في storefront السوق.',
},
{
number: '3',
@@ -372,7 +372,7 @@ export const defaultMarketplaceHomepageContent: MarketplaceHomepageConfig = {
},
{
quote:
'محرك الحجز بالعلامة البيضاء يغير قواعد اللعبة. عملاؤنا لا يغادرون تجربة علامتنا التجارية أبداً، مع الاستفادة من ظهور marketplace السوق.',
'محرك الحجز بالعلامة البيضاء يغير قواعد اللعبة. عملاؤنا لا يغادرون تجربة علامتنا التجارية أبداً، مع الاستفادة من ظهور storefront السوق.',
author: 'محمد علي',
role: 'مدير العمليات',
company: 'صحراء ويلز',
@@ -394,13 +394,13 @@ export const defaultMarketplaceHomepageContent: MarketplaceHomepageConfig = {
},
}
export function cloneMarketplaceHomepageContent(): MarketplaceHomepageConfig {
return JSON.parse(JSON.stringify(defaultMarketplaceHomepageContent)) as MarketplaceHomepageConfig
export function cloneStorefrontHomepageContent(): StorefrontHomepageConfig {
return JSON.parse(JSON.stringify(defaultStorefrontHomepageContent)) as StorefrontHomepageConfig
}
export function resolveMarketplaceHomepageSections(
sections?: MarketplaceHomepageSectionType[] | null,
): MarketplaceHomepageSectionType[] {
const source = sections?.length ? sections : defaultMarketplaceHomepageSections
export function resolveStorefrontHomepageSections(
sections?: StorefrontHomepageSectionType[] | null,
): StorefrontHomepageSectionType[] {
const source = sections?.length ? sections : defaultStorefrontHomepageSections
return source.filter((section, index) => source.indexOf(section) === index)
}