Skip to content

Door Listings

Doug edited this page Aug 8, 2026 · 1 revision

Door Listings

Sell doors — used trade-ins, in-stock units, quick-ship specials — straight from the app onto your marketing site. Doors for Sale is the in-app surface; a public JSON feed is what your website reads. Design rationale: door-listings-website-plan.md.

The listing

A listing is one physical door sold once (deliberately not an inventory SKU): size and specs, photos, a listing type (used / in-stock / quick-ship), a condition grade (new / like-new / good / fair), and a price shown either as a fixed number or as "call for price".

Lifecycle

draft → published → sold
          ▲    └──→ archived (withdrawn unsold)
pending_review ──→ published / rejected (with a reason)
  • Office listings start as drafts and go live when published. Only published listings are ever publicly visible.
  • Tech submissions — the mobile app has a photo-first field capture screen: a tech spots a saleable trade-in on site, shoots it, and submits. Submissions wait in pending_review until the office publishes or rejects (with a reason); the submitter can keep editing until it's published, after which the listing belongs to the office.
  • Sold keeps the listing for history but removes it from the site; archived withdraws it without a sale.

Doors for Sale (office)

The office grid (nav: Doors for Sale) manages the whole board — edit, photo management, publish/reject, mark sold. Publishing is its own permission, so who can put things on the public website is an explicit grant, separate from who can draft listings.

The website side

The feed is a plain unauthenticated JSON endpoint (published listings are public by definition — a key here would be ceremony):

GET /public/door-listings.json          # the feed
GET /public/door-listings/<photo>.jpg   # photo bytes

It returns only published listings — your stock ranked above consignment doors — with specs, price display, and photo URLs. Point your site's server-side render (or a static-site build) at it and the "used doors" page maintains itself: publish in the app, it's on the site; mark sold, it's gone. No webhook, no redeploy. (A keyed twin, GET /api/v1/listings with a listings:read-scoped API key, exists for callers that already authenticate — see Website Lead Intake for how keys are minted.)

See also

Clone this wiki locally