Rename legacy storefront app and references to carplace
Build & Push / Build & Push Docker Image (push) Failing after 10m39s

Replace storefront naming across source, tests, docs, config, and production scripts. Rename the legacy top-level app directory and Carplace component files, remove duplicate storefront startup scripts, and refresh the lockfile.
This commit is contained in:
root
2026-07-04 18:10:08 -04:00
parent fefaf8108d
commit c77d0a8e89
113 changed files with 366 additions and 434 deletions
@@ -9,13 +9,13 @@
## 1. Purpose
This plan replaces the legacy RentalDriveGo storefront with Carplace, a new renter-first marketplace experience and retains the production dashboard authentication repair as a separate priority workstream.
This plan replaces the legacy RentalDriveGo carplace with Carplace, a new renter-first marketplace experience and retains the production dashboard authentication repair as a separate priority workstream.
### 1.1 Product naming
**Carplace** is the public product name for the renter marketplace. The word “storefront” is retained only when referring to the legacy implementation or existing technical paths during migration.
**Carplace** is the public product name for the renter marketplace. The word “carplace” is retained only when referring to the legacy implementation or existing technical paths during migration.
The canonical public route will become `/carplace`. Existing `/storefront` URLs must remain functional through permanent path-preserving redirects so bookmarks, indexed pages, and external company links do not break. The deployable application may remain at `apps/storefront` during the first implementation phase to avoid an unnecessary repository-wide rename while product behavior is still changing.
The canonical public route will become `/carplace`. Existing `/carplace` URLs must remain functional through permanent path-preserving redirects so bookmarks, indexed pages, and external company links do not break. The deployable application may remain at `apps/carplace` during the first implementation phase to avoid an unnecessary repository-wide rename while product behavior is still changing.
**Carplace is trilingual from its first release. English (`en`), French (`fr`), and Arabic (`ar`) are equal, required product languages. No page, workflow, validation message, metadata field, or release phase may be shipped in only one or two languages.**
@@ -28,14 +28,14 @@ The new Carplace marketplace must:
4. Preserve existing public URLs during migration.
5. Use real platform data and avoid unsupported claims such as instant confirmation, final-price guarantees, or renter accounts that the backend does not currently provide.
6. Allow controlled company branding without letting every company turn the page into an unrelated website.
7. Be deployable beside the legacy storefront and switched over safely.
7. Be deployable beside the legacy carplace and switched over safely.
8. Preserve full feature and content parity across English, French, and Arabic, including proper Arabic RTL behavior.
---
## 2. Findings From the Current Code
### 2.1 The legacy storefront is a collection of pages, not a coherent product
### 2.1 The legacy carplace is a collection of pages, not a coherent product
The current application has working foundations:
@@ -55,10 +55,10 @@ However, the user experience is assembled from independent cards and utility cla
### 2.2 Carplace and the homepage need one visual foundation
The legacy storefront currently renders:
The legacy carplace currently renders:
- `StorefrontHeader`
- `StorefrontFooter`
- `CarplaceHeader`
- `CarplaceFooter`
The homepage renders:
@@ -108,13 +108,13 @@ unless the backend and company settings later support those guarantees.
### 2.5 Renter account authentication is disabled
The API currently rejects renter sign-up and sign-in. The legacy storefront contains renter sign-in, registration, dashboard, saved-company, notification, and profile pages, but the authentication service intentionally disables login and registration.
The API currently rejects renter sign-up and sign-in. The legacy carplace contains renter sign-in, registration, dashboard, saved-company, notification, and profile pages, but the authentication service intentionally disables login and registration.
Carplace must therefore launch as a guest-first experience. Renter-account links must remain hidden until the backend capability is deliberately enabled and tested.
### 2.6 The legacy editable homepage content model is mismatched
The current admin-managed storefront homepage schema contains operator-oriented content such as:
The current admin-managed carplace homepage schema contains operator-oriented content such as:
- Start trial
- Create workspace
@@ -217,7 +217,7 @@ Secondary conversions are:
- Search-engine metadata
- Accessibility baseline
- Funnel analytics
- Safe cutover from the legacy storefront
- Safe cutover from the legacy carplace
### 4.2 Explicitly excluded from the first launch
@@ -238,9 +238,9 @@ These exclusions are deliberate. A strong marketplace is not one with the larges
## 5. Recommended Technical Strategy
### 5.1 Rebuild inside the legacy storefront application
### 5.1 Rebuild inside the legacy carplace application
Keep `apps/storefront` as the deployable application.
Keep `apps/carplace` as the deployable application.
Do not create another standalone Next.js application. A second Carplace app would duplicate:
@@ -257,7 +257,7 @@ The new experience should be implemented as a clean feature area inside the exis
Recommended structure:
```text
apps/storefront/src/
apps/carplace/src/
app/
(public)/
page.tsx
@@ -299,9 +299,9 @@ Use a server-side release setting such as:
CARPLACE_EXPERIENCE_VERSION=v2
```
During migration, the legacy `/storefront/*` routes should continue serving V1 until their matching Carplace routes are ready. Once a Carplace route passes its release gates, redirect the corresponding legacy path to `/carplace/*`.
During migration, the legacy `/carplace/*` routes should continue serving V1 until their matching Carplace routes are ready. Once a Carplace route passes its release gates, redirect the corresponding legacy path to `/carplace/*`.
Do not leave two independently indexed public URL systems. `/carplace/*` becomes canonical, while `/storefront/*` exists only as a compatibility redirect. Redirects must preserve the resolved language, path, query parameters, selected dates, locations, offer codes, and campaign attribution.
Do not leave two independently indexed public URL systems. `/carplace/*` becomes canonical, while `/carplace/*` exists only as a compatibility redirect. Redirects must preserve the resolved language, path, query parameters, selected dates, locations, offer codes, and campaign attribution.
### 5.3 Introduce Carplace routes without breaking legacy URLs
@@ -314,7 +314,7 @@ Keep these routes working:
/carplace/[company-slug]/vehicles/[vehicle-id]
```
Existing company and vehicle links must not break during cutover. Add permanent, path-preserving redirects from `/storefront/*` to `/carplace/*`, including query parameters used for dates, locations, offers, and campaign attribution. The redirect must also migrate the legacy `storefront-language` preference into the shared `rentaldrivego-language` cookie when needed.
Existing company and vehicle links must not break during cutover. Add permanent, path-preserving redirects from `/carplace/*` to `/carplace/*`, including query parameters used for dates, locations, offers, and campaign attribution. The redirect must also migrate the legacy `carplace-language` preference into the shared `rentaldrivego-language` cookie when needed.
### 5.4 Separate API response types from page components
@@ -507,7 +507,7 @@ Move renters immediately toward a useful search while establishing trust.
### Homepage content model
Create a dedicated `CarplaceHomepageConfig`, separate from the existing operator-focused `StorefrontHomepageConfig`.
Create a dedicated `CarplaceHomepageConfig`, separate from the existing operator-focused `CarplaceHomepageConfig`.
Suggested fields:
@@ -893,7 +893,7 @@ POST /api/v1/carplace/reservations
GET /api/v1/carplace/requests/:token
```
During migration, existing `/api/v1/storefront/*` endpoints should remain as compatibility aliases or internal adapters until all deployed clients use Carplace contract.
During migration, existing `/api/v1/carplace/*` endpoints should remain as compatibility aliases or internal adapters until all deployed clients use Carplace contract.
### 9.3 Marketplace-home aggregation
@@ -1027,7 +1027,7 @@ Resolve language on the server in this order:
1. Explicit valid language selected by the user.
2. Existing `rentaldrivego-language` cookie.
3. Migrated legacy `storefront-language` cookie.
3. Migrated legacy `carplace-language` cookie.
4. Supported browser `Accept-Language` value.
5. English fallback.
@@ -1038,7 +1038,7 @@ The language selector must:
- Preserve the current pathname and query string.
- Preserve search dates, locations, filters, sorting, offer codes, and attribution parameters.
- Preserve completed reservation-form fields when switching language during the request flow.
- Never redirect a Carplace user back to the legacy `/storefront` route.
- Never redirect a Carplace user back to the legacy `/carplace` route.
### 11.3 Translation architecture
@@ -1117,7 +1117,7 @@ Reusable vehicle specifications, transmission labels, category names, policy lab
The initial canonical route remains `/carplace`, using server-resolved language from the shared cookie so the migration does not simultaneously change product name, path structure, and localization architecture.
All `/storefront/*` redirects must preserve language preference and query state. Locale-prefixed Carplace URLs may be introduced later only as a deliberate SEO migration with complete redirects, canonical tags, `hreflang`, sitemap updates, and analytics normalization. Do not create three competing URL systems during the first cutover.
All `/carplace/*` redirects must preserve language preference and query state. Locale-prefixed Carplace URLs may be introduced later only as a deliberate SEO migration with complete redirects, canonical tags, `hreflang`, sitemap updates, and analytics normalization. Do not create three competing URL systems during the first cutover.
---