Changelog
All notable changes to ShopFlow.
0.7.0
Added
- Profile picture upload, display, and management (#178)
0.6.0
Added
- Email notification digest hardening and test coverage (#177)
Changed
- Reorganize route groups around shell/auth boundaries (#176)
- Consolidate all analytics routes under `/insights/*` (#176)
- Rename `/settings` to `/account` for clarity (#176)
- Replace duplicated nav grouping logic with single canonical destination registry (#176)
- Extract companion files for cells, cv-imports, and schedule pages (#176)
Removed
- Unused `AppNav.tsx` component
- Hardcoded dashboard redirect (now config-derived)
0.5.1
Changed
- Complete Radix UI to Base UI migration for all 17 UI primitives (#175)
0.5.0
Added
- User settings page with self-service PIN reset (#136)
- Note mentions and notification inbox (#133)
- Manager team PIN reset (#132)
- Mobile Search tab that launches command palette
- Login redesign with heritage styling for desktop and mobile PIN entry
- Unified log store with app_logs table, POST/GET /api/logs, and redaction
- Superadmin job-detail edit mode with regression fixes
- Better Stack / Logtail as primary log transport
- Manager override dialog for mobile queue view
- Backlog status tooltips on dashboard
- Preview deploy workflow for exe.dev
Changed
- Rename project to ShopFlow (#127)
- Migrate all client data fetching to TanStack Query (#130, #135, #148, #150)
- Migrate reports to TanStack Query hooks
- Redesign and harden schedule grid (#152)
- Streamline command palette job search rows (#137)
- Simplify desktop and mobile queue actions with clarified completion override copy
- Distill superadmin edit toggle to minimal inline bar
- Replace custom login numpad with native OS numeric keyboard
- Version job drawings via Smartsheet and retire intake flow
- Add proper timezone support with @date-fns/tz and shared formatting helpers
- Standardize icon sizing (#111), status colors (#110), motion easing (#108), button variants (#103), alert error states (#102), loading states (#106), empty state copy (#105), form control APIs (#96), and z-index tokens (#107)
- Define surface hierarchy for design system (#104)
- Simplify and compact mobile queue metrics
- CI: add turbo inputs, test sharding, and remote cache (#153)
- CI: move non-deploy CI to ARC runners (#112, #114)
Removed
- Dev log server (replaced by Better Stack / Logtail)
- Stale intake references (replaced by Smartsheet versioned drawings)
- Tutorial system
Fixed
- Mobile sidebar overflow — nav scrollable with pinned header/footer
- Command palette: mobile full-screen sheet with safe areas and touch targets
- Login PIN input mounted for mobile keyboard with native keyboard focus
- Mobile navigation clarified (#131)
- Back button on job detail navigates to originating cell queue
- Raw timestamp rendering in UI (#134)
- Backlog tooltip hover intent (#149)
- Job value visibility stripped server-side for non-privileged roles (#128)
- Home page a11y, error handling, and shared utils extraction
- Home punch clock auth, total hours fallback, and tick state
- Broken @logtail/pino transport crashing all server routes
- App logs: pg_cron retention cleanup, user_id tracking, and search escaping
- /manage RSC polling loop and auth gate opened to all roles
- Queue status sync to active sessions and operator persistence
- auth.uid() in session functions for PostgREST JWT compat
- Smartsheet: stop sending auth headers on pre-signed download URLs
- Dev middleware conflicts and turbo env vars
- White text contrast audit (#99)
- Focus trapping in modal popovers (#98)
- Semantic table markup in queues (#100)
- Section error boundaries (#101)
- Context-specific aria labels (#109)
- Touch targets (#95)
- Memoize realtime dashboard tables for performance (#97)
0.4.0
Added
- Feature flags system with DB migration, evaluation engine, API route, and React hook
- PO sync diff preview dialog
- Linear feedback widget with screenshot capture (#73)
- Loading skeletons for key views (#68)
- Route error boundaries (#59)
- Public route rate limits (#61)
- Zod body validation for API routes (#77)
- Comprehensive dev seed data
- Incident response runbooks for all major system components
- Integration test suites and CI integration-test job
- Internal beta rollout controls
- Scheduling batch queries and preview lead-time edits
- Inline PDF viewer for compact drawing panel
- Dashboard overhaul into phase-specific views
- Job flow e2e test coverage (#69)
- CI: automate release notes drafting
Changed
Fixed
- PO sync: match PDFs to sub-jobs using Job Information column
- PO sync: match PDFs to jobs by root number, not full normalized string
- Smartsheet: point PO sync at correct Purchase Orders sheet and fetch delivery date columns
- Smartsheet: parse comma-separated multi-picklist cell assignments
- Primary CTA and submit button contrast (#94)
- Feedback: mobile CTA overlap (#89), field validation accessibility (#90), screenshot capture stability (#76, #88, #92), screenshot attachment in Linear (#91), helper text contrast (#78), image preview (#93)
- PO sync modal layout (#75)
- Job detail mobile responsiveness (#64)
- Dashboard phase cell stats batching (#65)
- Job_cells throughput index (#66)
- Auth coverage enforced for audited routes (#71)
- job_cells parent constraint hardened (#58)
- Explicit `any` removed from API routes (#63)
- Route hold alerts to jobs-on-hold dashboard section
- Profile cache lookups hardened
- MAX_PDF_BYTES raised from 25 MB to 200 MB for drawing/PO imports
- Tutorial: anchor tours to real UI, fix route transitions, prevent overlay drift
- Migration: NULL-safe terminal state check, CASCADE dependent views
0.3.0
Added
- 6-tier role hierarchy: worker, coordinator, manager, director, executive, superadmin
- Unified command palette with registry, frecency ranking, and mode switching
- Command palette lifecycle packs: queue/dispatch, scheduling, job navigation, CV imports, admin
- Role-based visibility enforcement and typed-confirmation execution guards
- Calendar views, job detail tabs, and Smartsheet diff dialog
- Mobile UX overhaul: tap-to-expand queue actions, admin bottom nav, schedule day-list, dashboard cards
- Blocked job override modal with manager PIN verification
- Partial shipment tracking across DB and scheduler UI
- Grouped bulk drag reordering for schedule
- Job archive with auto-archive cron, restore lock, detail page, and sidebar navigation
- Health dashboard with score computation and risk analysis
- Queue: redesigned cell views, in-progress jobs grouped above weekly buckets
- Dashboard: count semantics clarified, dispatch observability added, top blockers grouped by category
Changed
- Auth helpers and API role checking use role hierarchy
- Navigation uses minRole hierarchy instead of boolean flags
- Redirect root route to cells
- Desktop login keeps classic dropdown; mobile gets grid + PIN pad
- Replace hardcoded colors with semantic status tokens across UI
- Split dashboard/admin/job flows into feature modules
- Remove dispatch Workbench from operations dashboard
Removed
- Partial shipments table (dropped after evaluation)
- Stale intake references
Fixed
- Queue ACLs hardened and refresh/calendar stabilized
- Smartsheet backfill deduplication and root error surfacing
- Smartsheet refresh sync path hardened
- Queue virtualization disabled while rows are expanded
- Queue complete action and expand spacing gap
- Schedule: handle grouped drag collisions within selection
- auth.uid() in session functions for PostgREST JWT compat
- DB: restore jobs and job_cells read RLS policies
- Analytics metric semantics and flaky tests stabilized
- Admin table saved views synced across tabs
- Phase cards kept independently collapsed
- Webhook and auth async waterfalls remediated
- SmartsheetDiffDialog null guard and diff payload normalization
- Activity monitor cookie/header capture timing
0.2.0
Added
- Weekly scheduling with Smartsheet ingest webhook and backfill
- Per-job drawing PDF upload and custom viewer with search overlay
- Global command palette (⌘K) for job search
- Cell queue views grouped by schedule week buckets
- Cell queue ordering derived from schedule drag-and-drop
- Re-sync from Smartsheet button
- Smartsheet job value ingestion and backfill
- Weekly schedule value totals with Value column and summary footer
- Job value, schedule week, PO, and customer info on job detail page
- Activity monitor (ultra-dense layout)
- Phase 3 test coverage for queue, scheduling, and cache logic
Changed
- Standardize responsive layout containers across web app
- Refactor Smartsheet sync and enforce baseline coverage gates
Fixed
- Duplicate week headers in cell queue table view
- PDF viewer container positioning
- Navigation flow improvements (sidebar + breadcrumbs)
- Overdue row tint and snap virtual row translate to pixels
- Virtualized queue row sizing stabilized with item keys
- Virtualizer cache reset on row collapse to prevent ghost gap
- Queue RPC overload ambiguity
- Smartsheet column ID mapping (use static mapping)
- Accessibility, contrast, and interaction improvements
0.1.0
Initial internal release.
Added
- Next.js 16 app with Supabase backend and dark-mode Village brand design system
- PIN-based authentication with display name lookup
- Production dashboard with phase overview and realtime subscriptions
- Cell queue views with TanStack Table, metrics banner, and infinite scroll
- Comprehensive jobs table with TanStack Table
- CV extraction worker for .mdb/.mdf processing
- CV import pipeline: upload, extraction status with auto-refresh, re-imports, and janitor
- Per-job CV data normalization into queryable tables
- Job rows/cards clickable to open job details
- Color-coded cells-required chips by status
- CV data delete for admins
- Sentry error monitoring integration
- Admin UI overhaul (users, queues, CV details)
- Operations dispatch workbench and optimized dashboard queries
- Radix UI migration — replace Headless UI with Radix primitives (Switch, Separator, Popover, Progress)
Fixed
- Queue materialized view migration order and cron schedule quoting
- Ambiguous id column in claim_cv_import RPC
- Assembly count when applying CV import
- CV worker race condition between upload and worker claim
- Dashboard TTL cache removed to prevent stale data with realtime
- Phase Overview column normalization with fixed grid layout
- Interval column type casting for parseIntervalToSeconds
- ToggleGroup stretching full width
- Queue DB functions and cache lookup optimization
- job_cells_queue_enriched performance for cells with dependencies