Create or remove door-level records and assignments. Counts are rolled up from specific retailer + door selections.
Two intakes — matrix totals and physical door locations. Each accepts a separate spreadsheet.
Retailer, Brand, Category, Doors, plus optional door-brand selling fields. Door Locations owns store-level fields including Check 1 (ISS) and Check 2 (3C).Retailer, Door Number, Name, Address, City, State, ZIP, Lat, Lng, Tier, Store Rep, Visit Cadence, Check 1, Check 2.Door Tracker is a local workspace for retailer distribution: matrix counts, physical door locations, brand-door assignments, draft changes, notes, history, and map review all live in one place.
The matrix is the rolled-up promise, door locations are the store universe, and each retailer + door + brand row is the auditable truth. Confirmed assignments count; drafts and unresolved statuses stay visible without quietly changing totals.
Spreadsheet parsing and save files run locally in your browser. Use exported JSON save files for offline persistence or shared-drive handoff.
| Moment | Best view |
|---|---|
| Executive count check | Matrix |
| Investigating one retailer | Tabular, Details, or Research |
| Cleaning locations | Store view and map reveal |
| Approving changes | Drafts, History, and Snapshots |
Open Modify Door, choose New Door, select a retailer, then use Add New Door. Fill in store name, location, optional latitude/longitude, and tier. Pick brands to add, then save as draft.
Open Modify Door, choose New Brand, select a retailer, then use Add New Brand. Select the doors that should carry it and save as draft.
Open Modify, choose Remove and Door, select the retailer and door, review the affected assignments, then confirm. The store remains in Store, deprioritized with a graveyard marker.
Open the retailer-brand drawer from a matrix/data cell. In Assigned Doors, click the X for the door, choose Exit or TBD, then commit the change.
A warning means the door is missing map coordinates. Click the warning icon or edit details to add latitude and longitude. Doors named E-COMMERCE count as doors and do not require coordinates.
A door counts when its assignment status is Confirmed. TBD, N/A, Exit, and draft-only changes stay in the record so teams can review them without inflating distribution.
Legacy matrix totals are stored as roll-ups, while the live count is derived from assignment rows. If an import includes door-level rows, the confirmed assignment rows become the source of truth for current counts.
Save JSON creates a portable file for handoff or backup. Snapshots are restore points inside the browser, useful before imports, batch edits, or cleanup sessions.
Use a dedicated E-COMMERCE door when the retailer has a digital placement that should count as distribution. It is treated as a door but does not require coordinates or map cleanup.
Matrix columns include Retailer, Brand, Category, Doors, and optional per door-brand selling fields. Store reps, cadence, Check 1 (ISS), and Check 2 (3C) belong on Door Locations / Store.
Columns: Retailer, Door Number, Name, Address, City, State, ZIP, Lat, Lng, Tier, Store Rep, Visit Cadence. Matching retailer and door number updates the existing record; new pairs are appended.
How the local data model fits together. Lines indicate keyed relationships and which objects feed counts, drafts, history, and restore points.
door-tracker-autosave (stores: snapshots, restorePoints) with optional shared sync when configured.buildDataKey(ret,door,brand) joins retailer + door # + brand code. That key anchors dataKeyState, per-cell history, notes, metrics, and confirmed-count logic.matrixData preserves imported brand-retailer roll-ups; live distribution counts are derived from dataKeyState rows where status === 'confirmed'.doorAssignments stores retailer-brand assignment buckets used by the drawer and draft queue; publish actions keep it in lockstep with dataKeyState.| View | Shape |
|---|---|
| Matrix | Brand x retailer grid with confirmed door counts. |
| Tabular | Flat retailer x brand rows with bulk gender assignment, Retailer B&M, B&M doors, saved goals, maintained penetration, and progress to goal. |
| Details | Retailer, door, brand, status, grade, gender, metric_1, metric_2, notes, and key rows. |
| Research | Doors-first location list with placement detail and map reveal. |
| Store | Editable door locations: name, number, address, lat/lng, tier, ISS, and 3C. |
Each door-brand assignment is keyed by retailer, door number, and brand code. The state object carries the review status plus optional selling-context fields used by downstream analysis.
| Field | Meaning |
|---|---|
retailer, doorNumber, brand | Identity fields for a single placement row. |
status | Confirmed, TBD, N/A, or Exit. Confirmed is the only status included in verified counts. |
grade, gender | Optional merchandising dimensions used for filtering and handoff context. |
metric_1, metric_2 | Optional numeric fields for recent sales, door rank, velocity, or retailer-specific KPIs. |
Check 1 / ISS, Check 2 / 3C | Optional retailer-door flags displayed once per location in Store. |
note, history | Human-readable review trail attached to the placement key. |
Headers are normalized before matching, so casing and common spacing differences are tolerated. Unknown fields are ignored by the core matrix but can remain in the original workbook for reference.
Assign brands to specific physical doors only. Add one door to many brands, or one brand to many doors, in a single action. New entries start as drafts and must be published to count toward matrix totals.
Export downloads the current view as Excel. Save downloads all matrix data, door assignments, drafts, notes, history, and snapshots as JSON. Load restores a previous saved state.
History opens a chronological feed of changes. Snapshots are full restore points captured every 5 minutes, with manual named snapshots available when needed.
Door details include a Mapbox map. Picking a door zooms in; selecting a retailer fits the map to that retailer's doors, or all doors when retailer All is selected.
| Status | Use | Counts? |
|---|---|---|
| Confirmed | Door is active for the brand and should appear in verified distribution. | Yes |
| TBD | Placement is pending buyer, market, or internal confirmation. | No |
| N/A | Door exists but does not apply to this brand/category decision. | No |
| Exit | Door was removed or is being proposed for removal from the brand. | No |
Fill in missing information for this door.
Capture the full app state (matrix, assignments, drafts, history, notes) and roll back to it later. Auto-snapshots run every 5 minutes (last 10 kept).
Start with your own retailer-door files, or sign in to use the shared workspace. Everything runs locally in this browser.
Retailer, Brand, Category, Doors. Add Door Number, Status, Grade, Gender, metric_1, metric_2, and Notes for per door-brand analysis. Put Check 1 (ISS) and Check 2 (3C) on Door Locations.
Retailer, Door Number, Name, Address, City, State, ZIP, Lat, Lng, Tier.
Sign in to record who's making changes. Every edit is attributed in the change history.
This gate runs entirely in your browser — it's for identification, not confidentiality. For sensitive data, host behind real auth (Cloudflare Access, Netlify Identity, etc.).