External dashboards

Give an LLM the Dealership dashboard skill to adapt the built-in experience or create a separate client.

To create a custom Dealership dashboard, copy the skill and give it to your LLM. The skill will explain how features/dashboard supplies the Keystone administration shell while features/platform contains Dealership's product-specific operator experience.

After that source orientation, it will ask what you dislike, what should stay, what workflows and users matter, and what the replacement should look and feel like. It then traces the exact routes, feature slices, GraphQL calls, schema, access rules, sessions, and provider boundaries in the supplied Dealership codebase before proposing work.

Skill file: /skills/openfront-dealership-custom-dashboard/SKILL.md

Platform pages

Route files are thin wrappers at app/dashboard/(admin)/platform/<route>/page.tsx. Logic lives in features/platform/<slice>. Navigation is defined in features/platform/lib/navigation.ts.

PageSliceWhat operators do thereMain operations
/dashboard/platform/overviewoverviewWork that needs attention today, latest deals, delivered revenue by monthoperationalReport
/dashboard/platform/vehiclesvehiclesInventory desk: intake, location moves, costs, recon, listing edits, photos, merchandising submit and approve, frontline, publish feedinventoryWorkspace, intakeInventoryVehicle, moveInventoryStock, recordInventoryCost, openInventoryReconWorkItem, transitionInventoryReconWorkItem, updateInventoryMerchandisingDraft, submitInventoryMerchandising, decideInventoryMerchandising, transitionInventoryAcquisition, recordInventoryFeedRun, photo commands
/dashboard/platform/vehicles/[id]vehiclesVehicle detail: identity and spec edits, recon (including cancel), merchandising reject, condition report, vehicle history, price historyupdateInventoryVehicleDetails, decideInventoryMerchandising, generic CRUD for VehicleConditionReport and VehicleHistory
/dashboard/platform/vehicles/acquisitionsvehiclesAcquisition pipeline: start, move through each status, stock the unitstartInventoryAcquisition, transitionInventoryAcquisition, establishInventoryStock
/dashboard/platform/vehicles/feedvehiclesFeed run historyrecordInventoryFeedRun
/dashboard/platform/dealsdealsDeal listdealDeskWorkspace
/dashboard/platform/deals/createdealsNew pencil, prefilled from a CRM lead and an optional trade-increateDealPencil
/dashboard/platform/deals/[id]dealsWorksheet (cash, finance, lease), present, accept, lender offer, trade-in, submit, approve, cancel, reopen, timelinedealWorkspace, saveDealWorksheet, presentDealWorksheet, acceptDealWorksheet, dealLenderOffers, selectDealLenderOffer, setDealTradeIn, transitionDeal, reopenDealWorksheet, domainTimeline
/dashboard/platform/analyticsanalyticsRead-only sales, inventory, and operations chartsoperationalReport and list reads
/dashboard/platform/store-settingsstore-settingsDealership profile, hours, tax and doc fee, logo, rooftop time zoneGeneric DealershipProfile and Rooftop updates
/dashboard/platform/crmcrmLead list and board; new leadcrmWorkspace, openLead
/dashboard/platform/crm/[id]crmLead detail: edit, interactions, tasks, routing, transfer, consent, cadence, sales visits, statusupdateLeadDetails, recordLeadInteraction, createLeadTask, completeTask, routeLead, transferLeadOwnership, updateCustomerCommunicationPreferences, enrollLeadCadence, advanceLeadCadence, manageSalesVisit, transitionLead
/dashboard/platform/crm/taskscrmTask queue across leadsTask list reads, completeTask
/dashboard/platform/test-drivestest-drivesQueue, schedule, verify license, complete, no-showsubmitTestDrive, updateTestDriveWorkflow
/dashboard/platform/trade-instrade-insTrade-in queue, walk-in trade-increateWalkInTradeIn
/dashboard/platform/trade-ins/[id]trade-insAppraisal, attach to a deal, send to inventory as an acquisitionrecordTradeInAppraisal, setDealTradeIn, startInventoryAcquisition, domainTimeline
/dashboard/platform/customerscustomersCustomer directoryCustomer list reads
/dashboard/platform/customers/[id]customersContact edit, consent, duplicates and merge, household link and unlink, open a leadupdateCustomerContact, updateCustomerCommunicationPreferences, customerDuplicateCandidates, mergeCustomers, linkCustomerHousehold, unlinkCustomerHousehold, openLead
/dashboard/platform/financefinanceF&I desk: applications, lender queue and decision, menu, compliance, contract, prerequisite review, funding, cash deposits, deal approvalfinanceWorkspace, queueFinancingApplication, recordLenderDecision, recordFinanceProductQuote, presentFinanceMenu, decideFinanceMenu, recordFinanceComplianceCheck, manageFinanceContractPackage, reviewFinancePrerequisites, manageFinanceFundingCase, recordCashDealDeposit, openFinanceFollowUp, transitionDeal
/dashboard/platform/finance/applications/[id]financeApplication detail, submission status, lender decisionrecordLenderSubmissionStatus, recordLenderDecision, queueFinancingApplication, openFinanceFollowUp
/dashboard/platform/finance/productsfinanceF&I product catalogconfigureFinanceProduct
/dashboard/platform/finance/cancellationsfinanceProduct cancellations with a pro-rata refund calculator and links to paymentsrecordFinanceProductCancellation
/dashboard/platform/deliverydeliverySchedule, arrive, checklist and waivers, acknowledgment, cancel, complete delivery, we-owe itemsdeliveryWorkspace, manageDeliveryCase, completeDealDelivery, manageWeOweItem
/dashboard/platform/paymentspaymentsTransactions, checkout for a deal or repair order, payment providerscreatePaymentCheckout, generic PaymentProvider CRUD
/dashboard/platform/payments/[id]paymentsPayment detail, refunds, webhook events, reconcilerequestPaymentRefund, reconcilePaymentTransaction
/dashboard/platform/accountingaccountingBatch queue, GL mappings, stage a batchconfigureAccountingMapping, stageAccountingBatch, generic AccountingMapping delete
/dashboard/platform/accounting/[id]accountingBatch detail: queue post, record posted or failed, reconcile, lockmanageAccountingBatch
/dashboard/platform/serviceserviceService advisor desk: appointments, new appointment, repair ordersfixedOpsWorkspace, submitServiceBooking, transitionServiceAppointment, openServiceOrder, transitionServiceOrder
/dashboard/platform/service/appointments/[id]serviceAppointment detail and edit, status, open a repair ordertransitionServiceAppointment, openServiceOrder, generic ServiceAppointment update
/dashboard/platform/service/orders/[id]serviceRepair order: concern, cause, correction, authorization, labor, part and sublet lines, tax, labor operations, status through paidrecordServiceOrderEvidence, addServiceOrderLineItem, updateServiceOrderLineItem, removeServiceOrderLineItem, setServiceOrderTax, manageLaborOperation, transitionServiceOrder
/dashboard/platform/partspartsParts catalogconfigurePart
/dashboard/platform/parts/[id]partsPart detail, movement ledger, every movement typerecordPartsMovement
/dashboard/platform/parts/purchase-orderspartsPurchase order list, createmanagePartsPurchaseOrder
/dashboard/platform/parts/purchase-orders/[id]partsEdit, order, receive (posts receipts), close, cancelmanagePartsPurchaseOrder
/dashboard/platform/usersusersStaff accounts (shoppers are excluded)Generic User CRUD
/dashboard/platform/organizationorganizationTabs: dealer group, rooftops, access (memberships and their audit log), roles, retentionchangeDealerMembership, configureRetentionPolicy, generic DealerGroup, Rooftop, Role, User CRUD
/dashboard/platform/catalogcatalogMakes and models, service packages, lead routing rulesconfigureLeadRoutingRule, generic Make, Model, ServicePackage CRUD
/dashboard/platform/reportsreportsTabs: saved reports, runs (with download), audit search, outbox healthsaveOperationalReport, runSavedReport, queueDueSavedReports, auditSearch, DomainOutboxEvent reads
/dashboard/platform/api-keysapi-keysCreate, scope, limit by IP, and revoke your own API keysGeneric ApiKey CRUD

Onboarding is a dialog in the dashboard layout, not a route. Every list is also reachable on the generic /dashboard/<list-key> pages, subject to its access rules. Command-only lists are read-only there.

On this page