InventoryLocations
Docs
    Dealer Brand App

    Decentralized Self-building Future

    Sign In
    Inventory
    Locations
    Service
    My Garage
    How I shop
    Privacy|Contact
    v1.106.1|Sonoratek LLC

    Documentation

    Concepts, value, and typical clone scenarios — less code.

    Dealer desk docs
    Getting started
    First day on the desk
    Features
    Vehicle inventory
    Vehicle stock
    Listing a vehicle by hand
    Rooftops and the dealer group
    Dealer leads
    Rooftop messages
    Garage and how you shop
    Push Notifications with FCM (Ring-Powered)
    Tunnel Protocol

    Documentation

    Concepts, value, and typical clone scenarios — less code.

    Dealer desk docs
    Getting started
    First day on the desk
    Features
    Vehicle inventory
    Vehicle stock
    Listing a vehicle by hand
    Rooftops and the dealer group
    Dealer leads
    Rooftop messages
    Garage and how you shop
    Push Notifications with FCM (Ring-Powered)
    Tunnel Protocol

    Documentation

    Concepts, value, and typical clone scenarios — less code.

    Dealer desk docs
    Getting started
    First day on the desk
    Features
    Vehicle inventory
    Vehicle stock
    Listing a vehicle by hand
    Rooftops and the dealer group
    Dealer leads
    Rooftop messages
    Garage and how you shop
    Push Notifications with FCM (Ring-Powered)
    Tunnel Protocol
    Dealer Brand App Logo

    Loading documentation...

    Preparing Dealer Brand App content

    Dealer Brand App Logo

    Loading documentation...

    Preparing Dealer Brand App content

    Dealer Brand App Logo

    Loading documentation...

    Preparing Dealer Brand App content

    Vehicle inventory

    On an automotive-dealer clone the store is the group's vehicle inventory. Each unit is a store_products row with nichePreset: dealer-vehicle and a nicheData.vehicle record (VIN, stock, miles, price, rooftop). Shoppers browse /store. A vehicle does not go in the cart.

    This page is the dealer-pack overlay of the store article. Founder and Developer tabs filter the sections below. Sidebar visibility still comes from Layer 1 lib/docs/audience-curated-docs.ts, which already lists features/store.

    Do not advertise what you cannot prove

    The public listing does not show one-owner, clean-title, or Carfax badges, and the vendor form cannot tick those claims. Days on the lot stay on the desk, not on the advertisement. "Ask about financing" is a question to the rooftop. It is not a credit offer, and the form does not collect an SSN.

    What changed for a dealer group

    Earlier store behaviorDealer pack
    Add to cart and checkoutnicheSuppressesCart hides the cart on a dealer vehicle
    Product agent answers as the storeThe vehicle page does not mount the agent rail or the floating agent button
    Chat link opens agentChat=1"Chat with seller" posts a vehicle_inquiry and opens /messages?c=
    History chips from feed flagsFlags may still sit on the record for a later licensed feed. The public card and detail do not read them
    "Get pre-qualified"Button label is "Ask about financing"

    What your rooftops publish

    Shoppers search inventory, open a vehicle, and talk to the people who work at the rooftop that owns that unit. A second chat about the same car reuses the same thread. Test drive, trade-in, service, and a seller offer do the same: the shopper lands in Messages, and the rooftop sees the row on the lead desk.

    Inventory

    /store lists vehicles. Filters cover condition, make, body, drivetrain, fuel, transmission, rooftop, year, and miles.

    Rooftops

    /rooftops is the public map. The login-gated entity directory is not the storefront.

    Leads

    Every shopper action that needs a person becomes an entity-visible lead and a messenger thread.

    What stays off the public page

    Where the pack replaces Layer 1

    Compose copies ring/web, then ring-presets/automotive-dealer-app/web. A pack file at the same path replaces the Layer 1 file.

    SurfacePath
    Cart hiddenfeatures/store/niche/niche-commerce.ts (nicheSuppressesCart)
    Vehicle shapefeatures/store/types/dealer-vehicle.ts
    Catalog cardfeatures/dealer/components/vehicle-card.tsx
    Vehicle page blockcomponents/store/niche-product-detail-section.tsx
    No agent on a vehiclecomponents/wrappers/product-details-wrapper.tsx
    Lead create and reusefeatures/dealer/services/leads.ts
    Thread

    Frequently asked questions

    Impact

    Does a vehicle still check out?

    No. Dealer vehicles are lead-only. There is no add-to-cart on those cards.

    Will a second click create a second lead?

    Not for chat about the same vehicle. Test drives and other kinds still create their own lead, then open that lead's thread.

    Migration

    Where did the product agent go?

    It is still in Layer 1 for ordinary products. The pack overlay of product-details-wrapper.tsx skips it when the product has nicheData.vehicle.

    Ops

    Can staff mark a unit one-owner?

    Not from the vehicle form. Those checkboxes are gone, including the one that defaulted clean title to on.

    Later, only with a contract

    Related documentation

    First day on the desk

    Prerequisite: the owner's map of every live screen.

    Rooftops and the dealer group

    Prerequisite: rooftops and the dealer group that own this inventory.

    Vehicle stock

    Same workflow: loading stock and taking a unit off the site.

    Dealer leads

    Next-step: the lead kinds those vehicles open.

    1. Docs
    2. /Features
    3. /Vehicle inventory

    Updated Oct 28, 20264 min listen

    Vehicle inventory

    On an automotive-dealer clone the store is the group's vehicle inventory. Each unit is a store_products row with nichePreset: dealer-vehicle and a nicheData.vehicle record (VIN, stock, miles, price, rooftop). Shoppers browse /store. A vehicle does not go in the cart.

    This page is the dealer-pack overlay of the store article. Founder and Developer tabs filter the sections below. Sidebar visibility still comes from Layer 1 lib/docs/audience-curated-docs.ts, which already lists features/store.

    Do not advertise what you cannot prove

    The public listing does not show one-owner, clean-title, or Carfax badges, and the vendor form cannot tick those claims. Days on the lot stay on the desk, not on the advertisement. "Ask about financing" is a question to the rooftop. It is not a credit offer, and the form does not collect an SSN.

    What changed for a dealer group

    Earlier store behaviorDealer pack
    Add to cart and checkoutnicheSuppressesCart hides the cart on a dealer vehicle
    Product agent answers as the storeThe vehicle page does not mount the agent rail or the floating agent button
    Chat link opens agentChat=1"Chat with seller" posts a vehicle_inquiry and opens /messages?c=
    History chips from feed flagsFlags may still sit on the record for a later licensed feed. The public card and detail do not read them
    "Get pre-qualified"Button label is "Ask about financing"

    What your rooftops publish

    Shoppers search inventory, open a vehicle, and talk to the people who work at the rooftop that owns that unit. A second chat about the same car reuses the same thread. Test drive, trade-in, service, and a seller offer do the same: the shopper lands in Messages, and the rooftop sees the row on the lead desk.

    Inventory

    /store lists vehicles. Filters cover condition, make, body, drivetrain, fuel, transmission, rooftop, year, and miles.

    Rooftops

    /rooftops is the public map. The login-gated entity directory is not the storefront.

    Leads

    Every shopper action that needs a person becomes an entity-visible lead and a messenger thread.

    What stays off the public page

    Where the pack replaces Layer 1

    Compose copies ring/web, then ring-presets/automotive-dealer-app/web. A pack file at the same path replaces the Layer 1 file.

    SurfacePath
    Cart hiddenfeatures/store/niche/niche-commerce.ts (nicheSuppressesCart)
    Vehicle shapefeatures/store/types/dealer-vehicle.ts
    Catalog cardfeatures/dealer/components/vehicle-card.tsx
    Vehicle page blockcomponents/store/niche-product-detail-section.tsx
    No agent on a vehiclecomponents/wrappers/product-details-wrapper.tsx
    Lead create and reusefeatures/dealer/services/leads.ts
    Thread

    Frequently asked questions

    Impact

    Does a vehicle still check out?

    No. Dealer vehicles are lead-only. There is no add-to-cart on those cards.

    Will a second click create a second lead?

    Not for chat about the same vehicle. Test drives and other kinds still create their own lead, then open that lead's thread.

    Migration

    Where did the product agent go?

    It is still in Layer 1 for ordinary products. The pack overlay of product-details-wrapper.tsx skips it when the product has nicheData.vehicle.

    Ops

    Can staff mark a unit one-owner?

    Not from the vehicle form. Those checkboxes are gone, including the one that defaulted clean title to on.

    Later, only with a contract

    Related documentation

    First day on the desk

    Prerequisite: the owner's map of every live screen.

    Rooftops and the dealer group

    Prerequisite: rooftops and the dealer group that own this inventory.

    Vehicle stock

    Same workflow: loading stock and taking a unit off the site.

    Dealer leads

    Next-step: the lead kinds those vehicles open.

    1. Docs
    2. /Features
    3. /Vehicle inventory

    Updated Oct 28, 20264 min listen

    Vehicle inventory

    On an automotive-dealer clone the store is the group's vehicle inventory. Each unit is a store_products row with nichePreset: dealer-vehicle and a nicheData.vehicle record (VIN, stock, miles, price, rooftop). Shoppers browse /store. A vehicle does not go in the cart.

    This page is the dealer-pack overlay of the store article. Founder and Developer tabs filter the sections below. Sidebar visibility still comes from Layer 1 lib/docs/audience-curated-docs.ts, which already lists features/store.

    Do not advertise what you cannot prove

    The public listing does not show one-owner, clean-title, or Carfax badges, and the vendor form cannot tick those claims. Days on the lot stay on the desk, not on the advertisement. "Ask about financing" is a question to the rooftop. It is not a credit offer, and the form does not collect an SSN.

    What changed for a dealer group

    Earlier store behaviorDealer pack
    Add to cart and checkoutnicheSuppressesCart hides the cart on a dealer vehicle
    Product agent answers as the storeThe vehicle page does not mount the agent rail or the floating agent button
    Chat link opens agentChat=1"Chat with seller" posts a vehicle_inquiry and opens /messages?c=
    History chips from feed flagsFlags may still sit on the record for a later licensed feed. The public card and detail do not read them
    "Get pre-qualified"Button label is "Ask about financing"

    What your rooftops publish

    Shoppers search inventory, open a vehicle, and talk to the people who work at the rooftop that owns that unit. A second chat about the same car reuses the same thread. Test drive, trade-in, service, and a seller offer do the same: the shopper lands in Messages, and the rooftop sees the row on the lead desk.

    Inventory

    /store lists vehicles. Filters cover condition, make, body, drivetrain, fuel, transmission, rooftop, year, and miles.

    Rooftops

    /rooftops is the public map. The login-gated entity directory is not the storefront.

    Leads

    Every shopper action that needs a person becomes an entity-visible lead and a messenger thread.

    What stays off the public page

    Where the pack replaces Layer 1

    Compose copies ring/web, then ring-presets/automotive-dealer-app/web. A pack file at the same path replaces the Layer 1 file.

    SurfacePath
    Cart hiddenfeatures/store/niche/niche-commerce.ts (nicheSuppressesCart)
    Vehicle shapefeatures/store/types/dealer-vehicle.ts
    Catalog cardfeatures/dealer/components/vehicle-card.tsx
    Vehicle page blockcomponents/store/niche-product-detail-section.tsx
    No agent on a vehiclecomponents/wrappers/product-details-wrapper.tsx
    Lead create and reusefeatures/dealer/services/leads.ts
    Thread

    Frequently asked questions

    Impact

    Does a vehicle still check out?

    No. Dealer vehicles are lead-only. There is no add-to-cart on those cards.

    Will a second click create a second lead?

    Not for chat about the same vehicle. Test drives and other kinds still create their own lead, then open that lead's thread.

    Migration

    Where did the product agent go?

    It is still in Layer 1 for ordinary products. The pack overlay of product-details-wrapper.tsx skips it when the product has nicheData.vehicle.

    Ops

    Can staff mark a unit one-owner?

    Not from the vehicle form. Those checkboxes are gone, including the one that defaulted clean title to on.

    Later, only with a contract

    Related documentation

    First day on the desk

    Prerequisite: the owner's map of every live screen.

    Rooftops and the dealer group

    Prerequisite: rooftops and the dealer group that own this inventory.

    Vehicle stock

    Same workflow: loading stock and taking a unit off the site.

    Dealer leads

    Next-step: the lead kinds those vehicles open.

    1. Docs
    2. /Features
    3. /Vehicle inventory

    Updated Oct 28, 20264 min listen

  1. A product agent that can invent availability, a discount, or a payment.
  2. A history badge the store did not buy a license to show.
  3. A role quiz before someone can look at cars. Shoppers are the default. "How I shop" is an optional account note at /profile/audience.
  4. features/opportunities/lib/entity-lead-conversation.ts
    Post from the browserfeatures/dealer/components/post-dealer-lead.ts

    readDealerVehicle requires a VIN. The product-details wrapper uses that to skip ProductAgentChatProvider, the agent rail, and FloatingProductChatToggle. Other products on the clone keep the agent.

    Shopper opens a thread

    1. 1

      The card, the vehicle page, the test-drive dialog, /service, /sell-trade, or the seller offer calls postDealerLead.

    2. 2

      POST /api/dealer/leads requires a session. Unsigned callers receive 401 and the UI sends them to login with callbackUrl.

    3. 3

      createDealerLead writes an opportunity with visibility: 'entity' and organizationId set to the rooftop. For vehicle_inquiry, an open lead for the same shopper and product (stage not sold or lost) is reused.

    4. 4

      openEntityLeadConversation creates a conversation of type opportunity with the shopper and getEntityTeamUserIds. The id is stored on metadata.conversationId.

    5. 5

      The browser goes to /messages?c=<conversationId>. MessagesShell already reads c or conversation.

    History booleans are not written from the vendor form (parse-niche-fields.ts). feed-map.ts may still copy carfax_1_owner and carfax_clean_title onto the record. The card meta and the detail section do not render them.

  5. A product agent that can invent availability, a discount, or a payment.
  6. A history badge the store did not buy a license to show.
  7. A role quiz before someone can look at cars. Shoppers are the default. "How I shop" is an optional account note at /profile/audience.
  8. features/opportunities/lib/entity-lead-conversation.ts
    Post from the browserfeatures/dealer/components/post-dealer-lead.ts

    readDealerVehicle requires a VIN. The product-details wrapper uses that to skip ProductAgentChatProvider, the agent rail, and FloatingProductChatToggle. Other products on the clone keep the agent.

    Shopper opens a thread

    1. 1

      The card, the vehicle page, the test-drive dialog, /service, /sell-trade, or the seller offer calls postDealerLead.

    2. 2

      POST /api/dealer/leads requires a session. Unsigned callers receive 401 and the UI sends them to login with callbackUrl.

    3. 3

      createDealerLead writes an opportunity with visibility: 'entity' and organizationId set to the rooftop. For vehicle_inquiry, an open lead for the same shopper and product (stage not sold or lost) is reused.

    4. 4

      openEntityLeadConversation creates a conversation of type opportunity with the shopper and getEntityTeamUserIds. The id is stored on metadata.conversationId.

    5. 5

      The browser goes to /messages?c=<conversationId>. MessagesShell already reads c or conversation.

    History booleans are not written from the vendor form (parse-niche-fields.ts). feed-map.ts may still copy carfax_1_owner and carfax_clean_title onto the record. The card meta and the detail section do not render them.

  9. A product agent that can invent availability, a discount, or a payment.
  10. A history badge the store did not buy a license to show.
  11. A role quiz before someone can look at cars. Shoppers are the default. "How I shop" is an optional account note at /profile/audience.
  12. features/opportunities/lib/entity-lead-conversation.ts
    Post from the browserfeatures/dealer/components/post-dealer-lead.ts

    readDealerVehicle requires a VIN. The product-details wrapper uses that to skip ProductAgentChatProvider, the agent rail, and FloatingProductChatToggle. Other products on the clone keep the agent.

    Shopper opens a thread

    1. 1

      The card, the vehicle page, the test-drive dialog, /service, /sell-trade, or the seller offer calls postDealerLead.

    2. 2

      POST /api/dealer/leads requires a session. Unsigned callers receive 401 and the UI sends them to login with callbackUrl.

    3. 3

      createDealerLead writes an opportunity with visibility: 'entity' and organizationId set to the rooftop. For vehicle_inquiry, an open lead for the same shopper and product (stage not sold or lost) is reused.

    4. 4

      openEntityLeadConversation creates a conversation of type opportunity with the shopper and getEntityTeamUserIds. The id is stored on metadata.conversationId.

    5. 5

      The browser goes to /messages?c=<conversationId>. MessagesShell already reads c or conversation.

    History booleans are not written from the vendor form (parse-niche-fields.ts). feed-map.ts may still copy carfax_1_owner and carfax_clean_title onto the record. The card meta and the detail section do not render them.