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
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:
@@ -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,4 +1,4 @@
|
||||
export * from './damage'
|
||||
export * from './fuel'
|
||||
export * from './api'
|
||||
export * from './marketplace-homepage'
|
||||
export * from './storefront-homepage'
|
||||
|
||||
+35
-35
@@ -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)
|
||||
}
|
||||
Reference in New Issue
Block a user