Synaplan
기업을 위한 오픈소스 AI 플랫폼
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기CJMK KPI's for F+
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗This repository is the single source of truth for CJMK DSP operations software.
Canonical repo: https://github.com/ckknighten-cjmk/amazon-dsp-dashboard
| Path | App | Stack |
|---|---|---|
| Repository root | CJMK Ops — daily HQ for CJMK Inc. / DNA4 Memphis | Next.js App Router |
apps/morning-dispatch | Earlier Vite command center, including the Morning Dispatch Readiness Center | Vite + React |
Live CJMK Ops seeds come from Amazon DSP Console: the Week 38 scorecard (Sep 13–19, 2026, with Week 37 still on the scorecard switcher), the 2026-10-30 Delivery Execution board, the Week 38 10-hour bonus list, and the Week 38, Week 39, and Week 41 schedule workbooks used by Compliance. Fleet and incidents in CJMK Ops are still mock fixtures. Do not invent metrics that Console did not publish.
Operations HQ for CJMK Inc., an SDVOSB Amazon DSP running last-mile out of station DNA4 (Memphis, TN). Station managers and owners can open it daily to see performance, routes, drivers, fleet, incidents, and Amazon-style scorecard health.
This is a demo app. It does not call Amazon APIs and does not require credentials.
npm install
npm run build
npm run dev
npm ci uses the lockfile and is what CI should run. Then open http://127.0.0.1:43123.
| Script | What it does |
|---|---|
npm run dev | Next.js App Router dev server on port 43123 |
npm run build | Production build |
npm start | Serve the production build on 43123 |
No auth in v1. Dark theme is the default; toggle light/dark from the top bar or Settings.
Every dashboard page has a Refresh control in the page header, next to that page's seed as-of time. It does two things:
POST /api/refresh with { page, station, week?, date? } so an external job can pull a newer Console or ADP capture. station defaults to DNA4 when it is omitted. The same page and station cannot start another pull for 10 minutes; a different station is its own limit. The app does not call Amazon or ADP itself.router.refresh(), which re-reads the seed modules already in this build.The webhook key never goes to the browser. Set these on the server:
| Variable | Required | Purpose |
|---|---|---|
REFRESH_WEBHOOK_URL | yes | URL that receives the JSON body. |
REFRESH_WEBHOOK_KEY | yes | Secret sent with that request. |
REFRESH_WEBHOOK_KEY_HEADER | no | Header name for the key. Defaults to Authorization, and that header's value is Bearer <key>. Any other name sends the raw key. |
If REFRESH_WEBHOOK_URL or REFRESH_WEBHOOK_KEY is missing, POST /api/refresh returns 503 and the button only re-reads the current seeds. The same page and station cannot start another pull for 10 minutes; a repeat returns 429 with lastRequestedAt. Copy .env.example for placeholders. Do not commit a real key.
After a pull is accepted the header says Pulling fresh data… usually 5–15 min. That note stays across reloads until the page's seed as-of time is newer than the request, which then shows Updated and that time. If 30 minutes pass with no newer seed, it shows Still waiting. Sign-in may be needed.
Page keys: overview (also Settings), routes (also a route detail page), drivers, fleet, scorecard, payments, compliance, bonus, incidents. week and date are sent when that page already has them.
The station list is src/lib/stations.ts. Each entry has a code, display name, and region. DNA4 (Memphis) is the default. WTN2 (West Tennessee) is the station opening soon.
The header Station menu is on every page. The choice is stored in the station query (?station=WTN2), the cjmk-ops-station cookie, and the localStorage key of the same name. Sidebar links, the period control, the scorecard week menu, and Refresh keep it. A missing or unknown value falls back to DNA4.
WTN2 has no capture. Every page shows No data for WTN2 yet, and the as-of line says No capture yet. DNA4 figures are not copied onto that station.
DNA4 files stay in src/lib/data/seed/. Put a new station's files in src/lib/data/seed/<code-lowercase>/ (WTN2 is src/lib/data/seed/wtn2/) and register one loader per dataset on STATION_LOADERS in src/lib/data/station-seeds.ts. Pages call loadStationDataset. Until that loader exists, the page stays on the empty state.
WTN2: {
routes: () => buildWtn2Routes(),
}
The DNA4 callback already receives the page's week when a dataset has one ({ week }). A WTN2 loader receives the same argument.
| Dataset | Loader key | What to add under src/lib/data/seed/wtn2/ |
|---|---|---|
| Overview | overview | delivery-execution.json in the same shape as delivery-execution-2026-10-30.json |
| Routes and route detail | routes | that delivery execution file, plus the packages-exceptions CSV |
| Scorecard | scorecard | scorecard/weeks.json (the loader receives { week }) |
| 10 Hour Bonus | bonus | 10hr-bonus.json (and the by-DA CSV if you keep one) |
| Drivers | drivers | Amazon schedule, ADP timecards, and the census file the roster reads |
| Fleet | fleet | amazon-fleet.json, dvic.json, and fleet-issues/issues-YYYY-MM-DD.json |
| Incidents | incidents | incidents.json |
| Compliance | compliance | weekly Amazon schedule, ADP timecard, and breaks JSON ({ week }) |
| Payments | payments | settlements, variable invoice, and work summary JSON ({ week } for reconcile) |
| Settings | settings | no file; register when the settings form should use stationSettings for this station |
DNA4 fleet issues stay in src/lib/data/seed/fleet-issues/. The Fleet page loads that catalog with loadStationDataset, and the New damage CSV and Excel include the station in the filename and a Station column. For WTN2, put the same dated files in src/lib/data/seed/wtn2/fleet-issues/ and register a fleet loader that calls loadFleetIssueCatalog on that directory. Until that loader exists, Fleet shows No data for WTN2 yet and does not read the DNA4 yard or the DNA4 issues snapshot.
CSV and Excel downloads put the station code in the filename and in a Station column. POST /api/refresh includes station.
| Surface | Source |
|---|---|
| Routes / Delivery Execution | Amazon DSP Console Delivery Execution evening wrap for 2026-10-30 (~8:02 p.m. CT; 39 routes, 4 in progress, 35 complete, incomplete null, associates, stops, packages, board totals) plus the exception Packages CSV (161 rows). Board package-status chips use Console totals (remaining 61, reattemptable 8, undeliverable 12, missing 12, RTS 39, pickup failed 92). The CSV and the embedded exception rows are the same 161 rows. Export statuses are reattemptable 7, undeliverable 12, missing 10, returned to station 40, pickup failed 92. Reattemptable, missing, and returned to station differ from the board chips (7 / 10 / 40 export rows versus 8 / 12 / 39 on the chips). Remaining is a board chip and is not an export status. Route-row packages are 11,246 delivered of 11,309 planned. Per-route packages remaining sums to 63 (CX285 14, CX271 11, CX276 13, CX257 4, CX263 7, CX279 2, CX295 1, CX300 11). The board remaining chip is 61. Vehicle and on-time % were not on the Console board — the UI leaves them unavailable and does not invent them. Execution gauges were read from the visible board graphics (locations 99%, stops 99%, packages 99%, attempt success 99%). Console rescueActions is 0. A route is marked Rescue: Yes when it lists more than one associate (14 multi-transporter routes). The first associate is primary and the rest are rescuers. That column is not Amazon’s official rescue flag. Other board chips in the seed: unknown stops 28, work-hour risk 0, on break 0, no breaks taken 1, inactive 1, on-road pickups 5 (2 remaining, 3 complete), ahead 3, at risk 1, behind 0. The capture also includes weather delay 0, SWA eligible , SWA injected , and paused ; those stay in the seed file and are not separate board chips. In progress: CX285 (93/102 stops, route row marked 9 behind), CX271 (189/196, 3 ahead), CX276 (192/199, 5 ahead), and CX257 (193/197, 32 ahead). Status is in progress per the board (those four routes); the other 35 routes are complete. The behind chip is while CX285’s route row is marked 9 behind. Incomplete was on the capture and is shown as unavailable. Oct 29 is also seeded (40 routes, 2 in progress, 3 not departed, 116 exception rows) and Oct 28 stays in the catalog. |
Station clock is frozen at Fri Oct 30, 2026 · 8:02 p.m. CT (the evening-wrap Console capture time).
date, deliveryAssociate, stopsCompleted, then route). The table hides days outside the selected period.fleet-vehicles-dna4-console.csv. Year and mileage stay blank. DVIC pairs pre-trip and post-trip for the same vehicle and service day and marks post-trip damage the pre-trip did not list. The Oct 15 morning dashboard capture publishes 0 pre-trip, 0 post-trip, and 0 AVI post-trip, with empty inspection lists, so the count cards show those totals and no vehicle pairs are compared. The Oct 14 file remains 44 / 44 / 10. The Sep 23 file remains 0 / 0 / 0. CSV export downloads the pairs (header only on this capture). New damage reads the newest file in src/lib/data/seed/fleet-issues/, (1247 open issues, 0 inspection defects created 2026-10-15). stays for comparison. WTN2 has no fleet capture, so that page stays on the empty state.The sticky top bar Today / This week control drives Overview KPIs. Today stays the Oct 30 evening wrap. This week charts every seeded day in Oct 24–30 (Oct 26, Oct 27, Oct 28, Oct 29, and Oct 30). A custom period opens the seeded days inside that range. Days without a file stay blank.
Keep the TypeScript models in src/lib/types.ts. Pages import only from src/lib/data/index.ts.
DataSource interface in src/lib/data/index.ts (CSV, spreadsheet export, or your own API).export const source at that implementation instead of mockDataSource.src/lib/data/seed/ as fixtures for local demo.Console snapshots used here live at:
src/lib/data/seed/delivery-execution-2026-10-30.json — live Delivery Execution evening wrapsrc/lib/data/seed/packages-exceptions-2026-10-30.csv — Packages export for that wrap (161 rows)src/lib/data/seed/delivery-execution-2026-10-29.json — earlier Delivery Execution evening wrap, kept in the reposrc/lib/data/seed/packages-exceptions-2026-10-29.csv — Packages export for that earlier wrap (116 rows)src/lib/data/seed/delivery-execution-2026-10-28.json — earlier Delivery Execution evening wrap, kept in the reposrc/lib/data/seed/packages-exceptions-2026-10-28.csv — Packages export for that earlier wrap (149 rows)src/lib/data/seed/delivery-execution-2026-10-27.json — earlier Delivery Execution evening wrap, kept in the reposrc/lib/data/seed/packages-exceptions-2026-10-27.csv — Packages export for that earlier wrap (125 rows)Do not put Amazon credentials in this repo. Do not scrape Seller Central / DSP consoles from the app.
The Scorecard page encodes live DSP Console Performance Summary values for CJMK Inc. / DNA4. Week 38 (Sep 13–19, 2026) is the default. Overall standing 84 Fantastic. Week 37 (Sep 6–12, 2026) remains at 85.8 Fantastic. No prior-week comparison was published in either summary, so the UI does not invent deltas.
Fantastic / Great / Fair / Poor numeric bands on each tile are still illustrative. Badges match the standing Amazon displayed. On Week 38 that includes Delivery Completion DPMO Great (4,166.9), CDF DPMO Great (1,360), POD 99.46%, tenured workforce 94.01%, compliance Compliant, and No Data metrics. Bands that would grade a Week 38 value differently from Amazon’s tier are hidden.
Next.js App Router, TypeScript, Tailwind CSS v4, shadcn/ui, lucide-react, Recharts.
apps/morning-dispatch)The Vite + React operations command center that already lived on main — Morning Dispatch Readiness Center, live operations, fleet readiness, scorecard intelligence, workforce, and the rest — is preserved under apps/morning-dispatch. Its package.json, src/, public/, and configs are unchanged aside from the move. Its own notes are in apps/morning-dispatch/README.md.
cd apps/morning-dispatch
npm install
npm run build
npm run dev
npm ci works the same way from that directory. Open http://localhost:5173 and sign in with a demo role. Password for every demo account is demo.
| Scorecard | DSP Console Performance Summary. Week 38 (Sep 13–19, 2026) is the default — overall standing 84 Fantastic. Week 37 (Sep 6–12, 2026) stays on the week switcher at 85.8 Fantastic. No prior-week comparison was published, so the UI does not invent deltas. |
| Payments | Amazon DSP Console Flex Payments scrape captured 2026-09-21 for CJMK Inc. / DNA4. Pending action $192,202.66 (6 invoices), visible paid total, invoice list, Week 37 variable $88,556.70 and incentive $3,878.88, and YTD Insights labeled 2025 as Console displayed them. No deposit or payment-method details were in that scrape. The Week 37 variable section rollup matches the Sep 23 variable invoice (INV-GA6T0P-0000000614). Week 38 Work Summary is seeded (7,865 packages, 7,860 delivered, 5 pickups, 34 routes, 2,410 miles, 0 unplanned delays). The Week 38 variable invoice was not listed — no invoice total is invented. |
| Compliance | Week 41 (Oct 4–10, 2026) opens by default. Week 38 (Sep 13–19, 2026) and Week 39 (Sep 20–26, 2026) stay on the same page. Amazon side is the DSP Console weekly schedule workbook (Rostered Work Blocks + Shifts & Availability). Week 38 was exported 9/22/26, 8:59:54 PM. Week 39 was exported 9/21/26, 11:40:31 PM. Week 41 was exported 10/13/26, 7:51:45 PM. Week 38, Week 39, and Week 41 ADP are read-only Workforce Now Group Timecards for the full Sun–Sat week; individual timecards were not captured. Week 38 Breaks is summary-only (no per-DA meal rows, and work-hour nearing counts were not in the capture). Week 39 Compliance Breaks meal clocks were not in that capture; the page only joins the three associates named on the attached breaks screenshot. Week 41 Breaks is the 94-DA board (Non-compliant and Missing Punch days only; no meal clocks). Loading any week into ADP schedule templates is deferred and the control on the page stays disabled. |
| Drivers | Full roster: union of Amazon schedule associates for Weeks 38 and 39 (transporter ID). Oct 30 Delivery Execution supplies today’s routes, packages, and status when the name matches. ADP Group Timecard names with no schedule transporter ID are included and labeled ADP only. Phone and email come from the ADP Employee Census (526 employees, 126 with a phone) when the name matches. The page opens on Active, and also keeps associates the census did not list. Terminated and deceased are labeled and available on the employment filter. Tenure and scorecard contribution were not in these exports. |
| Fleet / incidents | Fleet is the DNA4 My vehicles capture in src/lib/data/seed/amazon-fleet-dna4.json: 53 vehicles from Administration → Fleet → My vehicles (unit, plate, makeModel, vin, ownership, type, status, statusReason, lastRouteCompleted, assignedRoute). Year and mileage were null in that export and stay blank. Rivian EDV 700 rows that Console typed as “2dr Step Van” are shown as Amazon EDV. Seven of those Rivian rows published a single identifier, stored as both the unit and the plate. DVIC for 2026-10-15 is 0 pre-trip, 0 post-trip, and 0 AVI post-trip from the dashboard counts in dvic-2026-10-15.json (Administration → Fleet → Dashboard → Today's vehicle inspections, morning capture). Those inspection arrays are empty, so no per-vehicle damage rows are invented. The dvic-2026-10-14.json capture stays 44 / 44 / 10. The older dvic-2026-09-23.json capture stays 0 / 0 / 0 because that dashboard listed zeros and has no counts. Incidents remain mock. |
America/Chicago default), themesrc/lib/data/seed/delivery-execution-2026-10-26.jsonsrc/lib/data/seed/packages-exceptions-2026-10-26.csv — Packages export for that earlier wrap (205 rows)src/lib/data/seed/delivery-execution-2026-10-22.json — earlier Delivery Execution evening wrap, kept in the reposrc/lib/data/seed/packages-exceptions-2026-10-22.csv — Packages export for that earlier wrap (129 rows)src/lib/data/seed/delivery-execution-2026-10-21.json — earlier Delivery Execution evening wrap, kept in the reposrc/lib/data/seed/packages-exceptions-2026-10-21.csv — Packages export for that earlier wrap (107 rows)src/lib/data/seed/delivery-execution-2026-10-20.json — earlier Delivery Execution evening wrap, kept in the reposrc/lib/data/seed/packages-exceptions-2026-10-20.csv — Packages export for that earlier wrap (129 rows)src/lib/data/seed/delivery-execution-2026-10-19.json — earlier Delivery Execution evening wrap, kept in the reposrc/lib/data/seed/packages-exceptions-2026-10-19.csv — Packages export for that earlier wrap (118 rows)src/lib/data/seed/delivery-execution-2026-10-16.json — earlier Delivery Execution capture, kept in the reposrc/lib/data/seed/packages-exceptions-2026-10-16.csv — Packages export for that earlier capture, kept in the reposrc/lib/data/seed/delivery-execution-2026-10-15.json — earlier Delivery Execution evening wrap, kept in the reposrc/lib/data/seed/packages-exceptions-2026-10-15.csv — Packages export for that earlier wrap (144 rows)src/lib/data/seed/delivery-execution-2026-10-14.json — refresh-final re-pull captured 2026-10-18 8:49 p.m. CT (38 routes, 3 in progress, 35 complete, execution gauges null), kept in the reposrc/lib/data/seed/packages-exceptions-2026-10-14.csv — Packages export for that re-pull (134 rows)src/lib/data/seed/delivery-execution-2026-10-13.json — earlier Delivery Execution evening wrap, kept in the reposrc/lib/data/seed/packages-exceptions-2026-10-13.csv — Packages export for that earlier wrap (177 rows)src/lib/data/seed/delivery-execution-2026-10-12.json — earlier Delivery Execution evening wrap, kept in the reposrc/lib/data/seed/packages-exceptions-2026-10-12.csv — Packages export for that earlier wrap (168 rows)src/lib/data/seed/delivery-execution-2026-10-09.json — earlier Delivery Execution evening wrap, kept in the reposrc/lib/data/seed/packages-exceptions-2026-10-09.csv — Packages export for that earlier wrap (157 rows)src/lib/data/seed/delivery-execution-2026-10-08.json — earlier Delivery Execution evening wrap, kept in the reposrc/lib/data/seed/packages-exceptions-2026-10-08.csv — Packages export for that earlier wrap (145 rows)src/lib/data/seed/delivery-execution-2026-10-07.json — earlier Delivery Execution evening wrap, kept in the reposrc/lib/data/seed/packages-exceptions-2026-10-07.csv — Packages export for that earlier wrap (101 rows)src/lib/data/seed/delivery-execution-2026-10-06.json — earlier Delivery Execution evening wrap, kept in the reposrc/lib/data/seed/packages-exceptions-2026-10-06.csv — Packages export for that earlier wrap (181 rows)src/lib/data/seed/delivery-execution-2026-10-05.json — earlier Delivery Execution evening wrap, kept in the reposrc/lib/data/seed/packages-exceptions-2026-10-05.csv — Packages export for that earlier wrap (80 rows)src/lib/data/seed/delivery-execution-2026-10-02.json — earlier Delivery Execution evening wrap, kept in the reposrc/lib/data/seed/packages-exceptions-2026-10-02.csv — Packages export for that earlier wrap (215 rows)src/lib/data/seed/delivery-execution-2026-10-01.json — earlier Delivery Execution evening wrap, kept in the reposrc/lib/data/seed/packages-exceptions-2026-10-01.csv — Packages export for that earlier wrap (139 rows)src/lib/data/seed/delivery-execution-2026-09-30.json — earlier Delivery Execution evening wrap, kept in the reposrc/lib/data/seed/packages-exceptions-2026-09-30.csv — Packages export for that earlier wrap (167 rows)src/lib/data/seed/delivery-execution-2026-09-29.json — earlier Delivery Execution evening wrap, kept in the reposrc/lib/data/seed/packages-exceptions-2026-09-29.csv — Packages export for that earlier wrap (81 rows)src/lib/data/seed/delivery-execution-2026-09-28.json — earlier Delivery Execution evening wrap, kept in the reposrc/lib/data/seed/packages-exceptions-2026-09-28.csv — Packages export for that earlier wrap (147 rows)src/lib/data/seed/delivery-execution-2026-09-25.json — earlier Delivery Execution evening wrap, kept in the reposrc/lib/data/seed/packages-exceptions-2026-09-25.csv — Packages export for that earlier wrap (241 rows)src/lib/data/seed/delivery-execution-2026-09-24.json — earlier Delivery Execution evening wrap, kept in the reposrc/lib/data/seed/packages-exceptions-2026-09-24.csv — Packages export for that earlier wrap (102 rows)src/lib/data/seed/delivery-execution-2026-09-23.json — earlier Delivery Execution capture, kept in the reposrc/lib/data/seed/packages-exceptions-2026-09-23.csv — Packages export for that earlier wrap (114 rows)src/lib/data/seed/delivery-execution-2026-09-21.json — earlier Delivery Execution capture, kept in the reposrc/lib/data/seed/payments-settlements-2026-09-21.json — Flex Payments seed date 2026-09-21. Week 37 variable lines are the section totals from the Sep 23 variable invoice.src/lib/data/seed/variable-invoice-week37.json — Variable invoice INV-GA6T0P-0000000614, Week 37, Sep 6–12 2026, total $88,556.70src/lib/data/seed/variable-invoice-week37.pdf — PDF export captured with that invoicesrc/lib/data/seed/work-summary-week37.json — Work Summary Tool, Week 37 (5,335 packages, 31 routes completed)src/lib/data/seed/work-summary-week38.json — Work Summary Tool, Week 38 (7,865 packages, 34 routes completed). No variable invoice was listed.src/lib/data/seed/variable-invoice-week38.json — Week 38 variable invoice status not_listed. No dollars.src/lib/data/seed/10hr-bonus-week38.json — 148 Week 38 routes with 180 or more completed stops.src/lib/data/seed/10hr-bonus-week38-by-da.json — DA-first Week 38 list: 100 solo, 115 multi-transporter (yes/no), co-drivers as captured. Stops stay the route total. CSV twin: 10hr-bonus-week38-by-da.csv.src/lib/data/seed/work-summary-week39.json — Work Summary Tool, Week 39, captured in progress with zero summary metrics. No variable invoice was listed.src/lib/data/seed/week38-amazon-schedule.xlsx — Amazon Scheduling Week 38 workbook (source for blocks and shifts)src/lib/data/seed/week38-amazon-schedule.json — that workbook parsed with the real headers (Rostered Work Blocks and Shifts & Availability)src/lib/data/seed/adp-timecards-week38.json — ADP Group Timecard for Sep 13–19. individualTimecards is emptysrc/lib/data/seed/week38-amazon-breaks.json — Week 38 Breaks dashboard totals only. No per-DA meal rows, and work-hour counts are nullsrc/lib/data/seed/week39-amazon-schedule.xlsx — Amazon Scheduling Week 39 workbook (source for blocks and shifts)src/lib/data/seed/week39-amazon-schedule.json — that workbook parsed with the real headers (Rostered Work Blocks and Shifts & Availability)src/lib/data/seed/adp-timecards-week39.json — ADP Group Timecard for Sep 20–26 (959 Date-column rows). individualTimecards is emptysrc/lib/data/seed/week39-amazon-breaks.json — Compliance Breaks rows visible in the Week 39 screenshot, and the dashboard totals. No meal start/end times.src/lib/data/seed/week41-amazon-schedule.xlsx — Amazon Scheduling Week 41 workbook (source for blocks and shifts)src/lib/data/seed/week41-amazon-schedule.json — that workbook parsed with the real headers (Rostered Work Blocks and Shifts & Availability)src/lib/data/seed/adp-timecards-week41.json — ADP Group Timecard for Oct 4–10 (1,173 Date-column rows). individualTimecards is emptysrc/lib/data/seed/week41-amazon-breaks.json — Week 41 Breaks board, 94 DAs. Non-compliant and Missing Punch days only. No meal start/end times.src/lib/data/seed/dvic-2026-10-15.json — Oct 15 Today's vehicle inspections (morning). Dashboard counts 0 pre-trip, 0 post-trip, 0 AVI post-trip. Inspection arrays are empty.src/lib/data/seed/dvic-2026-10-14.json — Oct 14 Today's vehicle inspections, kept in the repo. Dashboard counts 44 pre-trip, 44 post-trip, 10 AVI post-trip. Inspection arrays are empty.src/lib/data/seed/fleet-issues/issues-2026-10-15.json — Oct 15 open issues. 1247 rows. 0 inspection defects created that day. No detail blocks.src/lib/data/seed/fleet-issues/issues-2026-10-14.json — Oct 14 open issues, kept for comparison.src/lib/data/seed/dvic-2026-09-23.json — earlier DVIC capture, kept in the repo. Dashboard listed 0 / 0 / 0 and has no counts.