@@ -470,7 +470,7 @@ export default function PlatformPageContent({ stars }: { stars: string }) {
-
+
Start Free Trial
diff --git a/src/app/platform/security/page.tsx b/src/app/platform/security/page.tsx
index 708a1ef4..5582c1f2 100644
--- a/src/app/platform/security/page.tsx
+++ b/src/app/platform/security/page.tsx
@@ -6,9 +6,9 @@ import SecurityCompliancePageContent from './security-page-content';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/platform/security' },
- title: 'Security & Compliance — RBAC, Encryption & Audit Logs | Fleetbase',
+ title: 'Security & Compliance — RBAC & Audit Logs',
description:
- 'Enterprise-grade security for logistics operations. End-to-end encryption, granular RBAC, MFA, comprehensive audit logs, GDPR compliance, and full self-hosting for data sovereignty.',
+ 'End-to-end encryption, granular RBAC, MFA, audit logs and GDPR compliance, with full self-hosting for complete data sovereignty.',
keywords: [
'Fleetbase security',
'logistics platform security',
diff --git a/src/app/platform/storefront/page.tsx b/src/app/platform/storefront/page.tsx
index 380141a4..74cbd47a 100644
--- a/src/app/platform/storefront/page.tsx
+++ b/src/app/platform/storefront/page.tsx
@@ -6,9 +6,9 @@ import StorefrontPageContent from './storefront-page-content';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/platform/storefront' },
- title: 'Storefront — Headless Commerce & Marketplace Platform | Fleetbase',
+ title: 'Storefront — Headless Commerce Platform',
description:
- 'Storefront by Fleetbase is open-source headless commerce built for on-demand businesses. Zero commission fees, white-label mobile apps, multi-vendor marketplace, and native Fleet-Ops delivery integration.',
+ 'Open-source headless commerce for on-demand business. Zero commission, white-label mobile apps, multi-vendor marketplace and native delivery.',
keywords: [
'headless commerce platform',
'online ordering software',
diff --git a/src/app/pricing/page.tsx b/src/app/pricing/page.tsx
index 2da54326..909a51a6 100644
--- a/src/app/pricing/page.tsx
+++ b/src/app/pricing/page.tsx
@@ -6,7 +6,7 @@ import { PRICING_FAQS } from './faqs';
import PricingClient from './pricing-client';
const DESCRIPTION =
- 'Fleetbase Cloud is $29/month plus $5 per driver or vehicle. Orders are free at any volume — no per-delivery fee. Every module included. Self-hosted implementation from $2,500 one-time.';
+ '$29/month plus $5 per driver or vehicle. Orders are free at any volume — no per-delivery fee. Every module included. Self-hosting from $2,500.';
const OG_IMAGE =
'/og?title=%2429%20a%20month%2C%20plus%20%245%20per%20driver%20or%20vehicle&eyebrow=Pricing&subtitle=One%20plan.%20Every%20module.%20Orders%20are%20free%20at%20any%20volume.';
diff --git a/src/app/privacy/page.tsx b/src/app/privacy/page.tsx
index 0cc21e04..cb238530 100644
--- a/src/app/privacy/page.tsx
+++ b/src/app/privacy/page.tsx
@@ -2,8 +2,8 @@ import type { Metadata } from 'next';
import Link from 'next/link';
export const metadata: Metadata = {
- title: 'Privacy Policy | Fleetbase',
- description: 'Fleetbase Privacy Policy — how we collect, use, and protect your data when using Fleetbase Cloud and SaaS services.',
+ title: 'Privacy Policy',
+ description: 'How Fleetbase collects, uses and protects your data across Fleetbase Cloud, our SaaS services and the Navigator driver app.',
alternates: { canonical: 'https://fleetbase.io/privacy' },
openGraph: {
title: 'Privacy Policy | Fleetbase',
diff --git a/src/app/services/installation/page.tsx b/src/app/services/installation/page.tsx
index 7e2c078a..95b484e9 100644
--- a/src/app/services/installation/page.tsx
+++ b/src/app/services/installation/page.tsx
@@ -16,8 +16,8 @@ import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/
import { cn } from '@/lib/utils';
export const metadata: Metadata = {
- title: 'Managed Installation Service | Fleetbase',
- description: 'Get Fleetbase fully deployed on your own infrastructure in 7 days. Our team handles everything — server deployment, CI/CD, custom branding, DNS, and handover. $2,500 one-time.',
+ title: 'Managed Installation Service',
+ description: 'Get Fleetbase deployed on your own infrastructure in 7 days. Server deployment, CI/CD, custom branding, DNS and handover. $2,500 one-time.',
keywords: [
'fleetbase installation service',
'fleetbase deployment',
diff --git a/src/app/services/installation/terms/page.tsx b/src/app/services/installation/terms/page.tsx
index 61bea719..7b896f89 100644
--- a/src/app/services/installation/terms/page.tsx
+++ b/src/app/services/installation/terms/page.tsx
@@ -2,7 +2,7 @@ import type { Metadata } from 'next';
import Link from 'next/link';
export const metadata: Metadata = {
- title: 'Implementation Terms & Conditions | Fleetbase',
+ title: 'Implementation Terms & Conditions',
description: 'Terms and Conditions governing the Fleetbase Console & Core Implementation service — scope, payment, responsibilities, and legal terms.',
alternates: { canonical: 'https://fleetbase.io/services/installation/terms' },
openGraph: {
diff --git a/src/app/services/navigator-publishing/page.tsx b/src/app/services/navigator-publishing/page.tsx
index 04593b74..48e4a467 100644
--- a/src/app/services/navigator-publishing/page.tsx
+++ b/src/app/services/navigator-publishing/page.tsx
@@ -47,9 +47,9 @@ const TERMS_DOC =
'https://docs.google.com/document/d/1EweHYp1gkXobOWsNRALW3jE97mR1avMaKpFWsMGM1Io/edit?usp=sharing';
export const metadata: Metadata = {
- title: 'Navigator App Publishing Service | Fleetbase',
+ title: 'Navigator App Publishing Service',
description:
- 'White-label, build, and ship your own branded Navigator driver app on the App Store and Google Play. We handle scaffolding, branding, store configuration, and submission. Fixed fee, fixed timeline.',
+ 'Ship your own branded Navigator driver app on the App Store and Google Play. We handle scaffolding, branding, store setup and submission.',
keywords: [
'navigator app publishing',
'white label driver app',
diff --git a/src/app/services/page.tsx b/src/app/services/page.tsx
index 3119c220..e86e930b 100644
--- a/src/app/services/page.tsx
+++ b/src/app/services/page.tsx
@@ -11,8 +11,8 @@ import { cn } from '@/lib/utils';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/services' },
- title: 'Services | Fleetbase',
- description: 'Explore Fleetbase professional services — implementation, custom development, training, and support. Get expert help to deploy, scale, and customise your logistics platform.',
+ title: 'Services',
+ description: 'Fleetbase professional services: implementation, custom development, training and support. Expert help to deploy, scale and customise.',
keywords: ['Fleetbase services', 'logistics platform implementation', 'custom development', 'support plans', 'professional services'],
openGraph: {
title: 'Services | Fleetbase',
diff --git a/src/app/services/storefront-publishing/page.tsx b/src/app/services/storefront-publishing/page.tsx
index 55af56f6..90bf754f 100644
--- a/src/app/services/storefront-publishing/page.tsx
+++ b/src/app/services/storefront-publishing/page.tsx
@@ -47,9 +47,9 @@ const TERMS_DOC =
'https://docs.google.com/document/d/17NPti5SXTAMpFHqy7DlF6z73rp5iqYBkSebGk7nzfn8/edit?usp=sharing';
export const metadata: Metadata = {
- title: 'Storefront App Publishing Service | Fleetbase',
+ title: 'Storefront App Publishing Service',
description:
- 'White-label, build, and ship your own branded Storefront customer app on the App Store and Google Play. We handle scaffolding, branding, payment integration, store configuration, and submission. Fixed fee, fixed timeline.',
+ 'Ship your own branded Storefront customer app on the App Store and Google Play. Scaffolding, branding, payments, store setup and submission.',
keywords: [
'storefront app publishing',
'white label customer app',
diff --git a/src/app/solutions/container-operations/page.tsx b/src/app/solutions/container-operations/page.tsx
index fadb95eb..e6cd938a 100644
--- a/src/app/solutions/container-operations/page.tsx
+++ b/src/app/solutions/container-operations/page.tsx
@@ -4,8 +4,8 @@ import SolutionPageLayout from '@/components/solutions/solution-page-layout';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/solutions/container-operations' },
- title: 'Container & Port Logistics Software | Fleetbase',
- description: 'Full container visibility from port to door. Track containers across multi-modal journeys, manage documentation, coordinate yard operations, and integrate with existing port systems.',
+ title: 'Container & Port Logistics Software',
+ description: 'Full container visibility from port to door. Track multi-modal journeys, manage documentation and coordinate yard operations.',
keywords: ['container logistics software', 'port logistics management', 'container tracking', 'intermodal logistics', 'yard management software', 'freight forwarding'],
openGraph: {
title: 'Container Operations Logistics | Fleetbase',
diff --git a/src/app/solutions/courier-services/page.tsx b/src/app/solutions/courier-services/page.tsx
index efe0bf35..04593e93 100644
--- a/src/app/solutions/courier-services/page.tsx
+++ b/src/app/solutions/courier-services/page.tsx
@@ -4,8 +4,8 @@ import SolutionPageLayout from '@/components/solutions/solution-page-layout';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/solutions/courier-services' },
- title: 'Courier & Parcel Delivery Management Software | Fleetbase',
- description: 'Maximize first-attempt delivery rates, automate dispatch, and give customers real-time parcel tracking. Open-source courier management software built for scale.',
+ title: 'Courier & Parcel Delivery Management Software',
+ description: 'Open-source courier management software. Maximise first-attempt delivery, automate dispatch and give customers real-time parcel tracking.',
keywords: ['courier management software', 'parcel delivery platform', 'last mile courier', 'proof of delivery software', 'delivery management system'],
openGraph: {
title: 'Courier & Parcel Services Software | Fleetbase',
diff --git a/src/app/solutions/ecommerce/page.tsx b/src/app/solutions/ecommerce/page.tsx
index 62104af6..c80cd096 100644
--- a/src/app/solutions/ecommerce/page.tsx
+++ b/src/app/solutions/ecommerce/page.tsx
@@ -4,8 +4,8 @@ import SolutionPageLayout from '@/components/solutions/solution-page-layout';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/solutions/ecommerce' },
- title: 'E-commerce & Retail Delivery Management Software | Fleetbase',
- description: 'Power same-day and next-day delivery for your e-commerce or retail operation. Open-source delivery management with headless API, real-time tracking, and returns logistics.',
+ title: 'E-commerce & Retail Delivery Management Software',
+ description: 'Open-source delivery management for e-commerce and retail. Same-day and next-day delivery, a headless API, live tracking and returns logistics.',
keywords: ['ecommerce delivery software', 'retail logistics platform', 'same-day delivery', 'last mile ecommerce', 'headless delivery API', 'returns management'],
openGraph: {
title: 'E-commerce & Retail Delivery Software | Fleetbase',
diff --git a/src/app/solutions/food-delivery/page.tsx b/src/app/solutions/food-delivery/page.tsx
index 9c8efbbc..c65858e1 100644
--- a/src/app/solutions/food-delivery/page.tsx
+++ b/src/app/solutions/food-delivery/page.tsx
@@ -4,8 +4,8 @@ import SolutionPageLayout from '@/components/solutions/solution-page-layout';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/solutions/food-delivery' },
- title: 'Food & Grocery Delivery Management Software | Fleetbase',
- description: 'Power on-demand food and grocery delivery with real-time dispatch, live customer tracking, and automated notifications. Built for speed, scale, and customer satisfaction.',
+ title: 'Food & Grocery Delivery Management Software',
+ description: 'On-demand food and grocery delivery with real-time dispatch, live customer tracking and automated notifications. Built for speed and scale.',
keywords: ['food delivery software', 'grocery delivery platform', 'on-demand delivery management', 'restaurant delivery dispatch', 'last mile food delivery'],
openGraph: {
title: 'Food & Grocery Delivery Software | Fleetbase',
diff --git a/src/app/solutions/government/page.tsx b/src/app/solutions/government/page.tsx
index bff90c46..d2982971 100644
--- a/src/app/solutions/government/page.tsx
+++ b/src/app/solutions/government/page.tsx
@@ -4,8 +4,8 @@ import SolutionPageLayout from '@/components/solutions/solution-page-layout';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/solutions/government' },
- title: 'Military & Government Logistics Software | Fleetbase',
- description: 'Open-source logistics platform for military and government operations. Self-hosted, air-gap capable, role-based access, full audit trails, and data sovereignty by design.',
+ title: 'Military & Government Logistics Software',
+ description: 'Open-source logistics for military and government operations. Self-hosted, air-gap capable, role-based access and data sovereignty by design.',
keywords: ['government logistics software', 'military fleet management', 'secure logistics platform', 'defense logistics software', 'air-gap logistics', 'government transport management'],
openGraph: {
title: 'Military & Government Logistics | Fleetbase',
diff --git a/src/app/solutions/healthcare/page.tsx b/src/app/solutions/healthcare/page.tsx
index d926b0e2..dfd75452 100644
--- a/src/app/solutions/healthcare/page.tsx
+++ b/src/app/solutions/healthcare/page.tsx
@@ -4,8 +4,8 @@ import SolutionPageLayout from '@/components/solutions/solution-page-layout';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/solutions/healthcare' },
- title: 'Healthcare & Pharmacy Logistics Software | Fleetbase',
- description: 'HIPAA-conscious logistics management for healthcare and pharmacy delivery. Chain-of-custody tracking, temperature monitoring, priority dispatch, and encrypted audit trails.',
+ title: 'Healthcare & Pharmacy Logistics Software',
+ description: 'HIPAA-conscious logistics for healthcare and pharmacy delivery. Chain-of-custody tracking, temperature monitoring and priority dispatch.',
keywords: ['healthcare logistics software', 'pharmacy delivery management', 'medical courier software', 'HIPAA logistics', 'chain of custody tracking', 'cold chain delivery'],
openGraph: {
title: 'Healthcare & Pharmacy Logistics | Fleetbase',
diff --git a/src/app/solutions/page.tsx b/src/app/solutions/page.tsx
index 94ca2a2f..e62a5206 100644
--- a/src/app/solutions/page.tsx
+++ b/src/app/solutions/page.tsx
@@ -23,8 +23,8 @@ import {
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/solutions' },
- title: 'Logistics Solutions by Industry, Use Case & Role | Fleetbase',
- description: 'Open-source logistics platform for every operation — trucking, food delivery, healthcare, container logistics, government, and more. Explore solutions by industry, use case, and role.',
+ title: 'Logistics Solutions by Industry, Use Case & Role',
+ description: 'Open-source logistics for trucking, food delivery, healthcare, container operations, government and more. Browse by industry, use case or role.',
keywords: ['logistics software solutions', 'fleet management platform', 'delivery management software', 'open source logistics', 'logistics by industry'],
openGraph: {
title: 'Logistics Solutions by Industry, Use Case & Role | Fleetbase',
@@ -310,7 +310,7 @@ export default function SolutionsPage() {
Start Free Trial
diff --git a/src/app/solutions/roles/customer-success/page.tsx b/src/app/solutions/roles/customer-success/page.tsx
index 525490a1..498f7fb1 100644
--- a/src/app/solutions/roles/customer-success/page.tsx
+++ b/src/app/solutions/roles/customer-success/page.tsx
@@ -4,8 +4,8 @@ import SolutionPageLayout from '@/components/solutions/solution-page-layout';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/solutions/roles/customer-success' },
- title: 'Customer Support Tools for Logistics | Fleetbase',
- description: 'Give customer success teams real-time order visibility, live tracking links, and instant proof of delivery — so they can resolve customer queries in seconds, not hours.',
+ title: 'Customer Support Tools for Logistics',
+ description: 'Real-time order visibility, live tracking links and instant proof of delivery, so support teams resolve customer queries in seconds.',
keywords: ['customer support logistics software', 'delivery tracking for support teams', 'order visibility customer service', 'proof of delivery customer support', 'logistics customer portal'],
openGraph: {
title: 'Customer Support Tools for Logistics | Fleetbase',
diff --git a/src/app/solutions/roles/developers/page.tsx b/src/app/solutions/roles/developers/page.tsx
index 26c4605c..f4688db5 100644
--- a/src/app/solutions/roles/developers/page.tsx
+++ b/src/app/solutions/roles/developers/page.tsx
@@ -4,8 +4,8 @@ import SolutionPageLayout from '@/components/solutions/solution-page-layout';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/solutions/roles/developers' },
- title: 'Logistics Platform for Developers & Engineering Teams | Fleetbase',
- description: 'Open-source, API-first logistics platform built for developers. Full REST API, real-time webhooks, Extensions SDK, self-hosted deployment, and complete source code access.',
+ title: 'Logistics Platform for Developers',
+ description: 'An open-source, API-first logistics platform. Full REST API, real-time webhooks, an Extensions SDK, self-hosting and complete source access.',
keywords: ['logistics API for developers', 'open source logistics platform', 'fleet management API', 'logistics developer tools', 'self-hosted logistics software', 'logistics SDK'],
openGraph: {
title: 'Logistics Platform for Developers | Fleetbase',
diff --git a/src/app/solutions/roles/executives/page.tsx b/src/app/solutions/roles/executives/page.tsx
index cbc8c017..483d0199 100644
--- a/src/app/solutions/roles/executives/page.tsx
+++ b/src/app/solutions/roles/executives/page.tsx
@@ -4,8 +4,8 @@ import SolutionPageLayout from '@/components/solutions/solution-page-layout';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/solutions/roles/executives' },
- title: 'Logistics Platform for Executives & Business Leaders | Fleetbase',
- description: 'Give leadership real-time visibility into logistics performance, cost efficiency, and growth metrics. Open-source logistics infrastructure that scales without vendor lock-in.',
+ title: 'Logistics Platform for Executives',
+ description: 'Real-time visibility into logistics performance, cost efficiency and growth. Open-source infrastructure that scales without vendor lock-in.',
keywords: ['logistics software for executives', 'logistics ROI platform', 'logistics cost reduction', 'supply chain executive dashboard', 'logistics business intelligence', 'fleet cost management'],
openGraph: {
title: 'Logistics Platform for Executives | Fleetbase',
diff --git a/src/app/solutions/roles/fleet-managers/page.tsx b/src/app/solutions/roles/fleet-managers/page.tsx
index 82b269ec..7dc523f6 100644
--- a/src/app/solutions/roles/fleet-managers/page.tsx
+++ b/src/app/solutions/roles/fleet-managers/page.tsx
@@ -4,8 +4,8 @@ import SolutionPageLayout from '@/components/solutions/solution-page-layout';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/solutions/roles/fleet-managers' },
- title: 'Fleet Management Software for Fleet Managers | Fleetbase',
- description: 'Complete visibility over vehicle health, compliance, driver performance, and real-time locations — all from one open-source fleet management platform built for fleet managers.',
+ title: 'Fleet Management Software for Fleet Managers',
+ description: 'Open-source fleet management for fleet managers: vehicle health, compliance, driver performance and real-time locations in one platform.',
keywords: ['fleet management software', 'fleet manager tools', 'vehicle compliance tracking', 'fleet maintenance platform', 'driver performance management', 'vehicle tracking fleet manager'],
openGraph: {
title: 'Fleet Management Software for Fleet Managers | Fleetbase',
diff --git a/src/app/solutions/roles/operations-managers/page.tsx b/src/app/solutions/roles/operations-managers/page.tsx
index 23485579..efa55ebe 100644
--- a/src/app/solutions/roles/operations-managers/page.tsx
+++ b/src/app/solutions/roles/operations-managers/page.tsx
@@ -4,8 +4,8 @@ import SolutionPageLayout from '@/components/solutions/solution-page-layout';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/solutions/roles/operations-managers' },
- title: 'Logistics Software for Operations Managers | Fleetbase',
- description: 'Give operations managers a single dashboard to oversee dispatch, monitor SLAs, manage exceptions, and report on performance — without switching between systems.',
+ title: 'Logistics Software for Operations Managers',
+ description: 'One dashboard to oversee dispatch, monitor SLAs, manage exceptions and report on performance, without switching between systems.',
keywords: ['logistics software for operations managers', 'operations management platform', 'logistics operations dashboard', 'dispatch management software', 'SLA monitoring software'],
openGraph: {
title: 'Logistics Software for Operations Managers | Fleetbase',
diff --git a/src/app/solutions/roles/warehouse-managers/page.tsx b/src/app/solutions/roles/warehouse-managers/page.tsx
index 134dff7e..e896d1fb 100644
--- a/src/app/solutions/roles/warehouse-managers/page.tsx
+++ b/src/app/solutions/roles/warehouse-managers/page.tsx
@@ -4,8 +4,8 @@ import SolutionPageLayout from '@/components/solutions/solution-page-layout';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/solutions/roles/warehouse-managers' },
- title: 'Warehouse Management Software | Fleetbase',
- description: 'Connect your warehouse to your delivery operation with Fleetbase Pallet WMS. Manage inventory, pick-and-pack workflows, and outbound dispatch from one integrated platform.',
+ title: 'Warehouse Management Software',
+ description: 'Connect your warehouse to your delivery operation with Pallet WMS. Inventory, pick-and-pack workflows and outbound dispatch in one platform.',
keywords: ['warehouse management software', 'WMS for logistics', 'inventory management platform', 'pick and pack software', 'warehouse to delivery integration', 'pallet WMS'],
openGraph: {
title: 'Warehouse Management Software | Fleetbase',
diff --git a/src/app/solutions/trucking/page.tsx b/src/app/solutions/trucking/page.tsx
index eb85facb..1b8a6d0f 100644
--- a/src/app/solutions/trucking/page.tsx
+++ b/src/app/solutions/trucking/page.tsx
@@ -4,8 +4,8 @@ import SolutionPageLayout from '@/components/solutions/solution-page-layout';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/solutions/trucking' },
- title: 'Fleet Management Software for Trucking & Haulage | Fleetbase',
- description: 'Replace your legacy TMS with open-source fleet management built for trucking and haulage. Real-time tracking, route optimization, digital POD, and compliance tools — on infrastructure you own.',
+ title: 'Fleet Management Software for Trucking & Haulage',
+ description: 'Replace your legacy TMS with open-source fleet management for trucking and haulage. Live tracking, route optimization, digital POD and compliance.',
keywords: ['trucking software', 'haulage management', 'fleet management TMS', 'freight tracking', 'route optimization trucking', 'open source TMS'],
openGraph: {
title: 'Trucking & Haulage Fleet Management | Fleetbase',
diff --git a/src/app/solutions/use-cases/analytics/page.tsx b/src/app/solutions/use-cases/analytics/page.tsx
index 3c41657f..8110ec13 100644
--- a/src/app/solutions/use-cases/analytics/page.tsx
+++ b/src/app/solutions/use-cases/analytics/page.tsx
@@ -4,8 +4,8 @@ import SolutionPageLayout from '@/components/solutions/solution-page-layout';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/solutions/use-cases/analytics' },
- title: 'Logistics Analytics & Reporting | Fleetbase',
- description: 'Turn logistics data into decisions. Live dashboards, KPI tracking, cost analysis, and exportable reports for fleet performance, delivery SLAs, driver metrics, and operational costs.',
+ title: 'Logistics Analytics & Reporting',
+ description: 'Turn logistics data into decisions. Live dashboards, KPI tracking, cost analysis and exportable reports on fleet, SLA and driver performance.',
keywords: ['logistics analytics software', 'fleet performance dashboard', 'delivery KPI tracking', 'logistics reporting platform', 'supply chain analytics', 'fleet cost analysis'],
openGraph: {
title: 'Logistics Analytics & Reporting | Fleetbase',
diff --git a/src/app/solutions/use-cases/fleet-management/page.tsx b/src/app/solutions/use-cases/fleet-management/page.tsx
index 3fa1e03f..4c0f31e6 100644
--- a/src/app/solutions/use-cases/fleet-management/page.tsx
+++ b/src/app/solutions/use-cases/fleet-management/page.tsx
@@ -4,8 +4,8 @@ import SolutionPageLayout from '@/components/solutions/solution-page-layout';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/solutions/use-cases/fleet-management' },
- title: 'Fleet Management Software | Fleetbase',
- description: 'Monitor vehicle health, driver performance, and fleet utilization from one dashboard. Open-source fleet management with real-time tracking, maintenance scheduling, and compliance tools.',
+ title: 'Fleet Management Software',
+ description: 'Open-source fleet management: vehicle health, driver performance and utilisation in one dashboard, with maintenance scheduling and compliance.',
keywords: ['fleet management software', 'vehicle tracking system', 'fleet maintenance software', 'driver management platform', 'fleet compliance software', 'vehicle health monitoring'],
openGraph: {
title: 'Fleet Management Software | Fleetbase',
diff --git a/src/app/solutions/use-cases/integrations/page.tsx b/src/app/solutions/use-cases/integrations/page.tsx
index a632c9be..b06cacfb 100644
--- a/src/app/solutions/use-cases/integrations/page.tsx
+++ b/src/app/solutions/use-cases/integrations/page.tsx
@@ -4,8 +4,8 @@ import SolutionPageLayout from '@/components/solutions/solution-page-layout';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/solutions/use-cases/integrations' },
- title: 'Logistics API & Integrations | Fleetbase',
- description: 'Connect Fleetbase to your entire tech stack with a full REST API, real-time webhooks, and pre-built integrations. Open-source logistics platform built to fit your existing workflows.',
+ title: 'Logistics API & Integrations',
+ description: 'Connect Fleetbase to your stack with a full REST API, real-time webhooks and pre-built integrations that fit your existing workflows.',
keywords: ['logistics API', 'fleet management API', 'logistics integration platform', 'delivery API', 'logistics webhook integration', 'headless logistics platform'],
openGraph: {
title: 'Logistics API & Integrations | Fleetbase',
diff --git a/src/app/solutions/use-cases/last-mile-delivery/page.tsx b/src/app/solutions/use-cases/last-mile-delivery/page.tsx
index 07f06606..bb439508 100644
--- a/src/app/solutions/use-cases/last-mile-delivery/page.tsx
+++ b/src/app/solutions/use-cases/last-mile-delivery/page.tsx
@@ -4,8 +4,8 @@ import SolutionPageLayout from '@/components/solutions/solution-page-layout';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/solutions/use-cases/last-mile-delivery' },
- title: 'Last-Mile Delivery Software | Fleetbase',
- description: 'Cut failed deliveries, automate dispatch, and give customers real-time tracking. Open-source last-mile logistics platform with smart routing, digital POD, and branded tracking pages.',
+ title: 'Last-Mile Delivery Software',
+ description: 'Open-source last-mile delivery software. Cut failed deliveries, automate dispatch, and give customers smart routing and live tracking pages.',
keywords: ['last mile delivery software', 'last mile logistics platform', 'delivery management system', 'final mile delivery', 'delivery dispatch software', 'proof of delivery'],
openGraph: {
title: 'Last-Mile Delivery Software | Fleetbase',
diff --git a/src/app/solutions/use-cases/order-management/page.tsx b/src/app/solutions/use-cases/order-management/page.tsx
index 59b88020..59d091db 100644
--- a/src/app/solutions/use-cases/order-management/page.tsx
+++ b/src/app/solutions/use-cases/order-management/page.tsx
@@ -4,8 +4,8 @@ import SolutionPageLayout from '@/components/solutions/solution-page-layout';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/solutions/use-cases/order-management' },
- title: 'Order Management Software | Fleetbase',
- description: 'Configure, track, and fulfill any order type with custom workflows, statuses, and fields. Open-source order management that adapts to your logistics operation — not the other way around.',
+ title: 'Order Management Software',
+ description: 'Configure, track and fulfil any order type with custom workflows, statuses and fields. Open-source order management that adapts to you.',
keywords: ['order management software', 'logistics order management', 'custom order workflows', 'order fulfillment platform', 'order tracking system', 'delivery order management'],
openGraph: {
title: 'Order Management Software | Fleetbase',
diff --git a/src/app/solutions/use-cases/route-optimization/page.tsx b/src/app/solutions/use-cases/route-optimization/page.tsx
index ab752ae7..4ed87aed 100644
--- a/src/app/solutions/use-cases/route-optimization/page.tsx
+++ b/src/app/solutions/use-cases/route-optimization/page.tsx
@@ -4,8 +4,8 @@ import SolutionPageLayout from '@/components/solutions/solution-page-layout';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/solutions/use-cases/route-optimization' },
- title: 'Route Optimization Software | Fleetbase',
- description: 'Cut fuel costs by 28% and improve on-time rates with intelligent multi-stop route optimization. Real-time traffic, time windows, vehicle capacity — all factored in automatically.',
+ title: 'Route Optimization Software',
+ description: 'Open-source route optimization software. Intelligent multi-stop routing that factors in live traffic, time windows and vehicle capacity.',
keywords: ['route optimization software', 'delivery route planner', 'multi-stop route optimization', 'fleet route planning', 'dynamic route optimization', 'last mile routing'],
openGraph: {
title: 'Route Optimization Software | Fleetbase',
diff --git a/src/app/solutions/waste-management/page.tsx b/src/app/solutions/waste-management/page.tsx
index ad15a88f..17af580a 100644
--- a/src/app/solutions/waste-management/page.tsx
+++ b/src/app/solutions/waste-management/page.tsx
@@ -4,8 +4,8 @@ import SolutionPageLayout from '@/components/solutions/solution-page-layout';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/solutions/waste-management' },
- title: 'Waste & Recycling Fleet Management Software | Fleetbase',
- description: 'Optimize waste collection routes, reduce fuel costs, track containers, and generate compliance reports automatically. Open-source fleet management built for waste and recycling operations.',
+ title: 'Waste & Recycling Fleet Management Software',
+ description: 'Open-source fleet management for waste and recycling. Optimise collection routes, cut fuel costs, track containers and report on compliance.',
keywords: ['waste management software', 'recycling fleet management', 'waste collection routing', 'bin tracking software', 'refuse logistics platform'],
openGraph: {
title: 'Waste & Recycling Operations Software | Fleetbase',
diff --git a/src/app/terms/page.tsx b/src/app/terms/page.tsx
index 3db4422f..232813ac 100644
--- a/src/app/terms/page.tsx
+++ b/src/app/terms/page.tsx
@@ -2,7 +2,7 @@ import type { Metadata } from 'next';
import Link from 'next/link';
export const metadata: Metadata = {
- title: 'Terms of Service | Fleetbase',
+ title: 'Terms of Service',
description: 'Fleetbase Terms of Service for SaaS and Cloud customers. Read our terms covering usage, data, billing, and your rights as a customer.',
alternates: { canonical: 'https://fleetbase.io/terms' },
openGraph: {
diff --git a/src/app/true-vegan/page.tsx b/src/app/true-vegan/page.tsx
index fdfbd9cf..13dccb8e 100644
--- a/src/app/true-vegan/page.tsx
+++ b/src/app/true-vegan/page.tsx
@@ -22,9 +22,9 @@ import { Button } from '@/components/ui/button';
import './true-vegan.css';
export const metadata: Metadata = {
- title: 'True Vegan × Fleetbase — Plant-Based Dining, Delivered on Storefront',
+ title: 'True Vegan — Plant-Based Dining, Delivered',
description:
- 'True Vegan, by Chef Rahein, brings plant-based dining to Delray Beach with a branded Storefront customer app — pickup, delivery, and Stripe checkout, all powered by Fleetbase.',
+ 'True Vegan brings plant-based dining to Delray Beach with a branded Storefront app — pickup, delivery and Stripe checkout, powered by Fleetbase.',
keywords: [
'True Vegan',
'Chef Rahein',
diff --git a/src/components/layout/footer.tsx b/src/components/layout/footer.tsx
index a296210a..d7acf7db 100644
--- a/src/components/layout/footer.tsx
+++ b/src/components/layout/footer.tsx
@@ -148,7 +148,7 @@ const Footer = () => {
{
data-cta-id={button.ctaId}
data-cta-location="navbar_mobile"
data-cta-variant="primary"
- {...(button.external && { target: "_blank", rel: "noopener noreferrer" })}
+ {...(button.external && { target: "_blank" })}
+ rel={relForHref(
+ button.href,
+ button.external ? 'noopener noreferrer' : undefined,
+ )}
>
{button.icon &&
}
{button.label}
@@ -861,7 +866,11 @@ const Navbar = () => {
data-cta-id={button.ctaId}
data-cta-location="navbar"
data-cta-variant="primary"
- {...(button.external && { target: "_blank", rel: "noopener noreferrer" })}
+ {...(button.external && { target: "_blank" })}
+ rel={relForHref(
+ button.href,
+ button.external ? 'noopener noreferrer' : undefined,
+ )}
>
{button.icon &&
}
{button.label}
diff --git a/src/components/placeholder-page.tsx b/src/components/placeholder-page.tsx
index 96742774..4fe11ffa 100644
--- a/src/components/placeholder-page.tsx
+++ b/src/components/placeholder-page.tsx
@@ -29,7 +29,7 @@ export default function PlaceholderPage({
-
+
Start Free Trial
diff --git a/src/components/sections/final-cta.tsx b/src/components/sections/final-cta.tsx
index a76412b0..38c29372 100644
--- a/src/components/sections/final-cta.tsx
+++ b/src/components/sections/final-cta.tsx
@@ -31,7 +31,7 @@ export default function FinalCTA() {
{ctaBody}
-
+
{ctaPrimary}
{ctaSecondary && ctaSecondaryHref && (
- {ctaSecondary}
+
+ {ctaSecondary}
+
)}
diff --git a/src/lib/docs-metadata.ts b/src/lib/docs-metadata.ts
new file mode 100644
index 00000000..bef4bef5
--- /dev/null
+++ b/src/lib/docs-metadata.ts
@@ -0,0 +1,63 @@
+import type { Metadata } from 'next';
+
+import { titleWithinLimit, truncateAtWord } from '@/lib/seo-text';
+
+const BASE_URL = 'https://fleetbase.io';
+
+// Docs pages carried a bare title and description — no canonical, no Open Graph
+// — so every documentation link shared into Slack, LinkedIn or a GitHub issue
+// rendered as a naked URL. Docs are the bulk of the site's indexable content
+// and the pages developers actually pass around, so they get the same treatment
+// as marketing pages: one branded card, built from the page's own frontmatter.
+type DocsPageData = {
+ title?: string;
+ description?: string;
+};
+
+/**
+ * Build the metadata for one docs page.
+ *
+ * `baseUrl` is the docs source's mount point (`/docs/pallet`), and `slug` is the
+ * catch-all segment array, so the two together reconstruct the canonical path.
+ */
+export function buildDocsMetadata({
+ data,
+ baseUrl,
+ slug,
+}: {
+ data: DocsPageData;
+ baseUrl: string;
+ slug?: string[];
+}): Metadata {
+ const title = data.title ?? 'Documentation';
+ const description = data.description
+ ? truncateAtWord(data.description)
+ : 'Documentation for Fleetbase, the open-source logistics and supply chain platform.';
+
+ const path = [baseUrl, ...(slug ?? [])].join('/').replace(/\/+/g, '/');
+ const canonical = `${BASE_URL}${path}`;
+
+ const ogImage = `${BASE_URL}/og?title=${encodeURIComponent(
+ title,
+ )}&eyebrow=Docs&subtitle=${encodeURIComponent(description)}`;
+
+ return {
+ title: titleWithinLimit(title),
+ description,
+ alternates: { canonical },
+ openGraph: {
+ type: 'article',
+ url: canonical,
+ title,
+ description,
+ siteName: 'Fleetbase',
+ images: [{ url: ogImage, width: 1200, height: 630, alt: title }],
+ },
+ twitter: {
+ card: 'summary_large_image',
+ title,
+ description,
+ images: [ogImage],
+ },
+ };
+}
diff --git a/src/lib/external-link.ts b/src/lib/external-link.ts
new file mode 100644
index 00000000..bfcd3c61
--- /dev/null
+++ b/src/lib/external-link.ts
@@ -0,0 +1,32 @@
+// Hosts we link to heavily but do not want to hand link equity to.
+//
+// The console is the single largest recipient of internal links on the site —
+// /onboard alone takes 514 of them, because every "Get started" CTA points
+// there. Those are app screens, not content: they carry no ranking value of
+// their own, so the authority that flows into them is authority that never
+// reaches the pages built to win buyers. The console is separately marked
+// noindex; nofollow here stops the marketing site from feeding it in the first
+// place.
+const NO_EQUITY_HOSTS = ['console.fleetbase.io'];
+
+function isNoEquityHref(href: string) {
+ return NO_EQUITY_HOSTS.some(
+ (host) => href.startsWith(`https://${host}`) || href.startsWith(`http://${host}`),
+ );
+}
+
+/**
+ * Build the `rel` value for an outbound link, preserving whatever the call site
+ * already set and appending `nofollow` for hosts we deliberately do not pass
+ * authority to. Returns `undefined` when there is nothing to set, so callers can
+ * spread it onto an element without emitting an empty attribute.
+ */
+export function relForHref(href: string, existingRel?: string) {
+ const tokens = new Set((existingRel ?? '').split(/\s+/).filter(Boolean));
+
+ if (isNoEquityHref(href)) {
+ tokens.add('nofollow');
+ }
+
+ return tokens.size > 0 ? Array.from(tokens).join(' ') : undefined;
+}
diff --git a/src/lib/ghost.ts b/src/lib/ghost.ts
index 93bf5444..1aa8c454 100644
--- a/src/lib/ghost.ts
+++ b/src/lib/ghost.ts
@@ -107,8 +107,8 @@ function buildGhostUrl(pathname: string, params: Record) {
return `${apiUrl}/ghost/api/content/${pathname}?${searchParams.toString()}`;
}
-async function fetchGhost(pathname: string, params: Record) {
- const response = await fetch(buildGhostUrl(pathname, params), {
+async function requestGhost(pathname: string, params: Record) {
+ return fetch(buildGhostUrl(pathname, params), {
headers: {
Accept: 'application/json',
'Accept-Version': GHOST_API_VERSION,
@@ -117,6 +117,34 @@ async function fetchGhost(pathname: string, params: Record) {
revalidate: BLOG_REVALIDATE_SECONDS,
},
});
+}
+
+async function fetchGhost(pathname: string, params: Record) {
+ const response = await requestGhost(pathname, params);
+
+ if (!response.ok) {
+ throw new Error(
+ `Ghost Content API request failed for ${pathname} with status ${response.status}.`,
+ );
+ }
+
+ return (await response.json()) as T;
+}
+
+// Ghost answers an unknown resource with a 404. For a lookup by slug that is a
+// normal "no such post" answer rather than a failure, so it must not throw:
+// doing so turned every bad /blog/* URL into a 500 — including
+// /blog/robots.txt, which Ahrefs flagged and which makes crawlers treat the
+// whole host as unhealthy. Any other non-OK status is still a real error.
+async function fetchGhostAllowingMissing(
+ pathname: string,
+ params: Record,
+) {
+ const response = await requestGhost(pathname, params);
+
+ if (response.status === 404) {
+ return null;
+ }
if (!response.ok) {
throw new Error(
@@ -224,7 +252,7 @@ export async function getAllBlogPosts() {
}
export async function getBlogPostBySlug(slug: string) {
- const response = await fetchGhost(
+ const response = await fetchGhostAllowingMissing(
`posts/slug/${encodeURIComponent(slug)}/`,
{
include: 'authors,tags',
@@ -232,7 +260,7 @@ export async function getBlogPostBySlug(slug: string) {
},
);
- const post = response.posts[0];
+ const post = response?.posts[0];
return post ? normalizePost(post) : null;
}
diff --git a/src/lib/seo-text.ts b/src/lib/seo-text.ts
new file mode 100644
index 00000000..402b748e
--- /dev/null
+++ b/src/lib/seo-text.ts
@@ -0,0 +1,44 @@
+// Search engines truncate what they show. These limits are where Google starts
+// cutting in practice, and Ahrefs flags anything past them.
+//
+// The brand suffix is appended by the `title.template` in the root layout, so a
+// page's own title has TITLE_LIMIT - BRAND_SUFFIX.length characters to work with
+// before the rendered runs long.
+export const BRAND_SUFFIX = ' | Fleetbase';
+export const TITLE_LIMIT = 60;
+export const DESCRIPTION_LIMIT = 155;
+
+/**
+ * Cut `text` to at most `limit` characters, breaking on a word boundary and
+ * adding an ellipsis when anything was removed. Collapses whitespace first so
+ * excerpts pulled out of HTML don't carry newlines into the meta tag.
+ */
+export function truncateAtWord(text: string, limit = DESCRIPTION_LIMIT) {
+ const normalized = text.replace(/\s+/g, ' ').trim();
+
+ if (normalized.length <= limit) {
+ return normalized;
+ }
+
+ // Leave room for the ellipsis, then step back to the last space so we never
+ // cut a word in half.
+ const hardCut = normalized.slice(0, limit - 1);
+ const lastSpace = hardCut.lastIndexOf(' ');
+ const body = (lastSpace > limit * 0.6 ? hardCut.slice(0, lastSpace) : hardCut)
+ // Trailing punctuation before an ellipsis reads as a typo.
+ .replace(/[\s,;:.!?—–-]+$/, '');
+
+ return `${body}…`;
+}
+
+/**
+ * Blog headlines are written for readers, not for the 60-character budget, and
+ * shortening them would damage the page. The plan's guidance is to drop the
+ * brand suffix instead: return an `absolute` title, which tells Next.js to skip
+ * the layout's template for this page only.
+ */
+export function titleWithinLimit(title: string) {
+ return title.length + BRAND_SUFFIX.length > TITLE_LIMIT
+ ? { absolute: title }
+ : title;
+}
diff --git a/src/middleware.ts b/src/middleware.ts
new file mode 100644
index 00000000..7954f9fc
--- /dev/null
+++ b/src/middleware.ts
@@ -0,0 +1,40 @@
+import { type NextRequest, NextResponse } from 'next/server';
+
+// Tracking parameters that identify where a visit came from but never change
+// what the page renders. Links from the old blog subdomain append
+// ?ref=blog.fleetbase.io, which gave crawlers a second, indexable copy of every
+// high-value marketing page. Canonical tags already point at the clean path, so
+// this is belt-and-braces: redirect the parameter away before a crawler can
+// treat the URL as a page in its own right.
+//
+// The HTTP Referer header still carries the referral, so analytics attribution
+// is unaffected.
+const STRIPPED_QUERY_PARAMS = ['ref'];
+
+export function middleware(request: NextRequest) {
+ const url = request.nextUrl.clone();
+ const stripped = STRIPPED_QUERY_PARAMS.filter((param) =>
+ url.searchParams.has(param),
+ );
+
+ if (stripped.length === 0) {
+ return NextResponse.next();
+ }
+
+ for (const param of stripped) {
+ url.searchParams.delete(param);
+ }
+
+ // 308 rather than 302: the clean path is the permanent home of the content,
+ // and it preserves the request method.
+ return NextResponse.redirect(url, 308);
+}
+
+export const config = {
+ // Skip API routes, Next internals and static assets — none of them are
+ // indexable, and keeping them out avoids paying middleware latency on every
+ // asset request.
+ matcher: [
+ '/((?!api/|ingest/|gtm/|g/collect|_next/static|_next/image|images/|favicon).*)',
+ ],
+};
From 47dcc840e5ca2b84be0f753fe76d532a05c404a9 Mon Sep 17 00:00:00 2001
From: Shiv Thakker
Date: Thu, 3 Sep 2026 13:15:54 +0800
Subject: [PATCH 2/2] =?UTF-8?q?fix(seo):=20phase=203=20=E2=80=94=20links,?=
=?UTF-8?q?=20assets,=20docs=20headings,=20blog=20caching?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
SEO-08 Point internal links at final URLs. Verified each redirect
against the live site first — several went somewhere other than
the plan assumed (/docs/fleet-ops/orders lands on
/docs/fleet-ops/operations/orders/overview, not /orders/overview).
Rewrote 10 files, fixed the two internal 404s, and removed the
Bringg card from /compare, which linked to a redirect back to
the page the visitor was already on. Growth plan GP-05 restores
it as a real page.
Not done: the 20 external 4XX links. That list only exists in
the Ahrefs export, which is not in the repo.
SEO-09 Self-host the integration icons. All four broken logos already
existed under public/images/integrations — the component was
simply pointing at the CDN. Repointed all 26 references and
self-hosted the remaining 18 (Simple Icons, CC0) so a sales page
does not depend on a CDN that renamed these slugs once already.
SEO-10 One H1 per docs page. Not a Docusaurus swizzle — the docs are
fumadocs. fumadocs renders the frontmatter title as an h1 and
354 MDX files then opened with their own "# " heading, which is
the same text 269 times over. Removed the redundant body heading
from 343 files; the 11 section roots keep theirs, because those
routes skip DocsTitle and it is their only h1.
SEO-11 Cache blog pages at the edge. The blog was already on ISR, so
the plan's "rendered on every request" diagnosis was wrong. The
real cost was a 5-minute revalidate window: raised to an hour
and paired with s-maxage=3600 plus stale-while-revalidate so the
CDN never makes a reader wait on a cold render.
SEO-12 Link the sales pages from where the authority is. The role and
use-case pages had one inbound link each because they lived only
in the nav dropdown. Added a footer column covering all twelve,
a homepage section linking the three compare pages and every
role and use-case page in body copy, and a RelatedPages
component that cross-links platform modules to the roles and
industries that buy them. It looks itself up by pathname, so
pairings live in one map instead of thirty page components.
Also caught in review: /platform/fleetops kept a doubled brand suffix
because its title came from a const shared with the social tags, and two
further titles repeated the brand mid-string.
Co-Authored-By: Claude Opus 5
---
content/docs/apps/index.mdx | 2 -
.../docs/apps/navigator-app/customization.mdx | 2 -
content/docs/apps/navigator-app/index.mdx | 2 -
content/docs/apps/navigator-app/overview.mdx | 2 -
content/docs/apps/navigator-app/setup.mdx | 2 -
.../apps/storefront-app/customization.mdx | 2 -
content/docs/apps/storefront-app/index.mdx | 2 -
content/docs/apps/storefront-app/overview.mdx | 2 -
content/docs/apps/storefront-app/setup.mdx | 2 -
content/docs/cli/account/generate-token.mdx | 2 -
content/docs/cli/account/login.mdx | 2 -
content/docs/cli/account/register.mdx | 2 -
.../docs/cli/account/resend-verification.mdx | 2 -
content/docs/cli/account/set-auth.mdx | 2 -
content/docs/cli/account/verify.mdx | 2 -
.../extension-development/bundle-upload.mdx | 2 -
.../docs/cli/extension-development/bundle.mdx | 2 -
.../cli/extension-development/overview.mdx | 2 -
.../cli/extension-development/publish.mdx | 2 -
.../cli/extension-development/scaffold.mdx | 2 -
.../cli/extension-development/unpublish.mdx | 2 -
.../extension-development/version-bump.mdx | 2 -
content/docs/cli/extensions/install.mdx | 2 -
content/docs/cli/extensions/search.mdx | 2 -
content/docs/cli/extensions/uninstall.mdx | 2 -
content/docs/cli/getting-started/commands.mdx | 2 -
.../docs/cli/getting-started/installation.mdx | 2 -
.../docs/cli/getting-started/requirements.mdx | 2 -
content/docs/cli/installation/overview.mdx | 2 -
content/docs/community/changelog.mdx | 2 -
content/docs/community/discord.mdx | 2 -
content/docs/community/faq.mdx | 2 -
content/docs/community/github-discussions.mdx | 2 -
content/docs/community/index.mdx | 2 -
content/docs/community/licensing.mdx | 2 -
content/docs/community/support-plans.mdx | 2 -
content/docs/contributing/code.mdx | 2 -
content/docs/contributing/documentation.mdx | 2 -
content/docs/contributing/extensions.mdx | 4 +-
.../docs/contributing/reporting-issues.mdx | 2 -
.../contributing/translations/file-format.mdx | 2 -
.../contributing/translations/glossary.mdx | 2 -
.../docs/contributing/translations/index.mdx | 2 -
.../translations/repositories.mdx | 2 -
.../docs/contributing/translations/setup.mdx | 4 +-
.../contributing/translations/submitting.mdx | 2 -
.../backend-development.mdx | 2 -
.../extending-fleetbase/dashboard-widgets.mdx | 2 -
.../extension-architecture.mdx | 2 -
.../frontend-development.mdx | 2 -
.../hooks-and-lifecycle.mdx | 2 -
content/docs/extending-fleetbase/index.mdx | 2 -
.../menus-and-navigation.mdx | 2 -
content/docs/extending-fleetbase/overview.mdx | 2 -
.../publishing-to-marketplace.mdx | 2 -
.../registering-components.mdx | 2 -
.../scaffolding-your-extension.mdx | 2 -
.../extending-fleetbase/virtual-routes.mdx | 2 -
.../architecture/extension-registration.mdx | 2 -
.../architecture/overview.mdx | 2 -
.../backend/expansions-and-observers.mdx | 2 -
.../backend/migrations.mdx | 2 -
.../backend/routes-and-controllers.mdx | 2 -
.../backend/service-provider.mdx | 2 -
.../frontend/routing.mdx | 2 -
.../frontend/templates-and-components.mdx | 2 -
.../frontend/virtual-routes.mdx | 2 -
.../getting-started/extension-anatomy.mdx | 2 -
.../getting-started/quickstart.mdx | 2 -
.../publishing/overview.mdx | 2 -
.../adding-a-payment-gateway-driver.mdx | 2 -
.../recipes/adding-a-sms-provider.mdx | 2 -
.../recipes/adding-an-integrated-vendor.mdx | 2 -
.../recipes/calling-your-extension-api.mdx | 2 -
.../recipes/connecting-models-to-your-api.mdx | 2 -
.../recipes/registering-a-report-schema.mdx | 2 -
.../recipes/registering-notifications.mdx | 2 -
.../reference/api-services.mdx | 2 -
.../reference/contracts.mdx | 2 -
.../reference/decorators.mdx | 2 -
.../reference/ember-services.mdx | 2 -
.../universe/extension-manager.mdx | 2 -
.../universe/hook-service.mdx | 2 -
.../universe/menu-service.mdx | 2 -
.../universe/overview.mdx | 2 -
.../universe/registry-service.mdx | 2 -
.../universe/widget-service.mdx | 2 -
content/docs/fleet-ops/analytics/overview.mdx | 2 -
.../fleet-ops/analytics/reports/overview.mdx | 2 -
.../connectivity/devices/overview.mdx | 2 -
.../connectivity/events/overview.mdx | 2 -
.../docs/fleet-ops/connectivity/overview.mdx | 2 -
.../connectivity/sensors/overview.mdx | 2 -
.../connectivity/telematics/overview.mdx | 2 -
.../getting-started/core-concepts.mdx | 2 -
.../getting-started/navigator-app-setup.mdx | 2 -
.../fleet-ops/getting-started/quickstart.mdx | 2 -
.../maintenance/equipment/overview.mdx | 2 -
.../docs/fleet-ops/maintenance/overview.mdx | 2 -
.../fleet-ops/maintenance/parts/overview.mdx | 2 -
.../maintenance/schedules/overview.mdx | 2 -
.../maintenance/work-orders/overview.mdx | 2 -
.../navigator-app/build-and-release.mdx | 2 -
.../fleet-ops/navigator-app/configuration.mdx | 2 -
.../fleet-ops/navigator-app/quickstart.mdx | 2 -
.../docs/fleet-ops/navigator-app/theming.mdx | 2 -
.../operations/orchestrator/overview.mdx | 2 -
.../payload-capacity-allocation.mdx | 2 -
.../orchestrator/vehicle-allocation.mdx | 2 -
.../operations/orchestrator/workbench.mdx | 2 -
.../order-configurations/activity-flows.mdx | 2 -
.../order-configurations/order-types.mdx | 2 -
.../order-configurations/overview.mdx | 2 -
.../operations/orders/importing-orders.mdx | 2 -
.../operations/orders/kanban-board.mdx | 2 -
.../operations/orders/managing-orders.mdx | 2 -
.../operations/orders/order-lifecycle.mdx | 2 -
.../fleet-ops/operations/orders/overview.mdx | 2 -
.../operations/orders/proof-of-delivery.mdx | 2 -
.../operations/orders/scheduling-orders.mdx | 2 -
.../fleet-ops/operations/orders/tracking.mdx | 2 -
.../docs/fleet-ops/operations/overview.mdx | 2 -
.../scheduler/driver-shift-schedules.mdx | 2 -
.../operations/scheduler/order-scheduling.mdx | 2 -
.../operations/scheduler/overview.mdx | 2 -
.../service-areas-geofences/geofences.mdx | 4 +-
.../service-areas-geofences/service-areas.mdx | 2 -
.../service-areas-geofences/zones.mdx | 2 -
.../operations/service-quotes/overview.mdx | 2 -
.../service-rates/algorithm-rates.mdx | 2 -
.../operations/service-rates/fixed-rate.mdx | 2 -
.../service-rates/multi-zone-distance.mdx | 2 -
.../operations/service-rates/overview.mdx | 2 -
.../operations/service-rates/parcel.mdx | 2 -
.../operations/service-rates/per-drop.mdx | 2 -
.../operations/service-rates/per-meter.mdx | 2 -
.../recipes/fuel-provider-integrations.mdx | 2 -
.../fleet-ops/resources/contacts/overview.mdx | 2 -
.../resources/drivers/navigator-access.mdx | 2 -
.../fleet-ops/resources/drivers/overview.mdx | 2 -
.../resources/drivers/shift-schedules.mdx | 2 -
.../fleet-ops/resources/fleets/overview.mdx | 2 -
.../resources/fuel-reports/overview.mdx | 2 -
.../fleet-ops/resources/issues/overview.mdx | 2 -
content/docs/fleet-ops/resources/overview.mdx | 2 -
.../fleet-ops/resources/places/overview.mdx | 2 -
.../vehicles/capacity-and-payload.mdx | 2 -
.../fleet-ops/resources/vehicles/overview.mdx | 2 -
.../fleet-ops/resources/vehicles/tracking.mdx | 2 -
.../resources/vendors/integrated-vendors.mdx | 2 -
.../fleet-ops/resources/vendors/overview.mdx | 2 -
content/docs/fleet-ops/settings/avatars.mdx | 2 -
.../docs/fleet-ops/settings/custom-fields.mdx | 2 -
content/docs/fleet-ops/settings/map.mdx | 2 -
.../docs/fleet-ops/settings/navigator-app.mdx | 2 -
.../docs/fleet-ops/settings/notifications.mdx | 2 -
.../docs/fleet-ops/settings/orchestrator.mdx | 2 -
content/docs/fleet-ops/settings/payments.mdx | 2 -
content/docs/fleet-ops/settings/routing.mdx | 2 -
.../docs/fleet-ops/settings/scheduling.mdx | 2 -
.../ledger/accounting/chart-of-accounts.mdx | 2 -
.../docs/ledger/accounting/general-ledger.mdx | 2 -
.../ledger/accounting/journal-entries.mdx | 2 -
content/docs/ledger/accounting/overview.mdx | 2 -
.../docs/ledger/billing/invoice-templates.mdx | 2 -
content/docs/ledger/billing/invoices.mdx | 2 -
content/docs/ledger/billing/overview.mdx | 2 -
.../ledger/getting-started/core-concepts.mdx | 2 -
.../ledger/getting-started/quickstart.mdx | 2 -
.../docs/ledger/integrations/fleet-ops.mdx | 2 -
.../docs/ledger/integrations/storefront.mdx | 2 -
.../docs/ledger/payments/gateways/cash.mdx | 2 -
.../ledger/payments/gateways/gnu-taler.mdx | 2 -
.../ledger/payments/gateways/overview.mdx | 2 -
.../docs/ledger/payments/gateways/qpay.mdx | 2 -
.../docs/ledger/payments/gateways/stripe.mdx | 2 -
content/docs/ledger/payments/overview.mdx | 2 -
content/docs/ledger/payments/transactions.mdx | 2 -
content/docs/ledger/payments/wallets.mdx | 2 -
.../ledger/recipes/payment-gateway-driver.mdx | 2 -
content/docs/ledger/reports/ar-aging.mdx | 2 -
content/docs/ledger/reports/balance-sheet.mdx | 2 -
content/docs/ledger/reports/cash-flow.mdx | 2 -
.../docs/ledger/reports/income-statement.mdx | 2 -
content/docs/ledger/reports/overview.mdx | 2 -
content/docs/ledger/reports/trial-balance.mdx | 2 -
.../docs/ledger/reports/wallet-summary.mdx | 2 -
content/docs/ledger/settings/overview.mdx | 2 -
content/docs/pallet/audits/cycle-counts.mdx | 2 -
content/docs/pallet/audits/overview.mdx | 6 +-
content/docs/pallet/fulfillment/overview.mdx | 10 +-
.../docs/pallet/fulfillment/pick-lists.mdx | 2 -
.../pallet/fulfillment/purchase-orders.mdx | 2 -
.../docs/pallet/fulfillment/sales-orders.mdx | 2 -
.../pallet/fulfillment/waves-and-batches.mdx | 2 -
.../pallet/getting-started/core-concepts.mdx | 1 +
.../pallet/getting-started/quickstart.mdx | 1 +
content/docs/pallet/index.mdx | 12 +-
.../docs/pallet/inventory/expired-stock.mdx | 2 -
content/docs/pallet/inventory/low-stock.mdx | 2 -
content/docs/pallet/inventory/overview.mdx | 6 +-
content/docs/pallet/inventory/products.mdx | 2 -
.../pallet/inventory/stock-adjustments.mdx | 2 -
.../docs/pallet/inventory/stock-levels.mdx | 2 -
.../docs/pallet/inventory/stock-transfers.mdx | 2 -
content/docs/pallet/reports/overview.mdx | 2 -
content/docs/pallet/suppliers/overview.mdx | 2 -
content/docs/pallet/warehouses/overview.mdx | 2 -
content/docs/pallet/warehouses/warehouses.mdx | 2 -
.../warehouses/zones-aisles-racks-bins.mdx | 2 -
.../docs/platform/console-features/chat.mdx | 2 -
.../console-features/custom-fields.mdx | 2 -
.../dashboards-and-widgets.mdx | 2 -
.../console-features/internationalization.mdx | 2 -
.../platform/console-features/navigation.mdx | 2 -
.../console-features/notifications.mdx | 2 -
.../platform/developer-console/api-keys.mdx | 2 -
.../docs/platform/developer-console/index.mdx | 2 -
.../developer-console/request-logs.mdx | 2 -
.../developer-console/socket-events.mdx | 2 -
.../developer-console/system-events.mdx | 2 -
.../platform/developer-console/webhooks.mdx | 2 -
.../extensions/browsing-and-installing.mdx | 2 -
content/docs/platform/extensions/index.mdx | 2 -
.../extensions/managing-extensions.mdx | 2 -
.../platform/getting-started/architecture.mdx | 2 -
.../platform/getting-started/overview.mdx | 2 -
.../getting-started/why-fleetbase.mdx | 2 -
.../platform/identity-and-access/groups.mdx | 2 -
.../identity-and-access/organizations.mdx | 2 -
.../platform/identity-and-access/policies.mdx | 2 -
.../roles-and-permissions.mdx | 2 -
.../two-factor-authentication.mdx | 2 -
.../identity-and-access/user-management.mdx | 2 -
.../platform/identity-and-access/users.mdx | 2 -
content/docs/platform/index.mdx | 2 -
.../platform/quickstart/cloud-quickstart.mdx | 12 +-
.../platform/quickstart/deploy-in-cloud.mdx | 2 -
.../platform/quickstart/development-setup.mdx | 2 -
.../quickstart/infrastructure-sizing.mdx | 2 -
.../platform/quickstart/running-locally.mdx | 2 -
.../recipes/build-a-custom-integration.mdx | 2 -
.../recipes/configure-custom-fields.mdx | 2 -
.../recipes/connect-your-first-webhook.mdx | 2 -
.../recipes/set-up-real-time-tracking.mdx | 2 -
.../docs/platform/system-setup/branding.mdx | 2 -
.../docs/platform/system-setup/filesystem.mdx | 2 -
content/docs/platform/system-setup/mail.mdx | 2 -
.../system-setup/push-notifications.mdx | 2 -
content/docs/platform/system-setup/queue.mdx | 2 -
.../docs/platform/system-setup/services.mdx | 2 -
content/docs/platform/system-setup/socket.mdx | 2 -
.../two-factor-authentication.mdx | 2 -
.../docs/storefront/app/build-and-release.mdx | 2 -
content/docs/storefront/app/configuration.mdx | 2 -
content/docs/storefront/app/integrations.mdx | 2 -
content/docs/storefront/app/overview.mdx | 2 -
content/docs/storefront/app/quickstart.mdx | 2 -
content/docs/storefront/app/theming.mdx | 2 -
.../docs/storefront/catalog/categories.mdx | 2 -
content/docs/storefront/catalog/overview.mdx | 2 -
content/docs/storefront/catalog/pricing.mdx | 2 -
content/docs/storefront/catalog/products.mdx | 2 -
.../catalog/variants-and-addons.mdx | 2 -
.../storefront/customers/authentication.mdx | 2 -
.../docs/storefront/customers/overview.mdx | 2 -
.../getting-started/core-concepts.mdx | 2 -
.../storefront/getting-started/quickstart.mdx | 2 -
content/docs/storefront/networks/overview.mdx | 2 -
content/docs/storefront/orders/cart.mdx | 2 -
content/docs/storefront/orders/checkout.mdx | 2 -
content/docs/storefront/orders/overview.mdx | 2 -
.../storefront/orders/payment-gateways.mdx | 2 -
.../docs/storefront/orders/service-quotes.mdx | 2 -
.../promotions/push-notifications.mdx | 2 -
content/docs/storefront/settings/api.mdx | 2 -
content/docs/storefront/settings/gateways.mdx | 2 -
.../docs/storefront/settings/locations.mdx | 2 -
.../storefront/settings/notifications.mdx | 2 -
.../docs/storefront/stores/food-trucks.mdx | 2 -
.../storefront/stores/operating-hours.mdx | 2 -
content/docs/storefront/stores/overview.mdx | 2 -
content/docs/storefront/stores/setup.mdx | 2 -
.../storefront/stores/store-locations.mdx | 2 -
content/docs/ui/actions/button.mdx | 2 -
content/docs/ui/actions/click-to-copy.mdx | 2 -
content/docs/ui/actions/click-to-reveal.mdx | 2 -
content/docs/ui/builders/report-builder.mdx | 2 -
content/docs/ui/builders/template-builder.mdx | 2 -
content/docs/ui/dashboard/overview.mdx | 4 +-
content/docs/ui/dashboard/service.mdx | 2 -
content/docs/ui/display/activity-log.mdx | 2 -
content/docs/ui/display/badge.mdx | 2 -
content/docs/ui/display/comment-thread.mdx | 2 -
content/docs/ui/display/file.mdx | 2 -
content/docs/ui/display/pill.mdx | 2 -
content/docs/ui/display/progress-bar.mdx | 2 -
content/docs/ui/display/spinner.mdx | 2 -
content/docs/ui/display/table.mdx | 2 -
content/docs/ui/display/timeline.mdx | 2 -
.../docs/ui/getting-started/core-concepts.mdx | 2 -
.../docs/ui/getting-started/installation.mdx | 2 -
content/docs/ui/helpers/data.mdx | 2 -
content/docs/ui/helpers/formatting.mdx | 2 -
content/docs/ui/helpers/modifiers.mdx | 2 -
content/docs/ui/helpers/permissions.mdx | 2 -
content/docs/ui/helpers/type-checking.mdx | 2 -
content/docs/ui/inputs/checkbox.mdx | 2 -
content/docs/ui/inputs/combo-box.mdx | 2 -
content/docs/ui/inputs/coordinates-input.mdx | 2 -
content/docs/ui/inputs/date-picker.mdx | 2 -
content/docs/ui/inputs/date-time-input.mdx | 2 -
content/docs/ui/inputs/file-upload.mdx | 2 -
content/docs/ui/inputs/input-group.mdx | 2 -
.../ui/inputs/model-coordinates-input.mdx | 2 -
content/docs/ui/inputs/model-select.mdx | 2 -
content/docs/ui/inputs/money-input.mdx | 2 -
content/docs/ui/inputs/multi-select.mdx | 2 -
content/docs/ui/inputs/phone-input.mdx | 2 -
content/docs/ui/inputs/select.mdx | 2 -
content/docs/ui/inputs/toggle.mdx | 2 -
content/docs/ui/inputs/unit-input.mdx | 2 -
content/docs/ui/layout/attach-popover.mdx | 2 -
content/docs/ui/layout/attach-tooltip.mdx | 2 -
content/docs/ui/layout/content-panel.mdx | 2 -
content/docs/ui/layout/drawer.mdx | 2 -
content/docs/ui/layout/floating.mdx | 2 -
content/docs/ui/layout/overlay.mdx | 2 -
content/docs/ui/layout/overview.mdx | 2 -
content/docs/ui/layout/resource-tabular.mdx | 2 -
content/docs/ui/layout/spacer.mdx | 2 -
content/docs/ui/modals/modal-layouts.mdx | 2 -
content/docs/ui/modals/modals-manager.mdx | 2 -
content/docs/ui/modals/overview.mdx | 2 -
.../docs/ui/navigation/dropdown-button.mdx | 2 -
content/docs/ui/navigation/tab-navigation.mdx | 2 -
content/docs/ui/navigation/tabs.mdx | 2 -
content/docs/ui/registry/overview.mdx | 4 +-
content/docs/ui/registry/registry-yield.mdx | 2 -
content/docs/ui/scheduling/event-calendar.mdx | 2 -
content/docs/ui/scheduling/full-calendar.mdx | 2 -
content/docs/ui/scheduling/kanban.mdx | 2 -
content/docs/ui/services/overview.mdx | 2 -
.../ui/services/resource-context-panel.mdx | 2 -
content/docs/ui/services/sidebar.mdx | 2 -
content/docs/ui/services/template-builder.mdx | 2 -
next.config.ts | 26 +++
public/images/integrations/android.svg | 1 +
public/images/integrations/digitalocean.svg | 1 +
public/images/integrations/docker.svg | 1 +
public/images/integrations/expo.svg | 1 +
public/images/integrations/googlemaps.svg | 1 +
public/images/integrations/kubernetes.svg | 1 +
public/images/integrations/laravel.svg | 1 +
public/images/integrations/mailgun.svg | 1 +
public/images/integrations/mysql.svg | 1 +
public/images/integrations/nextdotjs.svg | 1 +
public/images/integrations/nodedotjs.svg | 1 +
public/images/integrations/openstreetmap.svg | 1 +
public/images/integrations/php.svg | 1 +
public/images/integrations/react.svg | 1 +
public/images/integrations/redis.svg | 1 +
public/images/integrations/sentry.svg | 1 +
public/images/integrations/shopify.svg | 1 +
public/images/integrations/woocommerce.svg | 1 +
src/app/blog/page.tsx | 2 +-
src/app/compare/page.tsx | 12 +-
src/app/developers/webhooks/page.tsx | 2 +-
src/app/oli-max/page.tsx | 2 +-
src/app/page.tsx | 2 +
src/app/platform/ai/page.tsx | 2 +
src/app/platform/developer-console/page.tsx | 2 +
.../extensions/extensions-page-content.tsx | 57 +++---
src/app/platform/extensions/page.tsx | 2 +
src/app/platform/fleetops/page.tsx | 11 +-
src/app/platform/ledger/page.tsx | 2 +
src/app/platform/mobile/page.tsx | 2 +
src/app/platform/navigator/page.tsx | 2 +
src/app/platform/pallet/page.tsx | 2 +
src/app/platform/security/page.tsx | 2 +
.../security/security-page-content.tsx | 2 +-
src/app/platform/storefront/page.tsx | 2 +
src/app/product/page.tsx | 2 +-
src/app/true-vegan/page.tsx | 2 +-
src/components/layout/footer.tsx | 22 ++-
src/components/sections/switching-callout.tsx | 129 ++++++++++++
src/components/seo/related-pages.tsx | 57 ++++++
.../solutions/solution-page-layout.tsx | 4 +
src/lib/ghost.ts | 8 +-
src/lib/related-pages.ts | 186 ++++++++++++++++++
390 files changed, 542 insertions(+), 756 deletions(-)
create mode 100644 public/images/integrations/android.svg
create mode 100644 public/images/integrations/digitalocean.svg
create mode 100644 public/images/integrations/docker.svg
create mode 100644 public/images/integrations/expo.svg
create mode 100644 public/images/integrations/googlemaps.svg
create mode 100644 public/images/integrations/kubernetes.svg
create mode 100644 public/images/integrations/laravel.svg
create mode 100644 public/images/integrations/mailgun.svg
create mode 100644 public/images/integrations/mysql.svg
create mode 100644 public/images/integrations/nextdotjs.svg
create mode 100644 public/images/integrations/nodedotjs.svg
create mode 100644 public/images/integrations/openstreetmap.svg
create mode 100644 public/images/integrations/php.svg
create mode 100644 public/images/integrations/react.svg
create mode 100644 public/images/integrations/redis.svg
create mode 100644 public/images/integrations/sentry.svg
create mode 100644 public/images/integrations/shopify.svg
create mode 100644 public/images/integrations/woocommerce.svg
create mode 100644 src/components/sections/switching-callout.tsx
create mode 100644 src/components/seo/related-pages.tsx
create mode 100644 src/lib/related-pages.ts
diff --git a/content/docs/apps/index.mdx b/content/docs/apps/index.mdx
index e2f7234f..1ae0b7c3 100644
--- a/content/docs/apps/index.mdx
+++ b/content/docs/apps/index.mdx
@@ -3,8 +3,6 @@ title: Mobile Apps
description: Open-source mobile apps built on Fleetbase — the Navigator App for drivers and the Storefront App for customers.
---
-# Mobile Apps
-
Fleetbase provides two fully functional, open-source mobile applications built with React Native (Expo). These apps are designed to work seamlessly with the Fleetbase API and can be customized, white-labeled, and deployed to the App Store and Google Play Store under your own brand.
## The Navigator App
diff --git a/content/docs/apps/navigator-app/customization.mdx b/content/docs/apps/navigator-app/customization.mdx
index e1c1c973..41586f89 100644
--- a/content/docs/apps/navigator-app/customization.mdx
+++ b/content/docs/apps/navigator-app/customization.mdx
@@ -3,8 +3,6 @@ title: Customization & White-Labeling
description: Customize the Navigator App with your branding, colors, and features before publishing to app stores.
---
-# Customization & White-Labeling
-
Once you have the Navigator App running locally, you can customize it to match your company's branding before deploying it to the App Store or Google Play Store.
## App Configuration (`app.json`)
diff --git a/content/docs/apps/navigator-app/index.mdx b/content/docs/apps/navigator-app/index.mdx
index fbe6f6f8..e9b603ad 100644
--- a/content/docs/apps/navigator-app/index.mdx
+++ b/content/docs/apps/navigator-app/index.mdx
@@ -3,8 +3,6 @@ title: Navigator App
description: The Navigator App is an open-source driver app for managing orders, tracking location, and communicating with dispatch.
---
-# Navigator App
-
The Navigator App is an open-source driver app for managing orders, tracking location, and communicating with dispatch.
> This page is coming soon. Content is actively being developed.
diff --git a/content/docs/apps/navigator-app/overview.mdx b/content/docs/apps/navigator-app/overview.mdx
index 21593957..d8c2b41d 100644
--- a/content/docs/apps/navigator-app/overview.mdx
+++ b/content/docs/apps/navigator-app/overview.mdx
@@ -3,8 +3,6 @@ title: Overview
description: An overview of the Navigator App — features, supported platforms, and how it integrates with Fleet-Ops.
---
-# Navigator App Overview
-
The **Navigator App** is an open-source, React Native (Expo) mobile application designed for drivers and delivery personnel. It integrates directly with the [Fleet-Ops](/docs/fleetops/overview) extension to provide a complete end-to-end delivery management solution.
## Key Features
diff --git a/content/docs/apps/navigator-app/setup.mdx b/content/docs/apps/navigator-app/setup.mdx
index 341b813d..d9a6a988 100644
--- a/content/docs/apps/navigator-app/setup.mdx
+++ b/content/docs/apps/navigator-app/setup.mdx
@@ -3,8 +3,6 @@ title: Setup & Configuration
description: Set up the Navigator App, configure it to connect to your Fleetbase instance, and prepare it for deployment.
---
-# Setup & Configuration
-
This guide explains how to set up the Navigator App locally, configure it to connect to your Fleetbase instance, and prepare it for deployment.
## Prerequisites
diff --git a/content/docs/apps/storefront-app/customization.mdx b/content/docs/apps/storefront-app/customization.mdx
index 37790256..49fac705 100644
--- a/content/docs/apps/storefront-app/customization.mdx
+++ b/content/docs/apps/storefront-app/customization.mdx
@@ -3,8 +3,6 @@ title: Customization & White-Labeling
description: Customize the Storefront App with your branding and product catalog before publishing to app stores.
---
-# Customization & White-Labeling
-
Once you have the Storefront App running locally, you can customize it to match your company's branding before deploying it to the App Store or Google Play Store.
## App Configuration (`app.json`)
diff --git a/content/docs/apps/storefront-app/index.mdx b/content/docs/apps/storefront-app/index.mdx
index 45534179..9ae4cef5 100644
--- a/content/docs/apps/storefront-app/index.mdx
+++ b/content/docs/apps/storefront-app/index.mdx
@@ -3,8 +3,6 @@ title: Storefront App
description: The Storefront App is an open-source customer-facing mobile app for your Storefront-powered marketplace.
---
-# Storefront App
-
The Storefront App is an open-source customer-facing mobile app for your Storefront-powered marketplace.
> This page is coming soon. Content is actively being developed.
diff --git a/content/docs/apps/storefront-app/overview.mdx b/content/docs/apps/storefront-app/overview.mdx
index e393efd2..26f50e7b 100644
--- a/content/docs/apps/storefront-app/overview.mdx
+++ b/content/docs/apps/storefront-app/overview.mdx
@@ -3,8 +3,6 @@ title: Overview
description: An overview of the Storefront App — features, supported platforms, and how it integrates with the Storefront extension.
---
-# Storefront App Overview
-
The **Storefront App** is an open-source, React Native (Expo) mobile application designed for customers. It integrates directly with the [Storefront](/docs/storefront/overview) extension to provide a complete, white-label e-commerce and on-demand delivery experience.
## Key Features
diff --git a/content/docs/apps/storefront-app/setup.mdx b/content/docs/apps/storefront-app/setup.mdx
index 0b5599b1..fd6dae6b 100644
--- a/content/docs/apps/storefront-app/setup.mdx
+++ b/content/docs/apps/storefront-app/setup.mdx
@@ -3,8 +3,6 @@ title: Setup & Configuration
description: Set up the Storefront App and connect it to your Fleetbase Storefront instance.
---
-# Setup & Configuration
-
This guide explains how to set up the Storefront App locally, configure it to connect to your Fleetbase instance, and prepare it for deployment.
## Prerequisites
diff --git a/content/docs/cli/account/generate-token.mdx b/content/docs/cli/account/generate-token.mdx
index ba152b52..dae78ace 100644
--- a/content/docs/cli/account/generate-token.mdx
+++ b/content/docs/cli/account/generate-token.mdx
@@ -3,8 +3,6 @@ title: Generate Token
description: "Generate or regenerate a long-lived registry authentication token using `flb generate-token` — ideal for CI/CD pipelines."
---
-# `flb generate-token`
-
Generate (or regenerate) a long-lived **registry authentication token** for your developer account. Tokens are great for CI/CD pipelines where you don't want to store a username and password.
```bash
diff --git a/content/docs/cli/account/login.mdx b/content/docs/cli/account/login.mdx
index 079b5791..a3f8f015 100644
--- a/content/docs/cli/account/login.mdx
+++ b/content/docs/cli/account/login.mdx
@@ -3,8 +3,6 @@ title: Login
description: "Authenticate with the Fleetbase registry using `flb login` — under the hood this writes credentials into your `.npmrc`."
---
-# `flb login`
-
Log in to the Fleetbase Extension Registry using your username, password, and email. Under the hood the CLI delegates to `npm-cli-login`, which writes a registry auth entry into your `~/.npmrc`.
```bash
diff --git a/content/docs/cli/account/register.mdx b/content/docs/cli/account/register.mdx
index 628ee676..0d0657ef 100644
--- a/content/docs/cli/account/register.mdx
+++ b/content/docs/cli/account/register.mdx
@@ -3,8 +3,6 @@ title: Register
description: "Create a Fleetbase Extension Registry developer account using `flb register` so you can publish your own extensions."
---
-# `flb register`
-
Create a developer account on the Fleetbase Extension Registry. You need an account to publish extensions — managing or installing extensions does **not** require an account.
```bash
diff --git a/content/docs/cli/account/resend-verification.mdx b/content/docs/cli/account/resend-verification.mdx
index 7ff2b282..928e82ff 100644
--- a/content/docs/cli/account/resend-verification.mdx
+++ b/content/docs/cli/account/resend-verification.mdx
@@ -3,8 +3,6 @@ title: Resend Verification
description: "Request a fresh verification code from the registry using `flb resend-verification`."
---
-# `flb resend-verification`
-
Request that the registry email a fresh verification code. Use this when the original email from `flb register` never arrived, or when the code has expired.
```bash
diff --git a/content/docs/cli/account/set-auth.mdx b/content/docs/cli/account/set-auth.mdx
index 7e62752c..34d16abb 100644
--- a/content/docs/cli/account/set-auth.mdx
+++ b/content/docs/cli/account/set-auth.mdx
@@ -3,8 +3,6 @@ title: Set Auth
description: "Write a registry auth token into your Fleetbase instance's `.npmrc` and Composer `auth.json` using `flb set-auth`."
---
-# `flb set-auth`
-
Write a registry auth token into your Fleetbase instance's `console/.npmrc` (for npm) and `api/auth.json` (for Composer). Run this after [`flb verify`](/docs/cli/account/verify) or [`flb generate-token`](/docs/cli/account/generate-token) returns a token.
```bash
diff --git a/content/docs/cli/account/verify.mdx b/content/docs/cli/account/verify.mdx
index bc0f7697..1f77f27d 100644
--- a/content/docs/cli/account/verify.mdx
+++ b/content/docs/cli/account/verify.mdx
@@ -3,8 +3,6 @@ title: Verify
description: "Verify your registry account email using `flb verify` and receive your registry auth token."
---
-# `flb verify`
-
Verify the email on a registry account you just registered. On success, the registry returns your **registry auth token** — save it; you'll use it to publish extensions.
```bash
diff --git a/content/docs/cli/extension-development/bundle-upload.mdx b/content/docs/cli/extension-development/bundle-upload.mdx
index 456e57ad..75d6a0a6 100644
--- a/content/docs/cli/extension-development/bundle-upload.mdx
+++ b/content/docs/cli/extension-development/bundle-upload.mdx
@@ -3,8 +3,6 @@ title: Bundle Upload
description: "Upload an existing extension bundle to the Fleetbase registry using `flb bundle-upload`."
---
-# `flb bundle-upload`
-
Upload a `.tar.gz` bundle (created by [`flb bundle`](/docs/cli/extension-development/bundle)) to the Fleetbase Extension Registry. Use this when you've already bundled (e.g. as a separate CI step) and just need to ship the archive.
```bash
diff --git a/content/docs/cli/extension-development/bundle.mdx b/content/docs/cli/extension-development/bundle.mdx
index 73b9badc..63662862 100644
--- a/content/docs/cli/extension-development/bundle.mdx
+++ b/content/docs/cli/extension-development/bundle.mdx
@@ -3,8 +3,6 @@ title: Bundle
description: "Pack an extension into a versioned `.tar.gz` for distribution using `flb bundle`."
---
-# `flb bundle`
-
Package your extension into a `.tar.gz` archive for distribution. The output is named `-v-bundle.tar.gz` and excludes `node_modules/`, `server_vendor/`, and any previously generated bundle files.
```bash
diff --git a/content/docs/cli/extension-development/overview.mdx b/content/docs/cli/extension-development/overview.mdx
index 2fa67696..b12dac74 100644
--- a/content/docs/cli/extension-development/overview.mdx
+++ b/content/docs/cli/extension-development/overview.mdx
@@ -3,8 +3,6 @@ title: Overview
description: Build, test, version, bundle, and publish custom Fleetbase extensions using the CLI.
---
-# Publishing Extensions
-
The CLI gives you the full lifecycle for authoring and shipping a Fleetbase extension — from scaffolding a new project to publishing it on the Extension Registry.
## The Lifecycle
diff --git a/content/docs/cli/extension-development/publish.mdx b/content/docs/cli/extension-development/publish.mdx
index 2e97082c..3d37eb22 100644
--- a/content/docs/cli/extension-development/publish.mdx
+++ b/content/docs/cli/extension-development/publish.mdx
@@ -3,8 +3,6 @@ title: Publish
description: "Publish your extension to the Fleetbase Extension Registry using `flb publish` — runs `npm publish` against the configured registry."
---
-# `flb publish`
-
Publish your extension to the Fleetbase Extension Registry. Under the hood this runs `npm publish` against the registry. Both an npm package (`package.json`) and a Composer package (`composer.json`) are typically published — but `flb publish` handles them via the same npm publish mechanism (the CLI auto-converts `composer.json` into a temporary `package.json` for the API side).
```bash
diff --git a/content/docs/cli/extension-development/scaffold.mdx b/content/docs/cli/extension-development/scaffold.mdx
index f815fd2e..b7bdad29 100644
--- a/content/docs/cli/extension-development/scaffold.mdx
+++ b/content/docs/cli/extension-development/scaffold.mdx
@@ -3,8 +3,6 @@ title: Scaffold
description: "Generate a new Fleetbase extension from the starter template using `flb scaffold`."
---
-# `flb scaffold`
-
Generate a new Fleetbase extension from the [`fleetbase/starter-extension`](https://github.com/fleetbase/starter-extension) template. The CLI clones the template, prompts for your extension's name and metadata, then refactors namespaces, package names, and class names so it's ready to develop against immediately.
```bash
diff --git a/content/docs/cli/extension-development/unpublish.mdx b/content/docs/cli/extension-development/unpublish.mdx
index 0cd5f4b5..42b89a80 100644
--- a/content/docs/cli/extension-development/unpublish.mdx
+++ b/content/docs/cli/extension-development/unpublish.mdx
@@ -3,8 +3,6 @@ title: Unpublish
description: "Remove a published extension from the Fleetbase Extension Registry using `flb unpublish`."
---
-# `flb unpublish`
-
Remove a published extension (or a specific version of it) from the registry. Under the hood this runs `npm unpublish --force`.
```bash
diff --git a/content/docs/cli/extension-development/version-bump.mdx b/content/docs/cli/extension-development/version-bump.mdx
index a1fe541f..2342cd23 100644
--- a/content/docs/cli/extension-development/version-bump.mdx
+++ b/content/docs/cli/extension-development/version-bump.mdx
@@ -3,8 +3,6 @@ title: Version Bump
description: "Increment the version of your extension across all manifest files using `flb version-bump`."
---
-# `flb version-bump`
-
Bump your extension's version across **all three manifest files** in one step:
- `extension.json`
diff --git a/content/docs/cli/extensions/install.mdx b/content/docs/cli/extensions/install.mdx
index 45843842..6674c652 100644
--- a/content/docs/cli/extensions/install.mdx
+++ b/content/docs/cli/extensions/install.mdx
@@ -3,8 +3,6 @@ title: Install
description: "Install an extension into a running Fleetbase instance using `flb install`."
---
-# `flb install`
-
Install a Fleetbase extension into a running self-hosted Fleetbase instance. The CLI looks up the npm and Composer package names for the extension and runs both `pnpm install` (in `console/`) and `composer require` (in `api/`).
```bash
diff --git a/content/docs/cli/extensions/search.mdx b/content/docs/cli/extensions/search.mdx
index c4da9a32..66041fa6 100644
--- a/content/docs/cli/extensions/search.mdx
+++ b/content/docs/cli/extensions/search.mdx
@@ -3,8 +3,6 @@ title: Search
description: "Browse the Fleetbase Extension Registry from the command line with `flb search`."
---
-# `flb search`
-
Browse and filter the Fleetbase Extension Registry from your terminal. Use this to discover available extensions before installing one.
```bash
diff --git a/content/docs/cli/extensions/uninstall.mdx b/content/docs/cli/extensions/uninstall.mdx
index a86e465f..04b14b67 100644
--- a/content/docs/cli/extensions/uninstall.mdx
+++ b/content/docs/cli/extensions/uninstall.mdx
@@ -3,8 +3,6 @@ title: Uninstall
description: "Remove an installed extension from a running Fleetbase instance using `flb uninstall`."
---
-# `flb uninstall`
-
Remove a previously installed extension from a Fleetbase instance. The CLI runs `pnpm remove` (in `console/`) and `composer remove` (in `api/`).
```bash
diff --git a/content/docs/cli/getting-started/commands.mdx b/content/docs/cli/getting-started/commands.mdx
index ad4ecabc..3f33eca0 100644
--- a/content/docs/cli/getting-started/commands.mdx
+++ b/content/docs/cli/getting-started/commands.mdx
@@ -3,8 +3,6 @@ title: Commands
description: Reference table of every Fleetbase CLI command with a one-line description and a link to its page.
---
-# Commands
-
Quick reference for every command the `flb` CLI exposes. Click any command for the full options, examples, and behavior.
## Install Fleetbase
diff --git a/content/docs/cli/getting-started/installation.mdx b/content/docs/cli/getting-started/installation.mdx
index 739b18ee..9c5d7dbb 100644
--- a/content/docs/cli/getting-started/installation.mdx
+++ b/content/docs/cli/getting-started/installation.mdx
@@ -3,8 +3,6 @@ title: Installing the CLI
description: Install the Fleetbase CLI globally via npm so the `flb` command is available system-wide.
---
-# Installing the CLI
-
The Fleetbase CLI is distributed on npm as `@fleetbase/cli`. Install it globally so the `flb` command is on your PATH.
## With npm
diff --git a/content/docs/cli/getting-started/requirements.mdx b/content/docs/cli/getting-started/requirements.mdx
index 93cf3be3..794d2419 100644
--- a/content/docs/cli/getting-started/requirements.mdx
+++ b/content/docs/cli/getting-started/requirements.mdx
@@ -3,8 +3,6 @@ title: Requirements
description: What you need installed before using the Fleetbase CLI — Node, plus Docker and Git for installing Fleetbase itself.
---
-# Requirements
-
The CLI itself runs on Node. Some commands additionally need Docker, Git, pnpm, or PHP/Composer on your machine.
## CLI Itself
diff --git a/content/docs/cli/installation/overview.mdx b/content/docs/cli/installation/overview.mdx
index 501a5e36..6690a3dc 100644
--- a/content/docs/cli/installation/overview.mdx
+++ b/content/docs/cli/installation/overview.mdx
@@ -3,8 +3,6 @@ title: Install Fleetbase
description: "Install a self-hosted Fleetbase instance on your own infrastructure using `flb install-fleetbase` — an interactive Docker-based wizard."
---
-# Install Fleetbase
-
```bash
flb install-fleetbase
```
diff --git a/content/docs/community/changelog.mdx b/content/docs/community/changelog.mdx
index 5ebc4af8..7cfff307 100644
--- a/content/docs/community/changelog.mdx
+++ b/content/docs/community/changelog.mdx
@@ -3,8 +3,6 @@ title: Changelog
description: Release notes and version history across the Fleetbase platform — core API, Console, extensions, and mobile apps.
---
-# Changelog
-
Fleetbase is a modular platform composed of several independent repositories, each with its own release cycle. Release notes are maintained on GitHub Releases for each repository.
## Platform Releases
diff --git a/content/docs/community/discord.mdx b/content/docs/community/discord.mdx
index dad73fa4..fe6963ed 100644
--- a/content/docs/community/discord.mdx
+++ b/content/docs/community/discord.mdx
@@ -3,8 +3,6 @@ title: Discord Community
description: Join the Fleetbase Discord server to get help, share what you've built, and connect with the core team and other operators.
---
-# Discord Community
-
The Fleetbase Discord server is the fastest way to get help, share what you're building, and connect with the core team and other operators running Fleetbase in production.
**[Join the Fleetbase Discord →](https://discord.com/invite/V7RVWRQ2Wm)**
diff --git a/content/docs/community/faq.mdx b/content/docs/community/faq.mdx
index cd9da1f3..5b7522a7 100644
--- a/content/docs/community/faq.mdx
+++ b/content/docs/community/faq.mdx
@@ -3,8 +3,6 @@ title: FAQ
description: Answers to frequently asked questions about Fleetbase — what it is, how it's licensed, how to deploy it, and how it works.
---
-# Frequently Asked Questions
-
Fleetbase is an open-source, modular logistics and supply chain operating system. It provides a platform for managing fleets, orders, drivers, warehouses, and supply chain operations — either self-hosted on your own infrastructure or via Fleetbase Cloud.
diff --git a/content/docs/community/github-discussions.mdx b/content/docs/community/github-discussions.mdx
index 7223d1d4..e9d8f4af 100644
--- a/content/docs/community/github-discussions.mdx
+++ b/content/docs/community/github-discussions.mdx
@@ -3,8 +3,6 @@ title: GitHub Discussions
description: Ask questions, propose features, and participate in longer-form community conversations about Fleetbase on GitHub Discussions.
---
-# GitHub Discussions
-
[GitHub Discussions](https://github.com/fleetbase/fleetbase/discussions) is the home for longer-form community conversations about Fleetbase — feature proposals, architecture questions, integration ideas, and anything that benefits from a permanent, searchable record rather than a real-time chat message.
**[Open a Discussion →](https://github.com/fleetbase/fleetbase/discussions/new/choose)**
diff --git a/content/docs/community/index.mdx b/content/docs/community/index.mdx
index 0d0591cb..7a92b87a 100644
--- a/content/docs/community/index.mdx
+++ b/content/docs/community/index.mdx
@@ -3,8 +3,6 @@ title: Community & Support
description: Get help, contribute to Fleetbase, and find the right support option for your team.
---
-# Community & Support
-
Fleetbase is open-source and community-driven. Whether you need help getting started, want to report a bug, contribute code, or talk through a deployment with the core team — this is where to start.
## Real-Time Help
diff --git a/content/docs/community/licensing.mdx b/content/docs/community/licensing.mdx
index 8528ce2c..cd6b24cc 100644
--- a/content/docs/community/licensing.mdx
+++ b/content/docs/community/licensing.mdx
@@ -3,8 +3,6 @@ title: Licensing
description: Understand the Fleetbase licensing model — AGPL-3.0 for open-source use and commercial license options for proprietary products.
---
-# Licensing
-
Fleetbase uses a **dual-licensing model**: an open-source license for the community and a commercial license for proprietary use cases.
diff --git a/content/docs/community/support-plans.mdx b/content/docs/community/support-plans.mdx
index cb64862f..020a8238 100644
--- a/content/docs/community/support-plans.mdx
+++ b/content/docs/community/support-plans.mdx
@@ -3,8 +3,6 @@ title: Support Plans
description: Community, cloud, and enterprise support options for Fleetbase — from free community channels to dedicated SLAs.
---
-# Support Plans
-
Fleetbase offers several support options depending on whether you're self-hosting, on Fleetbase Cloud, or need enterprise-grade guarantees.
## Community Support — Free
diff --git a/content/docs/contributing/code.mdx b/content/docs/contributing/code.mdx
index 81e5bbb5..db8bbb25 100644
--- a/content/docs/contributing/code.mdx
+++ b/content/docs/contributing/code.mdx
@@ -4,8 +4,6 @@ description: How to submit bug fixes, features, and refactors to Fleetbase — b
sidebarTitle: Code
---
-# Code contributions
-
This page covers contributing **code** to Fleetbase — bug fixes, features, refactors, and improvements across the core platform and its extensions.
For other contribution types see [Translations](/docs/contributing/translations), [Documentation](/docs/contributing/documentation), [Extensions](/docs/contributing/extensions), or [Reporting issues](/docs/contributing/reporting-issues).
diff --git a/content/docs/contributing/documentation.mdx b/content/docs/contributing/documentation.mdx
index 16bb851b..32d074b4 100644
--- a/content/docs/contributing/documentation.mdx
+++ b/content/docs/contributing/documentation.mdx
@@ -4,8 +4,6 @@ description: How to contribute to Fleetbase documentation — fixing typos, addi
sidebarTitle: Documentation
---
-# Documentation contributions
-
The documentation you're reading right now lives in the [`fleetbase/fleetbase.io`](https://github.com/fleetbase/fleetbase.io) repository. Every page is editable. If something is wrong, unclear, or missing — submit a PR.
## Where the docs live
diff --git a/content/docs/contributing/extensions.mdx b/content/docs/contributing/extensions.mdx
index d14769ce..d6ef5ce0 100644
--- a/content/docs/contributing/extensions.mdx
+++ b/content/docs/contributing/extensions.mdx
@@ -4,8 +4,6 @@ description: How to build, publish, and contribute extensions for the Fleetbase
sidebarTitle: Extensions
---
-# Extension contributions
-
The biggest single way to contribute to Fleetbase is building an **extension** — a packaged module that other operators can install from the marketplace.
Extensions can:
@@ -83,7 +81,7 @@ Before you start building anything publishable:
- A **developer account** on the Fleetbase Marketplace ([sign up](https://console.fleetbase.io/onboard))
- The **Fleetbase CLI** installed: `npm install -g @fleetbase/cli`
-- A **local Fleetbase instance** for development (see [System Setup](/docs/platform/system-setup))
+- A **local Fleetbase instance** for development (see [System Setup](/docs/platform/system-setup/branding))
- **Stripe Connect** if you plan to charge for the extension
Continue to [Extension Development](/docs/extension-development) for the full developer guide.
diff --git a/content/docs/contributing/reporting-issues.mdx b/content/docs/contributing/reporting-issues.mdx
index e7c0aac8..7885ef44 100644
--- a/content/docs/contributing/reporting-issues.mdx
+++ b/content/docs/contributing/reporting-issues.mdx
@@ -4,8 +4,6 @@ description: How to file effective bug reports and feature requests for Fleetbas
sidebarTitle: Reporting issues
---
-# Reporting issues
-
A good bug report makes the difference between a fix in days and a fix in months. This page covers how to file one well, where to file it, and what to expect after.
## Bug reports
diff --git a/content/docs/contributing/translations/file-format.mdx b/content/docs/contributing/translations/file-format.mdx
index 8707330b..6b98e71c 100644
--- a/content/docs/contributing/translations/file-format.mdx
+++ b/content/docs/contributing/translations/file-format.mdx
@@ -4,8 +4,6 @@ description: YAML structure, placeholder syntax, pluralization, and translation
sidebarTitle: File format
---
-# File format
-
Translation files are **YAML**. This page covers the structure, what to translate (and what to leave alone), and the conventions that keep translations consistent across locales.
## Anatomy of a locale file
diff --git a/content/docs/contributing/translations/glossary.mdx b/content/docs/contributing/translations/glossary.mdx
index 6e065fc8..0abd94c4 100644
--- a/content/docs/contributing/translations/glossary.mdx
+++ b/content/docs/contributing/translations/glossary.mdx
@@ -4,8 +4,6 @@ description: Brand names, technical terms, and domain vocabulary that should —
sidebarTitle: Glossary
---
-# Translation glossary
-
A reference for terms that come up repeatedly in Fleetbase translations. The default rule: translate everything that has a clear local equivalent. The exceptions below are documented because they tend to cause confusion.
## Brand names — never translate
diff --git a/content/docs/contributing/translations/index.mdx b/content/docs/contributing/translations/index.mdx
index 4f57eeb6..bd14b186 100644
--- a/content/docs/contributing/translations/index.mdx
+++ b/content/docs/contributing/translations/index.mdx
@@ -3,8 +3,6 @@ title: Translations
description: Help translate Fleetbase Console and extensions into more languages — overview, what to translate, and how to get started.
---
-# Translating Fleetbase
-
Fleetbase ships with translation infrastructure across the Console and every extension. New languages are contributed by community translators — operators, drivers, and developers who use Fleetbase in their region and want it to speak their language.
This guide walks through the full process: how the system is structured, where the files live, how to translate them well, and how to submit your work.
diff --git a/content/docs/contributing/translations/repositories.mdx b/content/docs/contributing/translations/repositories.mdx
index c9802cb3..2163fe4d 100644
--- a/content/docs/contributing/translations/repositories.mdx
+++ b/content/docs/contributing/translations/repositories.mdx
@@ -4,8 +4,6 @@ description: Every Fleetbase repository that accepts translation contributions,
sidebarTitle: Repositories
---
-# Translation repositories
-
Fleetbase is split across many repositories — each maintained independently, each with its own translation files. To deliver a complete experience in a language, you typically contribute to multiple repos. This page is the full map.
## Console + extensions
diff --git a/content/docs/contributing/translations/setup.mdx b/content/docs/contributing/translations/setup.mdx
index 2bbb1f7b..54a6b144 100644
--- a/content/docs/contributing/translations/setup.mdx
+++ b/content/docs/contributing/translations/setup.mdx
@@ -4,8 +4,6 @@ description: Fork, clone, and prepare your environment to contribute Fleetbase t
sidebarTitle: Setup
---
-# Setup
-
This page covers the practical setup before you translate anything. None of it is Fleetbase-specific — if you've contributed to any GitHub project before, skim and skip.
## Prerequisites
@@ -15,7 +13,7 @@ You need:
- A **GitHub account**
- **Git** installed locally
- A **text editor** that handles YAML well (VS Code, Sublime, Vim, anything with syntax highlighting)
-- *(Optional)* A way to run Fleetbase locally to preview your translation in context — see [Self-hosting](/docs/platform/system-setup) if you want to go this route
+- *(Optional)* A way to run Fleetbase locally to preview your translation in context — see [Self-hosting](/docs/platform/system-setup/branding) if you want to go this route
You don't need to run Fleetbase locally to contribute — you can translate the YAML files directly and rely on the maintainers to verify rendering during review. Running locally is faster feedback though, especially for languages that change UI sizing (long German words, RTL Arabic, dense CJK).
diff --git a/content/docs/contributing/translations/submitting.mdx b/content/docs/contributing/translations/submitting.mdx
index 3c39b2a9..a65bb06d 100644
--- a/content/docs/contributing/translations/submitting.mdx
+++ b/content/docs/contributing/translations/submitting.mdx
@@ -4,8 +4,6 @@ description: Pull request conventions, reviewer expectations, and what happens a
sidebarTitle: Submitting
---
-# Submitting your translation
-
You've translated some keys. Time to ship it.
## Before opening the PR
diff --git a/content/docs/extending-fleetbase/backend-development.mdx b/content/docs/extending-fleetbase/backend-development.mdx
index 74830283..d2ebbdea 100644
--- a/content/docs/extending-fleetbase/backend-development.mdx
+++ b/content/docs/extending-fleetbase/backend-development.mdx
@@ -3,8 +3,6 @@ title: Backend Development
description: Build the server-side of your extension using PHP and Laravel — routes, models, controllers, and migrations.
---
-# Backend Development
-
The backend of a Fleetbase extension is a standard **PHP Laravel Package**.
If you are familiar with Laravel development, building a Fleetbase extension backend will feel very natural. You have full access to Eloquent ORM, routing, middleware, and the service container.
diff --git a/content/docs/extending-fleetbase/dashboard-widgets.mdx b/content/docs/extending-fleetbase/dashboard-widgets.mdx
index f90985c6..bdd63d17 100644
--- a/content/docs/extending-fleetbase/dashboard-widgets.mdx
+++ b/content/docs/extending-fleetbase/dashboard-widgets.mdx
@@ -3,8 +3,6 @@ title: Dashboard Widgets
description: Build and register custom dashboard widgets that users can add to their Fleetbase dashboards.
---
-# Dashboard Widgets
-
Fleetbase allows users to customize their dashboards by adding, removing, and rearranging widgets.
As an extension developer, you can build custom widgets and register them with the platform, making them available for users to add to their own dashboards.
diff --git a/content/docs/extending-fleetbase/extension-architecture.mdx b/content/docs/extending-fleetbase/extension-architecture.mdx
index ce2814b6..87ca01ba 100644
--- a/content/docs/extending-fleetbase/extension-architecture.mdx
+++ b/content/docs/extending-fleetbase/extension-architecture.mdx
@@ -3,8 +3,6 @@ title: Extension Architecture
description: "Understand the anatomy of a Fleetbase extension: the server package, the frontend engine, and the extension.json manifest."
---
-# Extension Architecture
-
A Fleetbase extension is a self-contained module that adds new functionality to the core platform.
Because Fleetbase is built on a decoupled architecture—a PHP Laravel backend and an Ember.js frontend—a complete extension typically consists of two distinct parts that communicate via an API.
diff --git a/content/docs/extending-fleetbase/frontend-development.mdx b/content/docs/extending-fleetbase/frontend-development.mdx
index c5333c92..ec8a6ea3 100644
--- a/content/docs/extending-fleetbase/frontend-development.mdx
+++ b/content/docs/extending-fleetbase/frontend-development.mdx
@@ -3,8 +3,6 @@ title: Frontend Development
description: Build the frontend of your extension as an Ember.js engine — routes, components, and services.
---
-# Frontend Development
-
The frontend of a Fleetbase extension is built as an **Ember.js Engine**.
An Ember Engine is a self-contained Ember application that can be mounted inside a larger host application (in this case, the Fleetbase Console). This architecture allows you to build complex, multi-route UIs that feel like native parts of the platform.
diff --git a/content/docs/extending-fleetbase/hooks-and-lifecycle.mdx b/content/docs/extending-fleetbase/hooks-and-lifecycle.mdx
index 86a44835..a21cf489 100644
--- a/content/docs/extending-fleetbase/hooks-and-lifecycle.mdx
+++ b/content/docs/extending-fleetbase/hooks-and-lifecycle.mdx
@@ -3,8 +3,6 @@ title: Hooks & Lifecycle Events
description: Tap into platform lifecycle events using hooks to run custom logic at key points in the application.
---
-# Hooks & Lifecycle Events
-
Fleetbase provides a robust **Hooks** system that allows your extension to tap into key lifecycle events across the platform.
This is particularly useful when you need to run custom logic in response to actions that occur outside of your extension's direct control (e.g., when a user logs in, when an order is created, or when a dashboard loads).
diff --git a/content/docs/extending-fleetbase/index.mdx b/content/docs/extending-fleetbase/index.mdx
index cbc0bcae..d34bc09d 100644
--- a/content/docs/extending-fleetbase/index.mdx
+++ b/content/docs/extending-fleetbase/index.mdx
@@ -3,8 +3,6 @@ title: Building & Extending Fleetbase
description: Learn how to build extensions, integrate with the platform, and extend its functionality using Fleetbase's powerful extensibility system.
---
-# Building & Extending Fleetbase
-
Fleetbase is designed from the ground up to be a modular, extensible platform. Rather than building a monolithic application that tries to do everything, Fleetbase provides a robust core and allows developers to build **Extensions** to add specific functionality.
Whether you want to integrate a new payment gateway, add a custom dashboard widget, or build an entirely new logistics module like [Fleet-Ops](/docs/fleetops), the extensibility system provides the tools you need.
diff --git a/content/docs/extending-fleetbase/menus-and-navigation.mdx b/content/docs/extending-fleetbase/menus-and-navigation.mdx
index 951f2a47..e31230a9 100644
--- a/content/docs/extending-fleetbase/menus-and-navigation.mdx
+++ b/content/docs/extending-fleetbase/menus-and-navigation.mdx
@@ -3,8 +3,6 @@ title: Menus & Navigation
description: Register your extension's menu items in the sidebar, header, settings panel, and admin area.
---
-# Menus & Navigation
-
To make your extension accessible to users, you need to register its navigation links within the Fleetbase Console.
This is done using the **Universe Service** in your frontend Ember Engine. The Universe Service acts as a central registry for all UI elements, allowing you to inject links into various menus across the platform.
diff --git a/content/docs/extending-fleetbase/overview.mdx b/content/docs/extending-fleetbase/overview.mdx
index 2aadc60d..090deb21 100644
--- a/content/docs/extending-fleetbase/overview.mdx
+++ b/content/docs/extending-fleetbase/overview.mdx
@@ -3,8 +3,6 @@ title: Overview
description: An introduction to Fleetbase's extensibility model — how extensions are structured and how they integrate with the platform.
---
-# Overview
-
An introduction to Fleetbase's extensibility model — how extensions are structured and how they integrate with the platform.
> This page is coming soon. Content is actively being developed.
diff --git a/content/docs/extending-fleetbase/publishing-to-marketplace.mdx b/content/docs/extending-fleetbase/publishing-to-marketplace.mdx
index 4eb843b7..6e15d895 100644
--- a/content/docs/extending-fleetbase/publishing-to-marketplace.mdx
+++ b/content/docs/extending-fleetbase/publishing-to-marketplace.mdx
@@ -3,8 +3,6 @@ title: Publishing to the Marketplace
description: Authenticate with the Fleetbase registry and publish your extension to the marketplace.
---
-# Publishing to the Marketplace
-
Once you have finished building and testing your extension locally, you can publish it to the **Fleetbase Registry**.
Publishing your extension makes it available in the Fleetbase Marketplace, allowing other users (or just other organizations within your own self-hosted instance) to discover and install it with a single click.
diff --git a/content/docs/extending-fleetbase/registering-components.mdx b/content/docs/extending-fleetbase/registering-components.mdx
index 9f4916cb..294ad505 100644
--- a/content/docs/extending-fleetbase/registering-components.mdx
+++ b/content/docs/extending-fleetbase/registering-components.mdx
@@ -3,8 +3,6 @@ title: Registering Components & UI
description: Inject custom UI components into existing platform views using the component registry.
---
-# Registering Components & UI
-
Beyond adding [Dashboard Widgets](/docs/extending-fleetbase/dashboard-widgets) and [Menu Items](/docs/extending-fleetbase/menus-and-navigation), the **Universe Service** allows you to inject custom UI components directly into existing views within the Fleetbase Console or other extensions.
This is a powerful feature that allows you to extend the functionality of core modules without modifying their source code.
diff --git a/content/docs/extending-fleetbase/scaffolding-your-extension.mdx b/content/docs/extending-fleetbase/scaffolding-your-extension.mdx
index 7839b311..e3892b97 100644
--- a/content/docs/extending-fleetbase/scaffolding-your-extension.mdx
+++ b/content/docs/extending-fleetbase/scaffolding-your-extension.mdx
@@ -3,8 +3,6 @@ title: Scaffolding Your Extension
description: Use the Fleetbase CLI to scaffold a new extension with a working backend and frontend skeleton.
---
-# Scaffolding Your Extension
-
The easiest way to start building a new Fleetbase extension is to use the **Fleetbase CLI**.
The CLI provides a `scaffold` command that generates a complete, working extension skeleton, including both the [Backend](/docs/extending-fleetbase/backend-development) (Laravel package) and the [Frontend](/docs/extending-fleetbase/frontend-development) (Ember Engine), along with the necessary `extension.json` manifest.
diff --git a/content/docs/extending-fleetbase/virtual-routes.mdx b/content/docs/extending-fleetbase/virtual-routes.mdx
index ad85e741..078c5766 100644
--- a/content/docs/extending-fleetbase/virtual-routes.mdx
+++ b/content/docs/extending-fleetbase/virtual-routes.mdx
@@ -3,8 +3,6 @@ title: Virtual Routes & Deep Linking
description: Understand how virtual routes work in Fleetbase and how to implement deep linking in your extension.
---
-# Virtual Routes & Deep Linking
-
In a traditional Ember application, every URL corresponds to a specific, hardcoded route defined in the `router.js` file.
However, because Fleetbase is a modular platform where extensions can be installed and uninstalled dynamically, the core router cannot know about every possible route ahead of time.
diff --git a/content/docs/extension-development/architecture/extension-registration.mdx b/content/docs/extension-development/architecture/extension-registration.mdx
index 6ce990da..af016fed 100644
--- a/content/docs/extension-development/architecture/extension-registration.mdx
+++ b/content/docs/extension-development/architecture/extension-registration.mdx
@@ -3,8 +3,6 @@ title: Extension Registration
description: How addon/extension.js wires your extension into the Fleetbase console boot lifecycle. The setupExtension hook, onEngineLoaded, and the contract every extension implements.
---
-# Extension Registration
-
Every Fleetbase extension declares a single **`addon/extension.js`** at the root of its addon. The console's `ExtensionManager` finds this file at boot, dynamic-imports it, and runs its registration hooks.
This is the **single canonical entry point** — registration code does **not** live in `engine.js`, instance initializers, or anywhere else.
diff --git a/content/docs/extension-development/architecture/overview.mdx b/content/docs/extension-development/architecture/overview.mdx
index 13b96c73..2be4e585 100644
--- a/content/docs/extension-development/architecture/overview.mdx
+++ b/content/docs/extension-development/architecture/overview.mdx
@@ -3,8 +3,6 @@ title: Overview
description: A Fleetbase extension is a single repository with two halves — an Ember.js addon (the console UI) and a Laravel package (the API). The extension.json manifest ties them together and addon/extension.js is the registration entry point.
---
-# Architecture Overview
-
A Fleetbase extension is **one repository with two halves**:
1. An **Ember.js addon** under `addon/` — your console UI
diff --git a/content/docs/extension-development/backend/expansions-and-observers.mdx b/content/docs/extension-development/backend/expansions-and-observers.mdx
index ee5aaafe..4ac39acc 100644
--- a/content/docs/extension-development/backend/expansions-and-observers.mdx
+++ b/content/docs/extension-development/backend/expansions-and-observers.mdx
@@ -3,8 +3,6 @@ title: Expansions & Observers
description: React to model lifecycle events with observers, and add methods to core models or Laravel facades with expansions — both auto-loaded by your service provider.
---
-# Expansions & Observers
-
Two patterns let your extension hook into other code without owning it: **observers** for model lifecycle events, and **expansions** for adding methods to a class you don't own.
## Observers
diff --git a/content/docs/extension-development/backend/migrations.mdx b/content/docs/extension-development/backend/migrations.mdx
index 3de5ad90..0305c60d 100644
--- a/content/docs/extension-development/backend/migrations.mdx
+++ b/content/docs/extension-development/backend/migrations.mdx
@@ -3,8 +3,6 @@ title: Migrations
description: Define database migrations for your extension. They live under server/migrations/, follow Fleetbase's UUID + public_id conventions, and load automatically via the service provider.
---
-# Migrations
-
Migrations define the schema your extension owns. Fleetbase auto-loads them via your [service provider](/docs/extension-development/backend/service-provider) (`$this->loadMigrationsFrom(__DIR__ . '/../../migrations')`), so they run alongside core migrations whenever someone runs `php artisan migrate`.
## Where Migrations Live
diff --git a/content/docs/extension-development/backend/routes-and-controllers.mdx b/content/docs/extension-development/backend/routes-and-controllers.mdx
index f0566c4a..7cf8670e 100644
--- a/content/docs/extension-development/backend/routes-and-controllers.mdx
+++ b/content/docs/extension-development/backend/routes-and-controllers.mdx
@@ -3,8 +3,6 @@ title: Routes & Controllers
description: Define API routes with Fleetbase route macros, choose the right middleware group, and build resource controllers backed by HasApiControllerBehavior.
---
-# Routes & Controllers
-
Routes for an extension live in **`server/src/routes.php`** (loaded by your service provider via `loadRoutesFrom`). Route definitions follow Laravel conventions — Fleetbase adds three macros that take care of the boilerplate.
## The Routes File
diff --git a/content/docs/extension-development/backend/service-provider.mdx b/content/docs/extension-development/backend/service-provider.mdx
index de872af3..48982690 100644
--- a/content/docs/extension-development/backend/service-provider.mdx
+++ b/content/docs/extension-development/backend/service-provider.mdx
@@ -3,8 +3,6 @@ title: Service Provider
description: The Laravel service provider is the entry point for your extension's backend. It loads routes, migrations, observers, expansions, middleware, and binds services into the container.
---
-# Service Provider
-
The backend half of an extension is a Laravel package. Your service provider is its entry point — Composer auto-discovers it via the `extra.laravel.providers` array in `composer.json`, and Laravel boots it on every request.
Fleetbase ships a base service provider, **`Fleetbase\Providers\CoreServiceProvider`**, that does most of the wiring for you. Extend it (don't extend Laravel's `ServiceProvider` directly) so you inherit observer auto-registration, middleware groups, expansion loading, and the rest.
diff --git a/content/docs/extension-development/frontend/routing.mdx b/content/docs/extension-development/frontend/routing.mdx
index e150286a..07ba90dc 100644
--- a/content/docs/extension-development/frontend/routing.mdx
+++ b/content/docs/extension-development/frontend/routing.mdx
@@ -3,8 +3,6 @@ title: Routing
description: How an extension's frontend Ember engine is structured — engine.js, routes.js, host service dependencies, and how routes are mounted into the Fleetbase console.
---
-# Routing
-
The frontend half of an extension is an **Ember engine** mounted inside the Fleetbase console. The console handles top-level chrome (header, sidebar, auth) and routes any URL under `/console//…` into your engine.
## The Addon Layout
diff --git a/content/docs/extension-development/frontend/templates-and-components.mdx b/content/docs/extension-development/frontend/templates-and-components.mdx
index 9697cb6b..0bf51ee1 100644
--- a/content/docs/extension-development/frontend/templates-and-components.mdx
+++ b/content/docs/extension-development/frontend/templates-and-components.mdx
@@ -3,8 +3,6 @@ title: Templates & Components
description: Build engine templates and Glimmer components using @fleetbase/ember-ui — layout primitives, common widgets, and how to render extension components inside other engines.
---
-# Templates & Components
-
Engine templates use standard Handlebars + Ember. The console ships a large component library — **`@fleetbase/ember-ui`** — that gives you matching chrome (layouts, headers, tables, modals, form inputs) without re-implementing styles.
## Templates
diff --git a/content/docs/extension-development/frontend/virtual-routes.mdx b/content/docs/extension-development/frontend/virtual-routes.mdx
index 887443ea..b6876d92 100644
--- a/content/docs/extension-development/frontend/virtual-routes.mdx
+++ b/content/docs/extension-development/frontend/virtual-routes.mdx
@@ -3,8 +3,6 @@ title: Virtual Routes
description: How Fleetbase resolves dynamically-registered URLs against menu-item registries to render extension components without hardcoded routes.
---
-# Virtual Routes
-
Fleetbase ships with a fixed set of console routes — `/console`, `/console/settings`, `/console/admin`, `/console/account`, etc. Extensions can't add to that route table at runtime. **Virtual routes** are how extensions register pages anyway: a menu item declares a `slug` plus a component, and a built-in `virtual` route on the host renders that component when the URL matches.
There is no `_virtual: true` flag. Virtual is a property of the *route* the menu item targets, not the menu item itself.
diff --git a/content/docs/extension-development/getting-started/extension-anatomy.mdx b/content/docs/extension-development/getting-started/extension-anatomy.mdx
index 8755d01f..842ec2bf 100644
--- a/content/docs/extension-development/getting-started/extension-anatomy.mdx
+++ b/content/docs/extension-development/getting-started/extension-anatomy.mdx
@@ -3,8 +3,6 @@ title: Extension Anatomy
description: A tour of a scaffolded Fleetbase extension — addon/, server/, extension.json, and the key entry points (addon/extension.js, the engine, the service provider).
---
-# Extension Anatomy
-
A scaffolded extension is a single repository that ships **two halves**:
- **`addon/`** — an Ember.js addon (the console UI)
diff --git a/content/docs/extension-development/getting-started/quickstart.mdx b/content/docs/extension-development/getting-started/quickstart.mdx
index 9f01a85d..ef29c7d0 100644
--- a/content/docs/extension-development/getting-started/quickstart.mdx
+++ b/content/docs/extension-development/getting-started/quickstart.mdx
@@ -3,8 +3,6 @@ title: Quickstart
description: Use the Fleetbase CLI to scaffold a new extension with a working backend and frontend skeleton.
---
-# Quickstart
-
The easiest way to start building a new Fleetbase extension is to use the **Fleetbase CLI**.
The CLI provides a `scaffold` command that generates a complete, working extension skeleton, including both the [Backend](/docs/extension-development/backend/service-provider) (Laravel package) and the [Frontend](/docs/extension-development/frontend/routing) (Ember Engine), along with the necessary `extension.json` manifest.
diff --git a/content/docs/extension-development/publishing/overview.mdx b/content/docs/extension-development/publishing/overview.mdx
index 232f09f6..bc0d328a 100644
--- a/content/docs/extension-development/publishing/overview.mdx
+++ b/content/docs/extension-development/publishing/overview.mdx
@@ -3,8 +3,6 @@ title: Publishing to the Marketplace
description: Authenticate with the Fleetbase registry and publish your extension using the CLI.
---
-# Publishing to the Marketplace
-
Once you have finished building and testing your extension locally, you can publish it to the **Fleetbase Registry**.
Publishing your extension makes it available in the Fleetbase Marketplace, allowing other users (or just other organizations within your own self-hosted instance) to discover and install it with a single click.
diff --git a/content/docs/extension-development/recipes/adding-a-payment-gateway-driver.mdx b/content/docs/extension-development/recipes/adding-a-payment-gateway-driver.mdx
index f77f10d8..dd0e29d1 100644
--- a/content/docs/extension-development/recipes/adding-a-payment-gateway-driver.mdx
+++ b/content/docs/extension-development/recipes/adding-a-payment-gateway-driver.mdx
@@ -3,8 +3,6 @@ title: Adding a Payment Gateway Driver
description: Plug a new payment gateway (PayPal, Razorpay, etc.) into Ledger by extending AbstractGatewayDriver and registering it with the PaymentGatewayManager.
---
-# Adding a Payment Gateway Driver
-
The [Ledger](https://github.com/fleetbase/ledger) extension uses a Laravel [`Manager`](https://laravel.com/api/11.x/Illuminate/Support/Manager.html)-based driver pattern for payment gateways. Stripe, QPay, and Cash drivers ship by default — third-party drivers register via `PaymentGatewayManager::extend()`.
## What a Driver Implements
diff --git a/content/docs/extension-development/recipes/adding-a-sms-provider.mdx b/content/docs/extension-development/recipes/adding-a-sms-provider.mdx
index 0b57bcd4..47121d11 100644
--- a/content/docs/extension-development/recipes/adding-a-sms-provider.mdx
+++ b/content/docs/extension-development/recipes/adding-a-sms-provider.mdx
@@ -3,8 +3,6 @@ title: Adding a SMS Provider
description: Plug a new SMS gateway into the platform's SmsService — implement a sender class, wire it through configuration, and route specific phone-number prefixes to it.
---
-# Adding a SMS Provider
-
The platform's `Fleetbase\Services\SmsService` ships with Twilio (default) and CallPro. Both implement the same minimal contract: a constructor that reads config, plus a `send($to, $text, $options?)` method. Adding a third provider is a matter of writing the sender class, exposing it via config, and (if you want auto-routing) updating the routing rules.
## 1. Implement the Provider Class
diff --git a/content/docs/extension-development/recipes/adding-an-integrated-vendor.mdx b/content/docs/extension-development/recipes/adding-an-integrated-vendor.mdx
index 828c129f..3a18bf5c 100644
--- a/content/docs/extension-development/recipes/adding-an-integrated-vendor.mdx
+++ b/content/docs/extension-development/recipes/adding-an-integrated-vendor.mdx
@@ -3,8 +3,6 @@ title: Adding an Integrated Vendor
description: Wire a third-party logistics provider into Fleet-Ops as a selectable IntegratedVendor — credentials form, API bridge, lifecycle callbacks, and webhook routing.
---
-# Adding an Integrated Vendor
-
Fleet-Ops's **IntegratedVendor** system lets users connect external delivery providers (Lalamove, etc.) and dispatch orders to them as if they were internal vendors. The integration consists of:
1. A **bridge class** — wraps the third-party API
diff --git a/content/docs/extension-development/recipes/calling-your-extension-api.mdx b/content/docs/extension-development/recipes/calling-your-extension-api.mdx
index c78918d4..7dec06fd 100644
--- a/content/docs/extension-development/recipes/calling-your-extension-api.mdx
+++ b/content/docs/extension-development/recipes/calling-your-extension-api.mdx
@@ -3,8 +3,6 @@ title: Calling Your Extension's API
description: Make authenticated requests from your engine to your extension's backend by passing the right namespace to the fetch service.
---
-# Calling Your Extension's API
-
The `fetch` service knows how to call **the console's** API by default — but your extension exposes its own routes under its own prefix, and those calls need to go there instead. This recipe covers the patterns: per-call namespace, controller-level shorthand, and a dedicated wrapper service.
## The Problem
diff --git a/content/docs/extension-development/recipes/connecting-models-to-your-api.mdx b/content/docs/extension-development/recipes/connecting-models-to-your-api.mdx
index 69ea2941..72de93c7 100644
--- a/content/docs/extension-development/recipes/connecting-models-to-your-api.mdx
+++ b/content/docs/extension-development/recipes/connecting-models-to-your-api.mdx
@@ -3,8 +3,6 @@ title: Connecting Models to Your Extension API
description: Wire Ember Data models to your extension's API by extending ApplicationAdapter with the right namespace, then point each model at the right adapter.
---
-# Connecting Models to Your Extension API
-
Ember Data drives most CRUD interactions in the console — `store.findRecord`, `store.query`, `record.save()`. When you load records from your **own** API instead of the console's default namespace, you do it once at the **adapter** layer rather than passing options on every call.
## Why an Adapter?
diff --git a/content/docs/extension-development/recipes/registering-a-report-schema.mdx b/content/docs/extension-development/recipes/registering-a-report-schema.mdx
index 0e8c05cb..9532ad95 100644
--- a/content/docs/extension-development/recipes/registering-a-report-schema.mdx
+++ b/content/docs/extension-development/recipes/registering-a-report-schema.mdx
@@ -3,8 +3,6 @@ title: Registering a Report Schema
description: Expose your extension's tables in the platform's report builder by registering a ReportSchema. Users can then build custom reports against your data through the standard reporting UI.
---
-# Registering a Report Schema
-
The platform ships a generic report builder that lets users build CSV/XLSX reports from any data source registered as a **report schema**. Fleet-Ops registers schemas for orders, drivers, vehicles, and others — your extension can register schemas for its own tables the same way.
## What a Report Schema Provides
diff --git a/content/docs/extension-development/recipes/registering-notifications.mdx b/content/docs/extension-development/recipes/registering-notifications.mdx
index f2145e3a..36fe724e 100644
--- a/content/docs/extension-development/recipes/registering-notifications.mdx
+++ b/content/docs/extension-development/recipes/registering-notifications.mdx
@@ -3,8 +3,6 @@ title: Registering Notifications
description: Define notification classes that show up in user notification preferences and dispatch via mail, SMS, push, broadcast, and database channels.
---
-# Registering Notifications
-
The platform's `NotificationRegistry` is the **directory of opt-in notifications** users see in their settings. Each registered notification class can fire across mail, SMS, broadcast (real-time UI), database (in-app feed), FCM (Android push), and APN (iOS push) — and users pick which channels to receive each notification on.
Without registration, your notification will still send (it's just a Laravel notification), but users won't see it in their preferences UI and won't be able to opt in or out.
diff --git a/content/docs/extension-development/reference/api-services.mdx b/content/docs/extension-development/reference/api-services.mdx
index 343f2711..28c62d69 100644
--- a/content/docs/extension-development/reference/api-services.mdx
+++ b/content/docs/extension-development/reference/api-services.mdx
@@ -3,8 +3,6 @@ title: API Services
description: Backend support classes shipped by fleetbase/core-api — SmsService, the Support\Http and Support\Find/Resolve helpers, NotificationRegistry, and the SocketCluster broadcaster.
---
-# API Services
-
`fleetbase/core-api` ships a set of support classes you can rely on instead of rebuilding them per extension. This page surveys the most important ones and shows the canonical usage. Source files for each are linked at the bottom.
For frontend host services (the `fetch`, `store`, `notifications`, etc. you inject in your engine), see [Ember Services](/docs/extension-development/reference/ember-services).
diff --git a/content/docs/extension-development/reference/contracts.mdx b/content/docs/extension-development/reference/contracts.mdx
index 6570cc77..40b34a90 100644
--- a/content/docs/extension-development/reference/contracts.mdx
+++ b/content/docs/extension-development/reference/contracts.mdx
@@ -3,8 +3,6 @@ title: Contracts
description: Reference for every contract in @fleetbase/ember-core/contracts — MenuItem, MenuPanel, Widget, Hook, ExtensionComponent, Registry, TemplateHelper, BaseContract.
---
-# Contracts
-
The **contracts** in `@fleetbase/ember-core/contracts` are the canonical shapes you pass to the Universe sub-services. Use them — they validate inputs, normalize defaults, and serialize correctly when stored in registries.
## Importing
diff --git a/content/docs/extension-development/reference/decorators.mdx b/content/docs/extension-development/reference/decorators.mdx
index f6a2dc21..148d48a5 100644
--- a/content/docs/extension-development/reference/decorators.mdx
+++ b/content/docs/extension-development/reference/decorators.mdx
@@ -3,8 +3,6 @@ title: Decorators
description: "Property decorators from @fleetbase/ember-core for cross-engine service injection and lazy data loading: @engineService, @fromStore, and @fetchFrom."
---
-# Decorators
-
`@fleetbase/ember-core` ships three custom property decorators for the patterns Ember's built-in `@service` doesn't cover: pulling a service from another engine, lazily querying the store on first access, and lazily fetching from the API on first access.
## `@engineService`
diff --git a/content/docs/extension-development/reference/ember-services.mdx b/content/docs/extension-development/reference/ember-services.mdx
index b0f778b9..a2b151bc 100644
--- a/content/docs/extension-development/reference/ember-services.mdx
+++ b/content/docs/extension-development/reference/ember-services.mdx
@@ -3,8 +3,6 @@ title: Ember Services
description: Reference for the host services your extension consumes — fetch, store, current-user, session, abilities, intl, notifications, socket, crud, chat, theme, modalsManager, events, app-cache, language, hostRouter, and more.
---
-# Ember Services
-
Your engine inherits a tree of Ember services from [`@fleetbase/ember-core/exports`](https://github.com/fleetbase/ember-core/blob/main/addon/exports/services.js). Each is built on Ember's Service base class and is injectable via Ember's @service decorator from any route, controller, component, or service in your engine:
```js
diff --git a/content/docs/extension-development/universe/extension-manager.mdx b/content/docs/extension-development/universe/extension-manager.mdx
index 48217331..ce2ecb8c 100644
--- a/content/docs/extension-development/universe/extension-manager.mdx
+++ b/content/docs/extension-development/universe/extension-manager.mdx
@@ -3,8 +3,6 @@ title: Extension Manager
description: Lazy-load engines on demand, react to engine load events, share host services and components into engines, and inspect installed-extension state.
---
-# Extension Manager
-
The **extension manager** (`universe/extension-manager`) is the engine-aware sub-service. While the menu, registry, widget, and hook services manage data, the extension manager manages **engines themselves** — when they boot, when their setup callbacks fire, and what state they're in.
You'll mostly reach it through the [`UniverseService` façade](/docs/extension-development/universe/overview) (`universe.whenEngineLoaded(…)`) — but the underlying service has more surface for advanced cases like cross-engine service sharing.
diff --git a/content/docs/extension-development/universe/hook-service.mdx b/content/docs/extension-development/universe/hook-service.mdx
index a5821ca4..b94bbfd8 100644
--- a/content/docs/extension-development/universe/hook-service.mdx
+++ b/content/docs/extension-development/universe/hook-service.mdx
@@ -3,8 +3,6 @@ title: Hook Service
description: Tap into platform lifecycle events using hooks to run logic at key points in the application — login, route transitions, console boot, and custom events you fire yourself.
---
-# Hook Service
-
The **hook service** (`universe/hook-service`) is a typed event bus shared across all engines. Extensions register handlers for named events; the platform (and other extensions) execute them at the right moment.
Hooks live in a singleton registry on the root application, so a hook registered in one engine fires for events emitted in another. That's how the customer portal redirects authenticated customers from the main console (`console:before-model`) without either engine knowing about the other.
diff --git a/content/docs/extension-development/universe/menu-service.mdx b/content/docs/extension-development/universe/menu-service.mdx
index 207c0c21..fdf36f38 100644
--- a/content/docs/extension-development/universe/menu-service.mdx
+++ b/content/docs/extension-development/universe/menu-service.mdx
@@ -3,8 +3,6 @@ title: Menu Service
description: Register navigation entries in the console — header items, settings panels, admin panels, organization & user menus, and custom registries — via universe.getService('menu').
---
-# Menu Service
-
The `menu` service is how your extension contributes navigation entries to the console. It exposes dedicated registrars for each major menu surface, plus a generic registrar for custom registries (`auth:login`, `engine:fleet-ops`, etc.).
```js
diff --git a/content/docs/extension-development/universe/overview.mdx b/content/docs/extension-development/universe/overview.mdx
index ca253634..3e3f416f 100644
--- a/content/docs/extension-development/universe/overview.mdx
+++ b/content/docs/extension-development/universe/overview.mdx
@@ -3,8 +3,6 @@ title: Overview
description: The UniverseService is the central extensibility facade in @fleetbase/ember-core. It exposes five sub-services for menus, registries, widgets, hooks, and engines — and is the single entry point your extension uses to plug into the console.
---
-# Universe Service
-
The **`UniverseService`** is the central extensibility facade in `@fleetbase/ember-core`. It is the entry point your extension uses to register everything: menu items, components, widgets, hooks, registries, and engine integrations.
You access it through the `setupExtension(app, universe)` hook in your `addon/extension.js`:
diff --git a/content/docs/extension-development/universe/registry-service.mdx b/content/docs/extension-development/universe/registry-service.mdx
index 2398cce0..a8c37a30 100644
--- a/content/docs/extension-development/universe/registry-service.mdx
+++ b/content/docs/extension-development/universe/registry-service.mdx
@@ -3,8 +3,6 @@ title: Registry Service
description: Create registries, register components into other extensions' slots, and register cross-engine components, services, and helpers — via universe.getService('registry').
---
-# Registry Service
-
The `registry` service is the storage layer behind the menu, widget, and hook services — and the place to register your own component contributions and registries.
You'll touch it for two main reasons:
diff --git a/content/docs/extension-development/universe/widget-service.mdx b/content/docs/extension-development/universe/widget-service.mdx
index 9696a04f..8be168e4 100644
--- a/content/docs/extension-development/universe/widget-service.mdx
+++ b/content/docs/extension-development/universe/widget-service.mdx
@@ -3,8 +3,6 @@ title: Widget Service
description: Register dashboards and widgets that show up on the Fleetbase home dashboard or your extension's own dashboard surface.
---
-# Widget Service
-
The **widget service** (`universe/widget-service`) manages two registries used by the dashboard:
- **Dashboards** — named groups of widgets (`'dashboard'` is the built-in console home; you can register your own)
diff --git a/content/docs/fleet-ops/analytics/overview.mdx b/content/docs/fleet-ops/analytics/overview.mdx
index 6b04374b..cd194692 100644
--- a/content/docs/fleet-ops/analytics/overview.mdx
+++ b/content/docs/fleet-ops/analytics/overview.mdx
@@ -3,8 +3,6 @@ title: Analytics Overview
description: Build custom reports against the Fleet-Ops dataset using a query-builder UI — pick tables, columns, joins, filters, and exports.
---
-# Analytics Overview
-
The **Analytics** section of Fleet-Ops gives you a query-builder over the Fleet-Ops dataset. Reports are configured visually — pick a primary table, select columns, add joins to related tables, layer in filters and aggregates, and run the query to render a table you can export.

diff --git a/content/docs/fleet-ops/analytics/reports/overview.mdx b/content/docs/fleet-ops/analytics/reports/overview.mdx
index 35d4226b..e3dce05a 100644
--- a/content/docs/fleet-ops/analytics/reports/overview.mdx
+++ b/content/docs/fleet-ops/analytics/reports/overview.mdx
@@ -3,8 +3,6 @@ title: Reports
description: Build, run, save, and export custom reports against your Fleet-Ops data using a visual report builder — no SQL required.
---
-# Reports
-
The Reports section is where you build custom data exports of your Fleet-Ops operation. Pick a starting table (orders, drivers, vehicles, etc.), choose which fields you want, layer in filters and sorting, optionally pull in fields from related tables, and run the report to see the result. Save it, re-run it whenever you want, and export to CSV or XLSX.
Reports are **table-based today** — every report produces rows in a table. Charts, summary cards, and pre-built dashboards are on the roadmap but not yet available.
diff --git a/content/docs/fleet-ops/connectivity/devices/overview.mdx b/content/docs/fleet-ops/connectivity/devices/overview.mdx
index 6f5d9a41..e1ae7ed3 100644
--- a/content/docs/fleet-ops/connectivity/devices/overview.mdx
+++ b/content/docs/fleet-ops/connectivity/devices/overview.mdx
@@ -3,8 +3,6 @@ title: Devices
description: Manage GPS trackers, OBD-II scanners, dash cameras, and other IoT devices connected to your fleet vehicles.
---
-# Devices
-
**Devices** are the physical hardware units connected to your fleet vehicles — GPS trackers, OBD-II scanners, dash cameras, and IoT sensors. While telematics modems are managed in the Telematics section (they bridge to a provider's cloud), Devices tracks the individual hardware installed in or on vehicles.
Navigate to **Fleet-Ops → Connectivity → Devices**.
diff --git a/content/docs/fleet-ops/connectivity/events/overview.mdx b/content/docs/fleet-ops/connectivity/events/overview.mdx
index bdec65cd..94591cc0 100644
--- a/content/docs/fleet-ops/connectivity/events/overview.mdx
+++ b/content/docs/fleet-ops/connectivity/events/overview.mdx
@@ -3,8 +3,6 @@ title: Device Events
description: View and inspect raw device and sensor events — GPS readings, OBD-II data, sensor values, and system events from connected fleet hardware.
---
-# Device Events
-
**Device Events** are the raw data points received from connected fleet hardware — GPS position updates, OBD-II diagnostic readings, sensor values, and alert events. Every time a device or sensor sends data to Fleet-Ops, a DeviceEvent is recorded.
Navigate to **Fleet-Ops → Connectivity → Events**.
diff --git a/content/docs/fleet-ops/connectivity/overview.mdx b/content/docs/fleet-ops/connectivity/overview.mdx
index 965b5708..3e5e28b3 100644
--- a/content/docs/fleet-ops/connectivity/overview.mdx
+++ b/content/docs/fleet-ops/connectivity/overview.mdx
@@ -3,8 +3,6 @@ title: Connectivity Overview
description: Connect Fleet-Ops to external hardware — telematics modems, GPS devices, IoT sensors, and third-party data providers.
---
-# Connectivity Overview
-
The **Connectivity** section of Fleet-Ops manages the integration of physical hardware and external data providers. This includes telematics modems installed in vehicles, GPS and IoT devices, environmental sensors, and the raw data events they produce.

diff --git a/content/docs/fleet-ops/connectivity/sensors/overview.mdx b/content/docs/fleet-ops/connectivity/sensors/overview.mdx
index 0b323613..ddf2a6bc 100644
--- a/content/docs/fleet-ops/connectivity/sensors/overview.mdx
+++ b/content/docs/fleet-ops/connectivity/sensors/overview.mdx
@@ -3,8 +3,6 @@ title: Sensors
description: Manage environmental and condition sensors — temperature, humidity, door, pressure, and motion monitoring for cargo and vehicle condition tracking.
---
-# Sensors
-
**Sensors** are environmental and condition monitoring devices installed in vehicle cargo areas or attached to equipment. They provide real-time data about the state of the cargo environment (temperature, humidity) or physical events (door opened, impact detected). Sensor data is ingested from telematics devices or directly from connected hardware.
Navigate to **Fleet-Ops → Connectivity → Sensors**.
diff --git a/content/docs/fleet-ops/connectivity/telematics/overview.mdx b/content/docs/fleet-ops/connectivity/telematics/overview.mdx
index 1925e89a..50d430e9 100644
--- a/content/docs/fleet-ops/connectivity/telematics/overview.mdx
+++ b/content/docs/fleet-ops/connectivity/telematics/overview.mdx
@@ -3,8 +3,6 @@ title: Telematics
description: Connect telematics providers to Fleet-Ops — enter API credentials, discover devices, link them to vehicles, and start receiving live telemetry data.
---
-# Telematics
-
**Telematics** devices are modems installed in vehicles that continuously transmit GPS position, engine diagnostics, and sensor data to a telematics provider's cloud platform. Fleet-Ops connects to supported providers via API to ingest this data in real time.
Navigate to **Fleet-Ops → Connectivity → Telematics**.
diff --git a/content/docs/fleet-ops/getting-started/core-concepts.mdx b/content/docs/fleet-ops/getting-started/core-concepts.mdx
index 339e5472..c659af71 100644
--- a/content/docs/fleet-ops/getting-started/core-concepts.mdx
+++ b/content/docs/fleet-ops/getting-started/core-concepts.mdx
@@ -3,8 +3,6 @@ title: Core Concepts
description: "Understand the key building blocks of Fleet-Ops: orders, payloads, drivers, vehicles, fleets, and how they relate."
---
-# Core Concepts
-
Fleet-Ops is built around a set of entities that represent the real-world objects in your logistics operation. Understanding how these entities relate to each other is the key to using Fleet-Ops effectively.
## Orders
diff --git a/content/docs/fleet-ops/getting-started/navigator-app-setup.mdx b/content/docs/fleet-ops/getting-started/navigator-app-setup.mdx
index fc381bff..b62c6dfa 100644
--- a/content/docs/fleet-ops/getting-started/navigator-app-setup.mdx
+++ b/content/docs/fleet-ops/getting-started/navigator-app-setup.mdx
@@ -3,8 +3,6 @@ title: Navigator App Setup
description: Install the Navigator driver app, link it to your Fleet-Ops instance, and get a driver logged in before their first dispatch.
---
-# Navigator App Setup
-
**Navigator** is the React Native mobile app drivers use to receive dispatched orders, navigate routes, fire activity steps, capture proof of delivery, report issues, and submit fuel reports. It is open source — the source lives at [github.com/fleetbase/navigator-app](https://github.com/fleetbase/navigator-app) — and ships as both an iOS and Android app.
## 1. Install Navigator
diff --git a/content/docs/fleet-ops/getting-started/quickstart.mdx b/content/docs/fleet-ops/getting-started/quickstart.mdx
index e004cc9d..aa51010b 100644
--- a/content/docs/fleet-ops/getting-started/quickstart.mdx
+++ b/content/docs/fleet-ops/getting-started/quickstart.mdx
@@ -3,8 +3,6 @@ title: Quickstart
description: Get up and running with Fleet-Ops in minutes — create your first order, assign a driver, and dispatch.
---
-# Quickstart
-
This guide walks you through creating your first order in Fleet-Ops, assigning it to a driver, and dispatching it to the Navigator app. It assumes Fleet-Ops is installed and you have at least one driver account set up.
## Prerequisites
diff --git a/content/docs/fleet-ops/maintenance/equipment/overview.mdx b/content/docs/fleet-ops/maintenance/equipment/overview.mdx
index 7804a65f..24add196 100644
--- a/content/docs/fleet-ops/maintenance/equipment/overview.mdx
+++ b/content/docs/fleet-ops/maintenance/equipment/overview.mdx
@@ -3,8 +3,6 @@ title: Equipment
description: Track fleet equipment assets — tools, trailers, containers — with maintenance schedules, work orders, and warranty coverage.
---
-# Equipment
-
**Equipment** tracks fleet assets beyond vehicles — tools, trailers, containers, attachments, and other hardware that require their own maintenance schedules and work orders. Equipment records are linked to vehicles or drivers and participate in the same maintenance workflow as vehicles.

diff --git a/content/docs/fleet-ops/maintenance/overview.mdx b/content/docs/fleet-ops/maintenance/overview.mdx
index 6ade16ec..7c2972a0 100644
--- a/content/docs/fleet-ops/maintenance/overview.mdx
+++ b/content/docs/fleet-ops/maintenance/overview.mdx
@@ -3,8 +3,6 @@ title: Maintenance Overview
description: Manage vehicle and equipment maintenance — preventive schedules, work orders, parts inventory, and maintenance history.
---
-# Maintenance Overview
-
The **Maintenance** section of Fleet-Ops provides tools to keep your fleet in operating condition. It covers preventive maintenance scheduling, work order assignment and tracking, parts inventory, and equipment management.

diff --git a/content/docs/fleet-ops/maintenance/parts/overview.mdx b/content/docs/fleet-ops/maintenance/parts/overview.mdx
index 6e4350a2..00674483 100644
--- a/content/docs/fleet-ops/maintenance/parts/overview.mdx
+++ b/content/docs/fleet-ops/maintenance/parts/overview.mdx
@@ -3,8 +3,6 @@ title: Parts
description: Track parts inventory used in fleet maintenance — log parts used in work orders, manage supplier info, and track costs.
---
-# Parts
-
**Parts** is the inventory management section for maintenance components. It tracks the parts available for vehicle and equipment maintenance — oil filters, brake pads, belts, fluids, and any other consumables used in work orders.

diff --git a/content/docs/fleet-ops/maintenance/schedules/overview.mdx b/content/docs/fleet-ops/maintenance/schedules/overview.mdx
index 2bb99c99..93b94cbf 100644
--- a/content/docs/fleet-ops/maintenance/schedules/overview.mdx
+++ b/content/docs/fleet-ops/maintenance/schedules/overview.mdx
@@ -3,8 +3,6 @@ title: Maintenance Schedules
description: Set up preventive maintenance rules for vehicles and equipment — trigger work orders automatically by mileage, engine hours, or calendar interval.
---
-# Maintenance Schedules
-
**Maintenance Schedules** are preventive maintenance rules that monitor vehicles and equipment and automatically generate work orders when service is due. Each schedule defines a target (vehicle or equipment), an interval method, and thresholds — Fleet-Ops tracks usage and fires work orders when the threshold is reached.

diff --git a/content/docs/fleet-ops/maintenance/work-orders/overview.mdx b/content/docs/fleet-ops/maintenance/work-orders/overview.mdx
index f6ae1e30..964c78fd 100644
--- a/content/docs/fleet-ops/maintenance/work-orders/overview.mdx
+++ b/content/docs/fleet-ops/maintenance/work-orders/overview.mdx
@@ -3,8 +3,6 @@ title: Work Orders
description: Create, assign, and track maintenance work orders — from initial task assignment through checklist completion and cost tracking to closure.
---
-# Work Orders
-
A **Work Order** is an assigned maintenance or repair task. Work orders can be generated automatically from maintenance schedules when service thresholds are reached, or created manually for ad-hoc repairs and inspections. Each work order is tracked from open to completion with a full cost record.

diff --git a/content/docs/fleet-ops/navigator-app/build-and-release.mdx b/content/docs/fleet-ops/navigator-app/build-and-release.mdx
index 1f51eba3..1c744359 100644
--- a/content/docs/fleet-ops/navigator-app/build-and-release.mdx
+++ b/content/docs/fleet-ops/navigator-app/build-and-release.mdx
@@ -4,8 +4,6 @@ sidebarTitle: Build & Release
description: Build and ship your white-labeled Navigator app to the Apple App Store and Google Play — accounts, signing, Fastlane lanes, and the Google testing requirement.
---
-# Build & Release
-
This page walks through the end-to-end publishing flow for a forked Navigator app: developer accounts, namespace, store profiles, code signing, build automation with Fastlane, and the constraints that gate each store.
You should have already finished [Configuration](/docs/fleet-ops/navigator-app/configuration) — env vars and a working debug build on simulator — and [Theming & Branding](/docs/fleet-ops/navigator-app/theming) for your icon, splash, and colors.
diff --git a/content/docs/fleet-ops/navigator-app/configuration.mdx b/content/docs/fleet-ops/navigator-app/configuration.mdx
index d271a528..49472e64 100644
--- a/content/docs/fleet-ops/navigator-app/configuration.mdx
+++ b/content/docs/fleet-ops/navigator-app/configuration.mdx
@@ -4,8 +4,6 @@ sidebarTitle: Configuration
description: Full env-var reference for the open-source Fleetbase Navigator app — Fleetbase connection, maps, driver UI, push notifications, geolocation, localization, and deep linking.
---
-# Configuration
-
This guide is the full env-var reference for developers and operators who **fork, brand, and self-publish** the Fleetbase Navigator driver app. If your drivers will use the public Fleetbase Navigator app from the App Store / Google Play, see [Navigator App Setup](/docs/fleet-ops/getting-started/navigator-app-setup) instead — that page covers installing the public app and connecting it to your instance via the console-generated deep link.
The Navigator source lives at [github.com/fleetbase/navigator-app](https://github.com/fleetbase/navigator-app). It's a React Native 0.77 app, Expo-free, with Tamagui for styling and Fastlane for release automation.
diff --git a/content/docs/fleet-ops/navigator-app/quickstart.mdx b/content/docs/fleet-ops/navigator-app/quickstart.mdx
index e002a478..af26b88d 100644
--- a/content/docs/fleet-ops/navigator-app/quickstart.mdx
+++ b/content/docs/fleet-ops/navigator-app/quickstart.mdx
@@ -3,8 +3,6 @@ title: Quickstart
description: Clone the Navigator App, install dependencies, configure your Fleetbase keys, and run it in iOS, Android, or web.
---
-# Navigator App Quickstart
-
Get the Navigator driver app running locally against your Fleetbase backend in about 15 minutes.
## Prerequisites
diff --git a/content/docs/fleet-ops/navigator-app/theming.mdx b/content/docs/fleet-ops/navigator-app/theming.mdx
index d4a98e93..4404cf79 100644
--- a/content/docs/fleet-ops/navigator-app/theming.mdx
+++ b/content/docs/fleet-ops/navigator-app/theming.mdx
@@ -3,8 +3,6 @@ title: Theming & Branding
description: Customize colors, themes, app icon, splash screen, and display names for the Navigator App.
---
-# Theming & Branding
-
The Navigator App uses [Tamagui](https://tamagui.dev) for theming. The setup combines a Tailwind-style color palette with named themes, plus runtime overrides via env vars for fast brand work without touching code.
## How Themes Work
diff --git a/content/docs/fleet-ops/operations/orchestrator/overview.mdx b/content/docs/fleet-ops/operations/orchestrator/overview.mdx
index 5c459bef..5a1ce66b 100644
--- a/content/docs/fleet-ops/operations/orchestrator/overview.mdx
+++ b/content/docs/fleet-ops/operations/orchestrator/overview.mdx
@@ -3,8 +3,6 @@ title: Orchestrator Overview
description: A multi-phase planner that turns a pool of unassigned orders into a committable plan — stack vehicle allocation, driver allocation, and route optimization phases in sequence.
---
-# Orchestrator Overview
-
The **Orchestrator** is the automated planner Fleet-Ops uses to turn a pool of unassigned orders into a committable assignment plan. Rather than running a single fixed pipeline, you compose **phases** in the Orchestrator Workbench and stack them in sequence — for example *Assign Vehicles → Optimize Routes → Assign Drivers*. Each phase runs one mode against the order pool using a configurable engine. The result is a proposed plan you can preview, adjust, and commit when ready.

diff --git a/content/docs/fleet-ops/operations/orchestrator/payload-capacity-allocation.mdx b/content/docs/fleet-ops/operations/orchestrator/payload-capacity-allocation.mdx
index e486024a..2532afce 100644
--- a/content/docs/fleet-ops/operations/orchestrator/payload-capacity-allocation.mdx
+++ b/content/docs/fleet-ops/operations/orchestrator/payload-capacity-allocation.mdx
@@ -3,8 +3,6 @@ title: Payload & Capacity Allocation
description: How the Orchestrator uses payload weight, volume, and entity data to enforce vehicle capacity constraints during assignment.
---
-# Payload & Capacity Allocation
-
The Orchestrator uses **payload capacity** constraints to ensure that orders are assigned only to vehicles with sufficient load capacity. This prevents over-loading vehicles and ensures deliveries are physically feasible.
## How Capacity Allocation Works
diff --git a/content/docs/fleet-ops/operations/orchestrator/vehicle-allocation.mdx b/content/docs/fleet-ops/operations/orchestrator/vehicle-allocation.mdx
index 6e51c051..8f62c5e0 100644
--- a/content/docs/fleet-ops/operations/orchestrator/vehicle-allocation.mdx
+++ b/content/docs/fleet-ops/operations/orchestrator/vehicle-allocation.mdx
@@ -3,8 +3,6 @@ title: Vehicle Allocation
description: How the Orchestrator matches vehicles to orders — availability, location proximity, and driver assignment.
---
-# Vehicle Allocation
-
Vehicle allocation is what happens during a phase running in `assign_vehicles` mode (or the legacy `allocate` mode) in the Orchestrator. The active engine — `greedy`, `vroom`, or any extension-registered engine — evaluates each available vehicle against the orders in the pool and produces a vehicle-to-order assignment as part of the phase's output.
## How Vehicle Allocation Works
diff --git a/content/docs/fleet-ops/operations/orchestrator/workbench.mdx b/content/docs/fleet-ops/operations/orchestrator/workbench.mdx
index ee51dccd..9554b5bb 100644
--- a/content/docs/fleet-ops/operations/orchestrator/workbench.mdx
+++ b/content/docs/fleet-ops/operations/orchestrator/workbench.mdx
@@ -3,8 +3,6 @@ title: Workbench
description: Compose phases, run the Orchestrator, review the proposed plan, and commit assignments — all from the Orchestrator Workbench.
---
-# Orchestrator Workbench
-
The **Workbench** is the main UI for running the Orchestrator. It lays out the unassigned order pool, the available drivers and vehicles, and a phase builder where you compose and run optimization phases. The Workbench is a planning surface — nothing changes in production until you click **Commit**.

diff --git a/content/docs/fleet-ops/operations/order-configurations/activity-flows.mdx b/content/docs/fleet-ops/operations/order-configurations/activity-flows.mdx
index c2615910..b00f0fae 100644
--- a/content/docs/fleet-ops/operations/order-configurations/activity-flows.mdx
+++ b/content/docs/fleet-ops/operations/order-configurations/activity-flows.mdx
@@ -3,8 +3,6 @@ title: Activity Flows
description: Define the activity workflow that runs inside an order's started phase — transitions, logic, events, completion flag, and per-activity POD.
---
-# Activity Flows
-
An **Activity Flow** is the workflow defined on an Order Configuration. It describes the activities a driver moves through while the order is in the `started` system status — and which activity ends the order. Each Order Configuration has exactly one flow, stored as a JSON graph of activities keyed by their `code`.

diff --git a/content/docs/fleet-ops/operations/order-configurations/order-types.mdx b/content/docs/fleet-ops/operations/order-configurations/order-types.mdx
index 202c6791..95dfc84f 100644
--- a/content/docs/fleet-ops/operations/order-configurations/order-types.mdx
+++ b/content/docs/fleet-ops/operations/order-configurations/order-types.mdx
@@ -3,8 +3,6 @@ title: Order Types
description: Create and manage custom order types — define entity fields, constraints, and service categories per order configuration.
---
-# Order Types
-
**Order Types** refer to the different categories of orders your operation handles, each backed by an **Order Configuration**. An order type determines what data is collected on each delivery, what fields appear on each item, and how drivers execute the workflow.
## What Defines an Order Type
diff --git a/content/docs/fleet-ops/operations/order-configurations/overview.mdx b/content/docs/fleet-ops/operations/order-configurations/overview.mdx
index 98a74489..8e0b9ecf 100644
--- a/content/docs/fleet-ops/operations/order-configurations/overview.mdx
+++ b/content/docs/fleet-ops/operations/order-configurations/overview.mdx
@@ -3,8 +3,6 @@ title: Order Configurations
description: Order configurations define custom order types with their own workflows, entity fields, POD methods, and activity steps.
---
-# Order Configurations
-
An **Order Configuration** (Order Config) is a template that defines how a particular type of order works in Fleet-Ops. Every order you create must be based on an Order Config — it determines the order's lifecycle, the data fields collected on each item, and what proof of delivery is required.
This lets you run different service types from the same Fleet-Ops instance. A courier might have one config for same-day parcels (signature required), another for document delivery (photo required), and a third for returns (no POD needed). Each config has its own workflow and fields.
diff --git a/content/docs/fleet-ops/operations/orders/importing-orders.mdx b/content/docs/fleet-ops/operations/orders/importing-orders.mdx
index 9dab7785..0b5aec86 100644
--- a/content/docs/fleet-ops/operations/orders/importing-orders.mdx
+++ b/content/docs/fleet-ops/operations/orders/importing-orders.mdx
@@ -4,8 +4,6 @@ sidebarTitle: Importing
description: Import many orders at once from a spreadsheet — including multi-waypoint and multi-entity orders — using the Order Import wizard.
---
-# Importing Orders
-
For high-volume operations it isn't practical to create orders one-by-one in the console. Fleet-Ops includes an **Order Import** wizard that ingests `.xlsx` or `.csv` spreadsheets and creates orders, waypoints, entities, customers, and drivers in a single pass. This page walks through the import flow, the spreadsheet shape, and the row-grouping rules that drive multi-stop and multi-item orders.

diff --git a/content/docs/fleet-ops/operations/orders/kanban-board.mdx b/content/docs/fleet-ops/operations/orders/kanban-board.mdx
index 1f2a09a8..f5ea6a45 100644
--- a/content/docs/fleet-ops/operations/orders/kanban-board.mdx
+++ b/content/docs/fleet-ops/operations/orders/kanban-board.mdx
@@ -3,8 +3,6 @@ title: Kanban Board
description: Manage orders visually by status column — see all active orders at a glance, drag to reassign, and filter by driver or fleet.
---
-# Kanban Board
-
The Kanban Board provides a visual, column-based view of all orders organized by **system status**. Each column represents one of the five system statuses — *created*, *dispatched*, *started*, *completed*, *canceled* — and each card represents an order. It gives dispatchers a real-time snapshot of the operation's current state without navigating individual order records.

diff --git a/content/docs/fleet-ops/operations/orders/managing-orders.mdx b/content/docs/fleet-ops/operations/orders/managing-orders.mdx
index fc0fb819..2527b680 100644
--- a/content/docs/fleet-ops/operations/orders/managing-orders.mdx
+++ b/content/docs/fleet-ops/operations/orders/managing-orders.mdx
@@ -3,8 +3,6 @@ title: Managing Orders
description: Create, edit, assign, dispatch, and manage orders from the Fleet-Ops orders list and detail views.
---
-# Managing Orders
-
This page covers the day-to-day operations for managing orders in the Fleet-Ops console — creating new orders, assigning drivers, dispatching, and handling exceptions.
## Creating an Order
diff --git a/content/docs/fleet-ops/operations/orders/order-lifecycle.mdx b/content/docs/fleet-ops/operations/orders/order-lifecycle.mdx
index 6c85d7f2..5f967815 100644
--- a/content/docs/fleet-ops/operations/orders/order-lifecycle.mdx
+++ b/content/docs/fleet-ops/operations/orders/order-lifecycle.mdx
@@ -3,8 +3,6 @@ title: Order Lifecycle
description: Understand the system statuses every order moves through, how the activity flow runs inside the started phase, and how an order is completed.
---
-# Order Lifecycle
-
Every order in Fleet-Ops moves through a small set of **system statuses** that drive dispatch, billing, reporting, and webhook events. Inside those statuses — particularly between `started` and the order's completion — the **activity flow** defined on the Order Configuration runs the detailed steps the driver moves through. The system-status backbone is the same for every order; the activity flow is what makes one order type different from another.
## System Statuses
diff --git a/content/docs/fleet-ops/operations/orders/overview.mdx b/content/docs/fleet-ops/operations/orders/overview.mdx
index d7ccbb4a..ae0d29de 100644
--- a/content/docs/fleet-ops/operations/orders/overview.mdx
+++ b/content/docs/fleet-ops/operations/orders/overview.mdx
@@ -3,8 +3,6 @@ title: Orders Overview
description: Learn how orders work in Fleet-Ops — creation, payload structure, assignment, dispatch, and completion.
---
-# Orders Overview
-
An **Order** is the fundamental unit of work in Fleet-Ops. It represents a delivery task, a service job, or any dispatched activity your fleet needs to complete. Orders are created in the console (or via API), assigned to drivers, dispatched to the Navigator app, and completed with proof of delivery.

diff --git a/content/docs/fleet-ops/operations/orders/proof-of-delivery.mdx b/content/docs/fleet-ops/operations/orders/proof-of-delivery.mdx
index 116de4c7..326ad865 100644
--- a/content/docs/fleet-ops/operations/orders/proof-of-delivery.mdx
+++ b/content/docs/fleet-ops/operations/orders/proof-of-delivery.mdx
@@ -3,8 +3,6 @@ title: Proof of Delivery
description: Configure and review proof of delivery — signatures, photos, QR scans, and custom data captured via the Navigator app.
---
-# Proof of Delivery
-
**Proof of Delivery (POD)** is evidence captured by the driver at the point of delivery, confirming that an order — or a specific item or waypoint within an order — was successfully handed over. Fleet-Ops supports four POD methods, and POD is configured **per activity** in the Order Configuration's [activity flow](/docs/fleet-ops/operations/order-configurations/activity-flows).
## POD Methods
diff --git a/content/docs/fleet-ops/operations/orders/scheduling-orders.mdx b/content/docs/fleet-ops/operations/orders/scheduling-orders.mdx
index 3162a4b8..8c9a4e07 100644
--- a/content/docs/fleet-ops/operations/orders/scheduling-orders.mdx
+++ b/content/docs/fleet-ops/operations/orders/scheduling-orders.mdx
@@ -3,8 +3,6 @@ title: Scheduling Orders
description: Schedule an order for a specific date and time — set pickup windows, time constraints, and future dispatch.
---
-# Scheduling Orders
-
Orders can be scheduled for a specific future date and time rather than dispatched immediately. A scheduled order is still a normal order with system status `created` — the scheduling fields tell the Scheduler, the Orchestrator, and the dispatch queue *when* it's eligible to go out, but Fleet-Ops does not have a separate "scheduled" status.
## Setting a Scheduled Pickup
diff --git a/content/docs/fleet-ops/operations/orders/tracking.mdx b/content/docs/fleet-ops/operations/orders/tracking.mdx
index cbaf6ec0..01dc8e23 100644
--- a/content/docs/fleet-ops/operations/orders/tracking.mdx
+++ b/content/docs/fleet-ops/operations/orders/tracking.mdx
@@ -3,8 +3,6 @@ title: Tracking
description: Track live order progress, driver position, and ETA from the order detail view and live map.
---
-# Tracking
-
Fleet-Ops provides real-time tracking of order progress and driver location from the moment an order is dispatched until delivery is confirmed. Tracking is visible to operators in the console and optionally to customers via a public tracking link.
## Live Map
diff --git a/content/docs/fleet-ops/operations/overview.mdx b/content/docs/fleet-ops/operations/overview.mdx
index 8ba0c0e3..7d752529 100644
--- a/content/docs/fleet-ops/operations/overview.mdx
+++ b/content/docs/fleet-ops/operations/overview.mdx
@@ -3,8 +3,6 @@ title: Operations Overview
description: An overview of Fleet-Ops operational capabilities — orders, dispatch, scheduling, and automation.
---
-# Operations Overview
-
The Operations section of Fleet-Ops is the day-to-day control center for your logistics operation. It covers everything from creating and dispatching individual orders to running automated batch assignment across your entire fleet.

diff --git a/content/docs/fleet-ops/operations/scheduler/driver-shift-schedules.mdx b/content/docs/fleet-ops/operations/scheduler/driver-shift-schedules.mdx
index 742e7017..0d125bc6 100644
--- a/content/docs/fleet-ops/operations/scheduler/driver-shift-schedules.mdx
+++ b/content/docs/fleet-ops/operations/scheduler/driver-shift-schedules.mdx
@@ -3,8 +3,6 @@ title: Driver Shift Schedules
description: Set up and manage recurring driver shift schedules — define working hours, days, breaks, and HOS compliance rules.
---
-# Driver Shift Schedules
-
Driver shift schedules define when each driver is available to work. Shifts are used by the Orchestrator as time window constraints during order assignment, and they appear as blocks in the Scheduler calendar.
## What a Shift Schedule Defines
diff --git a/content/docs/fleet-ops/operations/scheduler/order-scheduling.mdx b/content/docs/fleet-ops/operations/scheduler/order-scheduling.mdx
index 0f78f437..cd465485 100644
--- a/content/docs/fleet-ops/operations/scheduler/order-scheduling.mdx
+++ b/content/docs/fleet-ops/operations/scheduler/order-scheduling.mdx
@@ -3,8 +3,6 @@ title: Order Scheduling
description: Schedule orders onto driver timelines using the Scheduler — set pickup windows, assign to shifts, and manage scheduled order queues.
---
-# Order Scheduling
-
Order scheduling lets you plan deliveries for future dates and assign them to specific driver shifts. Scheduled orders appear in the Scheduler calendar and are held in a waiting state until their scheduled window opens.
## Scheduling an Order
diff --git a/content/docs/fleet-ops/operations/scheduler/overview.mdx b/content/docs/fleet-ops/operations/scheduler/overview.mdx
index 4423fb0b..f94e558b 100644
--- a/content/docs/fleet-ops/operations/scheduler/overview.mdx
+++ b/content/docs/fleet-ops/operations/scheduler/overview.mdx
@@ -3,8 +3,6 @@ title: Scheduler Overview
description: The Scheduler provides a fleet-wide calendar view of driver shifts, order assignments, and availability windows.
---
-# Scheduler Overview
-
The **Scheduler** is a calendar-based planning tool that gives operators a fleet-wide view of driver shifts, scheduled orders, and availability windows. Use it to plan which drivers are working on which days, visualize how orders are distributed across your fleet, and manage shift patterns.

diff --git a/content/docs/fleet-ops/operations/service-areas-geofences/geofences.mdx b/content/docs/fleet-ops/operations/service-areas-geofences/geofences.mdx
index 98a8ac38..e9071226 100644
--- a/content/docs/fleet-ops/operations/service-areas-geofences/geofences.mdx
+++ b/content/docs/fleet-ops/operations/service-areas-geofences/geofences.mdx
@@ -3,8 +3,6 @@ title: Geofences
description: How service areas and zones become live geofences — entry, exit, dwell, and speed-limit events, the detection engine, and the reports that surface them.
---
-# Geofences
-
A **geofence** in Fleet-Ops is any [Service Area](/docs/fleet-ops/operations/service-areas-geofences/service-areas) or [Zone](/docs/fleet-ops/operations/service-areas-geofences/zones) that has at least one trigger enabled. Geofences detect when a driver or vehicle crosses a boundary and emit events that downstream features react to: auto-arrival, dwell-time SLAs, restricted-area alerts, and speed-limit reporting.
Geofences are **not a separate object** in Fleet-Ops — they're the operational behavior of service areas and zones. Toggle the trigger fields and you have a geofence; clear them and the same polygon still defines pricing scope but doesn't emit events.
@@ -106,7 +104,7 @@ Geofence configuration follows standard Fleet-Ops role-based access:
- **Manage service areas / zones** to edit trigger fields (typically operations admin role).
- **View geofence events** to access the events and violations reports.
-See [Identity & Access](/docs/identity-access/overview) for how to assign these permissions.
+See [Identity & Access](/docs/platform/identity-and-access/roles-and-permissions) for how to assign these permissions.
## See Also
diff --git a/content/docs/fleet-ops/operations/service-areas-geofences/service-areas.mdx b/content/docs/fleet-ops/operations/service-areas-geofences/service-areas.mdx
index b1d4aeea..f30f01e1 100644
--- a/content/docs/fleet-ops/operations/service-areas-geofences/service-areas.mdx
+++ b/content/docs/fleet-ops/operations/service-areas-geofences/service-areas.mdx
@@ -3,8 +3,6 @@ title: Service Areas
description: Define top-level geographic boundaries (typically country or region scale) that contain zones and drive geofence behavior in Fleet-Ops.
---
-# Service Areas
-
A **Service Area** is a top-level geographic boundary that defines where your operation runs. Service areas are stored as MultiPolygons — they can be a country outline, a metropolitan region, a delivery footprint, or any other named area — and they act as containers for one or more nested [Zones](/docs/fleet-ops/operations/service-areas-geofences/zones).
Service areas are the foundation for:
diff --git a/content/docs/fleet-ops/operations/service-areas-geofences/zones.mdx b/content/docs/fleet-ops/operations/service-areas-geofences/zones.mdx
index 1ba3782d..2026655d 100644
--- a/content/docs/fleet-ops/operations/service-areas-geofences/zones.mdx
+++ b/content/docs/fleet-ops/operations/service-areas-geofences/zones.mdx
@@ -3,8 +3,6 @@ title: Zones
description: Nest precise operational boundaries inside a service area for finer dispatch, pricing, and geofencing.
---
-# Zones
-
A **Zone** is a Polygon nested inside a single [Service Area](/docs/fleet-ops/operations/service-areas-geofences/service-areas). Zones subdivide a service area into finer-grained operational boundaries — delivery rings around a depot, exclusion zones inside a city, pickup territories assigned to specific drivers — and they participate in geofencing and pricing exactly like service areas.
## When to Use a Zone vs a Service Area
diff --git a/content/docs/fleet-ops/operations/service-quotes/overview.mdx b/content/docs/fleet-ops/operations/service-quotes/overview.mdx
index eacdaf2e..5e35ea52 100644
--- a/content/docs/fleet-ops/operations/service-quotes/overview.mdx
+++ b/content/docs/fleet-ops/operations/service-quotes/overview.mdx
@@ -3,8 +3,6 @@ title: Service Quotes
description: Generate and manage service quotes for orders — how quotes are calculated, presented, and linked to transactions.
---
-# Service Quotes
-
A **Service Quote** is a price estimate generated for an order based on matching Service Rates. Quotes are generated when an order's origin, destination, type, and payload details match a configured rate. They can be presented to customers before confirming an order, and accepted quotes become linked transactions.

diff --git a/content/docs/fleet-ops/operations/service-rates/algorithm-rates.mdx b/content/docs/fleet-ops/operations/service-rates/algorithm-rates.mdx
index f5e5b4a5..ed0335bd 100644
--- a/content/docs/fleet-ops/operations/service-rates/algorithm-rates.mdx
+++ b/content/docs/fleet-ops/operations/service-rates/algorithm-rates.mdx
@@ -4,8 +4,6 @@ sidebarTitle: Algorithm Rates
description: Use a math expression to compute service rates dynamically — combine distance, time, stops, parcels, and other variables into a single formula evaluated at quote time.
---
-# Algorithm-Based Service Rates
-
When `rate_calculation_method` is set to **`algo`** (or `algorithm`), the rate is computed by evaluating a math expression you supply. This unlocks pricing models that fixed brackets or per-meter rates can't express — for example "$3 base + $1.20/km, capped at $50" or "$0.05 per parcel-meter, plus $2 per extra stop".
The expression is stored on the rate's `algorithm` field as a string. At quote time, Fleet-Ops substitutes the live values for placeholders like `{distance_km}` and `{stops}`, evaluates the math, and uses the result as the service fee.
diff --git a/content/docs/fleet-ops/operations/service-rates/fixed-rate.mdx b/content/docs/fleet-ops/operations/service-rates/fixed-rate.mdx
index 113d52f6..efa8b5a3 100644
--- a/content/docs/fleet-ops/operations/service-rates/fixed-rate.mdx
+++ b/content/docs/fleet-ops/operations/service-rates/fixed-rate.mdx
@@ -4,8 +4,6 @@ sidebarTitle: Fixed Rate
description: Charge a flat fee per distance band — define the maximum distance you serve and Fleet-Ops generates one fee tier per unit, so you can price 0–1, 1–2, 2–3 km independently.
---
-# Fixed Rate
-
**Fixed Rate** prices an order from a table of **distance bands** — each band covers a 1-unit slice of distance and has its own flat fee. The band the order's distance falls into determines the service fee. (In the API this method is identified as `fixed_meter`; the legacy value `fixed_rate` also works.)
Use this when your pricing is **banded by distance** but doesn't scale linearly — for example "any delivery under 5 km is $5, anything under 10 km is $8, anything further is $12". The bands are whole-unit distance steps capped at the maximum distance you set.
diff --git a/content/docs/fleet-ops/operations/service-rates/multi-zone-distance.mdx b/content/docs/fleet-ops/operations/service-rates/multi-zone-distance.mdx
index 94fd6ea1..3cef6cfd 100644
--- a/content/docs/fleet-ops/operations/service-rates/multi-zone-distance.mdx
+++ b/content/docs/fleet-ops/operations/service-rates/multi-zone-distance.mdx
@@ -4,8 +4,6 @@ sidebarTitle: Multi-zone Distance
description: Charge different per-distance rates in different geographies — define a rate per zone or service area, set a fallback for unmatched segments, and Fleet-Ops splits the route across them at quote time.
---
-# Multi-zone Distance
-
**Multi-zone Distance** splits the route's distance across **geographic rules** — each rule covers a Zone or Service Area and has its own per-distance rate. The portion of the route inside each rule's geography is priced with that rule's rate; an optional **fallback rule** picks up any distance that falls outside every defined geography. (In the API this method is identified as `multi_zone_distance`.)
This unlocks pricing models like:
diff --git a/content/docs/fleet-ops/operations/service-rates/overview.mdx b/content/docs/fleet-ops/operations/service-rates/overview.mdx
index 1d2cb399..b1007924 100644
--- a/content/docs/fleet-ops/operations/service-rates/overview.mdx
+++ b/content/docs/fleet-ops/operations/service-rates/overview.mdx
@@ -3,8 +3,6 @@ title: Service Rates
description: Define pricing rules and rate structures used to calculate order costs — flat fees, distance-based, weight-based, zone pricing, and surcharges.
---
-# Service Rates
-
**Service Rates** define the pricing rules Fleet-Ops uses to calculate the cost of an order. Rates can be flat fees, distance-based, weight-based, or zone-based. They support surcharges for COD (cash on delivery), peak hours, and parcel size. When an order matches a service rate, Fleet-Ops generates a **Service Quote** with the calculated amount.

diff --git a/content/docs/fleet-ops/operations/service-rates/parcel.mdx b/content/docs/fleet-ops/operations/service-rates/parcel.mdx
index 22dd3f6e..cf7c56bf 100644
--- a/content/docs/fleet-ops/operations/service-rates/parcel.mdx
+++ b/content/docs/fleet-ops/operations/service-rates/parcel.mdx
@@ -4,8 +4,6 @@ sidebarTitle: Parcel Rate
description: Charge per parcel based on its size and weight — define tier thresholds (small, medium, large, x-large), and Fleet-Ops sums the right fee for every parcel in the order.
---
-# Parcel Rate
-
**Parcel Rate** scales the service fee with the **number and physical characteristics of the parcels** in the order. You define a tier table by size category — each tier has length, width, height, and weight thresholds, plus a fee — and every parcel on the order is matched against the table and charged the matching tier's fee. (In the API this method is identified as `parcel`.)
Use this for parcel and e-commerce delivery where pricing depends on physical attributes, not route distance. If you want to combine parcel pricing with distance, use [Algorithm](/docs/fleet-ops/operations/service-rates/algorithm-rates) with `{parcels}`, or place a parcel rate alongside a distance rate on different services.
diff --git a/content/docs/fleet-ops/operations/service-rates/per-drop.mdx b/content/docs/fleet-ops/operations/service-rates/per-drop.mdx
index 93da53d4..6df13a21 100644
--- a/content/docs/fleet-ops/operations/service-rates/per-drop.mdx
+++ b/content/docs/fleet-ops/operations/service-rates/per-drop.mdx
@@ -4,8 +4,6 @@ sidebarTitle: Per Drop-off
description: Price an order by the number of stops on the route. Define min/max ranges and a flat fee for each band — ideal for multi-stop courier and batch deliveries.
---
-# Per Drop-off
-
**Per Drop-off** sets the service fee by the **number of stops** on the order. You define a tier table — each tier is a range of stop counts with a flat fee — and the tier the order's stop count falls into is charged. (In the API this method is identified as `per_drop`.)
Use this for multi-stop courier work, batch deliveries, and any pricing model where each additional stop is what really drives cost. If you want distance-based pricing on top, layer this against an [Algorithm](/docs/fleet-ops/operations/service-rates/algorithm-rates) rate instead.
diff --git a/content/docs/fleet-ops/operations/service-rates/per-meter.mdx b/content/docs/fleet-ops/operations/service-rates/per-meter.mdx
index c427d8a0..8ef87247 100644
--- a/content/docs/fleet-ops/operations/service-rates/per-meter.mdx
+++ b/content/docs/fleet-ops/operations/service-rates/per-meter.mdx
@@ -4,8 +4,6 @@ sidebarTitle: Per Meter
description: Charge a flat rate per unit of distance — meters, kilometers, feet, yards, or miles. The simplest linear distance-based pricing model.
---
-# Per Meter
-
**Per Meter** scales the service fee **linearly with distance**. You set a fee per unit of distance (e.g. $0.80 per km), pick the unit, and Fleet-Ops multiplies it by the actual route distance at quote time. (In the API this method is identified as `per_meter`.)
Use this for taxi-style or urban-delivery pricing where every additional unit of distance adds a predictable, constant amount. If your pricing curve changes at certain distances, use [Fixed Rate](/docs/fleet-ops/operations/service-rates/fixed-rate) instead; if it needs to vary by region, use [Multi-zone Distance](/docs/fleet-ops/operations/service-rates/multi-zone-distance).
diff --git a/content/docs/fleet-ops/recipes/fuel-provider-integrations.mdx b/content/docs/fleet-ops/recipes/fuel-provider-integrations.mdx
index f51b6b5a..6d8084c8 100644
--- a/content/docs/fleet-ops/recipes/fuel-provider-integrations.mdx
+++ b/content/docs/fleet-ops/recipes/fuel-provider-integrations.mdx
@@ -4,8 +4,6 @@ sidebarTitle: Fuel Integrations
description: Register custom fuel card and fuel management integrations in Fleet-Ops without modifying Fleet-Ops core.
---
-# Fuel Integrations
-
Fleet-Ops fuel integrations connect external fuel card providers, station networks, onsite fuel management systems, and billing APIs to Fleet-Ops. PetroApp ships as the native example integration, and extensions can register additional providers through the same framework.
Fuel integrations are split into three records:
diff --git a/content/docs/fleet-ops/resources/contacts/overview.mdx b/content/docs/fleet-ops/resources/contacts/overview.mdx
index 242006e5..ff6aa8b6 100644
--- a/content/docs/fleet-ops/resources/contacts/overview.mdx
+++ b/content/docs/fleet-ops/resources/contacts/overview.mdx
@@ -3,8 +3,6 @@ title: Contacts
description: Manage the people and businesses your operation works with — customers, suppliers, and facilitators — with linked locations and custom fields.
---
-# Contacts
-
**Contacts** are the people and businesses your logistics operation interacts with. They serve as customers who receive deliveries, suppliers who provide pickups, and facilitators who coordinate operations. Contacts are linked to Places (their physical location) and can be assigned to orders in the customer or facilitator role.

diff --git a/content/docs/fleet-ops/resources/drivers/navigator-access.mdx b/content/docs/fleet-ops/resources/drivers/navigator-access.mdx
index e70bfc8b..8ef0772c 100644
--- a/content/docs/fleet-ops/resources/drivers/navigator-access.mdx
+++ b/content/docs/fleet-ops/resources/drivers/navigator-access.mdx
@@ -3,8 +3,6 @@ title: Navigator Access
description: Manage a driver's access to the Navigator app — login, device registration, permissions, and auth token management.
---
-# Navigator Access
-
**Navigator Access** covers how drivers authenticate into the Navigator app, how their device is registered, and how you manage their app access from the console.
## How Drivers Log In
diff --git a/content/docs/fleet-ops/resources/drivers/overview.mdx b/content/docs/fleet-ops/resources/drivers/overview.mdx
index 76d7a3f8..defdd9c7 100644
--- a/content/docs/fleet-ops/resources/drivers/overview.mdx
+++ b/content/docs/fleet-ops/resources/drivers/overview.mdx
@@ -3,8 +3,6 @@ title: Drivers
description: Create and manage driver profiles — assign vehicles, track real-time location, configure Navigator access, and set Orchestrator constraints.
---
-# Drivers
-
**Drivers** are the people who execute orders using the Navigator mobile app. Each driver record links to a Fleetbase user account and stores all the information needed for dispatch, real-time tracking, and Orchestrator assignment.

diff --git a/content/docs/fleet-ops/resources/drivers/shift-schedules.mdx b/content/docs/fleet-ops/resources/drivers/shift-schedules.mdx
index b5b4bd7c..fcc33aeb 100644
--- a/content/docs/fleet-ops/resources/drivers/shift-schedules.mdx
+++ b/content/docs/fleet-ops/resources/drivers/shift-schedules.mdx
@@ -3,8 +3,6 @@ title: Shift Schedules
description: View and manage an individual driver's shift schedule — set working hours, recurring patterns, and availability windows.
---
-# Driver Shift Schedules
-
Each driver can have a **shift schedule** that defines when they are available to work. Shift schedules appear in the Scheduler calendar and are used by the Orchestrator as time window constraints during order assignment.
## Viewing a Driver's Schedule
diff --git a/content/docs/fleet-ops/resources/fleets/overview.mdx b/content/docs/fleet-ops/resources/fleets/overview.mdx
index af60b501..73bfc756 100644
--- a/content/docs/fleet-ops/resources/fleets/overview.mdx
+++ b/content/docs/fleet-ops/resources/fleets/overview.mdx
@@ -3,8 +3,6 @@ title: Fleets
description: Organize drivers and vehicles into named fleets — group by zone, service type, or shift for structured dispatch and Orchestrator scoping.
---
-# Fleets
-
A **Fleet** is a logical grouping of drivers and vehicles. Fleets let you organize your operation by route, service area, service type, shift time, or any other dimension that makes sense for your business. The Orchestrator uses fleet membership to scope which drivers and vehicles are considered when allocating orders.

diff --git a/content/docs/fleet-ops/resources/fuel-reports/overview.mdx b/content/docs/fleet-ops/resources/fuel-reports/overview.mdx
index d1dc4f1d..8beb03c3 100644
--- a/content/docs/fleet-ops/resources/fuel-reports/overview.mdx
+++ b/content/docs/fleet-ops/resources/fuel-reports/overview.mdx
@@ -3,8 +3,6 @@ title: Fuel Reports
description: Record and monitor fleet fuel consumption — track volume, cost, odometer readings, and fuel-up locations for cost analysis and fraud detection.
---
-# Fuel Reports
-
**Fuel Reports** are records of fleet fuel consumption. Drivers submit reports when they fill up, and operators can log reports from the console. Each report captures the volume, cost, odometer reading, and location of the fuel transaction. Fuel reports are used for cost tracking, consumption analysis, and detecting anomalies.

diff --git a/content/docs/fleet-ops/resources/issues/overview.mdx b/content/docs/fleet-ops/resources/issues/overview.mdx
index f7525672..d6c5a608 100644
--- a/content/docs/fleet-ops/resources/issues/overview.mdx
+++ b/content/docs/fleet-ops/resources/issues/overview.mdx
@@ -3,8 +3,6 @@ title: Issues
description: Log, track, and resolve operational issues — vehicle faults, driver incidents, accidents, and delivery exceptions — with priority and status tracking.
---
-# Issues
-
**Issues** are operational incidents, faults, and exceptions that need to be tracked and resolved. Drivers can report issues from the Navigator app, and operators can log them from the console. Issues are linked to the driver, vehicle, or location involved and tracked through a resolution workflow.

diff --git a/content/docs/fleet-ops/resources/overview.mdx b/content/docs/fleet-ops/resources/overview.mdx
index 109f9502..c8cb6f57 100644
--- a/content/docs/fleet-ops/resources/overview.mdx
+++ b/content/docs/fleet-ops/resources/overview.mdx
@@ -3,8 +3,6 @@ title: Resources Overview
description: Manage the core resources that power your fleet operations — drivers, vehicles, fleets, vendors, contacts, and places.
---
-# Resources Overview
-
The **Resources** section of Fleet-Ops is where you manage the assets and entities your operations depend on. Resources are the building blocks the Orchestrator uses for assignment, the live map displays in real time, and the activity timeline references throughout an order's lifecycle.
## Resource Types
diff --git a/content/docs/fleet-ops/resources/places/overview.mdx b/content/docs/fleet-ops/resources/places/overview.mdx
index 821022a7..f21feb6f 100644
--- a/content/docs/fleet-ops/resources/places/overview.mdx
+++ b/content/docs/fleet-ops/resources/places/overview.mdx
@@ -3,8 +3,6 @@ title: Places
description: Create and manage a library of saved locations — pickup points, warehouses, hubs, and delivery addresses used across orders.
---
-# Places
-
**Places** are saved locations in Fleet-Ops — reusable addresses for pickup points, warehouses, distribution hubs, customer addresses, and any other location your operation regularly uses. When creating orders, you can select from your Places library instead of entering addresses each time.

diff --git a/content/docs/fleet-ops/resources/vehicles/capacity-and-payload.mdx b/content/docs/fleet-ops/resources/vehicles/capacity-and-payload.mdx
index 532127b0..e2676fdb 100644
--- a/content/docs/fleet-ops/resources/vehicles/capacity-and-payload.mdx
+++ b/content/docs/fleet-ops/resources/vehicles/capacity-and-payload.mdx
@@ -3,8 +3,6 @@ title: Capacity & Payload
description: Configure vehicle load capacity — weight and volume limits used by the Orchestrator to prevent overloading during batch order assignment.
---
-# Vehicle Capacity & Payload
-
Vehicle **capacity** settings define the maximum load a vehicle can carry. These values are used by the Orchestrator when allocating orders — it will not assign orders to a vehicle if doing so would exceed the vehicle's weight or volume capacity.
## Capacity Fields
diff --git a/content/docs/fleet-ops/resources/vehicles/overview.mdx b/content/docs/fleet-ops/resources/vehicles/overview.mdx
index 31d6ae95..e2626160 100644
--- a/content/docs/fleet-ops/resources/vehicles/overview.mdx
+++ b/content/docs/fleet-ops/resources/vehicles/overview.mdx
@@ -3,8 +3,6 @@ title: Vehicles
description: Register and manage your vehicle fleet — details, assignments, capacity, tracking, and maintenance history.
---
-# Vehicles
-
**Vehicles** are the fleet assets assigned to carry out orders. Each vehicle record stores physical details, capacity specifications, real-time location, and links to the driver, maintenance schedules, and connected devices (GPS, OBD-II, cameras, sensors).

diff --git a/content/docs/fleet-ops/resources/vehicles/tracking.mdx b/content/docs/fleet-ops/resources/vehicles/tracking.mdx
index 0e494849..ee526f9b 100644
--- a/content/docs/fleet-ops/resources/vehicles/tracking.mdx
+++ b/content/docs/fleet-ops/resources/vehicles/tracking.mdx
@@ -3,8 +3,6 @@ title: Vehicle Tracking
description: Monitor real-time vehicle position, view trip history, and replay historical routes from the vehicle detail panel.
---
-# Vehicle Tracking
-
Fleet-Ops tracks vehicle position in real time and stores a complete position history for every vehicle. Position data comes from two sources: the **Navigator app** (driver's phone GPS) and **telematics devices** (GPS modems installed in the vehicle).
## Real-Time Position
diff --git a/content/docs/fleet-ops/resources/vendors/integrated-vendors.mdx b/content/docs/fleet-ops/resources/vendors/integrated-vendors.mdx
index b2a118e1..3aaa8ffb 100644
--- a/content/docs/fleet-ops/resources/vendors/integrated-vendors.mdx
+++ b/content/docs/fleet-ops/resources/vendors/integrated-vendors.mdx
@@ -4,8 +4,6 @@ sidebarTitle: Integrated Vendors
description: Connect external logistics platforms (Lalamove and others) using the Integrated Vendor framework, and learn how to register your own provider.
---
-# Integrated Vendors
-
An **Integrated Vendor** is an external logistics platform — Lalamove, a courier network, a freight aggregator — that Fleet-Ops talks to via its API. When you assign an order to an integrated vendor, Fleet-Ops relays the order to the partner's platform, the partner dispatches their own driver, and status updates stream back via webhooks while the order's lifecycle continues to live inside Fleet-Ops.
This page covers configuring an integrated vendor in the console and the **framework** Fleet-Ops uses internally to add new providers — so you can wire up your own.
diff --git a/content/docs/fleet-ops/resources/vendors/overview.mdx b/content/docs/fleet-ops/resources/vendors/overview.mdx
index aa8796f8..4fef4b71 100644
--- a/content/docs/fleet-ops/resources/vendors/overview.mdx
+++ b/content/docs/fleet-ops/resources/vendors/overview.mdx
@@ -3,8 +3,6 @@ title: Vendors
description: Manage third-party carriers and service providers — assign drivers, configure integrations, and relay orders to partner logistics platforms.
---
-# Vendors
-
**Vendors** are third-party carriers or service providers in your logistics network. Unlike internal drivers and vehicles, a vendor represents an external company that provides their own drivers and fleet. Orders can be assigned to a vendor, who then dispatches using their own resources.

diff --git a/content/docs/fleet-ops/settings/avatars.mdx b/content/docs/fleet-ops/settings/avatars.mdx
index f3104287..d4817dd2 100644
--- a/content/docs/fleet-ops/settings/avatars.mdx
+++ b/content/docs/fleet-ops/settings/avatars.mdx
@@ -4,8 +4,6 @@ sidebarTitle: Avatars
description: Manage the avatar image library used for vehicles, places, and drivers across the Fleet-Ops console and live map.
---
-# Avatar Settings
-
**Avatars** are the icons and images Fleet-Ops uses to identify vehicles, places, and drivers in the console and on the live map. The Avatar Manager is a centralised library of those images organised by **category** — so when you assign an avatar on a driver, vehicle, or place record, you pick from the correct category's library rather than re-uploading per resource.
Navigate to **Fleet-Ops → Settings → Avatars**.
diff --git a/content/docs/fleet-ops/settings/custom-fields.mdx b/content/docs/fleet-ops/settings/custom-fields.mdx
index de360a74..fd9d7353 100644
--- a/content/docs/fleet-ops/settings/custom-fields.mdx
+++ b/content/docs/fleet-ops/settings/custom-fields.mdx
@@ -4,8 +4,6 @@ sidebarTitle: Custom Fields
description: Define additional structured fields for any Fleet-Ops resource — drivers, vehicles, contacts, vendors, places, entities, fleets, issues, and fuel reports.
---
-# Custom Field Settings
-
**Custom Fields** let you attach additional structured data to Fleet-Ops resources without building an extension. Fields are defined in the Custom Fields Manager and rendered inline on the corresponding resource detail view.
Navigate to **Fleet-Ops → Settings → Custom Fields**.
diff --git a/content/docs/fleet-ops/settings/map.mdx b/content/docs/fleet-ops/settings/map.mdx
index 8d191ea1..7e814d5f 100644
--- a/content/docs/fleet-ops/settings/map.mdx
+++ b/content/docs/fleet-ops/settings/map.mdx
@@ -4,8 +4,6 @@ sidebarTitle: Map
description: Choose the map tile provider Fleet-Ops uses for the live map and route overlays.
---
-# Map Settings
-
**Map Settings** are intentionally minimal in Fleet-Ops — the only thing you configure here is which **map provider** renders the tiles for the live map. Everything else (default viewport, marker behaviour, clustering, theme) is driven by the active provider's defaults and the page-level Leaflet options used by Fleet-Ops components.
Navigate to **Fleet-Ops → Settings → Map**.
diff --git a/content/docs/fleet-ops/settings/navigator-app.mdx b/content/docs/fleet-ops/settings/navigator-app.mdx
index c202f40f..213a997d 100644
--- a/content/docs/fleet-ops/settings/navigator-app.mdx
+++ b/content/docs/fleet-ops/settings/navigator-app.mdx
@@ -4,8 +4,6 @@ sidebarTitle: Navigator App
description: Configure Navigator app behaviour — entity-field editing per Order Configuration and driver self-onboarding from the app.
---
-# Navigator App Settings
-
**Navigator App Settings** control two operation-specific behaviours of the Navigator driver mobile app: which entity fields drivers are allowed to edit per Order Configuration, and whether drivers can onboard themselves from the app.
Navigate to **Fleet-Ops → Settings → Navigator App**.
diff --git a/content/docs/fleet-ops/settings/notifications.mdx b/content/docs/fleet-ops/settings/notifications.mdx
index 50ce0adb..26fd555e 100644
--- a/content/docs/fleet-ops/settings/notifications.mdx
+++ b/content/docs/fleet-ops/settings/notifications.mdx
@@ -4,8 +4,6 @@ sidebarTitle: Notifications
description: Pick who receives each Fleet-Ops notification — drivers, customers, operators, vendors, or any registered notifiable.
---
-# Notification Settings
-
**Notification Settings** answer one question per registered notification: *who should receive it?* For each notification that Fleet-Ops (or an installed extension) has registered with the platform, this page renders a single multi-select where you pick the **notifiables** — the parties who get the alert when that notification fires.
Channels (SMS / email / push), message templates, and trigger conditions live elsewhere:
diff --git a/content/docs/fleet-ops/settings/orchestrator.mdx b/content/docs/fleet-ops/settings/orchestrator.mdx
index f302252a..5d2da788 100644
--- a/content/docs/fleet-ops/settings/orchestrator.mdx
+++ b/content/docs/fleet-ops/settings/orchestrator.mdx
@@ -4,8 +4,6 @@ sidebarTitle: Orchestrator
description: Configure the default Orchestrator engine, automatic allocation triggers, global allocation constraints, and order card field display.
---
-# Orchestrator Settings
-
**Orchestrator Settings** control the defaults for the [Orchestrator](/docs/fleet-ops/operations/orchestrator/overview) — which engine new phases use by default, whether new orders are allocated automatically, and the global constraints that apply across every Orchestrator run.
Navigate to **Fleet-Ops → Settings → Orchestrator**.
diff --git a/content/docs/fleet-ops/settings/payments.mdx b/content/docs/fleet-ops/settings/payments.mdx
index d60d0ada..c0a44340 100644
--- a/content/docs/fleet-ops/settings/payments.mdx
+++ b/content/docs/fleet-ops/settings/payments.mdx
@@ -4,8 +4,6 @@ sidebarTitle: Payments
description: Connect a Stripe Connect account so Fleet-Ops can charge customers for service quotes and surface settled transactions in the console.
---
-# Payment Settings
-
**Payment Settings** in Fleet-Ops manages a single thing: connecting your organisation to Stripe via **Stripe Connect**. Once connected, Fleet-Ops can charge customers for service quotes, surface every settled transaction in the payments table, and aggregate totals by currency. There are no separate Stripe API key fields, currency selectors, or capture-mode toggles — the Stripe account itself owns those settings.
Navigate to **Fleet-Ops → Settings → Payments**.
diff --git a/content/docs/fleet-ops/settings/routing.mdx b/content/docs/fleet-ops/settings/routing.mdx
index fb2a468d..6737831d 100644
--- a/content/docs/fleet-ops/settings/routing.mdx
+++ b/content/docs/fleet-ops/settings/routing.mdx
@@ -4,8 +4,6 @@ sidebarTitle: Routing
description: Pick which routing service renders Fleet-Ops routes, which engine optimises stop order, and the distance unit used in the UI.
---
-# Routing Settings
-
**Routing Settings** is a small page with three selections that drive how Fleet-Ops calculates and renders routes. Two of the three sit on opposite sides of an important distinction:
| Concept | What it does |
diff --git a/content/docs/fleet-ops/settings/scheduling.mdx b/content/docs/fleet-ops/settings/scheduling.mdx
index fc56406b..c446421b 100644
--- a/content/docs/fleet-ops/settings/scheduling.mdx
+++ b/content/docs/fleet-ops/settings/scheduling.mdx
@@ -4,8 +4,6 @@ sidebarTitle: Scheduling
description: Set the materialisation horizon, default shift duration, HOS limits, scheduling behaviours, and reusable schedule templates that drive the Scheduler and Orchestrator.
---
-# Scheduling Settings
-
**Scheduling Settings** controls global defaults for the [Scheduler](/docs/fleet-ops/operations/scheduler/overview) — how far ahead shifts are materialised, default shift duration, Hours-of-Service (HOS) limits, behaviour toggles, and a library of reusable schedule templates.
Navigate to **Fleet-Ops → Settings → Scheduling**.
diff --git a/content/docs/ledger/accounting/chart-of-accounts.mdx b/content/docs/ledger/accounting/chart-of-accounts.mdx
index b1dcb1ed..78d2542a 100644
--- a/content/docs/ledger/accounting/chart-of-accounts.mdx
+++ b/content/docs/ledger/accounting/chart-of-accounts.mdx
@@ -3,8 +3,6 @@ title: Chart of Accounts
description: Define and manage your chart of accounts — the structured list of accounts used to record all financial transactions.
---
-# Chart of Accounts
-
The **Chart of Accounts** is the structured list of all accounts used by your organization to record financial transactions. It is the foundation of your accounting system — every financial event is categorized into one of these accounts.
Navigate to **Ledger → Accounting → Accounts**.
diff --git a/content/docs/ledger/accounting/general-ledger.mdx b/content/docs/ledger/accounting/general-ledger.mdx
index 524fa4a4..330e47ca 100644
--- a/content/docs/ledger/accounting/general-ledger.mdx
+++ b/content/docs/ledger/accounting/general-ledger.mdx
@@ -3,8 +3,6 @@ title: General Ledger
description: View the master record of all journal entries — a complete chronological history of every financial transaction.
---
-# General Ledger
-
The **General Ledger** is the master record of all journal entries across your organization. It provides a complete, chronological view of every financial event — debits, credits, amounts, and running balances.
Navigate to **Ledger → Accounting → General Ledger**.
diff --git a/content/docs/ledger/accounting/journal-entries.mdx b/content/docs/ledger/accounting/journal-entries.mdx
index 1050aef6..f43ed61d 100644
--- a/content/docs/ledger/accounting/journal-entries.mdx
+++ b/content/docs/ledger/accounting/journal-entries.mdx
@@ -3,8 +3,6 @@ title: Journal Entries
description: View automated journal entries and create manual entries for accounting adjustments and corrections.
---
-# Journal Entries
-
A **Journal Entry** is the atomic record of a financial event. Most entries are written automatically by Ledger as the system processes invoice payments, gateway charges, wallet operations, and Storefront sales. You can also create manual entries for adjustments and corrections.
Navigate to **Ledger → Accounting → Journal**.
diff --git a/content/docs/ledger/accounting/overview.mdx b/content/docs/ledger/accounting/overview.mdx
index 00112670..24a96ac8 100644
--- a/content/docs/ledger/accounting/overview.mdx
+++ b/content/docs/ledger/accounting/overview.mdx
@@ -3,8 +3,6 @@ title: Accounting
description: Manage your chart of accounts, general ledger, and journal entries — the foundation of Ledger's double-entry bookkeeping system.
---
-# Accounting
-
The **Accounting** module provides the double-entry bookkeeping foundation of Ledger. It manages the chart of accounts, records all financial activity as journal entries, and aggregates them in the general ledger.
Navigate to **Ledger → Accounting** to access accounting features.
diff --git a/content/docs/ledger/billing/invoice-templates.mdx b/content/docs/ledger/billing/invoice-templates.mdx
index 8ae36913..284d6563 100644
--- a/content/docs/ledger/billing/invoice-templates.mdx
+++ b/content/docs/ledger/billing/invoice-templates.mdx
@@ -3,8 +3,6 @@ title: Invoice Templates
description: Design reusable invoice templates with variable interpolation — invoice number, totals, customer details, and payment references.
---
-# Invoice Templates
-
**Invoice Templates** control how invoices are rendered for PDF and the public online portal. Ledger's templates use Fleetbase's core `Template` model with the `invoice` context — they are HTML bodies with variable interpolation, edited via the **Template Builder** component.
Navigate to **Ledger → Billing → Invoice Templates**.
diff --git a/content/docs/ledger/billing/invoices.mdx b/content/docs/ledger/billing/invoices.mdx
index 875597d6..4c4c1686 100644
--- a/content/docs/ledger/billing/invoices.mdx
+++ b/content/docs/ledger/billing/invoices.mdx
@@ -3,8 +3,6 @@ title: Invoices
description: Create and manage invoices — line items, payments, public payment URL, PDF rendering, and Fleet-Ops integration.
---
-# Invoices
-
An **Invoice** is a formal request for payment. It details the products or services provided, quantities, prices, and the total amount due. Invoices have a complete lifecycle from `draft` to `paid` with revenue recognition at each step.
Navigate to **Ledger → Billing → Invoices**.
diff --git a/content/docs/ledger/billing/overview.mdx b/content/docs/ledger/billing/overview.mdx
index 2a670d93..edabc2d9 100644
--- a/content/docs/ledger/billing/overview.mdx
+++ b/content/docs/ledger/billing/overview.mdx
@@ -3,8 +3,6 @@ title: Billing & Invoicing
description: Create, send, and collect payment on invoices — manually or automatically from Fleet-Ops orders.
---
-# Billing & Invoicing
-
The **Billing** module handles invoice creation, delivery, and payment collection. Invoices are typed payment requests with a lifecycle from `draft` through `paid`. Customers pay invoices online via a public URL (no login required).
Navigate to **Ledger → Billing** to access invoices and templates.
diff --git a/content/docs/ledger/getting-started/core-concepts.mdx b/content/docs/ledger/getting-started/core-concepts.mdx
index 14f61315..3fec1b19 100644
--- a/content/docs/ledger/getting-started/core-concepts.mdx
+++ b/content/docs/ledger/getting-started/core-concepts.mdx
@@ -3,8 +3,6 @@ title: Core Concepts
description: The foundational concepts of Ledger — double-entry bookkeeping, accounts, journal entries, wallets, invoices, transactions, and how it all fits together.
---
-# Core Concepts
-
Ledger implements proper double-entry bookkeeping. Understanding the core accounting model helps you use the system correctly and interpret your financial reports.
## The Accounting Equation
diff --git a/content/docs/ledger/getting-started/quickstart.mdx b/content/docs/ledger/getting-started/quickstart.mdx
index 90215683..c78dafb2 100644
--- a/content/docs/ledger/getting-started/quickstart.mdx
+++ b/content/docs/ledger/getting-started/quickstart.mdx
@@ -3,8 +3,6 @@ title: Quickstart
description: Get up and running with Ledger — review your default chart of accounts, set invoicing defaults, configure a payment gateway, and create your first invoice.
---
-# Quickstart
-
This guide walks you through reviewing your seeded chart of accounts, setting invoicing defaults, configuring a payment gateway, and creating and recording payment on your first invoice.
## Step 1 — Review Your Chart of Accounts
diff --git a/content/docs/ledger/integrations/fleet-ops.mdx b/content/docs/ledger/integrations/fleet-ops.mdx
index 1a26d600..14eca76b 100644
--- a/content/docs/ledger/integrations/fleet-ops.mdx
+++ b/content/docs/ledger/integrations/fleet-ops.mdx
@@ -3,8 +3,6 @@ title: Fleet-Ops Integration
description: Ledger automatically creates draft invoices for Fleet-Ops orders so you don't have to bill each order by hand.
---
-# Fleet-Ops Integration
-
Ledger and Fleet-Ops are wired together out of the box. The moment a Fleet-Ops order has its pricing locked in, Ledger automatically creates a **draft invoice** for that order and recognizes the revenue in your books.
You don't need to copy line items by hand, type in customer details, or remember which orders haven't been invoiced yet — it all happens for you.
diff --git a/content/docs/ledger/integrations/storefront.mdx b/content/docs/ledger/integrations/storefront.mdx
index ba98b148..6e0b3b1a 100644
--- a/content/docs/ledger/integrations/storefront.mdx
+++ b/content/docs/ledger/integrations/storefront.mdx
@@ -3,8 +3,6 @@ title: Storefront Integration
description: Storefront orders record the sale directly in your books — no invoice needed, because the customer has already paid at checkout.
---
-# Storefront Integration
-
Storefront and Ledger work together a little differently than Fleet-Ops and Ledger.
A Storefront order is a **point-of-sale** transaction — the customer pays at checkout, before the order is even created. There's nothing to bill them for after the fact. So instead of generating an invoice, Ledger records the sale **directly in your books** the moment the order completes.
diff --git a/content/docs/ledger/payments/gateways/cash.mdx b/content/docs/ledger/payments/gateways/cash.mdx
index 170f20af..4b61034b 100644
--- a/content/docs/ledger/payments/gateways/cash.mdx
+++ b/content/docs/ledger/payments/gateways/cash.mdx
@@ -3,8 +3,6 @@ title: Cash
description: Configure the Cash gateway for manual and offline payment collection in Ledger.
---
-# Cash
-
The Cash gateway records manual or offline payment collection without contacting an external processor. Use it when an operator collects cash, bank transfer confirmation, cheque payment, or another offline receipt and needs Ledger to record the invoice payment.
## Configuration
diff --git a/content/docs/ledger/payments/gateways/gnu-taler.mdx b/content/docs/ledger/payments/gateways/gnu-taler.mdx
index 6ed2b085..036be557 100644
--- a/content/docs/ledger/payments/gateways/gnu-taler.mdx
+++ b/content/docs/ledger/payments/gateways/gnu-taler.mdx
@@ -3,8 +3,6 @@ title: GNU Taler
description: Configure the GNU Taler payment gateway for wallet payments, tenant-safe webhooks, refunds, diagnostics, and settlement checks.
---
-# GNU Taler
-
GNU Taler is a wallet-based digital cash gateway for Ledger. Customers pay an invoice from a Taler wallet, the Taler Merchant Backend sends Ledger a tenant-scoped webhook, and Ledger updates the invoice, gateway transaction log, refund state, and settlement metadata.
Use GNU Taler when you need privacy-preserving wallet payments, a deployed Taler Merchant Backend, and auditable payment/refund records inside Ledger.
diff --git a/content/docs/ledger/payments/gateways/overview.mdx b/content/docs/ledger/payments/gateways/overview.mdx
index 8dcd5fde..a31f5aae 100644
--- a/content/docs/ledger/payments/gateways/overview.mdx
+++ b/content/docs/ledger/payments/gateways/overview.mdx
@@ -3,8 +3,6 @@ title: Payment Gateways
description: Configure GNU Taler, Stripe, Cash, and QPay payment gateways in Ledger.
---
-# Payment Gateways
-
**Payment Gateways** connect Ledger to the services that collect, confirm, refund, and audit payments. Ledger includes drivers for **GNU Taler**, **Stripe**, **Cash**, and **QPay**, and exposes `PaymentGatewayManager::extend()` for registering custom drivers.
Navigate to **Ledger -> Payments -> Gateways**.
diff --git a/content/docs/ledger/payments/gateways/qpay.mdx b/content/docs/ledger/payments/gateways/qpay.mdx
index 09084168..1572259b 100644
--- a/content/docs/ledger/payments/gateways/qpay.mdx
+++ b/content/docs/ledger/payments/gateways/qpay.mdx
@@ -3,8 +3,6 @@ title: QPay
description: Configure QPay for Mongolian bank invoice payments in Ledger.
---
-# QPay
-
QPay is Ledger's invoice-based gateway for Mongolian bank payments. Use it when customers pay through supported Mongolian bank applications and Ledger needs to track the invoice payment through the gateway transaction log.
## Configuration
diff --git a/content/docs/ledger/payments/gateways/stripe.mdx b/content/docs/ledger/payments/gateways/stripe.mdx
index f2142a54..86535df3 100644
--- a/content/docs/ledger/payments/gateways/stripe.mdx
+++ b/content/docs/ledger/payments/gateways/stripe.mdx
@@ -3,8 +3,6 @@ title: Stripe
description: Configure Stripe for card payments, digital wallets, webhooks, refunds, and hosted checkout in Ledger.
---
-# Stripe
-
Stripe is Ledger's card and digital-wallet gateway for global payment collection. Use it for hosted checkout, saved payment methods, card refunds, setup intents, and recurring payment workflows.
## Configuration
diff --git a/content/docs/ledger/payments/overview.mdx b/content/docs/ledger/payments/overview.mdx
index cc496cb5..9320eff2 100644
--- a/content/docs/ledger/payments/overview.mdx
+++ b/content/docs/ledger/payments/overview.mdx
@@ -3,8 +3,6 @@ title: Payments & Transactions
description: Process digital payments, manage digital wallets, and track every financial transaction across your Fleetbase ecosystem.
---
-# Payments & Transactions
-
The **Payments** module covers three interconnected areas: payment gateways for processing real money, wallets for tracking internal balances, and transactions as the immutable audit trail of every wallet movement.
Navigate to **Ledger → Payments** to access gateways, wallets, and transactions.
diff --git a/content/docs/ledger/payments/transactions.mdx b/content/docs/ledger/payments/transactions.mdx
index 27d1a418..8b531638 100644
--- a/content/docs/ledger/payments/transactions.mdx
+++ b/content/docs/ledger/payments/transactions.mdx
@@ -3,8 +3,6 @@ title: Transactions
description: View the immutable audit trail of every wallet movement — filter by type, status, direction, and date range.
---
-# Transactions
-
A **Transaction** is the immutable record of money moving relative to a wallet. Transactions are never edited or deleted — they are the audit trail for every financial event in your system.
Navigate to **Ledger → Payments → Transactions**.
diff --git a/content/docs/ledger/payments/wallets.mdx b/content/docs/ledger/payments/wallets.mdx
index e29f173e..13effe29 100644
--- a/content/docs/ledger/payments/wallets.mdx
+++ b/content/docs/ledger/payments/wallets.mdx
@@ -3,8 +3,6 @@ title: Wallets
description: Manage digital wallets for drivers, customers, your company, and individual users — credit, top-up, transfer, payout, freeze, and recalculate.
---
-# Wallets
-
A **Wallet** is a digital balance account within Ledger. Wallets track money owed to or held for a specific entity — a driver's earnings, a customer's prepaid credit, your organization's operating account, or an individual user's personal balance.
Navigate to **Ledger → Payments → Wallets**.
diff --git a/content/docs/ledger/recipes/payment-gateway-driver.mdx b/content/docs/ledger/recipes/payment-gateway-driver.mdx
index 5b846d46..984fd505 100644
--- a/content/docs/ledger/recipes/payment-gateway-driver.mdx
+++ b/content/docs/ledger/recipes/payment-gateway-driver.mdx
@@ -3,8 +3,6 @@ title: Building a Payment Gateway Driver
description: A complete walkthrough for adding a custom payment gateway to Ledger — interface, DTOs, webhook handling, registration, and testing.
---
-# Building a Payment Gateway Driver
-
This recipe is a developer-facing walkthrough for adding a custom payment gateway to Ledger. By the end you'll have a driver that:
- Renders its own configuration form in **Ledger → Settings → Gateways**
diff --git a/content/docs/ledger/reports/ar-aging.mdx b/content/docs/ledger/reports/ar-aging.mdx
index f1944c75..518fd7ec 100644
--- a/content/docs/ledger/reports/ar-aging.mdx
+++ b/content/docs/ledger/reports/ar-aging.mdx
@@ -3,8 +3,6 @@ title: AR Aging Report
description: Monitor outstanding receivables — invoices bucketed by how many days overdue to prioritize collections.
---
-# AR Aging Report
-
The **Accounts Receivable Aging** report categorizes all unpaid invoices by how long they have been outstanding. It helps you identify which customers are overdue and by how much, so you can prioritize collections and manage cash flow.
Navigate to **Ledger → Reports → AR Aging**.
diff --git a/content/docs/ledger/reports/balance-sheet.mdx b/content/docs/ledger/reports/balance-sheet.mdx
index 8f877b65..76692293 100644
--- a/content/docs/ledger/reports/balance-sheet.mdx
+++ b/content/docs/ledger/reports/balance-sheet.mdx
@@ -3,8 +3,6 @@ title: Balance Sheet
description: View your organization's financial position — assets, liabilities, and equity at a specific point in time.
---
-# Balance Sheet
-
The **Balance Sheet** is a snapshot of your organization's financial position at a specific date. It answers the question: what does your organization own (assets) and what does it owe (liabilities and equity)?
Navigate to **Ledger → Reports → Balance Sheet**.
diff --git a/content/docs/ledger/reports/cash-flow.mdx b/content/docs/ledger/reports/cash-flow.mdx
index d768e477..47eef387 100644
--- a/content/docs/ledger/reports/cash-flow.mdx
+++ b/content/docs/ledger/reports/cash-flow.mdx
@@ -3,8 +3,6 @@ title: Cash Flow Statement
description: Track cash inflows and outflows — operating, financing, and investing activities — derived from movement on the Cash account.
---
-# Cash Flow Statement
-
The **Cash Flow Statement** tracks the actual movement of cash into and out of your organization over a period. Unlike the income statement (which uses accrual accounting), the cash flow statement shows real cash movements — it is computed from journal entries that touch the Cash account (`CASH-DEFAULT`).
Navigate to **Ledger → Reports → Cash Flow**.
diff --git a/content/docs/ledger/reports/income-statement.mdx b/content/docs/ledger/reports/income-statement.mdx
index a4c8400b..f0d0ca25 100644
--- a/content/docs/ledger/reports/income-statement.mdx
+++ b/content/docs/ledger/reports/income-statement.mdx
@@ -3,8 +3,6 @@ title: Income Statement
description: Analyze revenue, expenses, and net income — your profit and loss statement for a selected period.
---
-# Income Statement
-
The **Income Statement** (also called a Profit & Loss or P&L statement) summarizes your revenue, costs, and expenses during a specific period. It shows whether your organization made a profit or loss.
Navigate to **Ledger → Reports → Income Statement**.
diff --git a/content/docs/ledger/reports/overview.mdx b/content/docs/ledger/reports/overview.mdx
index 409bc8b6..90ed85ca 100644
--- a/content/docs/ledger/reports/overview.mdx
+++ b/content/docs/ledger/reports/overview.mdx
@@ -3,8 +3,6 @@ title: Financial Reports
description: Generate standard financial reports — balance sheet, income statement, cash flow, trial balance, AR aging, and wallet summary.
---
-# Financial Reports
-
The **Reports** module generates standard financial statements from your Ledger data. Reports are computed on-the-fly from posted journal entries — always current and accurate. No pre-computation required.
Navigate to **Ledger → Reports** to access all reports.
diff --git a/content/docs/ledger/reports/trial-balance.mdx b/content/docs/ledger/reports/trial-balance.mdx
index f84f1077..b642d689 100644
--- a/content/docs/ledger/reports/trial-balance.mdx
+++ b/content/docs/ledger/reports/trial-balance.mdx
@@ -3,8 +3,6 @@ title: Trial Balance
description: Verify your books — a point-in-time list of all accounts with their total debits and credits confirming they balance.
---
-# Trial Balance
-
The **Trial Balance** lists all accounts in your chart of accounts with their total debit and credit activity as of a specific date. Its primary purpose is to verify that total debits equal total credits — confirming that every journal entry was recorded correctly.
Navigate to **Ledger → Reports → Trial Balance**.
diff --git a/content/docs/ledger/reports/wallet-summary.mdx b/content/docs/ledger/reports/wallet-summary.mdx
index e4549d57..94d2ce8b 100644
--- a/content/docs/ledger/reports/wallet-summary.mdx
+++ b/content/docs/ledger/reports/wallet-summary.mdx
@@ -3,8 +3,6 @@ title: Wallet Summary
description: Get an overview of all wallet balances — counts by type and currency, period credits and debits, and the top 10 wallets by balance.
---
-# Wallet Summary
-
The **Wallet Summary** report provides an analytical overview of all digital wallets in your Fleetbase ecosystem — wallet counts by subject type and currency, credit and debit totals for the selected period, and the top wallets by current balance.
Navigate to **Ledger → Reports → Wallet Summary**.
diff --git a/content/docs/ledger/settings/overview.mdx b/content/docs/ledger/settings/overview.mdx
index d0de35ca..d8764377 100644
--- a/content/docs/ledger/settings/overview.mdx
+++ b/content/docs/ledger/settings/overview.mdx
@@ -3,8 +3,6 @@ title: Settings
description: Configure organization-wide defaults — invoice prefix, payment terms, default gateway, default template, fiscal year, and base currency.
---
-# Settings
-
Ledger exposes three settings groups under **Ledger → Settings**:
| Group | Purpose |
diff --git a/content/docs/pallet/audits/cycle-counts.mdx b/content/docs/pallet/audits/cycle-counts.mdx
index 5285f839..2417abda 100644
--- a/content/docs/pallet/audits/cycle-counts.mdx
+++ b/content/docs/pallet/audits/cycle-counts.mdx
@@ -3,8 +3,6 @@ title: Cycle Counts
description: Run cycle counts to verify physical stock levels against system records without a full stocktake.
---
-# Cycle Counts
-
Run cycle counts to verify physical stock levels against system records without a full stocktake.
> This page is coming soon. Content is actively being developed.
diff --git a/content/docs/pallet/audits/overview.mdx b/content/docs/pallet/audits/overview.mdx
index d77cad45..0cabe6ff 100644
--- a/content/docs/pallet/audits/overview.mdx
+++ b/content/docs/pallet/audits/overview.mdx
@@ -3,15 +3,13 @@ title: Audits & Cycle Counts
description: Maintain inventory accuracy with cycle counts and a full audit trail of all stock movements.
---
-# Audits & Cycle Counts
-
Maintaining accurate inventory records is critical for any warehouse operation. If your digital records don't match your physical stock, you risk overselling products or failing to fulfill orders.
The **Audits** module in Pallet provides the tools necessary to verify your inventory levels and maintain a complete history of all stock movements.
## The Audit Trail
-Pallet automatically maintains a comprehensive audit trail for every item in your [Inventory](/docs/pallet/inventory).
+Pallet automatically maintains a comprehensive audit trail for every item in your [Inventory](/docs/pallet/inventory/overview).
Every time a stock level changes, Pallet records:
- **What** changed (the specific Product and quantity).
@@ -32,7 +30,7 @@ Cycle counting allows you to continuously verify your inventory accuracy without
1. Navigate to **Pallet** > **Audits** > **Cycle Counts** in the Fleetbase Console.
2. Click **New Cycle Count**.
-3. Select the specific [Warehouse](/docs/pallet/warehouses) and the specific area (e.g., a single Zone or Aisle) you want to audit.
+3. Select the specific [Warehouse](/docs/pallet/warehouses/overview) and the specific area (e.g., a single Zone or Aisle) you want to audit.
4. Pallet generates a list of all Products that are *supposed* to be in that area, along with their expected quantities.
5. A warehouse worker physically counts the items in the designated area and enters the actual quantities into Pallet.
6. Pallet compares the actual quantities against the expected quantities.
diff --git a/content/docs/pallet/fulfillment/overview.mdx b/content/docs/pallet/fulfillment/overview.mdx
index 68d157df..ecabc29f 100644
--- a/content/docs/pallet/fulfillment/overview.mdx
+++ b/content/docs/pallet/fulfillment/overview.mdx
@@ -3,9 +3,7 @@ title: Order Fulfillment
description: Manage the full inbound and outbound order fulfillment lifecycle within Pallet.
---
-# Order Fulfillment
-
-The **Fulfillment** module in Pallet handles the movement of goods into and out of your [Warehouses](/docs/pallet/warehouses).
+The **Fulfillment** module in Pallet handles the movement of goods into and out of your [Warehouses](/docs/pallet/warehouses/overview).
It provides the tools necessary to manage both inbound stock (receiving goods from suppliers) and outbound stock (picking and packing orders for customers).
@@ -15,10 +13,10 @@ Inbound fulfillment is the process of receiving new inventory into a warehouse.
This process is typically driven by a **[Purchase Order](/docs/pallet/fulfillment/purchase-orders)**.
-1. You create a Purchase Order to request goods from a [Supplier](/docs/pallet/suppliers).
+1. You create a Purchase Order to request goods from a [Supplier](/docs/pallet/suppliers/overview).
2. When the goods arrive at the warehouse, a worker uses Pallet to "Receive" the Purchase Order.
3. The worker verifies the quantities received against the quantities ordered.
-4. Pallet automatically updates the [Inventory](/docs/pallet/inventory) levels, adding the new stock to the designated receiving [Bin](/docs/pallet/warehouses/zones-aisles-racks-bins).
+4. Pallet automatically updates the [Inventory](/docs/pallet/inventory/overview) levels, adding the new stock to the designated receiving [Bin](/docs/pallet/warehouses/zones-aisles-racks-bins).
5. The stock can then be transferred from the receiving dock to its final storage location.
## Outbound Fulfillment (Shipping)
@@ -32,7 +30,7 @@ If you are using [Storefront](/docs/storefront), a Sales Order is automatically
The outbound fulfillment process involves several steps:
### 1. Order Allocation
-When a Sales Order is created, Pallet checks the current [Inventory](/docs/pallet/inventory) levels. If sufficient stock is available, Pallet "allocates" the stock to the order. This prevents the same item from being sold twice.
+When a Sales Order is created, Pallet checks the current [Inventory](/docs/pallet/inventory/overview) levels. If sufficient stock is available, Pallet "allocates" the stock to the order. This prevents the same item from being sold twice.
### 2. [Pick Lists](/docs/pallet/fulfillment/pick-lists)
Pallet generates a Pick List for the warehouse workers. The Pick List details exactly which items need to be picked, and crucially, *where* they are located (Zone, Aisle, Rack, Bin).
diff --git a/content/docs/pallet/fulfillment/pick-lists.mdx b/content/docs/pallet/fulfillment/pick-lists.mdx
index cb1e029a..616e26c8 100644
--- a/content/docs/pallet/fulfillment/pick-lists.mdx
+++ b/content/docs/pallet/fulfillment/pick-lists.mdx
@@ -3,8 +3,6 @@ title: Pick Lists
description: Generate pick lists for warehouse staff to efficiently collect items for fulfillment.
---
-# Pick Lists
-
Generate pick lists for warehouse staff to efficiently collect items for fulfillment.
> This page is coming soon. Content is actively being developed.
diff --git a/content/docs/pallet/fulfillment/purchase-orders.mdx b/content/docs/pallet/fulfillment/purchase-orders.mdx
index 31d5f128..2640739a 100644
--- a/content/docs/pallet/fulfillment/purchase-orders.mdx
+++ b/content/docs/pallet/fulfillment/purchase-orders.mdx
@@ -3,8 +3,6 @@ title: Purchase Orders
description: Create and manage purchase orders for restocking inventory from suppliers.
---
-# Purchase Orders
-
Create and manage purchase orders for restocking inventory from suppliers.
> This page is coming soon. Content is actively being developed.
diff --git a/content/docs/pallet/fulfillment/sales-orders.mdx b/content/docs/pallet/fulfillment/sales-orders.mdx
index e961675f..135dedcd 100644
--- a/content/docs/pallet/fulfillment/sales-orders.mdx
+++ b/content/docs/pallet/fulfillment/sales-orders.mdx
@@ -3,8 +3,6 @@ title: Sales Orders
description: Process and fulfill outbound sales orders, tracking items from pick to ship.
---
-# Sales Orders
-
Process and fulfill outbound sales orders, tracking items from pick to ship.
> This page is coming soon. Content is actively being developed.
diff --git a/content/docs/pallet/fulfillment/waves-and-batches.mdx b/content/docs/pallet/fulfillment/waves-and-batches.mdx
index 1d4c65f3..c261af03 100644
--- a/content/docs/pallet/fulfillment/waves-and-batches.mdx
+++ b/content/docs/pallet/fulfillment/waves-and-batches.mdx
@@ -3,8 +3,6 @@ title: Waves & Batches
description: Group pick lists into waves and batches for optimized warehouse picking operations.
---
-# Waves & Batches
-
Group pick lists into waves and batches for optimized warehouse picking operations.
> This page is coming soon. Content is actively being developed.
diff --git a/content/docs/pallet/getting-started/core-concepts.mdx b/content/docs/pallet/getting-started/core-concepts.mdx
index 8a92dbde..0725b29a 100644
--- a/content/docs/pallet/getting-started/core-concepts.mdx
+++ b/content/docs/pallet/getting-started/core-concepts.mdx
@@ -2,3 +2,4 @@
title: Core Concepts
description: Understand the key building blocks of Pallet — warehouses, inventory, fulfillment, and how they connect.
---
+
diff --git a/content/docs/pallet/getting-started/quickstart.mdx b/content/docs/pallet/getting-started/quickstart.mdx
index cb11cc25..8eb7d68e 100644
--- a/content/docs/pallet/getting-started/quickstart.mdx
+++ b/content/docs/pallet/getting-started/quickstart.mdx
@@ -2,3 +2,4 @@
title: Quickstart
description: Get up and running with Pallet — create your first warehouse, add products, and process your first order.
---
+
diff --git a/content/docs/pallet/index.mdx b/content/docs/pallet/index.mdx
index 989d6475..61e8aa46 100644
--- a/content/docs/pallet/index.mdx
+++ b/content/docs/pallet/index.mdx
@@ -15,11 +15,11 @@ It is designed to work seamlessly alongside [Fleet-Ops](/docs/fleetops) (for dis
Pallet provides the tools necessary to manage physical goods across multiple locations:
-- **[Warehouses](/docs/pallet/warehouses)**: Define physical storage locations, including specific aisles, racks, and bins.
-- **[Inventory](/docs/pallet/inventory)**: Track stock levels in real-time, including batch numbers and expiration dates.
-- **[Fulfillment](/docs/pallet/fulfillment)**: Manage the picking, packing, and shipping process for outgoing orders.
-- **[Suppliers](/docs/pallet/suppliers)**: Manage your vendors and generate purchase orders for restocking.
-- **[Audits](/docs/pallet/audits)**: Conduct cycle counts and reconcile physical stock with digital records.
+- **[Warehouses](/docs/pallet/warehouses/overview)**: Define physical storage locations, including specific aisles, racks, and bins.
+- **[Inventory](/docs/pallet/inventory/overview)**: Track stock levels in real-time, including batch numbers and expiration dates.
+- **[Fulfillment](/docs/pallet/fulfillment/overview)**: Manage the picking, packing, and shipping process for outgoing orders.
+- **[Suppliers](/docs/pallet/suppliers/overview)**: Manage your vendors and generate purchase orders for restocking.
+- **[Audits](/docs/pallet/audits/overview)**: Conduct cycle counts and reconcile physical stock with digital records.
## Integration with Storefront
@@ -31,4 +31,4 @@ When fully integrated, an order placed in Storefront automatically triggers a fu
To begin using Pallet, you must first install the extension via the Fleetbase CLI or the [Registry](/docs/platform/extensions).
-Once installed, the Pallet module will appear in your Fleetbase Console sidebar, allowing you to begin configuring your first [Warehouse](/docs/pallet/warehouses).
+Once installed, the Pallet module will appear in your Fleetbase Console sidebar, allowing you to begin configuring your first [Warehouse](/docs/pallet/warehouses/overview).
diff --git a/content/docs/pallet/inventory/expired-stock.mdx b/content/docs/pallet/inventory/expired-stock.mdx
index 09691d5b..ad0f72d0 100644
--- a/content/docs/pallet/inventory/expired-stock.mdx
+++ b/content/docs/pallet/inventory/expired-stock.mdx
@@ -3,8 +3,6 @@ title: Expired Stock
description: Identify and manage stock that has passed its expiry date to maintain inventory accuracy.
---
-# Expired Stock
-
Identify and manage stock that has passed its expiry date to maintain inventory accuracy.
> This page is coming soon. Content is actively being developed.
diff --git a/content/docs/pallet/inventory/low-stock.mdx b/content/docs/pallet/inventory/low-stock.mdx
index e44eb1dc..a24bb7d7 100644
--- a/content/docs/pallet/inventory/low-stock.mdx
+++ b/content/docs/pallet/inventory/low-stock.mdx
@@ -3,8 +3,6 @@ title: Low Stock Alerts
description: Configure thresholds and monitor products that are running low to prevent stockouts.
---
-# Low Stock Alerts
-
Configure thresholds and monitor products that are running low to prevent stockouts.
> This page is coming soon. Content is actively being developed.
diff --git a/content/docs/pallet/inventory/overview.mdx b/content/docs/pallet/inventory/overview.mdx
index 2bac4f84..dcb5d15e 100644
--- a/content/docs/pallet/inventory/overview.mdx
+++ b/content/docs/pallet/inventory/overview.mdx
@@ -3,9 +3,7 @@ title: Inventory Control
description: Track and manage stock levels, adjustments, and transfers across your warehouses.
---
-# Inventory Control
-
-The **Inventory** module in Pallet is where you track the physical quantities of goods stored across your [Warehouses](/docs/pallet/warehouses).
+The **Inventory** module in Pallet is where you track the physical quantities of goods stored across your [Warehouses](/docs/pallet/warehouses/overview).
Pallet provides real-time visibility into stock levels, allowing you to monitor what is available for sale, what is currently being picked for an order, and what needs to be restocked.
@@ -18,7 +16,7 @@ The items you track in Pallet. If you are using [Storefront](/docs/storefront),
The exact quantity of a specific Product located in a specific [Bin](/docs/pallet/warehouses/zones-aisles-racks-bins) within a Warehouse. Pallet tracks both the "On Hand" quantity (total physical stock) and the "Available" quantity (stock that has not yet been allocated to an active order).
### [Stock Adjustments](/docs/pallet/inventory/stock-adjustments)
-Manual corrections to stock levels. Adjustments are used to record shrinkage (e.g., damaged goods, theft) or to correct discrepancies found during an [Audit](/docs/pallet/audits).
+Manual corrections to stock levels. Adjustments are used to record shrinkage (e.g., damaged goods, theft) or to correct discrepancies found during an [Audit](/docs/pallet/audits/overview).
### [Stock Transfers](/docs/pallet/inventory/stock-transfers)
The process of moving inventory from one location to another. This can be an internal transfer (e.g., moving stock from the Receiving Dock to Aisle 4) or an external transfer (e.g., moving stock from Warehouse A to Warehouse B).
diff --git a/content/docs/pallet/inventory/products.mdx b/content/docs/pallet/inventory/products.mdx
index 58f19bf8..bea4d3ba 100644
--- a/content/docs/pallet/inventory/products.mdx
+++ b/content/docs/pallet/inventory/products.mdx
@@ -3,8 +3,6 @@ title: Products
description: Manage the product catalog within Pallet, including SKUs, units, and storage requirements.
---
-# Products
-
Manage the product catalog within Pallet, including SKUs, units, and storage requirements.
> This page is coming soon. Content is actively being developed.
diff --git a/content/docs/pallet/inventory/stock-adjustments.mdx b/content/docs/pallet/inventory/stock-adjustments.mdx
index c898bd39..d1ded11d 100644
--- a/content/docs/pallet/inventory/stock-adjustments.mdx
+++ b/content/docs/pallet/inventory/stock-adjustments.mdx
@@ -3,8 +3,6 @@ title: Stock Adjustments
description: Record manual stock adjustments for corrections, write-offs, and inventory reconciliation.
---
-# Stock Adjustments
-
Record manual stock adjustments for corrections, write-offs, and inventory reconciliation.
> This page is coming soon. Content is actively being developed.
diff --git a/content/docs/pallet/inventory/stock-levels.mdx b/content/docs/pallet/inventory/stock-levels.mdx
index 3bfe596f..69c47d62 100644
--- a/content/docs/pallet/inventory/stock-levels.mdx
+++ b/content/docs/pallet/inventory/stock-levels.mdx
@@ -3,8 +3,6 @@ title: Stock Levels
description: Monitor current stock levels across warehouses and bin locations in real time.
---
-# Stock Levels
-
Monitor current stock levels across warehouses and bin locations in real time.
> This page is coming soon. Content is actively being developed.
diff --git a/content/docs/pallet/inventory/stock-transfers.mdx b/content/docs/pallet/inventory/stock-transfers.mdx
index 6ac90c09..f8a68cc6 100644
--- a/content/docs/pallet/inventory/stock-transfers.mdx
+++ b/content/docs/pallet/inventory/stock-transfers.mdx
@@ -3,8 +3,6 @@ title: Stock Transfers
description: Move stock between warehouses or bin locations with tracked transfer records.
---
-# Stock Transfers
-
Move stock between warehouses or bin locations with tracked transfer records.
> This page is coming soon. Content is actively being developed.
diff --git a/content/docs/pallet/reports/overview.mdx b/content/docs/pallet/reports/overview.mdx
index 3c0e980d..555e6ed6 100644
--- a/content/docs/pallet/reports/overview.mdx
+++ b/content/docs/pallet/reports/overview.mdx
@@ -3,8 +3,6 @@ title: Reports & Metrics
description: Gain visibility into warehouse performance with inventory summaries, stock value reports, and order metrics.
---
-# Reports & Metrics
-
Gain visibility into warehouse performance with inventory summaries, stock value reports, and order metrics.
> This page is coming soon. Content is actively being developed.
diff --git a/content/docs/pallet/suppliers/overview.mdx b/content/docs/pallet/suppliers/overview.mdx
index 74638ff6..795a5ad8 100644
--- a/content/docs/pallet/suppliers/overview.mdx
+++ b/content/docs/pallet/suppliers/overview.mdx
@@ -3,8 +3,6 @@ title: Suppliers
description: Manage supplier records and associate them with purchase orders for streamlined procurement.
---
-# Suppliers
-
Manage supplier records and associate them with purchase orders for streamlined procurement.
> This page is coming soon. Content is actively being developed.
diff --git a/content/docs/pallet/warehouses/overview.mdx b/content/docs/pallet/warehouses/overview.mdx
index 3ca2d3e7..5edb1dca 100644
--- a/content/docs/pallet/warehouses/overview.mdx
+++ b/content/docs/pallet/warehouses/overview.mdx
@@ -3,8 +3,6 @@ title: Warehouse Management
description: Define and manage your warehouse structure — from the building down to individual bin locations.
---
-# Warehouse Management
-
In Pallet, a **Warehouse** is the foundational entity for managing physical inventory.
A Warehouse represents a physical building or facility where goods are stored, picked, packed, and shipped.
diff --git a/content/docs/pallet/warehouses/warehouses.mdx b/content/docs/pallet/warehouses/warehouses.mdx
index 12fbdc09..18956aa5 100644
--- a/content/docs/pallet/warehouses/warehouses.mdx
+++ b/content/docs/pallet/warehouses/warehouses.mdx
@@ -3,8 +3,6 @@ title: Warehouses
description: Create and manage warehouse records, including address, capacity, and operational details.
---
-# Warehouses
-
Create and manage warehouse records, including address, capacity, and operational details.
> This page is coming soon. Content is actively being developed.
diff --git a/content/docs/pallet/warehouses/zones-aisles-racks-bins.mdx b/content/docs/pallet/warehouses/zones-aisles-racks-bins.mdx
index a6acfa77..02a69cbf 100644
--- a/content/docs/pallet/warehouses/zones-aisles-racks-bins.mdx
+++ b/content/docs/pallet/warehouses/zones-aisles-racks-bins.mdx
@@ -3,8 +3,6 @@ title: Zones, Aisles, Racks & Bins
description: Structure your warehouse with zones, aisles, racks, sections, and bin locations for precise inventory placement.
---
-# Zones, Aisles, Racks & Bins
-
Structure your warehouse with zones, aisles, racks, sections, and bin locations for precise inventory placement.
> This page is coming soon. Content is actively being developed.
diff --git a/content/docs/platform/console-features/chat.mdx b/content/docs/platform/console-features/chat.mdx
index 6b755c59..4e6bda8f 100644
--- a/content/docs/platform/console-features/chat.mdx
+++ b/content/docs/platform/console-features/chat.mdx
@@ -3,8 +3,6 @@ title: Chat
description: Real-time messaging built into the Fleetbase Console — create channels, message team members, and share files without leaving the platform.
---
-# Chat
-
Fleetbase includes a real-time chat system built into the console. Dispatchers and team members can message each other directly, create group channels, and share files — all from a persistent chat tray in the top navigation bar.
Chat is powered by the SocketCluster WebSocket layer and delivers messages in real time without polling.
diff --git a/content/docs/platform/console-features/custom-fields.mdx b/content/docs/platform/console-features/custom-fields.mdx
index ff74d8df..9e7881b3 100644
--- a/content/docs/platform/console-features/custom-fields.mdx
+++ b/content/docs/platform/console-features/custom-fields.mdx
@@ -3,8 +3,6 @@ title: Custom Fields
description: Add structured custom data fields to any platform resource using the Custom Fields Manager — no code required.
---
-# Custom Fields
-
Custom Fields let you attach additional structured data to platform resources — orders, drivers, vehicles, contacts, and more — without writing code. Fields are organized into named groups, rendered inline on resource detail views, and returned in API responses.
The Custom Fields Manager is embedded inside the settings panel of each extension that supports it (for example, **Fleet-Ops → Settings → Custom Fields**).
diff --git a/content/docs/platform/console-features/dashboards-and-widgets.mdx b/content/docs/platform/console-features/dashboards-and-widgets.mdx
index c361b38e..fd647f1f 100644
--- a/content/docs/platform/console-features/dashboards-and-widgets.mdx
+++ b/content/docs/platform/console-features/dashboards-and-widgets.mdx
@@ -3,8 +3,6 @@ title: Dashboards & Widgets
description: Build and customize dashboards with drag-and-drop widgets. Each user can maintain multiple dashboards per extension context.
---
-# Dashboards & Widgets
-
The Fleetbase Console home screen is a fully customizable dashboard. Drag, resize, and arrange widgets to surface the metrics and views most relevant to your work. Extensions register their own widget types, and each user can create and manage multiple dashboards.

diff --git a/content/docs/platform/console-features/internationalization.mdx b/content/docs/platform/console-features/internationalization.mdx
index 8ae93f2a..77abefc4 100644
--- a/content/docs/platform/console-features/internationalization.mdx
+++ b/content/docs/platform/console-features/internationalization.mdx
@@ -3,8 +3,6 @@ title: Internationalization
description: Switch the console UI language using the locale selector in the top navigation bar.
---
-# Internationalization
-
The Fleetbase Console is available in multiple languages. Users can switch their language at any time using the **locale selector** in the top navigation bar. The selection is saved to the user's account and applies immediately without a page reload.
## Switching Language
diff --git a/content/docs/platform/console-features/navigation.mdx b/content/docs/platform/console-features/navigation.mdx
index 4bca5c0e..9c96ac20 100644
--- a/content/docs/platform/console-features/navigation.mdx
+++ b/content/docs/platform/console-features/navigation.mdx
@@ -3,8 +3,6 @@ title: Navigation
description: How the Fleetbase console navigation works — the top navbar, extension menu, sidebar, and user controls.
---
-# Navigation
-
The Fleetbase Console uses a two-part navigation structure: a **top navigation bar** and a **contextual sidebar**. Together they give quick access to every installed extension and the console's built-in features.

diff --git a/content/docs/platform/console-features/notifications.mdx b/content/docs/platform/console-features/notifications.mdx
index 66300752..f8ba89b8 100644
--- a/content/docs/platform/console-features/notifications.mdx
+++ b/content/docs/platform/console-features/notifications.mdx
@@ -3,8 +3,6 @@ title: Notifications
description: Real-time in-console notifications for platform events — view, mark as read, and manage from the notification tray or the full notifications page.
---
-# Notifications
-
The Fleetbase Console delivers real-time notifications for platform events — order assignments, status changes, system alerts, and more. Notifications arrive via SocketCluster and appear immediately without requiring a page refresh.
## The Notification Tray
diff --git a/content/docs/platform/developer-console/api-keys.mdx b/content/docs/platform/developer-console/api-keys.mdx
index 6487c429..3cf242d0 100644
--- a/content/docs/platform/developer-console/api-keys.mdx
+++ b/content/docs/platform/developer-console/api-keys.mdx
@@ -3,8 +3,6 @@ title: API Keys
description: Generate and manage API credentials for authenticating requests to the Fleetbase REST API.
---
-# API Keys
-
API keys are the credentials used to authenticate requests to the Fleetbase REST API. Each key belongs to either the **Test** or **Live** environment and can be scoped to a specific expiry window. Navigate to **Developers → API Keys** to manage them.

diff --git a/content/docs/platform/developer-console/index.mdx b/content/docs/platform/developer-console/index.mdx
index b67cd38d..06232a12 100644
--- a/content/docs/platform/developer-console/index.mdx
+++ b/content/docs/platform/developer-console/index.mdx
@@ -3,8 +3,6 @@ title: Developer Console
description: The Developer Console gives you the tools to authenticate API calls, receive event notifications, and monitor real-time traffic across your Fleetbase instance.
---
-# Developer Console
-
The **Developer Console** is the integration hub built into the Fleetbase Console. It is accessible from the main sidebar under **Developers** and provides everything you need to connect external systems, build custom applications, and monitor API activity.

diff --git a/content/docs/platform/developer-console/request-logs.mdx b/content/docs/platform/developer-console/request-logs.mdx
index f7690c97..12770744 100644
--- a/content/docs/platform/developer-console/request-logs.mdx
+++ b/content/docs/platform/developer-console/request-logs.mdx
@@ -3,8 +3,6 @@ title: Request Logs
description: Inspect a complete, filterable history of every API request made to your Fleetbase instance.
---
-# Request Logs
-
Request Logs records every inbound API request to your Fleetbase instance. Use it to debug integration issues, audit API usage, or trace unexpected behaviour back to a specific call. Navigate to **Developers → Request Logs**.

diff --git a/content/docs/platform/developer-console/socket-events.mdx b/content/docs/platform/developer-console/socket-events.mdx
index a74364d7..3c16d646 100644
--- a/content/docs/platform/developer-console/socket-events.mdx
+++ b/content/docs/platform/developer-console/socket-events.mdx
@@ -3,8 +3,6 @@ title: Socket Events
description: Monitor live WebSocket channels and subscribe to real-time event streams from your Fleetbase instance.
---
-# Socket Events
-
Fleetbase uses **SocketCluster** to broadcast real-time events over WebSocket connections. The Socket Events panel in the Developer Console lets you browse available channels and watch live event output directly in the console. Navigate to **Developers → Socket Events**.

diff --git a/content/docs/platform/developer-console/system-events.mdx b/content/docs/platform/developer-console/system-events.mdx
index 983a6954..24afe7e6 100644
--- a/content/docs/platform/developer-console/system-events.mdx
+++ b/content/docs/platform/developer-console/system-events.mdx
@@ -3,8 +3,6 @@ title: System Events
description: Browse a searchable log of all API events emitted by your Fleetbase instance — useful for auditing and debugging integrations.
---
-# System Events
-
System Events is a log of every API event emitted by your Fleetbase instance. Every time an action triggers an event — an order changes state, a driver is created, a webhook fires — that event is recorded here. Navigate to **Developers → System Events**.

diff --git a/content/docs/platform/developer-console/webhooks.mdx b/content/docs/platform/developer-console/webhooks.mdx
index b5c2560d..130dbf96 100644
--- a/content/docs/platform/developer-console/webhooks.mdx
+++ b/content/docs/platform/developer-console/webhooks.mdx
@@ -3,8 +3,6 @@ title: Webhooks
description: Configure webhook endpoints to receive real-time HTTP callbacks when events occur in your Fleetbase instance.
---
-# Webhooks
-
Webhooks push event notifications to your own servers the moment something happens in Fleetbase — an order is dispatched, a driver location changes, a contact is created. Navigate to **Developers → Webhooks** to manage your endpoints.

diff --git a/content/docs/platform/extensions/browsing-and-installing.mdx b/content/docs/platform/extensions/browsing-and-installing.mdx
index 634f9231..4ea073c1 100644
--- a/content/docs/platform/extensions/browsing-and-installing.mdx
+++ b/content/docs/platform/extensions/browsing-and-installing.mdx
@@ -3,8 +3,6 @@ title: Browsing & Installing
description: Browse the Fleetbase extension registry and install extensions via the console or the CLI.
---
-# Browsing & Installing Extensions
-
Extensions are discovered and installed from the **Extensions** section in the top navigation bar of the Fleetbase Console, or using the `flb` CLI on a self-hosted instance.
## Browsing the Registry
diff --git a/content/docs/platform/extensions/index.mdx b/content/docs/platform/extensions/index.mdx
index b3137a3a..ca56b026 100644
--- a/content/docs/platform/extensions/index.mdx
+++ b/content/docs/platform/extensions/index.mdx
@@ -3,8 +3,6 @@ title: Extensions
description: Extend Fleetbase with modular extensions — install from the registry, manage installed extensions, or publish your own.
---
-# Extensions
-
Fleetbase is built on a modular architecture. The core platform provides identity management, API routing, and real-time events — the actual logistics capabilities are delivered by **Extensions**.
Extensions are installable packages that add specific features, workflows, or integrations to your instance. You can install official extensions, purchase community extensions, or build and publish your own.
diff --git a/content/docs/platform/extensions/managing-extensions.mdx b/content/docs/platform/extensions/managing-extensions.mdx
index 086211f5..05cdd37a 100644
--- a/content/docs/platform/extensions/managing-extensions.mdx
+++ b/content/docs/platform/extensions/managing-extensions.mdx
@@ -3,8 +3,6 @@ title: Managing Extensions
description: View installed extensions, uninstall them, and manage developer credentials for publishing to the registry.
---
-# Managing Extensions
-
Once extensions are installed you can view, remove, and manage them from the **Extensions** section in the top navigation bar.
## Installed Extensions
diff --git a/content/docs/platform/getting-started/architecture.mdx b/content/docs/platform/getting-started/architecture.mdx
index c0af7fbf..ee62a0c4 100644
--- a/content/docs/platform/getting-started/architecture.mdx
+++ b/content/docs/platform/getting-started/architecture.mdx
@@ -3,8 +3,6 @@ title: Architecture
description: How Fleetbase is structured — the API backend, Ember.js console, real-time engine, extension system, and infrastructure requirements.
---
-# Architecture
-
Fleetbase follows a **modular, API-first architecture** with a clear separation between the backend API layer, the frontend console, and the real-time event system. Extensions plug into both the backend and frontend simultaneously, making each module a first-class part of the platform rather than an external integration.
## High-Level Overview
diff --git a/content/docs/platform/getting-started/overview.mdx b/content/docs/platform/getting-started/overview.mdx
index 300c1255..ae7be668 100644
--- a/content/docs/platform/getting-started/overview.mdx
+++ b/content/docs/platform/getting-started/overview.mdx
@@ -3,8 +3,6 @@ title: Overview
description: What Fleetbase is, how it works, and who it's built for — a complete picture of the platform before you dive in.
---
-# Overview
-
Fleetbase is an open-source **Logistics and Supply Chain Operating System (LSOS)** — a modular, API-first platform that gives logistics operators and software developers production-ready infrastructure they can deploy on their own terms, extend without limits, and own completely.
At its core, Fleetbase provides the foundation every logistics business needs: multi-tenant organisation management, identity and access control, a real-time event bus, a REST API, and a developer console for managing integrations. On top of that foundation, you install the modules you need — Fleet-Ops for fleet management, Storefront for e-commerce, Pallet for inventory, Ledger for accounting — or you build your own.
diff --git a/content/docs/platform/getting-started/why-fleetbase.mdx b/content/docs/platform/getting-started/why-fleetbase.mdx
index 526bc36f..1c7f12ee 100644
--- a/content/docs/platform/getting-started/why-fleetbase.mdx
+++ b/content/docs/platform/getting-started/why-fleetbase.mdx
@@ -3,8 +3,6 @@ title: Why Fleetbase
description: Why logistics and supply chain operations choose Fleetbase — ownership, transparency, and freedom from the constraints of closed enterprise software.
---
-# Why Fleetbase
-
Logistics operations run on software that was never really built for them. Enterprise platforms built for large carriers don't fit the way a regional courier or on-demand delivery business actually works. Lightweight SaaS tools hit ceilings the moment operations get complex. And the pricing models of closed platforms — per-driver, per-order, per-seat — treat your growth as a liability.
Fleetbase is a different kind of logistics platform. It's open-source, self-hostable, and built to be shaped around how your operation actually works — not the other way around.
diff --git a/content/docs/platform/identity-and-access/groups.mdx b/content/docs/platform/identity-and-access/groups.mdx
index c013fa91..c5937667 100644
--- a/content/docs/platform/identity-and-access/groups.mdx
+++ b/content/docs/platform/identity-and-access/groups.mdx
@@ -3,8 +3,6 @@ title: Groups
description: Organize users into groups to simplify access management — assign policies once and apply them to a collection of users at once.
---
-# Groups
-
Groups let you collect users together under a shared name. Rather than attaching policies to each user individually, you attach them to a group and add users to it. Navigate to **IAM → Groups** to manage them.

diff --git a/content/docs/platform/identity-and-access/organizations.mdx b/content/docs/platform/identity-and-access/organizations.mdx
index d9d1a5e5..dc6dc427 100644
--- a/content/docs/platform/identity-and-access/organizations.mdx
+++ b/content/docs/platform/identity-and-access/organizations.mdx
@@ -3,8 +3,6 @@ title: Organizations
description: Understand the two distinct organization views in Fleetbase — the system-wide admin list and your personal organization membership panel.
---
-# Organizations
-
Fleetbase is multi-tenant by design. A single instance can host multiple fully isolated organizations, each with their own users, data, API keys, extensions, and settings. No data crosses organization boundaries unless explicitly shared through the API.
There are two distinct places in the console where organizations appear — one for system-level administrators, and one for every user managing their own membership.
diff --git a/content/docs/platform/identity-and-access/policies.mdx b/content/docs/platform/identity-and-access/policies.mdx
index b9381013..b499d832 100644
--- a/content/docs/platform/identity-and-access/policies.mdx
+++ b/content/docs/platform/identity-and-access/policies.mdx
@@ -3,8 +3,6 @@ title: Policies
description: Create reusable permission bundles that can be attached to users and roles across your Fleetbase organization.
---
-# Policies
-
Policies are reusable bundles of permissions that can be attached to users or roles. Where a role defines a user's primary access level, policies let you grant additional, targeted permissions without creating a whole new role for each combination. Navigate to **IAM → Policies** to manage them.

diff --git a/content/docs/platform/identity-and-access/roles-and-permissions.mdx b/content/docs/platform/identity-and-access/roles-and-permissions.mdx
index fb78453c..5f56e176 100644
--- a/content/docs/platform/identity-and-access/roles-and-permissions.mdx
+++ b/content/docs/platform/identity-and-access/roles-and-permissions.mdx
@@ -3,8 +3,6 @@ title: Roles & Permissions
description: Create and assign roles that grant users access to specific resources and actions across the Fleetbase platform.
---
-# Roles & Permissions
-
Roles are named collections of permissions. Assigning a role to a user grants them everything that role allows. Fleetbase ships with a set of built-in roles and lets you create custom roles with granular, per-resource permissions. Navigate to **IAM → Roles** to manage them.

diff --git a/content/docs/platform/identity-and-access/two-factor-authentication.mdx b/content/docs/platform/identity-and-access/two-factor-authentication.mdx
index 7f0f239f..2f925315 100644
--- a/content/docs/platform/identity-and-access/two-factor-authentication.mdx
+++ b/content/docs/platform/identity-and-access/two-factor-authentication.mdx
@@ -3,8 +3,6 @@ title: Two-Factor Authentication
description: Enable 2FA on your personal account, enforce it for your organization, or configure it system-wide for all users.
---
-# Two-Factor Authentication
-
Two-factor authentication (2FA) adds a second verification step to login. After entering a password, users must confirm a one-time code before gaining access. There are three levels where 2FA can be configured:
| Level | Where | Who controls it |
diff --git a/content/docs/platform/identity-and-access/user-management.mdx b/content/docs/platform/identity-and-access/user-management.mdx
index fb30b0bd..8f2cec4a 100644
--- a/content/docs/platform/identity-and-access/user-management.mdx
+++ b/content/docs/platform/identity-and-access/user-management.mdx
@@ -3,6 +3,4 @@ title: User Management
description: Invite, deactivate, and manage users across your organization — including bulk operations and status controls.
---
-# User Management
-
Invite new users by email, assign them roles, and manage their access from the IAM panel. Users can be deactivated without deleting their data, and re-activated at any time.
diff --git a/content/docs/platform/identity-and-access/users.mdx b/content/docs/platform/identity-and-access/users.mdx
index 5f03ac4a..f32261b1 100644
--- a/content/docs/platform/identity-and-access/users.mdx
+++ b/content/docs/platform/identity-and-access/users.mdx
@@ -3,8 +3,6 @@ title: Users
description: Invite, create, and manage users in your Fleetbase organization — roles, statuses, permissions, and lifecycle actions.
---
-# Users
-
Every person with access to Fleetbase has a user account. Users belong to an organization, carry a role, and can have additional policies and permissions attached directly. Navigate to **IAM → Users** to manage them.

diff --git a/content/docs/platform/index.mdx b/content/docs/platform/index.mdx
index cb2967c0..10d3ac93 100644
--- a/content/docs/platform/index.mdx
+++ b/content/docs/platform/index.mdx
@@ -3,8 +3,6 @@ title: Core Platform
description: The Fleetbase core platform covers identity management, developer tooling, extensions, and built-in platform features.
---
-# Core Platform
-
The Fleetbase core platform is the foundation that underpins every module and extension. It handles the concerns that every serious logistics system needs: multi-tenant organisation management, role-based access control, a real-time event bus, a REST API, and a developer console for managing integrations.
Start with the [Platform Overview](/docs/platform/getting-started/overview) for a complete introduction, or jump straight to a quickstart if you already know what you need.
diff --git a/content/docs/platform/quickstart/cloud-quickstart.mdx b/content/docs/platform/quickstart/cloud-quickstart.mdx
index 0d167d7c..9f93067b 100644
--- a/content/docs/platform/quickstart/cloud-quickstart.mdx
+++ b/content/docs/platform/quickstart/cloud-quickstart.mdx
@@ -3,8 +3,6 @@ title: Cloud Quickstart
description: Sign up for Fleetbase Cloud, complete onboarding, and get to your first driver, order, and API call.
---
-# Cloud Quickstart
-
Fleetbase Cloud is the fastest way to get started. Your environment is provisioned and pre-configured during signup — no infrastructure or setup required. This guide walks you through every step of the onboarding flow with screenshots, then covers what to do first once you're in.
The cloud onboarding flow has five top-level steps: **Create Account → Verify Email → Choose Deployment → Configure Workspace → Start Your Trial**. The Configure Workspace step has seven internal substeps that personalise your console.
@@ -29,7 +27,7 @@ The cloud onboarding flow has five top-level steps: **Create Account → Verify
### Choose Deployment
- Pick how you want to run Fleetbase. **Cloud (SaaS)** is fully managed and ready in minutes — that's the path this guide covers. **Self-Managed** deploys to your own cloud or on-premise infrastructure (see the [Self-Hosted Quickstart](/docs/platform/quickstart) for that flow).
+ Pick how you want to run Fleetbase. **Cloud (SaaS)** is fully managed and ready in minutes — that's the path this guide covers. **Self-Managed** deploys to your own cloud or on-premise infrastructure (see the [Self-Hosted Quickstart](/docs/platform/quickstart/cloud-quickstart) for that flow).

@@ -119,9 +117,9 @@ Once you're in the console, these are the three most useful things to get done:
- **[Create an API Key](/docs/platform/developer-console/api-keys)** — Go to **Developer Console → API Keys** and generate your first key. You'll need this to connect any external system, app, or integration to your Fleetbase instance.
-- **[Add your first driver and get Navigator](/docs/fleet-ops/drivers)** — Go to **Fleet-Ops → Drivers** to add your driver roster. Each driver uses the **Fleetbase Navigator** mobile app to receive orders, update status, and submit proof of delivery — share the download link from the driver profile.
+- **[Add your first driver and get Navigator](/docs/fleet-ops/resources/drivers/overview)** — Go to **Fleet-Ops → Drivers** to add your driver roster. Each driver uses the **Fleetbase Navigator** mobile app to receive orders, update status, and submit proof of delivery — share the download link from the driver profile.
-- **[Create your first order](/docs/fleet-ops/orders)** — Go to **Fleet-Ops → Orders** and dispatch a delivery. Assign it to a driver and watch it move through the status lifecycle on the live map in real time.
+- **[Create your first order](/docs/fleet-ops/operations/orders/overview)** — Go to **Fleet-Ops → Orders** and dispatch a delivery. Assign it to a driver and watch it move through the status lifecycle on the live map in real time.
## Common resources
@@ -133,7 +131,7 @@ Once you're in the console, these are the three most useful things to get done:
@@ -146,7 +144,7 @@ Once you're in the console, these are the three most useful things to get done:
diff --git a/content/docs/platform/quickstart/deploy-in-cloud.mdx b/content/docs/platform/quickstart/deploy-in-cloud.mdx
index 493d182e..285ed101 100644
--- a/content/docs/platform/quickstart/deploy-in-cloud.mdx
+++ b/content/docs/platform/quickstart/deploy-in-cloud.mdx
@@ -3,8 +3,6 @@ title: Deploy in Cloud
description: Self-host Fleetbase on AWS, GCP, DigitalOcean, or any Linux server — Docker Compose deployment, Nginx reverse proxy, and SSL setup.
---
-# Deploy in Cloud
-
This guide covers deploying Fleetbase to infrastructure you control — a VM on AWS, GCP, DigitalOcean, or any Linux server with Docker installed.
diff --git a/content/docs/platform/quickstart/development-setup.mdx b/content/docs/platform/quickstart/development-setup.mdx
index 7b80ea0e..9fea8144 100644
--- a/content/docs/platform/quickstart/development-setup.mdx
+++ b/content/docs/platform/quickstart/development-setup.mdx
@@ -3,8 +3,6 @@ title: Development Setup
description: Set up a Fleetbase development environment — mount live source, link packages, and work on extensions with hot reload.
---
-# Development Setup
-
This guide is for contributors and extension developers who need to work directly on Fleetbase source code or link a local package into a running instance. If you just want to run Fleetbase locally without modifying its internals, see [Running Locally](/docs/platform/quickstart/running-locally) instead.
## Prerequisites
diff --git a/content/docs/platform/quickstart/infrastructure-sizing.mdx b/content/docs/platform/quickstart/infrastructure-sizing.mdx
index a1b13f4f..b0679f27 100644
--- a/content/docs/platform/quickstart/infrastructure-sizing.mdx
+++ b/content/docs/platform/quickstart/infrastructure-sizing.mdx
@@ -3,8 +3,6 @@ title: Infrastructure Sizing
description: Reference architecture, sizing assumptions, and production bill of quantities for self-hosted and on-premise Fleetbase deployments.
---
-# Infrastructure Sizing
-
This guide gives infrastructure teams a practical baseline for planning self-hosted, private cloud, or on-premise Fleetbase deployments. Treat these numbers as planning guidance, not a fixed benchmark. Final sizing depends on active vehicles and devices, active drivers, order volume, telemetry frequency, concurrent users, custom extensions, uploaded media, integration traffic, and retention policy.
Fleetbase does not require GPU resources for the core platform. GPU capacity is only relevant if you run separate AI, computer vision, route optimization, or analytics workloads outside the standard Fleetbase application stack.
diff --git a/content/docs/platform/quickstart/running-locally.mdx b/content/docs/platform/quickstart/running-locally.mdx
index 97a26e05..e76e0228 100644
--- a/content/docs/platform/quickstart/running-locally.mdx
+++ b/content/docs/platform/quickstart/running-locally.mdx
@@ -3,8 +3,6 @@ title: Running Locally
description: Run the full Fleetbase stack on your local machine using Docker Compose — for evaluation, testing, and local use.
---
-# Running Locally
-
Fleetbase ships with a `docker-compose.yml` that boots the entire stack — API, console, database, Redis, SocketCluster, queue workers, and scheduler — with a single command. This is the recommended setup for local development and testing.
## Prerequisites
diff --git a/content/docs/platform/recipes/build-a-custom-integration.mdx b/content/docs/platform/recipes/build-a-custom-integration.mdx
index d8bc0117..914d8a0f 100644
--- a/content/docs/platform/recipes/build-a-custom-integration.mdx
+++ b/content/docs/platform/recipes/build-a-custom-integration.mdx
@@ -3,8 +3,6 @@ title: Build a Custom Integration
description: Use the Fleetbase REST API and webhooks to integrate an external system — push orders in, receive status events out, handle retries safely.
---
-# Build a Custom Integration
-
This recipe shows a complete, production-ready integration pattern: an external system (ERP, WMS, or e-commerce platform) that creates orders in Fleetbase via the REST API, then receives real-time status updates back via webhooks.
## Integration Architecture
diff --git a/content/docs/platform/recipes/configure-custom-fields.mdx b/content/docs/platform/recipes/configure-custom-fields.mdx
index 6fe7b0bb..b4d2a258 100644
--- a/content/docs/platform/recipes/configure-custom-fields.mdx
+++ b/content/docs/platform/recipes/configure-custom-fields.mdx
@@ -3,8 +3,6 @@ title: Configure Custom Fields
description: Add structured custom data fields to drivers, vehicles, contacts, and other resources — then read them back via the API.
---
-# Configure Custom Fields
-
Custom Fields let you attach additional structured data to platform resources — drivers, vehicles, contacts, and more — without writing an extension. Fields are defined in the console settings panel, rendered inline on resource detail views, and returned automatically in API responses.
diff --git a/content/docs/platform/recipes/connect-your-first-webhook.mdx b/content/docs/platform/recipes/connect-your-first-webhook.mdx
index 09f66103..4e7105fa 100644
--- a/content/docs/platform/recipes/connect-your-first-webhook.mdx
+++ b/content/docs/platform/recipes/connect-your-first-webhook.mdx
@@ -3,8 +3,6 @@ title: Connect Your First Webhook
description: Set up a webhook endpoint to receive real-time event callbacks from Fleetbase — order created, driver assigned, status updated, and more.
---
-# Connect Your First Webhook
-
Webhooks let Fleetbase push events to your backend the moment something happens — an order is dispatched, a driver's status changes, a contact is created. This recipe walks through building a receiver, registering it in the Developer Console, and verifying end-to-end delivery.
## What You'll Build
diff --git a/content/docs/platform/recipes/set-up-real-time-tracking.mdx b/content/docs/platform/recipes/set-up-real-time-tracking.mdx
index 80ed52dc..3f48ab96 100644
--- a/content/docs/platform/recipes/set-up-real-time-tracking.mdx
+++ b/content/docs/platform/recipes/set-up-real-time-tracking.mdx
@@ -3,8 +3,6 @@ title: Set Up Real-Time Tracking
description: Subscribe to Fleetbase socket events to display live driver locations and order status updates in your own application or dashboard.
---
-# Set Up Real-Time Tracking
-
Fleetbase broadcasts real-time events — driver location updates, order status changes, and platform events — over WebSocket using [SocketCluster](https://socketcluster.io/). This recipe shows how to subscribe to those channels from your own application and render live driver positions on a map.
## What You'll Build
diff --git a/content/docs/platform/system-setup/branding.mdx b/content/docs/platform/system-setup/branding.mdx
index 33ba7e91..74a0a8ae 100644
--- a/content/docs/platform/system-setup/branding.mdx
+++ b/content/docs/platform/system-setup/branding.mdx
@@ -3,8 +3,6 @@ title: Branding
description: Customize your Fleetbase console with your organization's icon, logo, and default color theme.
---
-# Branding
-
The Branding settings let you replace the default Fleetbase logo and icon with your own, and set the default color theme for the console. Navigate to **Admin → Branding** to access these settings.

diff --git a/content/docs/platform/system-setup/filesystem.mdx b/content/docs/platform/system-setup/filesystem.mdx
index c0a661c3..bb0e7bd5 100644
--- a/content/docs/platform/system-setup/filesystem.mdx
+++ b/content/docs/platform/system-setup/filesystem.mdx
@@ -3,8 +3,6 @@ title: Filesystem
description: Configure where Fleetbase stores file uploads — local disk, Amazon S3, Google Cloud Storage, or any S3-compatible provider.
---
-# Filesystem
-
The Filesystem settings control where Fleetbase stores uploaded files — driver documents, proof of delivery photos, import CSVs, and other user-uploaded content. Navigate to **Admin → System Settings → Filesystem** to access these settings.

diff --git a/content/docs/platform/system-setup/mail.mdx b/content/docs/platform/system-setup/mail.mdx
index 5d2363ba..b919a4f7 100644
--- a/content/docs/platform/system-setup/mail.mdx
+++ b/content/docs/platform/system-setup/mail.mdx
@@ -3,8 +3,6 @@ title: Mail
description: Configure the outbound mail driver Fleetbase uses for notifications, invitations, order updates, and system alerts.
---
-# Mail
-
Fleetbase sends transactional email for account invitations, password resets, order notifications, and system alerts. The Mail settings panel lets you choose and configure the mail driver that powers all outbound email. Navigate to **Admin → System Settings → Mail** to access these settings.

diff --git a/content/docs/platform/system-setup/push-notifications.mdx b/content/docs/platform/system-setup/push-notifications.mdx
index 0d584a72..c08308b0 100644
--- a/content/docs/platform/system-setup/push-notifications.mdx
+++ b/content/docs/platform/system-setup/push-notifications.mdx
@@ -3,8 +3,6 @@ title: Push Notifications
description: Configure Apple Push Notification service (APNs) and Firebase Cloud Messaging (FCM) to send push notifications to the Navigator and Storefront mobile apps.
---
-# Push Notifications
-
Fleetbase sends push notifications to the **Navigator** driver app and the **Storefront** customer app for order assignments, status updates, and alerts. Two channels are supported: Apple Push Notification service (APNs) for iOS, and Firebase Cloud Messaging (FCM) for Android. Navigate to **Admin → System Settings → Push Notifications** to configure them.

diff --git a/content/docs/platform/system-setup/queue.mdx b/content/docs/platform/system-setup/queue.mdx
index 8737e602..c997b034 100644
--- a/content/docs/platform/system-setup/queue.mdx
+++ b/content/docs/platform/system-setup/queue.mdx
@@ -3,8 +3,6 @@ title: Queue
description: Configure the background job queue that powers webhook delivery, notifications, imports, and async processing in Fleetbase.
---
-# Queue
-
Fleetbase uses Laravel's queue system to process background jobs — outbound webhook delivery, push notifications, bulk imports, report generation, and scheduled tasks. The Queue settings let you switch the queue driver and configure its connection details. Navigate to **Admin → System Settings → Queue** to access these settings.

diff --git a/content/docs/platform/system-setup/services.mdx b/content/docs/platform/system-setup/services.mdx
index 4a01c063..32b887a7 100644
--- a/content/docs/platform/system-setup/services.mdx
+++ b/content/docs/platform/system-setup/services.mdx
@@ -3,8 +3,6 @@ title: Services
description: Configure third-party service integrations — AWS, Google Maps, Twilio SMS, Sentry error tracking, and IP geolocation.
---
-# Services
-
The Services settings panel is where you connect Fleetbase to external APIs it uses across the platform — mapping, SMS, error monitoring, and IP geolocation. Navigate to **Admin → System Settings → Services** to access these settings.

diff --git a/content/docs/platform/system-setup/socket.mdx b/content/docs/platform/system-setup/socket.mdx
index b593f005..2dc9ca9d 100644
--- a/content/docs/platform/system-setup/socket.mdx
+++ b/content/docs/platform/system-setup/socket.mdx
@@ -3,8 +3,6 @@ title: Socket
description: Monitor the SocketCluster connection that powers real-time driver tracking, order status updates, and live console events.
---
-# Socket
-
Fleetbase uses [SocketCluster](https://socketcluster.io/) for real-time bidirectional communication — live driver location updates on the map, order status changes pushed to the console without polling, and real-time events delivered to the Navigator app. Navigate to **Admin → System Settings → Socket** to monitor the connection.
diff --git a/content/docs/platform/system-setup/two-factor-authentication.mdx b/content/docs/platform/system-setup/two-factor-authentication.mdx
index 08ab2faf..b66ff38d 100644
--- a/content/docs/platform/system-setup/two-factor-authentication.mdx
+++ b/content/docs/platform/system-setup/two-factor-authentication.mdx
@@ -3,8 +3,6 @@ title: Two-Factor Authentication
description: Enable and enforce two-factor authentication system-wide for all users in your Fleetbase instance.
---
-# Two-Factor Authentication
-
Two-factor authentication (2FA) adds a second verification step to the login flow. After entering their password, users must confirm a one-time code before gaining access. Navigate to **Admin → System Settings → Two-Factor Authentication** to configure 2FA system-wide.

diff --git a/content/docs/storefront/app/build-and-release.mdx b/content/docs/storefront/app/build-and-release.mdx
index 8c901f61..bfd3c938 100644
--- a/content/docs/storefront/app/build-and-release.mdx
+++ b/content/docs/storefront/app/build-and-release.mdx
@@ -3,8 +3,6 @@ title: Build & Release
description: Production builds for iOS, Android, and the web target — signing, versioning, and renaming for your brand.
---
-# Build & Release
-
The Storefront App is a standard React Native project plus a Webpack-based web target. Production releases follow normal RN release procedures with a few project-specific notes.
## iOS Release Build
diff --git a/content/docs/storefront/app/configuration.mdx b/content/docs/storefront/app/configuration.mdx
index 163667d2..3dc22174 100644
--- a/content/docs/storefront/app/configuration.mdx
+++ b/content/docs/storefront/app/configuration.mdx
@@ -3,8 +3,6 @@ title: Configuration
description: Complete reference for the Storefront App — every environment variable, every storefront.config.ts field, and what each one controls.
---
-# Configuration
-
The Storefront App is configured by a combination of:
1. **Environment variables** in `.env`, read at build time via `react-native-config` (and inlined into the web build by Webpack).
2. **`storefront.config.ts`** at the project root, which delegates to `config/default.js` — the customization surface for tabs, theming, layout, and feature flags.
diff --git a/content/docs/storefront/app/integrations.mdx b/content/docs/storefront/app/integrations.mdx
index 5cd353c3..080461db 100644
--- a/content/docs/storefront/app/integrations.mdx
+++ b/content/docs/storefront/app/integrations.mdx
@@ -3,8 +3,6 @@ title: Integrations
description: Wire up payments, social login, push notifications, and real-time order updates in the Storefront App.
---
-# Integrations
-
The Storefront App ships with several integrations pre-wired. Most are gated behind environment flags and require credentials from the corresponding provider.
## Payments
diff --git a/content/docs/storefront/app/overview.mdx b/content/docs/storefront/app/overview.mdx
index 45e6518d..f2d3a622 100644
--- a/content/docs/storefront/app/overview.mdx
+++ b/content/docs/storefront/app/overview.mdx
@@ -3,8 +3,6 @@ title: Storefront App
description: The Storefront App is the open-source React Native client your customers use to browse stores and place orders against your Fleetbase Storefront backend.
---
-# Storefront App
-
The **Storefront App** is the open-source customer-facing client for the Storefront extension. It is a single React Native codebase that targets **iOS, Android, and the web**, paired with the Storefront backend running on your Fleetbase instance.
[github.com/fleetbase/storefront-app](https://github.com/fleetbase/storefront-app)
diff --git a/content/docs/storefront/app/quickstart.mdx b/content/docs/storefront/app/quickstart.mdx
index bdd3a2bb..29ddfb8f 100644
--- a/content/docs/storefront/app/quickstart.mdx
+++ b/content/docs/storefront/app/quickstart.mdx
@@ -3,8 +3,6 @@ title: Quickstart
description: Clone the Storefront App, install dependencies, configure your Fleetbase keys, and run it in iOS, Android, or web.
---
-# Storefront App Quickstart
-
Get the Storefront App running locally against your Fleetbase backend in about 15 minutes.
## Prerequisites
diff --git a/content/docs/storefront/app/theming.mdx b/content/docs/storefront/app/theming.mdx
index 8636da65..e5512d71 100644
--- a/content/docs/storefront/app/theming.mdx
+++ b/content/docs/storefront/app/theming.mdx
@@ -3,8 +3,6 @@ title: Theming & Branding
description: Customize colors, themes, fonts, app icon, splash screen, and display names for the Storefront App.
---
-# Theming & Branding
-
The Storefront App uses [Tamagui](https://tamagui.dev) for theming. The setup combines a Tailwind-style color palette with named themes, plus runtime overrides via env vars for fast brand work without touching code.
## How Themes Work
diff --git a/content/docs/storefront/catalog/categories.mdx b/content/docs/storefront/catalog/categories.mdx
index 0bfe617a..bbb3da34 100644
--- a/content/docs/storefront/catalog/categories.mdx
+++ b/content/docs/storefront/catalog/categories.mdx
@@ -3,8 +3,6 @@ title: Categories
description: Organize your products into categories for navigation and discoverability in your Storefront app.
---
-# Categories
-
**Categories** organize products into logical groups for customer navigation. A category can represent a menu section ("Appetizers", "Mains", "Desserts"), a product type ("Electronics", "Clothing"), or any grouping that makes sense for your store.
Navigate to **Storefront → Products** and use the category sidebar to manage categories.
diff --git a/content/docs/storefront/catalog/overview.mdx b/content/docs/storefront/catalog/overview.mdx
index 2177465f..0daf2c1b 100644
--- a/content/docs/storefront/catalog/overview.mdx
+++ b/content/docs/storefront/catalog/overview.mdx
@@ -3,8 +3,6 @@ title: Catalogs
description: Catalogs are named bundles of categories and products that can be assigned to food trucks (and, soon, store locations) — distinct from the store's underlying product list.
---
-# Catalogs
-
A **Catalog** is a named bundle of **categories** and **products** that you can assign to one or more **food trucks**. Catalogs are useful when one store runs multiple mobile units that serve different menus — the BBQ truck and the taco truck share a parent store but each has its own catalog.
Catalogs are **distinct** from the store's underlying product list (which is sometimes loosely called "the catalog"). A catalog references existing products through pivot tables — it doesn't duplicate them.
diff --git a/content/docs/storefront/catalog/pricing.mdx b/content/docs/storefront/catalog/pricing.mdx
index a25712ee..597949f3 100644
--- a/content/docs/storefront/catalog/pricing.mdx
+++ b/content/docs/storefront/catalog/pricing.mdx
@@ -3,8 +3,6 @@ title: Pricing
description: Configure base pricing, variant pricing, addon pricing, and sale prices for your Storefront products.
---
-# Pricing
-
Storefront's pricing model is built around base prices with optional modifiers from variants and addons. There is also a sale price mechanism for time-limited discounts.
## Base Price
diff --git a/content/docs/storefront/catalog/products.mdx b/content/docs/storefront/catalog/products.mdx
index e4fd24c4..c38b3370 100644
--- a/content/docs/storefront/catalog/products.mdx
+++ b/content/docs/storefront/catalog/products.mdx
@@ -3,8 +3,6 @@ title: Products
description: Create and manage products in your Storefront catalog — images, videos, variants, addons, availability, translations, and metadata.
---
-# Products
-
A **Product** is the core unit of your catalog — any item or service a customer can purchase. Products belong to a specific store and are organized into categories.
Navigate to **Storefront → Products** to manage your product list.
diff --git a/content/docs/storefront/catalog/variants-and-addons.mdx b/content/docs/storefront/catalog/variants-and-addons.mdx
index 6b7b336f..cefb6392 100644
--- a/content/docs/storefront/catalog/variants-and-addons.mdx
+++ b/content/docs/storefront/catalog/variants-and-addons.mdx
@@ -3,8 +3,6 @@ title: Variants & Addons
description: Configure product variants (required selections like size/color) and addons (optional extras like toppings) for flexible ordering.
---
-# Variants & Addons
-
Many products require customers to make choices before they can be added to the cart. Storefront handles this through two mechanisms: **Variants** (required selections) and **Addons** (optional extras).
## Variants
diff --git a/content/docs/storefront/customers/authentication.mdx b/content/docs/storefront/customers/authentication.mdx
index 05295b11..904938f5 100644
--- a/content/docs/storefront/customers/authentication.mdx
+++ b/content/docs/storefront/customers/authentication.mdx
@@ -3,8 +3,6 @@ title: Customer Authentication
description: Configure customer authentication — SMS code, email/password, Apple, Google, and Facebook sign-in. The full registration, verification, and login flow with API examples.
---
-# Customer Authentication
-
Storefront provides a complete authentication system for your customers. On successful authentication, the API returns a **Sanctum personal access token**. Your customer-facing app stores this token and includes it on every authenticated request via the **`Customer-Token`** header (the storefront key still goes in `Authorization: Bearer`).
```http
diff --git a/content/docs/storefront/customers/overview.mdx b/content/docs/storefront/customers/overview.mdx
index 82fb4e8b..1b69f18f 100644
--- a/content/docs/storefront/customers/overview.mdx
+++ b/content/docs/storefront/customers/overview.mdx
@@ -3,8 +3,6 @@ title: Customers
description: Manage customer accounts in your store or network — order history, contact details, addresses, and the API surface for guest and registered customers.
---
-# Customers
-
A **Customer** is an end-user registered with your store or network. Customer records track contact information, saved delivery addresses, order history, and API authentication tokens.
Navigate to **Storefront → Customers** to manage your customer base.
diff --git a/content/docs/storefront/getting-started/core-concepts.mdx b/content/docs/storefront/getting-started/core-concepts.mdx
index a9501e91..61f8cb1e 100644
--- a/content/docs/storefront/getting-started/core-concepts.mdx
+++ b/content/docs/storefront/getting-started/core-concepts.mdx
@@ -3,8 +3,6 @@ title: Core Concepts
description: Understand the key building blocks of Storefront — stores, networks, products, cart, checkout, customers, food trucks, catalogs, and how they integrate with Fleet-Ops.
---
-# Core Concepts
-
Storefront is built on a small set of entities that work together to power the full commerce lifecycle — from product browsing to order fulfillment via Fleet-Ops.
## Store
diff --git a/content/docs/storefront/getting-started/quickstart.mdx b/content/docs/storefront/getting-started/quickstart.mdx
index 15b0b155..9f9e08f6 100644
--- a/content/docs/storefront/getting-started/quickstart.mdx
+++ b/content/docs/storefront/getting-started/quickstart.mdx
@@ -3,8 +3,6 @@ title: Quickstart
description: Get your Storefront up and running — create a store, add a location, set up products, configure a payment gateway, and grab your API key.
---
-# Quickstart
-
This guide walks you through setting up a Storefront store, adding a location and products, configuring a payment gateway, and grabbing your API key — all from the Fleetbase Console.
## Step 1 — Create a Store
diff --git a/content/docs/storefront/networks/overview.mdx b/content/docs/storefront/networks/overview.mdx
index 123d817c..4b8046f2 100644
--- a/content/docs/storefront/networks/overview.mdx
+++ b/content/docs/storefront/networks/overview.mdx
@@ -3,8 +3,6 @@ title: Networks
description: Build a multi-vendor marketplace by grouping multiple Storefront stores into a Network — shared payment gateways, notification channels, and a single customer-facing app.
---
-# Networks
-
A **Network** is a collection of Storefront stores grouped into a single marketplace. Networks are the right architecture when you are building a platform that hosts multiple independent merchants — food delivery apps, local marketplace aggregators, multi-brand parent companies.
If you are running a single brand, you don't need a network — see [Stores](/docs/storefront/stores/overview).
diff --git a/content/docs/storefront/orders/cart.mdx b/content/docs/storefront/orders/cart.mdx
index 894cb182..abab0de4 100644
--- a/content/docs/storefront/orders/cart.mdx
+++ b/content/docs/storefront/orders/cart.mdx
@@ -3,8 +3,6 @@ title: Cart
description: Persistent cart sessions, item structure, multi-store cart behavior, and the Cart API endpoints.
---
-# Cart
-
The **Cart** is a persistent shopping session. Cart state is stored in the database, so customers can abandon and return without losing their selections. A cart's `expires_at` is set 7 days after creation and is not extended on subsequent updates.
## Cart Sessions
diff --git a/content/docs/storefront/orders/checkout.mdx b/content/docs/storefront/orders/checkout.mdx
index 282b5c3b..62f3d711 100644
--- a/content/docs/storefront/orders/checkout.mdx
+++ b/content/docs/storefront/orders/checkout.mdx
@@ -3,8 +3,6 @@ title: Checkout
description: The Storefront checkout is a two-step API flow — `/checkouts/before` to initialize and produce a token, then `/checkouts/capture` to finalize the order after payment is confirmed.
---
-# Checkout
-
**Checkout** converts a cart into a paid order. Storefront uses a **two-step** flow:
1. **`/checkouts/before`** — submit the cart, service quote, gateway, tip, and pickup/delivery flag. Storefront returns a **token** (and a Stripe `clientSecret` if the gateway is Stripe).
diff --git a/content/docs/storefront/orders/overview.mdx b/content/docs/storefront/orders/overview.mdx
index 183f55b6..127a0ab2 100644
--- a/content/docs/storefront/orders/overview.mdx
+++ b/content/docs/storefront/orders/overview.mdx
@@ -3,8 +3,6 @@ title: Orders & Checkout
description: Manage the full Storefront order lifecycle — cart, two-step checkout, payment, Fleet-Ops fulfillment, and the transactional notifications that fire along the way.
---
-# Orders & Checkout
-
The **Orders & Checkout** system handles the complete purchase lifecycle — from a customer adding items to their cart through to a dispatched Fleet-Ops delivery.
Navigate to **Storefront → Orders** to view and manage orders.
diff --git a/content/docs/storefront/orders/payment-gateways.mdx b/content/docs/storefront/orders/payment-gateways.mdx
index 708329dd..af5d5652 100644
--- a/content/docs/storefront/orders/payment-gateways.mdx
+++ b/content/docs/storefront/orders/payment-gateways.mdx
@@ -3,8 +3,6 @@ title: Payment Gateways
description: Configure payment gateways for Storefront — Stripe, Braintree, QPay, Manual, and Cash on Delivery.
---
-# Payment Gateways
-
To accept payments, configure one or more **Payment Gateways** in your store or network settings. Storefront supports four gateway schemas, plus a separate Cash on Delivery toggle.
Navigate to **Storefront → Settings → Gateways** to configure gateways.
diff --git a/content/docs/storefront/orders/service-quotes.mdx b/content/docs/storefront/orders/service-quotes.mdx
index 5e4637c9..14f77ffd 100644
--- a/content/docs/storefront/orders/service-quotes.mdx
+++ b/content/docs/storefront/orders/service-quotes.mdx
@@ -3,8 +3,6 @@ title: Service Quotes
description: Storefront calls Fleet-Ops to compute the delivery fee for a cart — the result is a Service Quote that's passed into checkout.
---
-# Service Quotes
-
A **Service Quote** is the calculated delivery fee for a cart. Before a customer can check out, your frontend asks Storefront to produce a quote based on the cart contents, the customer's delivery address, and the applicable Fleet-Ops Service Rate.
The quote is then passed into [`/checkouts/before`](/docs/storefront/orders/checkout) so the order is created with the correct delivery fee.
diff --git a/content/docs/storefront/promotions/push-notifications.mdx b/content/docs/storefront/promotions/push-notifications.mdx
index 1bd77e9a..98270544 100644
--- a/content/docs/storefront/promotions/push-notifications.mdx
+++ b/content/docs/storefront/promotions/push-notifications.mdx
@@ -3,8 +3,6 @@ title: Push Notifications
description: Send broadcast or targeted push notifications to your customers via APNs (iOS) and FCM (Android).
---
-# Push Notifications
-
Push notifications let you re-engage customers and announce new products. Storefront's push engine supports **Apple Push Notification service (APNs)** for iOS and **Firebase Cloud Messaging (FCM)** for Android.
## Prerequisites
diff --git a/content/docs/storefront/settings/api.mdx b/content/docs/storefront/settings/api.mdx
index 364307ff..28ed9ba5 100644
--- a/content/docs/storefront/settings/api.mdx
+++ b/content/docs/storefront/settings/api.mdx
@@ -3,8 +3,6 @@ title: API Settings
description: Your Storefront key authenticates public requests from your customer-facing app — pass it as a bearer token on every API call.
---
-# API Settings
-
Every store and network in Storefront has a unique **public key** that authenticates requests from your customer-facing app (mobile or web). The key is passed as a bearer token in the standard HTTP `Authorization` header.
Navigate to **Storefront → Settings → API** to view your store's key.
diff --git a/content/docs/storefront/settings/gateways.mdx b/content/docs/storefront/settings/gateways.mdx
index feef157e..f4d7cdad 100644
--- a/content/docs/storefront/settings/gateways.mdx
+++ b/content/docs/storefront/settings/gateways.mdx
@@ -3,8 +3,6 @@ title: Gateway Settings
description: Configure payment gateways for your store or network — Stripe, Braintree, QPay, Manual, and Cash on Delivery.
---
-# Gateway Settings
-
**Gateways** are the payment processors your store uses to accept payments at checkout. Configure gateways in **Storefront → Settings → Gateways**.
Gateways can be configured at the **store level** (applies to one store) or the **network level** (applies to all stores in the network).
diff --git a/content/docs/storefront/settings/locations.mdx b/content/docs/storefront/settings/locations.mdx
index d5f789ba..32121ef4 100644
--- a/content/docs/storefront/settings/locations.mdx
+++ b/content/docs/storefront/settings/locations.mdx
@@ -3,8 +3,6 @@ title: Location Settings
description: Manage your active store's pickup locations and per-location operating hours.
---
-# Location Settings
-
The **Locations** settings page is where you add, edit, and remove the **pickup addresses** for the currently active store. It is also where you set per-location **operating hours**.
Navigate to **Storefront → Settings → Locations**. Make sure the correct store is selected via the store switcher first — every location you create here belongs to the active store.
diff --git a/content/docs/storefront/settings/notifications.mdx b/content/docs/storefront/settings/notifications.mdx
index 99c8de3d..da170226 100644
--- a/content/docs/storefront/settings/notifications.mdx
+++ b/content/docs/storefront/settings/notifications.mdx
@@ -3,8 +3,6 @@ title: Notification Settings
description: Configure APNs and FCM notification channels so Storefront can deliver push notifications to your customers.
---
-# Notification Settings
-
**Notification channels** connect Storefront to Apple Push Notification service (APNs) or Firebase Cloud Messaging (FCM) so you can deliver push notifications to your customers' devices.
Navigate to **Storefront → Settings → Notifications** to manage channels.
diff --git a/content/docs/storefront/stores/food-trucks.mdx b/content/docs/storefront/stores/food-trucks.mdx
index 40692f9b..e75413a2 100644
--- a/content/docs/storefront/stores/food-trucks.mdx
+++ b/content/docs/storefront/stores/food-trucks.mdx
@@ -3,8 +3,6 @@ title: Food Trucks
description: Configure mobile store locations — food trucks and pop-up shops linked to Fleet-Ops vehicles for live GPS positioning, with multi-catalog assignment.
---
-# Food Trucks
-
Storefront supports **mobile stores** — food trucks, pop-up shops, and any merchant whose location changes day to day. A **FoodTruck** is its own entity that links a store to a Fleet-Ops **Vehicle** for live GPS positioning, and to one or more **Catalogs** for menu management.
Navigate to **Storefront → Food Trucks** to manage mobile stores.
diff --git a/content/docs/storefront/stores/operating-hours.mdx b/content/docs/storefront/stores/operating-hours.mdx
index 57503314..31eeb768 100644
--- a/content/docs/storefront/stores/operating-hours.mdx
+++ b/content/docs/storefront/stores/operating-hours.mdx
@@ -3,8 +3,6 @@ title: Operating Hours
description: Set per-location availability windows — customers cannot place orders outside operating hours.
---
-# Operating Hours
-
**Operating Hours** define when a store location accepts orders. Hours are set **per location** (not per store) using the schedule manager on the location's edit panel.
Each store has a `timezone` field — operating hours are evaluated against this timezone, not the customer's local time or the server's UTC clock. Set the store's timezone correctly before configuring hours.
diff --git a/content/docs/storefront/stores/overview.mdx b/content/docs/storefront/stores/overview.mdx
index 07e63901..c3c2b6b0 100644
--- a/content/docs/storefront/stores/overview.mdx
+++ b/content/docs/storefront/stores/overview.mdx
@@ -3,8 +3,6 @@ title: Stores
description: A Store is a single brand or merchant in Storefront — its own catalog, locations, hours, payment gateways, and API key.
---
-# Stores
-
A **Store** represents a single brand or merchant in Storefront. Every store has:
- Its own **product catalog** (products and categories)
diff --git a/content/docs/storefront/stores/setup.mdx b/content/docs/storefront/stores/setup.mdx
index 9b9cdc1c..8e66864d 100644
--- a/content/docs/storefront/stores/setup.mdx
+++ b/content/docs/storefront/stores/setup.mdx
@@ -3,8 +3,6 @@ title: Creating a Store
description: Create and configure an individual Storefront store — basic details, branding, contact info, and store-level settings.
---
-# Creating a Store
-
This guide covers creating and configuring a single store. For multi-vendor marketplaces, see [Networks](/docs/storefront/networks/overview).
## Creating a Store
diff --git a/content/docs/storefront/stores/store-locations.mdx b/content/docs/storefront/stores/store-locations.mdx
index 421ea8eb..c101d9be 100644
--- a/content/docs/storefront/stores/store-locations.mdx
+++ b/content/docs/storefront/stores/store-locations.mdx
@@ -3,8 +3,6 @@ title: Store Locations
description: Add physical locations to your store — used as pickup addresses for Fleet-Ops delivery orders.
---
-# Store Locations
-
A **Store Location** is the physical address of a store. When a customer places an order, the location address becomes the **pickup address** in the Fleet-Ops order — the point where the driver collects the items for delivery.
A single store can have multiple locations (e.g., a franchise with five branches). Locations are managed centrally for the active store under **Storefront → Settings → Locations**.
diff --git a/content/docs/ui/actions/button.mdx b/content/docs/ui/actions/button.mdx
index a6a5360b..5737924c 100644
--- a/content/docs/ui/actions/button.mdx
+++ b/content/docs/ui/actions/button.mdx
@@ -3,8 +3,6 @@ title: Button
description: " is the standard button component. Supports types, sizes, icons, loading state, permission gating, tooltips, and analytics events."
---
-# ``
-
The standard button used everywhere in the Fleetbase Console. Supports semantic types, sizes, icons, loading state, built-in permission checks, tooltips, and analytics events.
## Basic Usage
diff --git a/content/docs/ui/actions/click-to-copy.mdx b/content/docs/ui/actions/click-to-copy.mdx
index 80fc24f8..67390a94 100644
--- a/content/docs/ui/actions/click-to-copy.mdx
+++ b/content/docs/ui/actions/click-to-copy.mdx
@@ -3,8 +3,6 @@ title: ClickToCopy
description: " wraps any value with a one-click copy-to-clipboard interaction. Hover shows a tooltip; click copies."
---
-# ``
-
Wraps any value with a one-click copy-to-clipboard action. Hovering shows a "Click to copy" tooltip; clicking copies the value and the tooltip flips to "Copied!".
Used everywhere a user might need to grab an ID, public key, or generated token — auto-generated public IDs in tables, API keys in settings, gateway transaction references in audit logs.
diff --git a/content/docs/ui/actions/click-to-reveal.mdx b/content/docs/ui/actions/click-to-reveal.mdx
index 51e02aa0..e49e0aa3 100644
--- a/content/docs/ui/actions/click-to-reveal.mdx
+++ b/content/docs/ui/actions/click-to-reveal.mdx
@@ -3,8 +3,6 @@ title: ClickToReveal
description: " blurs a sensitive value (API key, password, token) until the user clicks 'Click to reveal'. Optionally enables click-to-copy after reveal."
---
-# ``
-
Renders a value that's **blurred by default** with a "Click to reveal" button overlay. Used for sensitive values like API keys, secret tokens, webhook signing secrets — values you want visible only on demand.
Extends [``](/docs/ui/actions/click-to-copy) — once revealed, the wrapper can also act as a click-to-copy target.
diff --git a/content/docs/ui/builders/report-builder.mdx b/content/docs/ui/builders/report-builder.mdx
index a6314431..eb882d92 100644
--- a/content/docs/ui/builders/report-builder.mdx
+++ b/content/docs/ui/builders/report-builder.mdx
@@ -3,8 +3,6 @@ title: ReportBuilder
description: " is a visual query builder for constructing reports — pick tables, columns, filters, sorts, and group-bys, then preview live results."
---
-# ``
-
`` is a visual query builder for constructing custom reports. The user picks tables and columns, applies filters and sorts, and previews the resulting data live. The configuration is persisted as a `query_config` JSON object on a Report record.
## Basic Usage
diff --git a/content/docs/ui/builders/template-builder.mdx b/content/docs/ui/builders/template-builder.mdx
index d6231ad6..3d637918 100644
--- a/content/docs/ui/builders/template-builder.mdx
+++ b/content/docs/ui/builders/template-builder.mdx
@@ -3,8 +3,6 @@ title: TemplateBuilder
description: " is a drag-and-drop layout editor for HTML templates with variable interpolation. Used by Ledger invoice templates and any template-driven feature."
---
-# ``
-
`` is a complete drag-and-drop editor for designing templates that mix static layout with dynamic variables. It's the engine behind Ledger's invoice templates and is reusable for any template-driven feature.
The builder supports text, images, tables, lines, shapes, QR codes, and barcodes — each freely positioned, rotated, and styled. Variables (e.g. `{invoice.number}`, `{transaction.reference}`) are inserted via a variable picker that's powered by **context schemas** registered with the template render service.
diff --git a/content/docs/ui/dashboard/overview.mdx b/content/docs/ui/dashboard/overview.mdx
index 529f3985..31d2609e 100644
--- a/content/docs/ui/dashboard/overview.mdx
+++ b/content/docs/ui/dashboard/overview.mdx
@@ -3,8 +3,6 @@ title: Overview
description: How dashboards work in @fleetbase/ember-ui — the dashboard service, widgets, and widget registries.
---
-# Dashboards
-
`@fleetbase/ember-ui` ships a complete dashboard subsystem — a [`dashboard` service](/docs/ui/dashboard/service) for managing dashboards, a `` component for rendering them, plus stat widgets and a Universe-backed widget registry that lets extensions contribute widgets to each other.
Most extension authors don't render `` directly — the console hosts a dashboard page for each extension that supports them, driven by the service.
@@ -103,7 +101,7 @@ See real examples:
- [Dashboard Service](/docs/ui/dashboard/service) — full API
- [Registry & Slots](/docs/ui/registry/overview) — the broader registration model
-- [Universe](/docs/extension-development/universe) — the underlying registry system
+- [Universe](/docs/extension-development/universe/overview) — the underlying registry system
## Source
diff --git a/content/docs/ui/dashboard/service.mdx b/content/docs/ui/dashboard/service.mdx
index c7a89600..8a4912c2 100644
--- a/content/docs/ui/dashboard/service.mdx
+++ b/content/docs/ui/dashboard/service.mdx
@@ -3,8 +3,6 @@ title: Dashboard Service
description: "The `dashboard` service manages an extension's dashboards — load, switch, create, delete — and tracks edit state and widget panels."
---
-# Dashboard Service
-
```js
@service dashboard;
```
diff --git a/content/docs/ui/display/activity-log.mdx b/content/docs/ui/display/activity-log.mdx
index 236d6155..e469db9e 100644
--- a/content/docs/ui/display/activity-log.mdx
+++ b/content/docs/ui/display/activity-log.mdx
@@ -3,8 +3,6 @@ title: ActivityLog
description: " renders a compact activity timeline — auto-fetches from the `activity` model, supports date-range filtering, and previews changed attributes."
---
-# ``
-
`` renders a compact timeline of activity records (user and system actions). It auto-fetches activities from the `activity` Ember Data model, displays relative timestamps, and summarizes creates, deletes, and changed attributes in a sentence-style feed.
When an activity changes more than one attribute, the attribute count opens a hover popover with the changed fields and their previous/new values.
diff --git a/content/docs/ui/display/badge.mdx b/content/docs/ui/display/badge.mdx
index 6ee92a48..429b92e9 100644
--- a/content/docs/ui/display/badge.mdx
+++ b/content/docs/ui/display/badge.mdx
@@ -3,8 +3,6 @@ title: Badge
description: " is a small status pill — used everywhere to show order statuses, account states, and categorical labels."
---
-# ``
-
`` renders a colored pill with a status dot and a label. It's the canonical way to display:
- Order statuses (`created`, `dispatched`, `completed`, `canceled`)
diff --git a/content/docs/ui/display/comment-thread.mdx b/content/docs/ui/display/comment-thread.mdx
index de31256d..4a35077d 100644
--- a/content/docs/ui/display/comment-thread.mdx
+++ b/content/docs/ui/display/comment-thread.mdx
@@ -3,8 +3,6 @@ title: CommentThread
description: " renders a comment input + thread of existing comments for a resource. Persists via the `comment` Ember Data model."
---
-# ``
-
`` renders a textarea for posting new comments plus a thread of existing comments. Comments persist via the `comment` Ember Data model and are scoped to the subject record you pass in.
## Basic Usage
diff --git a/content/docs/ui/display/file.mdx b/content/docs/ui/display/file.mdx
index 3d84fd7c..a94a6b87 100644
--- a/content/docs/ui/display/file.mdx
+++ b/content/docs/ui/display/file.mdx
@@ -3,8 +3,6 @@ title: File
description: " renders a file card with preview (image thumbnail or icon), filename, and an optional actions dropdown. Pair with for inline icons."
---
-# ``
-
`` renders a card-style preview of a Fleetbase `file` record. It shows the image thumbnail (for images) or a file-type icon (for everything else), the truncated filename, and an optional actions dropdown with delete/download/preview entries.
For a smaller inline icon, use ``.
diff --git a/content/docs/ui/display/pill.mdx b/content/docs/ui/display/pill.mdx
index 47665761..1ba77c21 100644
--- a/content/docs/ui/display/pill.mdx
+++ b/content/docs/ui/display/pill.mdx
@@ -3,8 +3,6 @@ title: Pill
description: " renders an avatar + name + optional subtitle for a Fleetbase resource — driver, customer, vehicle, etc. Optional online indicator and tooltip."
---
-# ``
-
`` is a compact representation of a Fleetbase resource — typically used in lists, table cells, and assignment widgets. It shows the resource's image (with fallback), name, optional subtitle, and an online indicator if the resource has an `online` property.
For categorical / status labels, use [``](/docs/ui/display/badge) instead.
diff --git a/content/docs/ui/display/progress-bar.mdx b/content/docs/ui/display/progress-bar.mdx
index b9f6d1b0..805dc5ea 100644
--- a/content/docs/ui/display/progress-bar.mdx
+++ b/content/docs/ui/display/progress-bar.mdx
@@ -3,8 +3,6 @@ title: ProgressBar
description: " is a linear progress indicator with a title and percentage. Used for uploads, multi-step flows, and KPI completion."
---
-# ``
-
A simple linear progress indicator with a title on the left and a percentage on the right.
## Basic Usage
diff --git a/content/docs/ui/display/spinner.mdx b/content/docs/ui/display/spinner.mdx
index aee2f035..26c37d4c 100644
--- a/content/docs/ui/display/spinner.mdx
+++ b/content/docs/ui/display/spinner.mdx
@@ -3,8 +3,6 @@ title: Spinner
description: " shows a small loading indicator. Used inside buttons, panels, and lists while async work is in flight."
---
-# ``
-
A simple loading spinner. Use it inside buttons, panel headers, list rows, or anywhere you need to indicate pending work.
`` already shows a spinner internally when you pass `@isLoading={{true}}` — you usually don't need `` directly inside buttons.
diff --git a/content/docs/ui/display/table.mdx b/content/docs/ui/display/table.mdx
index 9df83464..33a08e08 100644
--- a/content/docs/ui/display/table.mdx
+++ b/content/docs/ui/display/table.mdx
@@ -3,8 +3,6 @@ title: Table
description: " is the standard data table component — sortable, resizable, selectable, expandable, with pagination support and pluggable cell components."
---
-# ``
-
`` is the standard data table for resource lists. It supports sortable columns, resizable columns, row selection (single and bulk), expandable rows, custom cell components, and pagination.
For full resource pages with search, filters, and bulk actions, prefer [``](/docs/ui/layout/resource-tabular) — it's a higher-level wrapper around ``.
diff --git a/content/docs/ui/display/timeline.mdx b/content/docs/ui/display/timeline.mdx
index 03da1460..16b86a45 100644
--- a/content/docs/ui/display/timeline.mdx
+++ b/content/docs/ui/display/timeline.mdx
@@ -3,8 +3,6 @@ title: Timeline
description: " renders a horizontal timeline of activities with navigation arrows. Yields a curried component to compose each entry."
---
-# ``
-
`` renders a horizontal scrolling timeline of activities. The user navigates with left/right arrow buttons. Each visible activity is yielded as a curried `` component for you to compose.
## Basic Usage
diff --git a/content/docs/ui/getting-started/core-concepts.mdx b/content/docs/ui/getting-started/core-concepts.mdx
index 7603ef24..682e27c7 100644
--- a/content/docs/ui/getting-started/core-concepts.mdx
+++ b/content/docs/ui/getting-started/core-concepts.mdx
@@ -3,8 +3,6 @@ title: Core Concepts
description: How ember-ui is structured — components, helpers, modifiers, services, and the conventions that make every Fleetbase extension feel native.
---
-# Core Concepts
-
`@fleetbase/ember-ui` is a standard Ember addon. If you're new to Ember, the four concepts below are the only ones you need before reading the rest of this section.
## Components
diff --git a/content/docs/ui/getting-started/installation.mdx b/content/docs/ui/getting-started/installation.mdx
index 37647a03..88f8867f 100644
--- a/content/docs/ui/getting-started/installation.mdx
+++ b/content/docs/ui/getting-started/installation.mdx
@@ -3,8 +3,6 @@ title: Installation
description: "@fleetbase/ember-ui is bundled into every Fleetbase extension by default — this page covers what's installed automatically and how to add it manually if needed."
---
-# Installation
-
In nearly every case **you don't need to install `@fleetbase/ember-ui` manually**. Every extension scaffolded with [`flb scaffold`](/docs/cli/extension-development/scaffold) already includes the library as a dependency, alongside the engine wiring needed to load it.
```jsonc
diff --git a/content/docs/ui/helpers/data.mdx b/content/docs/ui/helpers/data.mdx
index 8121f157..cee245b4 100644
--- a/content/docs/ui/helpers/data.mdx
+++ b/content/docs/ui/helpers/data.mdx
@@ -3,8 +3,6 @@ title: Data & Utility Helpers
description: Helpers for data manipulation, model access, navigation, and general utility — get-dot-prop, set-model-attr, json-stringify, transition-to, and many more.
---
-# Data & Utility Helpers
-
This page covers the rest of the helper library — data manipulation, model access, navigation, and miscellaneous utilities.
## Data Access
diff --git a/content/docs/ui/helpers/formatting.mdx b/content/docs/ui/helpers/formatting.mdx
index 039614f5..b4400896 100644
--- a/content/docs/ui/helpers/formatting.mdx
+++ b/content/docs/ui/helpers/formatting.mdx
@@ -3,8 +3,6 @@ title: Formatting Helpers
description: Helpers for formatting bytes, currency, dates, durations, distances, file names, and humanizing strings.
---
-# Formatting Helpers
-
These helpers convert raw values into display-ready strings. All are globally available in any template — no import needed.
## `{{format-bytes value}}`
diff --git a/content/docs/ui/helpers/modifiers.mdx b/content/docs/ui/helpers/modifiers.mdx
index 568668ec..271b5b8b 100644
--- a/content/docs/ui/helpers/modifiers.mdx
+++ b/content/docs/ui/helpers/modifiers.mdx
@@ -3,8 +3,6 @@ title: Modifiers
description: Element modifiers from @fleetbase/ember-ui — set-height, set-width, imask, background-url, fallback-img-src, and more.
---
-# Modifiers
-
Modifiers attach behavior to an element. They look like helpers but apply to the element rather than producing a value:
```handlebars
diff --git a/content/docs/ui/helpers/permissions.mdx b/content/docs/ui/helpers/permissions.mdx
index ee8e6e73..6893236d 100644
--- a/content/docs/ui/helpers/permissions.mdx
+++ b/content/docs/ui/helpers/permissions.mdx
@@ -3,8 +3,6 @@ title: Permission Helpers
description: Helpers for conditional rendering based on IAM permissions — can-action, cannot-action, can-delete, can-write, and friends.
---
-# Permission Helpers
-
These helpers wrap [`ember-can`](https://github.com/minutebase/ember-can) abilities to make permission gating concise in templates. They are pure functions — passing them stale arguments returns stale answers, so write the ability string inline rather than computing it externally.
For declarative gating on individual components, prefer the built-in `@permission` arg on ``, ``, ``, etc. Use these helpers when the component itself doesn't accept `@permission` or when you need to gate arbitrary markup.
diff --git a/content/docs/ui/helpers/type-checking.mdx b/content/docs/ui/helpers/type-checking.mdx
index c3b1d30b..dd15c0f3 100644
--- a/content/docs/ui/helpers/type-checking.mdx
+++ b/content/docs/ui/helpers/type-checking.mdx
@@ -3,8 +3,6 @@ title: Type Checking Helpers
description: Helpers for inspecting and asserting on values — is-array, is-model, is-url, is-uuid, in-array, is-object-empty, is-dark-mode, and more.
---
-# Type Checking Helpers
-
These helpers return booleans describing a value's shape or contents. Useful for `{{#if}}` branches in templates.
## `{{is-array value}}`
diff --git a/content/docs/ui/inputs/checkbox.mdx b/content/docs/ui/inputs/checkbox.mdx
index 37e9aa9e..c8b224ef 100644
--- a/content/docs/ui/inputs/checkbox.mdx
+++ b/content/docs/ui/inputs/checkbox.mdx
@@ -3,8 +3,6 @@ title: Checkbox
description: " is the standard boolean checkbox. Supports labels, permission gating, help text, and a yielded block for rich label content."
---
-# ``
-
The standard checkbox for boolean inputs. Use this when you need a checkbox specifically — for an on/off switch, prefer [``](/docs/ui/inputs/toggle).
## Basic Usage
diff --git a/content/docs/ui/inputs/combo-box.mdx b/content/docs/ui/inputs/combo-box.mdx
index 5f6b8bf8..5fcdcc0d 100644
--- a/content/docs/ui/inputs/combo-box.mdx
+++ b/content/docs/ui/inputs/combo-box.mdx
@@ -3,8 +3,6 @@ title: ComboBox
description: " is a dual-list selector — left column shows available options, right column shows selected options, with arrow buttons to move items between."
---
-# ``
-
`` is a dual-list selector — sometimes called a "shuttle" or "transfer list". The left column lists available options, the right column lists selected options, and arrow buttons move items between the two.
This is **not** the same pattern as a typeahead/autocomplete. For that, use [``](/docs/ui/inputs/select), [``](/docs/ui/inputs/model-select), or [``](/docs/ui/inputs/multi-select).
diff --git a/content/docs/ui/inputs/coordinates-input.mdx b/content/docs/ui/inputs/coordinates-input.mdx
index 6eda4f9b..41ca5bb5 100644
--- a/content/docs/ui/inputs/coordinates-input.mdx
+++ b/content/docs/ui/inputs/coordinates-input.mdx
@@ -3,8 +3,6 @@ title: CoordinatesInput
description: " renders side-by-side lat/lng fields with a map-picker dropdown that supports drag-to-place and address geocoding."
---
-# ``
-
Lets a user enter or pick a geographic coordinate. Renders two text inputs (latitude and longitude) plus a "Select from map" dropdown that opens a Leaflet map with a draggable marker and an address-lookup field.
For binding directly to an Ember Data record, see the sibling `` (same component, but updates `record.location` automatically).
diff --git a/content/docs/ui/inputs/date-picker.mdx b/content/docs/ui/inputs/date-picker.mdx
index e9de5923..b77233b2 100644
--- a/content/docs/ui/inputs/date-picker.mdx
+++ b/content/docs/ui/inputs/date-picker.mdx
@@ -3,8 +3,6 @@ title: DatePicker
description: " is the calendar date picker — wraps `air-datepicker`. Accepts the full air-datepicker option set plus Fleetbase-friendly callbacks."
---
-# ``
-
A calendar-based date picker. Internally wraps the [`air-datepicker`](https://air-datepicker.com) library — every air-datepicker option is supported as an `@`-arg.
For combined date + time inputs, use [``](/docs/ui/inputs/date-time-input).
diff --git a/content/docs/ui/inputs/date-time-input.mdx b/content/docs/ui/inputs/date-time-input.mdx
index 94ef68d4..4b056f22 100644
--- a/content/docs/ui/inputs/date-time-input.mdx
+++ b/content/docs/ui/inputs/date-time-input.mdx
@@ -3,8 +3,6 @@ title: DateTimeInput
description: " is a combined HTML date + time picker. Renders side-by-side native inputs and emits a JavaScript Date on change."
---
-# ``
-
A simple combined date + time input. Renders two side-by-side native HTML inputs (` ` and ` `) and emits a `Date` instance whenever either changes.
For a calendar-style picker, use [``](/docs/ui/inputs/date-picker).
diff --git a/content/docs/ui/inputs/file-upload.mdx b/content/docs/ui/inputs/file-upload.mdx
index 20e0b162..75e9b3a2 100644
--- a/content/docs/ui/inputs/file-upload.mdx
+++ b/content/docs/ui/inputs/file-upload.mdx
@@ -3,8 +3,6 @@ title: FileUpload
description: " wraps `ember-file-upload`'s file-queue helper for triggered uploads. Yields the queue so you can compose any trigger UI. Pair with for a ready-made trigger."
---
-# ``
-
`` is a thin wrapper around `ember-file-upload`'s file-queue helper. It exposes a hidden file input and yields the queue so you can compose any trigger you like — a button, a panel, a drag area.
For a ready-made button trigger, use [``](#upload-button) (covered below).
diff --git a/content/docs/ui/inputs/input-group.mdx b/content/docs/ui/inputs/input-group.mdx
index c208ecbe..9bc72369 100644
--- a/content/docs/ui/inputs/input-group.mdx
+++ b/content/docs/ui/inputs/input-group.mdx
@@ -3,8 +3,6 @@ title: InputGroup
description: " wraps a label, an input, and helper text into a single form field. The most-used component in @fleetbase/ember-ui — every form is built from these."
---
-# ``
-
`` is the canonical way to lay out a labeled form field. It renders a label, an input, optional help text, and supports any custom input via a yielded block.
It is the most-used component in `@fleetbase/ember-ui` — practically every form in the Fleetbase Console is composed from these.
diff --git a/content/docs/ui/inputs/model-coordinates-input.mdx b/content/docs/ui/inputs/model-coordinates-input.mdx
index 9cf04289..8ab3213e 100644
--- a/content/docs/ui/inputs/model-coordinates-input.mdx
+++ b/content/docs/ui/inputs/model-coordinates-input.mdx
@@ -3,8 +3,6 @@ title: ModelCoordinatesInput
description: " wraps for binding directly to a Fleetbase Ember Data model — auto-updates the record's `location` property and reverse-geocodes the address into the model."
---
-# ``
-
`` is a thin wrapper around [``](/docs/ui/inputs/coordinates-input) that binds directly to an Ember Data record. When the user moves the map marker, the record's `location` property is updated and Fleetbase's reverse-geocoder fills in `street1`, `city`, `country`, etc. on the same record.
Use this when you have a model with a GeoJSON `location` field — `Place`, `StoreLocation`, `Driver`, `FuelReport`, etc. — and want a single component to handle both the coordinate picker and the address auto-fill.
diff --git a/content/docs/ui/inputs/model-select.mdx b/content/docs/ui/inputs/model-select.mdx
index b37ffbb8..971d7d79 100644
--- a/content/docs/ui/inputs/model-select.mdx
+++ b/content/docs/ui/inputs/model-select.mdx
@@ -3,8 +3,6 @@ title: ModelSelect
description: " is a typeahead select for Ember Data records — live-searches the registered store, supports infinite scroll, and accepts the full ember-power-select API."
---
-# ``
-
`` is a typeahead select for Ember Data model records. It live-queries your registered store as the user types and supports infinite scroll. It is the standard way to let a user pick a driver, vehicle, customer, store, or any other Fleetbase resource.
The component wraps `ember-power-select` and accepts that library's full API on top of its own arguments.
diff --git a/content/docs/ui/inputs/money-input.mdx b/content/docs/ui/inputs/money-input.mdx
index c3341414..273a109a 100644
--- a/content/docs/ui/inputs/money-input.mdx
+++ b/content/docs/ui/inputs/money-input.mdx
@@ -3,8 +3,6 @@ title: MoneyInput
description: " is a currency-aware money input — formats as the user types using AutoNumeric and shows the currency symbol on the left. Optional currency picker."
---
-# ``
-
A currency-aware money input. Formats as the user types using `AutoNumeric` and shows the active currency on the left. Optionally lets the user pick a different currency via a built-in dropdown.
## Basic Usage
diff --git a/content/docs/ui/inputs/multi-select.mdx b/content/docs/ui/inputs/multi-select.mdx
index 30156826..5c3ed972 100644
--- a/content/docs/ui/inputs/multi-select.mdx
+++ b/content/docs/ui/inputs/multi-select.mdx
@@ -3,8 +3,6 @@ title: MultiSelect
description: " is a multi-value typeahead select. Thin wrapper around ember-power-select's PowerSelectMultiple."
---
-# ``
-
A multi-value typeahead select. Thin wrapper around `ember-power-select`'s `` with Fleetbase's form styling.
For Ember Data records, prefer [``](/docs/ui/inputs/model-select).
diff --git a/content/docs/ui/inputs/phone-input.mdx b/content/docs/ui/inputs/phone-input.mdx
index 269aa140..54524a85 100644
--- a/content/docs/ui/inputs/phone-input.mdx
+++ b/content/docs/ui/inputs/phone-input.mdx
@@ -3,8 +3,6 @@ title: PhoneInput
description: " wraps `intl-tel-input` for international phone numbers — auto-detects the user's country, formats as you type, and emits E.164."
---
-# ``
-
International phone number input. Wraps the [`intl-tel-input`](https://github.com/jackocnr/intl-tel-input) library to provide a country selector, format-as-you-type, and emits the E.164 format on input.
The user's country is auto-detected from their IP via Fleetbase's geolocation service (with US as the fallback).
diff --git a/content/docs/ui/inputs/select.mdx b/content/docs/ui/inputs/select.mdx
index 2e4d27d4..cfc2dbc8 100644
--- a/content/docs/ui/inputs/select.mdx
+++ b/content/docs/ui/inputs/select.mdx
@@ -3,8 +3,6 @@ title: Select
description: " is the standard HTML-native single-value dropdown. Accepts an options array or hash, supports custom labels, value paths, humanization, and yielded option rendering."
---
-# ``
-
`` is the standard single-value dropdown. It wraps a native `` element with Fleetbase's form styling, plus convenience for option labels, value paths, and humanization.
For an autocomplete / typeahead, use [``](/docs/ui/inputs/combo-box). For selecting a Fleetbase model record, use [``](/docs/ui/inputs/model-select).
diff --git a/content/docs/ui/inputs/toggle.mdx b/content/docs/ui/inputs/toggle.mdx
index c610b86c..65b8e2cb 100644
--- a/content/docs/ui/inputs/toggle.mdx
+++ b/content/docs/ui/inputs/toggle.mdx
@@ -3,8 +3,6 @@ title: Toggle
description: " is the on/off switch for boolean values. Supports labels, custom colors, permission gating, and a yielded block for inline content."
---
-# ``
-
A switch-style on/off input for boolean values. Used everywhere a single boolean flag needs to be set — settings panels, feature flags, "Online" / "Active" toggles.
## Basic Usage
diff --git a/content/docs/ui/inputs/unit-input.mdx b/content/docs/ui/inputs/unit-input.mdx
index f71c07d5..326e9b55 100644
--- a/content/docs/ui/inputs/unit-input.mdx
+++ b/content/docs/ui/inputs/unit-input.mdx
@@ -3,8 +3,6 @@ title: UnitInput
description: " is a numeric input with an attached unit label or unit picker — used for weights, distances, capacities, and any measurement."
---
-# ``
-
A numeric input with a unit label fixed to its right. Optionally lets the user pick a different unit from a dropdown.
Used for weights (`kg`, `lb`), distances (`km`, `mi`), capacities (`L`, `gal`), and similar measurement fields.
diff --git a/content/docs/ui/layout/attach-popover.mdx b/content/docs/ui/layout/attach-popover.mdx
index 39483c41..8376289f 100644
--- a/content/docs/ui/layout/attach-popover.mdx
+++ b/content/docs/ui/layout/attach-popover.mdx
@@ -3,8 +3,6 @@ title: Attach::Popover
description: " renders a floating layer attached to its parent — used for popovers, dropdown menus, and click-triggered floating UIs."
---
-# ``
-
`` renders a floating layer attached to its parent element. Unlike `` (which is configured for transient hover hints), the Popover is configured for richer interactions — click triggers, persistent visibility, and `@interactive` content the user can mouse into.
It uses `` under the hood for positioning.
diff --git a/content/docs/ui/layout/attach-tooltip.mdx b/content/docs/ui/layout/attach-tooltip.mdx
index b33655c2..ff57bf8c 100644
--- a/content/docs/ui/layout/attach-tooltip.mdx
+++ b/content/docs/ui/layout/attach-tooltip.mdx
@@ -3,8 +3,6 @@ title: Attach::Tooltip
description: " renders a tooltip attached to its parent element. Wraps with tooltip-friendly defaults — hover/focus triggers, top placement, fade animation."
---
-# ``
-
`` renders a tooltip floating layer attached to its parent element. It is a thin wrapper around [``](/docs/ui/layout/attach-popover) with sensible tooltip defaults — shows on `mouseenter focus`, hides on `mouseleave blur escapekey`, with `top` placement.
This is the canonical tooltip primitive used throughout `@fleetbase/ember-ui`. Most other components (``, ``, ``, etc.) have built-in tooltip behavior driven by their `@helpText` arg — under the hood they're rendering ``.
diff --git a/content/docs/ui/layout/content-panel.mdx b/content/docs/ui/layout/content-panel.mdx
index e95db38d..b8e1111d 100644
--- a/content/docs/ui/layout/content-panel.mdx
+++ b/content/docs/ui/layout/content-panel.mdx
@@ -3,8 +3,6 @@ title: ContentPanel
description: " is the canonical collapsible section used to organize forms, settings, and detail views. Supports titles, status badges, action buttons, and permission gating."
---
-# ``
-
`` is the standard collapsible panel used to organize a page into discrete sections. Forms, settings groups, detail views, drawers — they all use ContentPanel.
It's collapsible by default. Pass `@open={{true}}` to render expanded.
diff --git a/content/docs/ui/layout/drawer.mdx b/content/docs/ui/layout/drawer.mdx
index adcb2996..cf983b5f 100644
--- a/content/docs/ui/layout/drawer.mdx
+++ b/content/docs/ui/layout/drawer.mdx
@@ -3,8 +3,6 @@ title: Drawer
description: " is a bottom-anchored, height-resizable panel — used for inline detail views, secondary editors, and tray-style UIs."
---
-# ``
-
`` is a bottom-anchored panel with a draggable handle. The user can resize it vertically by dragging the gutter, and optionally double-click a notch to minimize. Used for inline detail views and tray-style UIs.
For a full-screen-edge slide-out panel, use [``](/docs/ui/layout/overlay).
diff --git a/content/docs/ui/layout/floating.mdx b/content/docs/ui/layout/floating.mdx
index 74fdb0c0..cae19d28 100644
--- a/content/docs/ui/layout/floating.mdx
+++ b/content/docs/ui/layout/floating.mdx
@@ -3,8 +3,6 @@ title: Floating
description: " renders content in a floating layer using @floating-ui — the lower-level positioning primitive behind , , and dropdowns."
---
-# ``
-
`` is a low-level utility for rendering an element in a floating layer (typically a portal) and positioning it relative to a trigger. It's used internally by tooltips, popovers, and dropdowns — most extension authors won't reach for it directly, but it's available if you need a custom positioning solution.
## Basic Usage
diff --git a/content/docs/ui/layout/overlay.mdx b/content/docs/ui/layout/overlay.mdx
index 5a0ab685..69ff4ef0 100644
--- a/content/docs/ui/layout/overlay.mdx
+++ b/content/docs/ui/layout/overlay.mdx
@@ -3,8 +3,6 @@ title: Overlay
description: " is a sliding panel that docks to the left/right/top/bottom of the screen. Used for slide-out detail views, side panels, and drawer-like UIs."
---
-# ``
-
`` is a sliding panel that docks to one edge of the screen. It supports minimize / maximize / resize gestures and is the basis for most slide-out detail views in the Fleetbase Console.
For modal dialogs (centered, dimmed background) use the [modals](/docs/ui/modals/overview) system instead.
diff --git a/content/docs/ui/layout/overview.mdx b/content/docs/ui/layout/overview.mdx
index 82049a3b..da1efacd 100644
--- a/content/docs/ui/layout/overview.mdx
+++ b/content/docs/ui/layout/overview.mdx
@@ -3,8 +3,6 @@ title: Overview
description: Top-level layout primitives in @fleetbase/ember-ui — Layout::Container, Layout::Header, Layout::Sidebar, Layout::Section, plus the standalone , , , and .
---
-# Layout Overview
-
`@fleetbase/ember-ui` ships two complementary sets of layout primitives:
1. **Top-level scaffolding** — ``, ``, ``, ``, ``. These compose the overall page chrome.
diff --git a/content/docs/ui/layout/resource-tabular.mdx b/content/docs/ui/layout/resource-tabular.mdx
index fa63f6c5..68746364 100644
--- a/content/docs/ui/layout/resource-tabular.mdx
+++ b/content/docs/ui/layout/resource-tabular.mdx
@@ -3,8 +3,6 @@ title: Resource Layouts
description: ", , , and — pre-built page layouts for resource list views."
---
-# Resource Layouts
-
`@fleetbase/ember-ui` ships four pre-built page layouts for rendering a resource list. They are higher-level wrappers around ``, search, filters, bulk actions, and pagination — drop one in and you get a complete resource page.
| Layout | Component | When to use |
diff --git a/content/docs/ui/layout/spacer.mdx b/content/docs/ui/layout/spacer.mdx
index 7968eccb..7efd18cc 100644
--- a/content/docs/ui/layout/spacer.mdx
+++ b/content/docs/ui/layout/spacer.mdx
@@ -3,8 +3,6 @@ title: Spacer
description: " inserts a fixed-size empty box between layout elements. Any CSS dimension property you pass (height, width, padding, margin, etc.) is applied directly."
---
-# ``
-
A simple utility for adding a fixed amount of empty space between elements. Every argument you pass is applied directly to the element's inline style — so anything that's a valid CSS property name maps through.
## Basic Usage
diff --git a/content/docs/ui/modals/modal-layouts.mdx b/content/docs/ui/modals/modal-layouts.mdx
index 85a38345..e846e825 100644
--- a/content/docs/ui/modals/modal-layouts.mdx
+++ b/content/docs/ui/modals/modal-layouts.mdx
@@ -3,8 +3,6 @@ title: Modal Layouts
description: Pre-built modal layouts in @fleetbase/ember-ui — confirm, alert, prompt, bulk-action, progress, process, loading, and option-prompt.
---
-# Modal Layouts
-
`@fleetbase/ember-ui` ships several pre-built modal layouts. You don't render these directly — you call them via the [`modals-manager`](/docs/ui/modals/modals-manager) service. Each is just a convenience wrapper around `modalsManager.show()` with a layout component preset.
| Layout | Service method | Component |
diff --git a/content/docs/ui/modals/modals-manager.mdx b/content/docs/ui/modals/modals-manager.mdx
index e0159403..0e88e372 100644
--- a/content/docs/ui/modals/modals-manager.mdx
+++ b/content/docs/ui/modals/modals-manager.mdx
@@ -3,8 +3,6 @@ title: Modals Manager Service
description: "The `modals-manager` service is the programmatic API for opening, stacking, and dismissing modals. Returns a Promise that resolves on confirm and rejects on decline."
---
-# Modals Manager Service
-
```js
@service modalsManager;
```
diff --git a/content/docs/ui/modals/overview.mdx b/content/docs/ui/modals/overview.mdx
index e484b6f8..92fec0a6 100644
--- a/content/docs/ui/modals/overview.mdx
+++ b/content/docs/ui/modals/overview.mdx
@@ -3,8 +3,6 @@ title: Overview
description: How modals work in @fleetbase/ember-ui — the modals-manager service, the built-in layouts, and how to build custom modal components.
---
-# Modals
-
Modals in `@fleetbase/ember-ui` are driven by a single service — `modals-manager` — that mounts a component into a portal, manages a stack of nested modals, and exposes a Promise-based API.
## How They Work
diff --git a/content/docs/ui/navigation/dropdown-button.mdx b/content/docs/ui/navigation/dropdown-button.mdx
index e82c99bb..c7078b90 100644
--- a/content/docs/ui/navigation/dropdown-button.mdx
+++ b/content/docs/ui/navigation/dropdown-button.mdx
@@ -3,8 +3,6 @@ title: DropdownButton
description: " is a button that opens a dropdown menu — used for action menus, bulk actions, and grouped controls. Accepts an items array or yields a custom dropdown body."
---
-# ``
-
A button that opens a dropdown panel on click. Used for action menus ("More…"), grouped controls (bulk actions), and any UI where a primary trigger reveals a list of choices.
## Items-Based Usage
diff --git a/content/docs/ui/navigation/tab-navigation.mdx b/content/docs/ui/navigation/tab-navigation.mdx
index f60f1211..9a477dcb 100644
--- a/content/docs/ui/navigation/tab-navigation.mdx
+++ b/content/docs/ui/navigation/tab-navigation.mdx
@@ -3,8 +3,6 @@ title: TabNavigation
description: " renders a tab strip — supports route-driven tabs (LinkTo), state-driven tabs, icons, badges, closable tabs, and an Add-tab button."
---
-# ``
-
`` renders a tab strip with active state, icons, badges, and an optional content area. Tabs can be:
- **Route-driven** — clicking a tab navigates via `LinkTo`
diff --git a/content/docs/ui/navigation/tabs.mdx b/content/docs/ui/navigation/tabs.mdx
index 06353411..454813aa 100644
--- a/content/docs/ui/navigation/tabs.mdx
+++ b/content/docs/ui/navigation/tabs.mdx
@@ -3,8 +3,6 @@ title: Tabs
description: " is the lightweight tab container that yields a curried subcomponent. Each takes a @title and renders its body via Ember Wormhole into the shared content area."
---
-# ``
-
`` is the lightweight tab container in `@fleetbase/ember-ui`. It yields a curried `` subcomponent — each Tab has a `@title` and yields its body content into the shared tab-content area.
For a richer, route-aware tab strip with icons, badges, closable tabs, and an Add-tab button, use [``](/docs/ui/navigation/tab-navigation).
diff --git a/content/docs/ui/registry/overview.mdx b/content/docs/ui/registry/overview.mdx
index 8d214093..3bc509a7 100644
--- a/content/docs/ui/registry/overview.mdx
+++ b/content/docs/ui/registry/overview.mdx
@@ -3,8 +3,6 @@ title: Overview
description: How extensions contribute UI into each other — registries, slots, and the component. Driven by addon/extension.js.
---
-# Registry & Slots
-
Fleetbase extensions are isolated by default — each one ships its own components, services, and routes. But many features are richer when extensions can plug UI into each other:
- A payment-gateway extension contributing a configuration form into Ledger's gateway settings
@@ -210,5 +208,5 @@ These open-source extensions all use `addon/extension.js` to register their cont
## See Also
- [``](/docs/ui/registry/registry-yield) — render registry contributions in templates
-- [Universe](/docs/extension-development/universe) — the full Universe API reference
+- [Universe](/docs/extension-development/universe/overview) — the full Universe API reference
- [Extension Development](/docs/extension-development/getting-started/quickstart) — full extension authoring guide
diff --git a/content/docs/ui/registry/registry-yield.mdx b/content/docs/ui/registry/registry-yield.mdx
index 46ae698f..8fac587a 100644
--- a/content/docs/ui/registry/registry-yield.mdx
+++ b/content/docs/ui/registry/registry-yield.mdx
@@ -3,8 +3,6 @@ title: RegistryYield
description: " renders contributions from other extensions — components or menu items — into a named slot. Drives extension-to-extension UI integration."
---
-# ``
-
`` is the primary mechanism for letting one extension contribute UI into another. It iterates over items in a named registry (components or menu items) and yields each one for you to render.
This is what makes Fleetbase extensible: a payment-gateway extension can register a button in Ledger's gateway settings; an analytics extension can register a chart in the Fleet-Ops dashboard; etc. — without either side knowing the other exists at compile time.
diff --git a/content/docs/ui/scheduling/event-calendar.mdx b/content/docs/ui/scheduling/event-calendar.mdx
index 67b08599..c457dfc2 100644
--- a/content/docs/ui/scheduling/event-calendar.mdx
+++ b/content/docs/ui/scheduling/event-calendar.mdx
@@ -3,8 +3,6 @@ title: EventCalendar / ScheduleCalendar
description: " is a date-grid calendar; is a resource-lane scheduler with drag-and-drop. Both yield blocks for custom item rendering."
---
-# `` and ``
-
Two scheduling components ship in `@fleetbase/ember-ui`:
- **``** — a lightweight calendar for displaying events on a date grid (month/week/day)
diff --git a/content/docs/ui/scheduling/full-calendar.mdx b/content/docs/ui/scheduling/full-calendar.mdx
index 0335dadf..99630762 100644
--- a/content/docs/ui/scheduling/full-calendar.mdx
+++ b/content/docs/ui/scheduling/full-calendar.mdx
@@ -3,8 +3,6 @@ title: FullCalendar
description: " is a full-featured calendar component wrapping FullCalendar.io. Day/week/month/timeline views with drag-and-drop event editing."
---
-# ``
-
`` wraps [FullCalendar.io](https://fullcalendar.io/) for rich calendar UIs — day, week, month, and timeline views with drag-and-drop, event resizing, and resources/lanes for assignment-style schedules.
For driver-style schedules with resource lanes, the higher-level [``](/docs/ui/scheduling/event-calendar) is usually a better fit (it pre-configures FullCalendar for that pattern).
diff --git a/content/docs/ui/scheduling/kanban.mdx b/content/docs/ui/scheduling/kanban.mdx
index 8000b1bc..f26575bd 100644
--- a/content/docs/ui/scheduling/kanban.mdx
+++ b/content/docs/ui/scheduling/kanban.mdx
@@ -3,8 +3,6 @@ title: Kanban
description: " is a draggable board component with configurable columns and item cards. Used for status pipelines, dispatch boards, and any column-based workflow."
---
-# ``
-
`` is a board component with configurable columns and draggable item cards. Items move between columns by drag-and-drop. Used for status pipelines (`To Do` → `In Progress` → `Done`), dispatch boards, order workflow boards, and any column-based UI.
## Basic Usage
diff --git a/content/docs/ui/services/overview.mdx b/content/docs/ui/services/overview.mdx
index 0533c5d8..9826d5c0 100644
--- a/content/docs/ui/services/overview.mdx
+++ b/content/docs/ui/services/overview.mdx
@@ -3,8 +3,6 @@ title: Overview
description: The six injectable services exported by @fleetbase/ember-ui — Modals Manager, Sidebar, Dashboard, Template Builder, Resource Context Panel, Leaflet.
---
-# Services
-
`@fleetbase/ember-ui` exports six injectable Ember services. Inject them like any other Ember service:
```js
diff --git a/content/docs/ui/services/resource-context-panel.mdx b/content/docs/ui/services/resource-context-panel.mdx
index 83102159..9aaeb114 100644
--- a/content/docs/ui/services/resource-context-panel.mdx
+++ b/content/docs/ui/services/resource-context-panel.mdx
@@ -3,8 +3,6 @@ title: Resource Context Panel Service
description: "The `resource-context-panel` service opens contextual detail overlays for any Fleetbase resource — single-content or tabbed, with route-sync and a stack of nested panels."
---
-# Resource Context Panel Service
-
```js
@service resourceContextPanel;
```
diff --git a/content/docs/ui/services/sidebar.mdx b/content/docs/ui/services/sidebar.mdx
index 6e4966cc..408d394e 100644
--- a/content/docs/ui/services/sidebar.mdx
+++ b/content/docs/ui/services/sidebar.mdx
@@ -3,8 +3,6 @@ title: Sidebar Service
description: "The `sidebar` service controls the console sidebar's visibility (visible / minimized / hidden) and enabled state."
---
-# Sidebar Service
-
```js
@service sidebar;
```
diff --git a/content/docs/ui/services/template-builder.mdx b/content/docs/ui/services/template-builder.mdx
index 10866532..b082b50b 100644
--- a/content/docs/ui/services/template-builder.mdx
+++ b/content/docs/ui/services/template-builder.mdx
@@ -3,8 +3,6 @@ title: Template Builder Service
description: "The `template-builder` service lets extensions register Fleetbase model classes as queryable resource types in the TemplateQuery form."
---
-# Template Builder Service
-
```js
@service templateBuilder;
```
diff --git a/next.config.ts b/next.config.ts
index ea7988b2..2e971d91 100644
--- a/next.config.ts
+++ b/next.config.ts
@@ -247,6 +247,32 @@ const nextConfig: NextConfig = {
: []),
],
},
+ async headers() {
+ return [
+ {
+ // Let the CDN serve blog pages the way it already serves docs. Next's
+ // ISR handles regeneration; this makes the shared cache hold the
+ // rendered page for an hour and keep serving it while it revalidates,
+ // so a reader never waits on a cold render.
+ source: '/blog/:path*',
+ headers: [
+ {
+ key: 'Cache-Control',
+ value: 'public, s-maxage=3600, stale-while-revalidate=86400',
+ },
+ ],
+ },
+ {
+ source: '/blog',
+ headers: [
+ {
+ key: 'Cache-Control',
+ value: 'public, s-maxage=3600, stale-while-revalidate=86400',
+ },
+ ],
+ },
+ ];
+ },
async rewrites() {
return [
{
diff --git a/public/images/integrations/android.svg b/public/images/integrations/android.svg
new file mode 100644
index 00000000..c11733a3
--- /dev/null
+++ b/public/images/integrations/android.svg
@@ -0,0 +1 @@
+Android
\ No newline at end of file
diff --git a/public/images/integrations/digitalocean.svg b/public/images/integrations/digitalocean.svg
new file mode 100644
index 00000000..9d575029
--- /dev/null
+++ b/public/images/integrations/digitalocean.svg
@@ -0,0 +1 @@
+DigitalOcean
\ No newline at end of file
diff --git a/public/images/integrations/docker.svg b/public/images/integrations/docker.svg
new file mode 100644
index 00000000..e68a6613
--- /dev/null
+++ b/public/images/integrations/docker.svg
@@ -0,0 +1 @@
+Docker
\ No newline at end of file
diff --git a/public/images/integrations/expo.svg b/public/images/integrations/expo.svg
new file mode 100644
index 00000000..c6222067
--- /dev/null
+++ b/public/images/integrations/expo.svg
@@ -0,0 +1 @@
+Expo
\ No newline at end of file
diff --git a/public/images/integrations/googlemaps.svg b/public/images/integrations/googlemaps.svg
new file mode 100644
index 00000000..2c928cd7
--- /dev/null
+++ b/public/images/integrations/googlemaps.svg
@@ -0,0 +1 @@
+Google Maps
\ No newline at end of file
diff --git a/public/images/integrations/kubernetes.svg b/public/images/integrations/kubernetes.svg
new file mode 100644
index 00000000..b2dded3a
--- /dev/null
+++ b/public/images/integrations/kubernetes.svg
@@ -0,0 +1 @@
+Kubernetes
\ No newline at end of file
diff --git a/public/images/integrations/laravel.svg b/public/images/integrations/laravel.svg
new file mode 100644
index 00000000..36f0035a
--- /dev/null
+++ b/public/images/integrations/laravel.svg
@@ -0,0 +1 @@
+Laravel
\ No newline at end of file
diff --git a/public/images/integrations/mailgun.svg b/public/images/integrations/mailgun.svg
new file mode 100644
index 00000000..e18cc4a2
--- /dev/null
+++ b/public/images/integrations/mailgun.svg
@@ -0,0 +1 @@
+Mailgun
\ No newline at end of file
diff --git a/public/images/integrations/mysql.svg b/public/images/integrations/mysql.svg
new file mode 100644
index 00000000..0948dc48
--- /dev/null
+++ b/public/images/integrations/mysql.svg
@@ -0,0 +1 @@
+MySQL
\ No newline at end of file
diff --git a/public/images/integrations/nextdotjs.svg b/public/images/integrations/nextdotjs.svg
new file mode 100644
index 00000000..42e365b4
--- /dev/null
+++ b/public/images/integrations/nextdotjs.svg
@@ -0,0 +1 @@
+Next.js
\ No newline at end of file
diff --git a/public/images/integrations/nodedotjs.svg b/public/images/integrations/nodedotjs.svg
new file mode 100644
index 00000000..3cc5893e
--- /dev/null
+++ b/public/images/integrations/nodedotjs.svg
@@ -0,0 +1 @@
+Node.js
\ No newline at end of file
diff --git a/public/images/integrations/openstreetmap.svg b/public/images/integrations/openstreetmap.svg
new file mode 100644
index 00000000..81f205af
--- /dev/null
+++ b/public/images/integrations/openstreetmap.svg
@@ -0,0 +1 @@
+OpenStreetMap
\ No newline at end of file
diff --git a/public/images/integrations/php.svg b/public/images/integrations/php.svg
new file mode 100644
index 00000000..92bdc7de
--- /dev/null
+++ b/public/images/integrations/php.svg
@@ -0,0 +1 @@
+PHP
\ No newline at end of file
diff --git a/public/images/integrations/react.svg b/public/images/integrations/react.svg
new file mode 100644
index 00000000..88b9c771
--- /dev/null
+++ b/public/images/integrations/react.svg
@@ -0,0 +1 @@
+React
\ No newline at end of file
diff --git a/public/images/integrations/redis.svg b/public/images/integrations/redis.svg
new file mode 100644
index 00000000..61480c93
--- /dev/null
+++ b/public/images/integrations/redis.svg
@@ -0,0 +1 @@
+Redis
\ No newline at end of file
diff --git a/public/images/integrations/sentry.svg b/public/images/integrations/sentry.svg
new file mode 100644
index 00000000..47888975
--- /dev/null
+++ b/public/images/integrations/sentry.svg
@@ -0,0 +1 @@
+Sentry
\ No newline at end of file
diff --git a/public/images/integrations/shopify.svg b/public/images/integrations/shopify.svg
new file mode 100644
index 00000000..525bd2b9
--- /dev/null
+++ b/public/images/integrations/shopify.svg
@@ -0,0 +1 @@
+Shopify
\ No newline at end of file
diff --git a/public/images/integrations/woocommerce.svg b/public/images/integrations/woocommerce.svg
new file mode 100644
index 00000000..c98039ef
--- /dev/null
+++ b/public/images/integrations/woocommerce.svg
@@ -0,0 +1 @@
+WooCommerce
\ No newline at end of file
diff --git a/src/app/blog/page.tsx b/src/app/blog/page.tsx
index deb80826..b56c4932 100644
--- a/src/app/blog/page.tsx
+++ b/src/app/blog/page.tsx
@@ -10,7 +10,7 @@ export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/blog' },
title: 'Blog',
description:
- 'Product updates, engineering deep-dives, logistics industry insights, and open-source news from the Fleetbase team. Stay up to date with the latest from the platform.',
+ 'Product updates, engineering deep-dives, logistics industry insight and open-source news from the team building Fleetbase.',
keywords: [
'fleetbase blog',
'logistics technology blog',
diff --git a/src/app/compare/page.tsx b/src/app/compare/page.tsx
index 9e0fa028..6100d86a 100644
--- a/src/app/compare/page.tsx
+++ b/src/app/compare/page.tsx
@@ -62,14 +62,10 @@ const COMPARISONS = [
'Route4Me plans routes. Fleetbase does that and more — dispatch, driver management, real-time tracking, POD, WMS, storefront, and accounting in one open-source platform.',
badge: null,
},
- {
- competitor: 'Bringg',
- slug: 'vs-bringg',
- tagline: 'Enterprise delivery management without enterprise pricing.',
- description:
- "Bringg targets large enterprises with custom pricing. Fleetbase gives you enterprise-grade fleet management and TMS for $29 a month plus $5 per driver or vehicle — or free if you self-host.",
- badge: null,
- },
+ // Bringg intentionally omitted: /compare/vs-bringg currently redirects to
+ // this page, so the card linked visitors back to where they already were and
+ // cost a redirect hop in the crawl. The growth plan restores the page
+ // (GP-05), at which point this entry comes back.
];
export default function ComparePage() {
diff --git a/src/app/developers/webhooks/page.tsx b/src/app/developers/webhooks/page.tsx
index 34de3904..5474d2fc 100644
--- a/src/app/developers/webhooks/page.tsx
+++ b/src/app/developers/webhooks/page.tsx
@@ -3,7 +3,7 @@ import WebhooksPageContent from './webhooks-page-content';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/developers/webhooks' },
- title: 'Webhooks | Fleetbase Developer Platform',
+ title: 'Webhooks — Real-Time Event Delivery',
description: 'Use Fleetbase webhooks to receive real-time event notifications for orders, drivers, tracking, and fleet activity in your systems.',
keywords: 'fleetbase webhooks, order webhooks, real-time logistics events, delivery notifications, fleet webhook',
openGraph: {
diff --git a/src/app/oli-max/page.tsx b/src/app/oli-max/page.tsx
index d1ebe09a..96e63f81 100644
--- a/src/app/oli-max/page.tsx
+++ b/src/app/oli-max/page.tsx
@@ -102,7 +102,7 @@ const stackParts = [
title: 'QPay — local payment rails',
description:
'Native QPay integration via the Fleetbase payment gateway driver — Mongolia\'s most-used mobile-first checkout, no Western card friction.',
- docs: '/docs/ledger/payments/gateways',
+ docs: '/docs/ledger/payments/gateways/overview',
},
{
icon: Compass,
diff --git a/src/app/page.tsx b/src/app/page.tsx
index 31f620f5..4f73964d 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -6,6 +6,7 @@ import { OrganizationSchema, SoftwareApplicationSchema, WebSiteSchema } from '@/
import Hero from '@/components/sections/hero';
import PlatformModules from '@/components/sections/platform-modules';
import StatsBar from '@/components/sections/stats-bar';
+import SwitchingCallout from '@/components/sections/switching-callout';
// Below-the-fold sections — split into separate client bundles so the
// initial homepage JS payload stays small. SSR remains on (default) so
@@ -81,6 +82,7 @@ export default async function Home() {
+
>
);
diff --git a/src/app/platform/ai/page.tsx b/src/app/platform/ai/page.tsx
index 071e70e8..06a5733f 100644
--- a/src/app/platform/ai/page.tsx
+++ b/src/app/platform/ai/page.tsx
@@ -7,6 +7,7 @@ import {
} from 'lucide-react';
import { Button } from '@/components/ui/button';
import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card';
+import RelatedPages from '@/components/seo/related-pages';
const AI_REPO = 'https://github.com/fleetbase/ai';
@@ -561,6 +562,7 @@ export default function LogisticsAIPage() {
+
);
}
diff --git a/src/app/platform/developer-console/page.tsx b/src/app/platform/developer-console/page.tsx
index 2e809c2b..9fb937f2 100644
--- a/src/app/platform/developer-console/page.tsx
+++ b/src/app/platform/developer-console/page.tsx
@@ -3,6 +3,7 @@ import type { Metadata } from 'next';
import { SoftwareApplicationSchema } from '@/components/seo/json-ld';
import DeveloperConsolePageContent from './console-page-content';
+import RelatedPages from '@/components/seo/related-pages';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/platform/developer-console' },
@@ -42,6 +43,7 @@ export default function DeveloperConsolePage() {
applicationCategory="DeveloperApplication"
/>
+
>
);
}
diff --git a/src/app/platform/extensions/extensions-page-content.tsx b/src/app/platform/extensions/extensions-page-content.tsx
index c463efb2..c4d5f6cf 100644
--- a/src/app/platform/extensions/extensions-page-content.tsx
+++ b/src/app/platform/extensions/extensions-page-content.tsx
@@ -49,12 +49,15 @@ const categories = [
];
// First-party + community-built integrations available natively or through
-// extensions. Logos: simpleicons CDN where available, otherwise self-hosted
+// extensions. Logos are all self-hosted under /images/integrations: four of
+// them (sendgrid, microsoftazure, amazonaws, twilio) 404'd after Simple Icons
+// renamed or dropped the slugs, and a sales page should not depend on a CDN
+// for anything visible.
// under /public/images/integrations/.
const INTEGRATIONS: { name: string; category: string; logo: string }[] = [
// Maps & Location
- { name: 'Google Maps', category: 'Maps & Location', logo: 'https://cdn.simpleicons.org/googlemaps/4285F4' },
- { name: 'OpenStreetMap', category: 'Maps & Location', logo: 'https://cdn.simpleicons.org/openstreetmap/7EBC6F' },
+ { name: 'Google Maps', category: 'Maps & Location', logo: '/images/integrations/googlemaps.svg' },
+ { name: 'OpenStreetMap', category: 'Maps & Location', logo: '/images/integrations/openstreetmap.svg' },
// Routing & Optimization
{ name: 'OSRM', category: 'Routing & Optimization', logo: '/images/integrations/osrm.svg' },
{ name: 'Valhalla', category: 'Routing & Optimization', logo: '/images/integrations/valhalla.svg' },
@@ -64,38 +67,38 @@ const INTEGRATIONS: { name: string; category: string; logo: string }[] = [
{ name: 'Samsara', category: 'Telematics & Fleet Hardware', logo: '/images/integrations/samsara.svg' },
{ name: 'Geotab', category: 'Telematics & Fleet Hardware', logo: '/images/integrations/geotab.svg' },
// Payments
- { name: 'Stripe', category: 'Payments', logo: 'https://cdn.simpleicons.org/stripe/635BFF' },
+ { name: 'Stripe', category: 'Payments', logo: '/images/integrations/stripe.svg' },
// Communication
- { name: 'Twilio', category: 'Communication', logo: 'https://cdn.simpleicons.org/twilio/F22F46' },
- { name: 'SendGrid', category: 'Communication', logo: 'https://cdn.simpleicons.org/sendgrid/51A9E3' },
- { name: 'Mailgun', category: 'Communication', logo: 'https://cdn.simpleicons.org/mailgun/F06B66' },
+ { name: 'Twilio', category: 'Communication', logo: '/images/integrations/twilio.svg' },
+ { name: 'SendGrid', category: 'Communication', logo: '/images/integrations/sendgrid.svg' },
+ { name: 'Mailgun', category: 'Communication', logo: '/images/integrations/mailgun.svg' },
// Cloud & Infrastructure
- { name: 'AWS', category: 'Cloud & Infrastructure', logo: 'https://cdn.simpleicons.org/amazonaws/FF9900' },
- { name: 'Google Cloud', category: 'Cloud & Infrastructure', logo: 'https://cdn.simpleicons.org/googlecloud/4285F4' },
- { name: 'Microsoft Azure', category: 'Cloud & Infrastructure', logo: 'https://cdn.simpleicons.org/microsoftazure/0078D4' },
- { name: 'DigitalOcean', category: 'Cloud & Infrastructure', logo: 'https://cdn.simpleicons.org/digitalocean/0080FF' },
- { name: 'Docker', category: 'Cloud & Infrastructure', logo: 'https://cdn.simpleicons.org/docker/2496ED' },
- { name: 'Kubernetes', category: 'Cloud & Infrastructure', logo: 'https://cdn.simpleicons.org/kubernetes/326CE5' },
+ { name: 'AWS', category: 'Cloud & Infrastructure', logo: '/images/integrations/amazonaws.svg' },
+ { name: 'Google Cloud', category: 'Cloud & Infrastructure', logo: '/images/integrations/googlecloud.svg' },
+ { name: 'Microsoft Azure', category: 'Cloud & Infrastructure', logo: '/images/integrations/microsoftazure.svg' },
+ { name: 'DigitalOcean', category: 'Cloud & Infrastructure', logo: '/images/integrations/digitalocean.svg' },
+ { name: 'Docker', category: 'Cloud & Infrastructure', logo: '/images/integrations/docker.svg' },
+ { name: 'Kubernetes', category: 'Cloud & Infrastructure', logo: '/images/integrations/kubernetes.svg' },
// Databases
- { name: 'MySQL', category: 'Databases', logo: 'https://cdn.simpleicons.org/mysql/4479A1' },
- { name: 'Redis', category: 'Databases', logo: 'https://cdn.simpleicons.org/redis/DC382D' },
+ { name: 'MySQL', category: 'Databases', logo: '/images/integrations/mysql.svg' },
+ { name: 'Redis', category: 'Databases', logo: '/images/integrations/redis.svg' },
// Developer Tools
- { name: 'GitHub', category: 'Developer Tools', logo: 'https://cdn.simpleicons.org/github/181717' },
- { name: 'Postman', category: 'Developer Tools', logo: 'https://cdn.simpleicons.org/postman/FF6C37' },
+ { name: 'GitHub', category: 'Developer Tools', logo: '/images/integrations/github.svg' },
+ { name: 'Postman', category: 'Developer Tools', logo: '/images/integrations/postman.svg' },
// Monitoring
- { name: 'Sentry', category: 'Monitoring', logo: 'https://cdn.simpleicons.org/sentry/362D59' },
+ { name: 'Sentry', category: 'Monitoring', logo: '/images/integrations/sentry.svg' },
// E-commerce
- { name: 'Shopify', category: 'E-commerce', logo: 'https://cdn.simpleicons.org/shopify/96BF48' },
- { name: 'WooCommerce', category: 'E-commerce', logo: 'https://cdn.simpleicons.org/woocommerce/96588A' },
+ { name: 'Shopify', category: 'E-commerce', logo: '/images/integrations/shopify.svg' },
+ { name: 'WooCommerce', category: 'E-commerce', logo: '/images/integrations/woocommerce.svg' },
// Mobile
- { name: 'Android', category: 'Mobile', logo: 'https://cdn.simpleicons.org/android/3DDC84' },
- { name: 'React Native', category: 'Mobile', logo: 'https://cdn.simpleicons.org/react/61DAFB' },
- { name: 'Expo', category: 'Mobile', logo: 'https://cdn.simpleicons.org/expo/000020' },
+ { name: 'Android', category: 'Mobile', logo: '/images/integrations/android.svg' },
+ { name: 'React Native', category: 'Mobile', logo: '/images/integrations/react.svg' },
+ { name: 'Expo', category: 'Mobile', logo: '/images/integrations/expo.svg' },
// Backend & Framework
- { name: 'Laravel', category: 'Backend & Framework', logo: 'https://cdn.simpleicons.org/laravel/FF2D20' },
- { name: 'Node.js', category: 'Backend & Framework', logo: 'https://cdn.simpleicons.org/nodedotjs/339933' },
- { name: 'Next.js', category: 'Backend & Framework', logo: 'https://cdn.simpleicons.org/nextdotjs/000000' },
- { name: 'PHP', category: 'Backend & Framework', logo: 'https://cdn.simpleicons.org/php/777BB4' },
+ { name: 'Laravel', category: 'Backend & Framework', logo: '/images/integrations/laravel.svg' },
+ { name: 'Node.js', category: 'Backend & Framework', logo: '/images/integrations/nodedotjs.svg' },
+ { name: 'Next.js', category: 'Backend & Framework', logo: '/images/integrations/nextdotjs.svg' },
+ { name: 'PHP', category: 'Backend & Framework', logo: '/images/integrations/php.svg' },
];
const INTEGRATION_CATEGORIES = [...new Set(INTEGRATIONS.map((i) => i.category))];
diff --git a/src/app/platform/extensions/page.tsx b/src/app/platform/extensions/page.tsx
index 14faf886..e16c7868 100644
--- a/src/app/platform/extensions/page.tsx
+++ b/src/app/platform/extensions/page.tsx
@@ -3,6 +3,7 @@ import type { Metadata } from 'next';
import { SoftwareApplicationSchema } from '@/components/seo/json-ld';
import ExtensionsMarketplacePageContent from './extensions-page-content';
+import RelatedPages from '@/components/seo/related-pages';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/platform/extensions' },
@@ -41,6 +42,7 @@ export default function ExtensionsMarketplacePage() {
description="Browse and install Fleetbase extensions in one click, or publish your own and earn from thousands of logistics operators."
/>
+
>
);
}
diff --git a/src/app/platform/fleetops/page.tsx b/src/app/platform/fleetops/page.tsx
index 888fc337..cf661346 100644
--- a/src/app/platform/fleetops/page.tsx
+++ b/src/app/platform/fleetops/page.tsx
@@ -1,8 +1,12 @@
import type { Metadata } from 'next';
import FleetOpsPageContent from './fleetops-page-content';
+import RelatedPages from '@/components/seo/related-pages';
-const TITLE = 'Fleet-Ops — Fleet Management & Dispatch Software | Fleetbase';
+// The layout's title.template appends the brand, so the page title must not.
+// Social cards are not templated, hence the separate branded string.
+const TITLE = 'Fleet-Ops: Fleet Management & Dispatch';
+const SOCIAL_TITLE = 'Fleet-Ops: Fleet Management & Dispatch | Fleetbase';
const DESCRIPTION =
'Open-source fleet management and dispatch software. Real-time GPS tracking, route optimization, configurable workflows and automated dispatch.';
const CANONICAL = 'https://fleetbase.io/platform/fleetops';
@@ -23,14 +27,14 @@ export const metadata: Metadata = {
],
alternates: { canonical: CANONICAL },
openGraph: {
- title: TITLE,
+ title: SOCIAL_TITLE,
description: DESCRIPTION,
type: 'website',
url: CANONICAL,
},
twitter: {
card: 'summary_large_image',
- title: TITLE,
+ title: SOCIAL_TITLE,
description: DESCRIPTION,
},
};
@@ -87,6 +91,7 @@ export default function FleetOpsPage() {
dangerouslySetInnerHTML={{ __html: JSON.stringify(softwareApplicationSchema) }}
/>
+
>
);
}
diff --git a/src/app/platform/ledger/page.tsx b/src/app/platform/ledger/page.tsx
index 24ca5fe5..1cbf354c 100644
--- a/src/app/platform/ledger/page.tsx
+++ b/src/app/platform/ledger/page.tsx
@@ -3,6 +3,7 @@ import type { Metadata } from 'next';
import { SoftwareApplicationSchema } from '@/components/seo/json-ld';
import LedgerPageContent from './ledger-page-content';
+import RelatedPages from '@/components/seo/related-pages';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/platform/ledger' },
@@ -31,6 +32,7 @@ export default function LedgerPage() {
applicationCategory="FinanceApplication"
/>
+
>
);
}
diff --git a/src/app/platform/mobile/page.tsx b/src/app/platform/mobile/page.tsx
index c4caac81..1a6f3073 100644
--- a/src/app/platform/mobile/page.tsx
+++ b/src/app/platform/mobile/page.tsx
@@ -3,6 +3,7 @@ import type { Metadata } from 'next';
import { SoftwareApplicationSchema } from '@/components/seo/json-ld';
import MobileAppsPageContent from './mobile-page-content';
+import RelatedPages from '@/components/seo/related-pages';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/platform/mobile' },
@@ -47,6 +48,7 @@ export default function MobileAppsPage() {
operatingSystem="iOS, Android"
/>
+
>
);
}
diff --git a/src/app/platform/navigator/page.tsx b/src/app/platform/navigator/page.tsx
index 9705e8b4..5eaf2d0f 100644
--- a/src/app/platform/navigator/page.tsx
+++ b/src/app/platform/navigator/page.tsx
@@ -3,6 +3,7 @@ import type { Metadata } from 'next';
import { SoftwareApplicationSchema } from '@/components/seo/json-ld';
import NavigatorPageContent from './navigator-page-content';
+import RelatedPages from '@/components/seo/related-pages';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/platform/navigator' },
@@ -44,6 +45,7 @@ export default function NavigatorPage() {
operatingSystem="iOS, Android"
/>
+
>
);
}
diff --git a/src/app/platform/pallet/page.tsx b/src/app/platform/pallet/page.tsx
index d21b487c..ff247dff 100644
--- a/src/app/platform/pallet/page.tsx
+++ b/src/app/platform/pallet/page.tsx
@@ -3,6 +3,7 @@ import type { Metadata } from 'next';
import { SoftwareApplicationSchema } from '@/components/seo/json-ld';
import PalletPageContent from './pallet-page-content';
+import RelatedPages from '@/components/seo/related-pages';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/platform/pallet' },
@@ -42,6 +43,7 @@ export default function PalletPage() {
description="Open-source warehouse management system for inventory tracking, pick lists, cycle counts, and fulfilment — natively connected to Fleet-Ops dispatch and Storefront orders."
/>
+
>
);
}
diff --git a/src/app/platform/security/page.tsx b/src/app/platform/security/page.tsx
index 5582c1f2..417bacda 100644
--- a/src/app/platform/security/page.tsx
+++ b/src/app/platform/security/page.tsx
@@ -3,6 +3,7 @@ import type { Metadata } from 'next';
import { SoftwareApplicationSchema } from '@/components/seo/json-ld';
import SecurityCompliancePageContent from './security-page-content';
+import RelatedPages from '@/components/seo/related-pages';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/platform/security' },
@@ -47,6 +48,7 @@ export default function SecurityCompliancePage() {
applicationCategory="SecurityApplication"
/>
+
>
);
}
diff --git a/src/app/platform/security/security-page-content.tsx b/src/app/platform/security/security-page-content.tsx
index 45b2b252..4bc008c5 100644
--- a/src/app/platform/security/security-page-content.tsx
+++ b/src/app/platform/security/security-page-content.tsx
@@ -303,7 +303,7 @@ export default function SecurityCompliancePageContent() {
))}
-
+
Self-Hosting Guide
diff --git a/src/app/platform/storefront/page.tsx b/src/app/platform/storefront/page.tsx
index 74cbd47a..0bbbd8f4 100644
--- a/src/app/platform/storefront/page.tsx
+++ b/src/app/platform/storefront/page.tsx
@@ -3,6 +3,7 @@ import type { Metadata } from 'next';
import { SoftwareApplicationSchema } from '@/components/seo/json-ld';
import StorefrontPageContent from './storefront-page-content';
+import RelatedPages from '@/components/seo/related-pages';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/platform/storefront' },
@@ -43,6 +44,7 @@ export default function StorefrontPage() {
description="Open-source headless commerce and multi-vendor marketplace platform with white-label mobile apps, zero commission fees, and native Fleet-Ops delivery integration."
/>
+
>
);
}
diff --git a/src/app/product/page.tsx b/src/app/product/page.tsx
index 076abeb3..a4b75460 100644
--- a/src/app/product/page.tsx
+++ b/src/app/product/page.tsx
@@ -6,7 +6,7 @@ import ProductLogs from '@/components/sections/product-logs';
export const metadata: Metadata = {
alternates: { canonical: 'https://fleetbase.io/product' },
- title: 'Product Overview | Fleetbase Logistics Platform',
+ title: 'Product Overview — The Logistics Platform',
description: 'Discover what Fleetbase can do — real-time fleet tracking, order management, storefront, financial management, and a full developer API.',
keywords: 'fleetbase product, logistics platform features, fleet management software, open source logistics',
openGraph: {
diff --git a/src/app/true-vegan/page.tsx b/src/app/true-vegan/page.tsx
index 13dccb8e..73996716 100644
--- a/src/app/true-vegan/page.tsx
+++ b/src/app/true-vegan/page.tsx
@@ -100,7 +100,7 @@ const stackParts = [
title: 'Stripe — in-app checkout',
description:
'Stripe is wired through the Fleetbase Ledger payment gateway driver. Customers pay in-app with saved cards; tips and order totals flow into the kitchen\'s Stripe dashboard.',
- docs: '/docs/ledger/payments/gateways',
+ docs: '/docs/ledger/payments/gateways/overview',
},
{
icon: Navigation,
diff --git a/src/components/layout/footer.tsx b/src/components/layout/footer.tsx
index d7acf7db..d47a498e 100644
--- a/src/components/layout/footer.tsx
+++ b/src/components/layout/footer.tsx
@@ -66,6 +66,26 @@ const FOOTER_LINKS = [
],
},
{
+ // Role and use-case pages previously had exactly one inbound internal link
+ // each — they existed only in the nav dropdown and on the /solutions hub, so
+ // none of the homepage's authority reached the pages built for buyer intent.
+ title: 'By Role & Use Case',
+ links: [
+ { label: 'Fleet Managers', href: '/solutions/roles/fleet-managers' },
+ { label: 'Operations Managers', href: '/solutions/roles/operations-managers' },
+ { label: 'Warehouse Managers', href: '/solutions/roles/warehouse-managers' },
+ { label: 'Executives', href: '/solutions/roles/executives' },
+ { label: 'Developers', href: '/solutions/roles/developers' },
+ { label: 'Customer Success', href: '/solutions/roles/customer-success' },
+ { label: 'Last-Mile Delivery', href: '/solutions/use-cases/last-mile-delivery' },
+ { label: 'Route Optimization', href: '/solutions/use-cases/route-optimization' },
+ { label: 'Fleet Management', href: '/solutions/use-cases/fleet-management' },
+ { label: 'Order Management', href: '/solutions/use-cases/order-management' },
+ { label: 'Analytics & Reporting', href: '/solutions/use-cases/analytics' },
+ { label: 'API & Integrations', href: '/solutions/use-cases/integrations' },
+ ],
+ },
+ {
title: 'Compare',
links: [
{ label: 'All Comparisons', href: '/compare' },
@@ -177,7 +197,7 @@ const Footer = () => {
{/* Footer Navigation Links */}
-
+
{FOOTER_LINKS.map((section, index) => (
diff --git a/src/components/sections/switching-callout.tsx b/src/components/sections/switching-callout.tsx
new file mode 100644
index 00000000..86648ecd
--- /dev/null
+++ b/src/components/sections/switching-callout.tsx
@@ -0,0 +1,129 @@
+import { ArrowRight } from 'lucide-react';
+import Link from 'next/link';
+
+// The homepage holds almost all of the site's authority — 620 referring pages
+// against 21 for the next best — but linked to the compare pages only through
+// the nav dropdown, and to the role and use-case pages not at all. These are
+// body-copy links so that authority actually flows to the pages built for
+// buyer intent.
+
+const COMPARISONS = [
+ {
+ label: 'Fleetbase vs Onfleet',
+ href: '/compare/vs-onfleet',
+ blurb: 'No per-task pricing, and you can host it yourself.',
+ },
+ {
+ label: 'Fleetbase vs Tookan',
+ href: '/compare/vs-tookan',
+ blurb: 'No agent-based pricing, and the source is yours.',
+ },
+ {
+ label: 'Fleetbase vs Route4Me',
+ href: '/compare/vs-route4me',
+ blurb: 'Routing plus dispatch, WMS and storefront in one platform.',
+ },
+];
+
+const BY_ROLE = [
+ { label: 'Fleet managers', href: '/solutions/roles/fleet-managers' },
+ { label: 'Operations managers', href: '/solutions/roles/operations-managers' },
+ { label: 'Warehouse managers', href: '/solutions/roles/warehouse-managers' },
+ { label: 'Executives', href: '/solutions/roles/executives' },
+ { label: 'Developers', href: '/solutions/roles/developers' },
+ { label: 'Customer success', href: '/solutions/roles/customer-success' },
+];
+
+const BY_USE_CASE = [
+ { label: 'Last-mile delivery', href: '/solutions/use-cases/last-mile-delivery' },
+ { label: 'Route optimization', href: '/solutions/use-cases/route-optimization' },
+ { label: 'Fleet management', href: '/solutions/use-cases/fleet-management' },
+ { label: 'Order management', href: '/solutions/use-cases/order-management' },
+ { label: 'Analytics & reporting', href: '/solutions/use-cases/analytics' },
+ { label: 'API & integrations', href: '/solutions/use-cases/integrations' },
+];
+
+function LinkList({
+ heading,
+ links,
+}: {
+ heading: string;
+ links: { label: string; href: string }[];
+}) {
+ return (
+
+
+ {heading}
+
+
+ {links.map((link) => (
+
+
+ {link.label}
+
+
+ ))}
+
+
+ );
+}
+
+export default function SwitchingCallout() {
+ return (
+
+
+
+
+ Already paying for a delivery or fleet tool?
+
+
+ See how Fleetbase compares on price, ownership and what you actually
+ get — then find the pages written for your team.
+
+
+
+
+ {COMPARISONS.map((item) => (
+
+
+ {item.label}
+
+
+
+ {item.blurb}
+
+
+ ))}
+
+
+
+
+
+
+
+ Still deciding?
+
+
+ Every comparison is written honestly — including where the other
+ tool is the better fit.
+
+
+ See all comparisons
+
+
+
+
+
+
+ );
+}
diff --git a/src/components/seo/related-pages.tsx b/src/components/seo/related-pages.tsx
new file mode 100644
index 00000000..2661dde0
--- /dev/null
+++ b/src/components/seo/related-pages.tsx
@@ -0,0 +1,57 @@
+'use client';
+
+import { ArrowRight } from 'lucide-react';
+import Link from 'next/link';
+import { usePathname } from 'next/navigation';
+
+import { relatedPagesFor } from '@/lib/related-pages';
+
+/**
+ * Renders the cross-links defined for the current route.
+ *
+ * It looks itself up by pathname rather than taking props, so a page opts in by
+ * dropping ` ` into its markup and the pairings stay in one file
+ * instead of being threaded through thirty page components. Renders nothing for
+ * a route with no entry, so it is safe to place in a shared layout.
+ */
+export default function RelatedPages({
+ heading = 'Related',
+ className,
+}: {
+ heading?: string;
+ className?: string;
+}) {
+ const pathname = usePathname();
+ const links = relatedPagesFor(pathname);
+
+ if (links.length === 0) {
+ return null;
+ }
+
+ return (
+
+
+
+ {heading}
+
+
+ {links.map((link) => (
+
+
+ {link.label}
+
+
+
+ {link.description}
+
+
+ ))}
+
+
+
+ );
+}
diff --git a/src/components/solutions/solution-page-layout.tsx b/src/components/solutions/solution-page-layout.tsx
index 75b8455a..7b10b4cb 100644
--- a/src/components/solutions/solution-page-layout.tsx
+++ b/src/components/solutions/solution-page-layout.tsx
@@ -3,6 +3,7 @@ import Image from 'next/image';
import { ArrowRight, Check, ChevronDown, X } from 'lucide-react';
import { Breadcrumbs, type BreadcrumbItem } from '@/components/ui/breadcrumbs';
import { Button } from '@/components/ui/button';
+import RelatedPages from '@/components/seo/related-pages';
import { relForHref } from '@/lib/external-link';
import { cn } from '@/lib/utils';
@@ -325,6 +326,9 @@ export default function SolutionPageLayout({
)}
+ {/* Cross-links into the platform modules and sibling solutions. */}
+
+
{/* ── Bottom CTA ────────────────────────────────────────────────── */}
diff --git a/src/lib/ghost.ts b/src/lib/ghost.ts
index 1aa8c454..99b17c2f 100644
--- a/src/lib/ghost.ts
+++ b/src/lib/ghost.ts
@@ -1,6 +1,12 @@
import 'server-only';
-const BLOG_REVALIDATE_SECONDS = 300;
+// One hour, matching the s-maxage set on /blog routes in next.config.ts.
+// The blog was already on ISR — the plan's "rendered on every request"
+// diagnosis was wrong — but a 5-minute window meant frequent regeneration
+// and a cold render for whoever arrived first after each expiry, which is the
+// likeliest source of the ~390ms TTFB. Ghost content does not change often
+// enough to need a 5-minute window.
+const BLOG_REVALIDATE_SECONDS = 3600;
const GHOST_API_VERSION = process.env.GHOST_API_VERSION?.trim() || 'v6.0';
export type BlogAuthor = {
diff --git a/src/lib/related-pages.ts b/src/lib/related-pages.ts
new file mode 100644
index 00000000..4d9873c1
--- /dev/null
+++ b/src/lib/related-pages.ts
@@ -0,0 +1,186 @@
+// Cross-links between the pages built for buyer intent.
+//
+// The homepage has 620 referring pages; the next best has 21. Meanwhile the
+// /solutions role and use-case pages had a single inbound internal link each,
+// so none of that authority reached them. These pairings connect each platform
+// module to the roles and industries that actually buy it, and back again, so
+// the cluster shares the authority instead of stranding it on the homepage.
+//
+// Keep both directions in sync when editing: if A lists B, B should list A.
+
+export type RelatedLink = {
+ label: string;
+ href: string;
+ description: string;
+};
+
+export const RELATED_PAGES: Record = {
+ // ── Platform modules → the roles, industries and comparisons that match ──
+ '/platform/fleetops': [
+ { label: 'For Fleet Managers', href: '/solutions/roles/fleet-managers', description: 'Vehicle health, compliance and driver performance in one place.' },
+ { label: 'Trucking & Haulage', href: '/solutions/trucking', description: 'Replace a legacy TMS with open-source fleet management.' },
+ { label: 'Last-Mile Delivery', href: '/solutions/use-cases/last-mile-delivery', description: 'Automate dispatch and cut failed deliveries.' },
+ { label: 'Route Optimization', href: '/solutions/use-cases/route-optimization', description: 'Multi-stop routing with live traffic and time windows.' },
+ { label: 'Fleetbase vs Onfleet', href: '/compare/vs-onfleet', description: 'The open-source alternative, without per-task pricing.' },
+ ],
+ '/platform/navigator': [
+ { label: 'For Fleet Managers', href: '/solutions/roles/fleet-managers', description: 'Give drivers an app you control end to end.' },
+ { label: 'Courier & Parcel', href: '/solutions/courier-services', description: 'Proof of delivery and live tracking for courier work.' },
+ { label: 'Last-Mile Delivery', href: '/solutions/use-cases/last-mile-delivery', description: 'Turn-by-turn navigation and digital POD.' },
+ { label: 'Fleetbase vs Tookan', href: '/compare/vs-tookan', description: 'No agent-based pricing, and the source is yours.' },
+ ],
+ '/platform/pallet': [
+ { label: 'For Warehouse Managers', href: '/solutions/roles/warehouse-managers', description: 'Inventory, pick-and-pack and outbound dispatch.' },
+ { label: 'E-commerce & Retail', href: '/solutions/ecommerce', description: 'Connect stock to same-day and next-day delivery.' },
+ { label: 'Order Management', href: '/solutions/use-cases/order-management', description: 'Configurable workflows for any order type.' },
+ { label: 'Container Operations', href: '/solutions/container-operations', description: 'Yard and multi-modal container visibility.' },
+ ],
+ '/platform/storefront': [
+ { label: 'E-commerce & Retail', href: '/solutions/ecommerce', description: 'Headless commerce wired straight into delivery.' },
+ { label: 'Food & Grocery Delivery', href: '/solutions/food-delivery', description: 'On-demand ordering with live customer tracking.' },
+ { label: 'Order Management', href: '/solutions/use-cases/order-management', description: 'One order pipeline from checkout to doorstep.' },
+ ],
+ '/platform/ledger': [
+ { label: 'For Executives', href: '/solutions/roles/executives', description: 'Cost efficiency and margin visibility across the fleet.' },
+ { label: 'Analytics & Reporting', href: '/solutions/use-cases/analytics', description: 'Turn operational data into decisions.' },
+ { label: 'Pricing', href: '/pricing', description: 'One plan, every module, no per-delivery fee.' },
+ ],
+ '/platform/ai': [
+ { label: 'For Executives', href: '/solutions/roles/executives', description: 'Ask operational questions in plain language.' },
+ { label: 'Route Optimization', href: '/solutions/use-cases/route-optimization', description: 'AI routing across live constraints.' },
+ { label: 'Analytics & Reporting', href: '/solutions/use-cases/analytics', description: 'Insights over your own order history.' },
+ ],
+ '/platform/developer-console': [
+ { label: 'For Developers', href: '/solutions/roles/developers', description: 'API keys, webhooks and monitoring in one console.' },
+ { label: 'API & Integrations', href: '/solutions/use-cases/integrations', description: 'Connect Fleetbase to the rest of your stack.' },
+ { label: 'Developer Hub', href: '/developers', description: 'REST API, SDKs and the extension framework.' },
+ ],
+ '/platform/extensions': [
+ { label: 'For Developers', href: '/solutions/roles/developers', description: 'Build and publish your own modules.' },
+ { label: 'API & Integrations', href: '/solutions/use-cases/integrations', description: 'Pre-built integrations and a full REST API.' },
+ { label: 'Build an Extension', href: '/developers/extensions', description: 'Scaffold a full-stack module with the CLI.' },
+ ],
+ '/platform/security': [
+ { label: 'Military & Government', href: '/solutions/government', description: 'Self-hosted, air-gap capable, sovereign by design.' },
+ { label: 'Healthcare & Pharmacy', href: '/solutions/healthcare', description: 'Chain-of-custody and encrypted audit trails.' },
+ { label: 'For Executives', href: '/solutions/roles/executives', description: 'Compliance posture without vendor lock-in.' },
+ ],
+ '/platform/mobile': [
+ { label: 'Navigator Driver App', href: '/platform/navigator', description: 'The open-source app your drivers carry.' },
+ { label: 'Courier & Parcel', href: '/solutions/courier-services', description: 'Branded apps for courier operations.' },
+ { label: 'Food & Grocery Delivery', href: '/solutions/food-delivery', description: 'Customer ordering and driver dispatch.' },
+ ],
+
+ // ── Roles → the modules and comparisons that serve them ──
+ '/solutions/roles/fleet-managers': [
+ { label: 'Fleet-Ops', href: '/platform/fleetops', description: 'Dispatch, tracking and maintenance in one module.' },
+ { label: 'Navigator Driver App', href: '/platform/navigator', description: 'Real-time dispatch and proof of delivery.' },
+ { label: 'Trucking & Haulage', href: '/solutions/trucking', description: 'Built for haulage and long-distance fleets.' },
+ { label: 'Fleetbase vs Onfleet', href: '/compare/vs-onfleet', description: 'How we compare on price and ownership.' },
+ ],
+ '/solutions/roles/operations-managers': [
+ { label: 'Fleet-Ops', href: '/platform/fleetops', description: 'One dashboard for dispatch and exceptions.' },
+ { label: 'Order Management', href: '/solutions/use-cases/order-management', description: 'Custom workflows, statuses and fields.' },
+ { label: 'Analytics & Reporting', href: '/solutions/use-cases/analytics', description: 'SLA and performance reporting.' },
+ ],
+ '/solutions/roles/warehouse-managers': [
+ { label: 'Pallet WMS', href: '/platform/pallet', description: 'Inventory, cycle counts and fulfilment.' },
+ { label: 'E-commerce & Retail', href: '/solutions/ecommerce', description: 'Stock connected to delivery promises.' },
+ { label: 'Order Management', href: '/solutions/use-cases/order-management', description: 'Outbound orders end to end.' },
+ ],
+ '/solutions/roles/executives': [
+ { label: 'Analytics & Reporting', href: '/solutions/use-cases/analytics', description: 'Cost, SLA and growth metrics.' },
+ { label: 'Ledger', href: '/platform/ledger', description: 'Financial management inside the platform.' },
+ { label: 'Pricing', href: '/pricing', description: 'Predictable cost with no per-delivery fee.' },
+ ],
+ '/solutions/roles/developers': [
+ { label: 'Developer Hub', href: '/developers', description: 'REST API, SDKs, webhooks and extensions.' },
+ { label: 'Developer Console', href: '/platform/developer-console', description: 'Keys, webhooks and request monitoring.' },
+ { label: 'API & Integrations', href: '/solutions/use-cases/integrations', description: 'Fit Fleetbase to your existing stack.' },
+ ],
+ '/solutions/roles/customer-success': [
+ { label: 'Fleet-Ops', href: '/platform/fleetops', description: 'Live order status for every enquiry.' },
+ { label: 'Order Management', href: '/solutions/use-cases/order-management', description: 'Track and resolve orders in one place.' },
+ { label: 'Storefront', href: '/platform/storefront', description: 'Branded tracking your customers trust.' },
+ ],
+
+ // ── Use cases → modules and comparisons ──
+ '/solutions/use-cases/last-mile-delivery': [
+ { label: 'Fleet-Ops', href: '/platform/fleetops', description: 'Automated dispatch and live tracking.' },
+ { label: 'Navigator Driver App', href: '/platform/navigator', description: 'Navigation and proof of delivery.' },
+ { label: 'Fleetbase vs Onfleet', href: '/compare/vs-onfleet', description: 'The open-source last-mile alternative.' },
+ ],
+ '/solutions/use-cases/route-optimization': [
+ { label: 'Fleet-Ops', href: '/platform/fleetops', description: 'Routing built into dispatch, not bolted on.' },
+ { label: 'Fleetbase vs Route4Me', href: '/compare/vs-route4me', description: 'Routing plus a full platform, no per-route fee.' },
+ { label: 'Logistics AI', href: '/platform/ai', description: 'AI routing across live constraints.' },
+ ],
+ '/solutions/use-cases/fleet-management': [
+ { label: 'Fleet-Ops', href: '/platform/fleetops', description: 'Tracking, maintenance and compliance.' },
+ { label: 'For Fleet Managers', href: '/solutions/roles/fleet-managers', description: 'Built around the fleet manager’s day.' },
+ { label: 'Trucking & Haulage', href: '/solutions/trucking', description: 'Haulage-specific workflows and compliance.' },
+ ],
+ '/solutions/use-cases/order-management': [
+ { label: 'Fleet-Ops', href: '/platform/fleetops', description: 'Configurable order types and activity flows.' },
+ { label: 'Storefront', href: '/platform/storefront', description: 'Orders from checkout through delivery.' },
+ { label: 'Pallet WMS', href: '/platform/pallet', description: 'Pick, pack and fulfil against stock.' },
+ ],
+ '/solutions/use-cases/analytics': [
+ { label: 'Ledger', href: '/platform/ledger', description: 'Financial reporting alongside operations.' },
+ { label: 'For Executives', href: '/solutions/roles/executives', description: 'The numbers leadership asks for.' },
+ { label: 'Logistics AI', href: '/platform/ai', description: 'Ask questions of your own data.' },
+ ],
+ '/solutions/use-cases/integrations': [
+ { label: 'Developer Hub', href: '/developers', description: 'REST API, SDKs and webhooks.' },
+ { label: 'Extensions Marketplace', href: '/platform/extensions', description: 'Install or publish integrations.' },
+ { label: 'For Developers', href: '/solutions/roles/developers', description: 'An API-first platform you can own.' },
+ ],
+
+ // ── Industries → modules ──
+ '/solutions/trucking': [
+ { label: 'Fleet-Ops', href: '/platform/fleetops', description: 'Dispatch, tracking and maintenance.' },
+ { label: 'For Fleet Managers', href: '/solutions/roles/fleet-managers', description: 'Compliance and driver performance.' },
+ { label: 'Fleet Management', href: '/solutions/use-cases/fleet-management', description: 'The full fleet management picture.' },
+ ],
+ '/solutions/food-delivery': [
+ { label: 'Storefront', href: '/platform/storefront', description: 'Branded ordering for on-demand food.' },
+ { label: 'Navigator Driver App', href: '/platform/navigator', description: 'Dispatch and live customer tracking.' },
+ { label: 'Last-Mile Delivery', href: '/solutions/use-cases/last-mile-delivery', description: 'Speed and reliability at the door.' },
+ ],
+ '/solutions/courier-services': [
+ { label: 'Fleet-Ops', href: '/platform/fleetops', description: 'Automated dispatch at courier volume.' },
+ { label: 'Navigator Driver App', href: '/platform/navigator', description: 'Scan, deliver and capture POD.' },
+ { label: 'Last-Mile Delivery', href: '/solutions/use-cases/last-mile-delivery', description: 'First-attempt delivery rates.' },
+ ],
+ '/solutions/ecommerce': [
+ { label: 'Storefront', href: '/platform/storefront', description: 'Headless commerce with zero commission.' },
+ { label: 'Pallet WMS', href: '/platform/pallet', description: 'Stock, picking and fulfilment.' },
+ { label: 'Order Management', href: '/solutions/use-cases/order-management', description: 'Checkout to doorstep in one pipeline.' },
+ ],
+ '/solutions/healthcare': [
+ { label: 'Security & Compliance', href: '/platform/security', description: 'Encryption, RBAC and audit trails.' },
+ { label: 'Fleet-Ops', href: '/platform/fleetops', description: 'Priority dispatch and chain of custody.' },
+ { label: 'Last-Mile Delivery', href: '/solutions/use-cases/last-mile-delivery', description: 'Time-critical delivery workflows.' },
+ ],
+ '/solutions/waste-management': [
+ { label: 'Fleet-Ops', href: '/platform/fleetops', description: 'Collection rounds and vehicle maintenance.' },
+ { label: 'Route Optimization', href: '/solutions/use-cases/route-optimization', description: 'Optimise collection routes and fuel.' },
+ { label: 'For Fleet Managers', href: '/solutions/roles/fleet-managers', description: 'Compliance reporting for the fleet.' },
+ ],
+ '/solutions/container-operations': [
+ { label: 'Pallet WMS', href: '/platform/pallet', description: 'Yard, warehouse and container stock.' },
+ { label: 'Fleet-Ops', href: '/platform/fleetops', description: 'Drayage and multi-modal movements.' },
+ { label: 'Analytics & Reporting', href: '/solutions/use-cases/analytics', description: 'Dwell time and throughput reporting.' },
+ ],
+ '/solutions/government': [
+ { label: 'Security & Compliance', href: '/platform/security', description: 'Air-gap capable and self-hosted.' },
+ { label: 'Fleet-Ops', href: '/platform/fleetops', description: 'Fleet operations you fully control.' },
+ { label: 'Open Source Mission', href: '/company/open-source', description: 'Why the source being open matters here.' },
+ ],
+};
+
+export function relatedPagesFor(pathname: string): RelatedLink[] {
+ // Tolerate a trailing slash so the lookup matches however the route resolved.
+ const key = pathname.length > 1 ? pathname.replace(/\/+$/, '') : pathname;
+ return RELATED_PAGES[key] ?? [];
+}