Commit Graph

10 Commits

Author SHA1 Message Date
Developer
f517b77377 style: fix linting issues with Laravel Pint 2026-07-02 13:55:34 +08:00
Developer
c4cbdb42c7 feat(store): complete partner store overhaul with mapping, household search, financial analytics, and resident notification system 2026-07-02 13:55:08 +08:00
ramram1515
ec6b9e61a3 feat: implement Live Truck Radar caching 2026-07-02 13:02:29 +08:00
ramram1515
2467633b1b Config 2026-06-30 16:10:19 +08:00
ramram1515
b8c56585bc UI enhancements and Actionable Notifications 2026-06-30 14:06:21 +08:00
ramram1515
88caf14aa1 fix(api): force Manila timezone for upcoming pickups evaluation 2026-06-30 13:21:56 +08:00
Developer
b85fc255cf feat: implement barangay and household management with associated tests 2026-06-29 15:02:52 +08:00
f552bccd1a feat(customer-web): Phase 3 — codes / pickups / history / live tracker
Backend:
- New GET /api/v1/me/live/trucks. Returns active trucks whose
  in-progress trip serves the resident's assigned drop-off point,
  with the same shape as the admin endpoint. Empty when household
  has no DOP yet.

Frontend (customer-web/):
- /codes — paginated list with status filter pills (all / active /
  allocated / used / expired), one-click activate for allocated
  codes (in-place state update), inline balance summary + low-balance
  warning banner with link to partner stores.
- /pickups — upcoming-trip cards with status pill, route, scheduled
  date/time, my stop sequence, driver, truck plate, link to live
  tracker. Friendly empty states for "no DOP assigned" and
  "no trips scheduled".
- /collections — date-range filtered scan history table (when /
  serial / drop-off / weight / waste type), shows total scan count.
- /tracker — Leaflet map polling /me/live/trucks every 10s. Drop-off
  pin (verde dot) + truck markers (rotating SVG arrow by heading
  degrees, 400ms transition between updates). Diff-update logic:
  reuses markers across polls and removes trucks that vanish.
  Side list of active trucks with plate, team, speed, last update.
  Falls back to NCR center when no DOP coords. Leaflet loaded from
  CDN (kept out of bundle) — no SSR concerns.
- Resident nav adds /collections (label "History").
- API client: types LiveTruck + LiveTrucksResponse; me.liveTrucks().

Build: 16 routes, all type-check + lint clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 19:49:04 +08:00
1bc1ea7282 feat(customer-web): Phase 2 — onboarding wizard + household management
Backend:
- New GET /api/v1/me/household endpoint. Returns the resident's
  household (with members + barangay + assigned DOP) or { household:
  null }. Used by the wizard to gate-keep the onboarding flow.

Frontend (customer-web/):
- /onboarding — 5-step wizard (Address+map, Size, Proof, Members,
  Review). Submits POST /households then uploads proof + adds
  members in sequence. Server-side guard redirects to /household
  when one already exists.
- /household — full status view:
  - Pending: live polling every 30s, "Refresh" button, status pill
  - Approved: success state, link back to dashboard
  - Rejected: shows reviewer's reason, ResubmitCard re-uploads
    proof and flips status back to pending automatically
  - Members card with add/remove (head is protected)
- /home now checks household state server-side:
  - No household → redirect /onboarding
  - Pending/rejected → status banner + link
  - Approved → full dashboard with QR balance + next pickup +
    quick-action grid
- New components:
  - MapPicker — click-to-place pin via Leaflet (CDN-loaded), drag
    to fine-tune, returns {lat, lng}
  - ProofUpload — drag-and-drop with image preview, jpg/png/pdf,
    8MB cap, file size + type validation
- API client adds me.household() and reuses existing household.*
  + uploadProof multipart helpers

Build: 12 routes compile clean, biggest first-load JS 122 kB
(/register), Wizard + Household views 5–7 kB each.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 18:55:38 +08:00
306f8fb4e8 feat(backend): customer-site API gaps + CORS
- GET /partner-stores/nearby — public, residents browse active stores
  ranked by distance via ST_Distance_Sphere; PublicPartnerStoreResource
  excludes commission rate / owner / permit (only what a buyer needs).
- GET /partner-stores/{uuid} — public details, 404 if not active.
- GET /me/collections — paginated resident QR scan history with
  optional from/to date filters.
- GET /me/upcoming-pickups — finds scheduled/in-progress trips whose
  route includes the resident's assigned drop-off point. Returns
  household_assigned: false when no household yet.
- GET /me/notifications — paginated database notifications inbox
  with unread_only filter + unread_count in meta.
- POST /me/notifications/{id}/read, POST .../mark-all-read,
  GET .../unread-count.
- config/cors.php — allow CUSTOMER_APP_URL and any EXTRA_CORS_ORIGINS
  to call the API with credentials. Same-origin admin web is
  unaffected.

202 feature tests passing.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 17:55:10 +08:00