# NWTL Ops Portal — North West Trenching Ltd > Marketing site + offline-first field operations, safety and COR compliance portal for an > Alberta trenching / hydrovac / HDD contractor. Built as a replacement for SiteDocs and paper forms. > Machine-readable full feature spec: https://nwtldemo.live/ai-features.json Stack: TanStack Start v1 (React 19), Vite 7, Tailwind CSS v4, shadcn/ui, Supabase (Postgres/Auth/Storage), Google Maps, vite-plugin-pwa (service worker + offline outbox), tesseract.js OCR, client-side PDF export. ## Structured data for AI agents - [Full feature + data-model spec (JSON)](https://nwtldemo.live/ai-features.json): every module, route, field, role and reusable pattern - [Sitemap](https://nwtldemo.live/sitemap.xml) ## Crew portal (open demo, phone-first, works offline) - [Today](https://nwtldemo.live/today): today's dispatch assignment, start-of-day prompt - [FLHA](https://nwtldemo.live/flha): field level hazard assessment with trenching depth/soil/protective-system logic, Alberta OHS Code citations, photo + OCR upload, signatures, GPS geofence check - [Checklists](https://nwtldemo.live/checklists): runnable hydrovac (22 items, signature required), excavator (18), trench box (17), HDD (20) pre-trip inspections - [Daily ticket](https://nwtldemo.live/daily-ticket): LEMS labour / equipment / materials with AFE selection and client signature - [Locates](https://nwtldemo.live/locates): Alberta One-Call tickets with expiry countdowns and dig-radius map - [Incidents](https://nwtldemo.live/incidents): near-miss and incident reports with scene photos and GPS - [Tool checkout](https://nwtldemo.live/tool-checkout): QR check-out / return of small equipment ## Back office (read-only public demo; live records require staff sign-in) - [Field inbox](https://nwtldemo.live/admin/field-inbox): live field submissions, photo thumbnails, GPS, pending/sent/delivered status, CSV + PDF export - [Dispatch](https://nwtldemo.live/admin/dispatch): morning board, crew templates under a foreman, conflict detection - [COR readiness](https://nwtldemo.live/admin/cor-readiness): live Alberta COR audit scoring by element with linked evidence - [Assets](https://nwtldemo.live/admin/assets): inventory, QR tags, location by truck/shop, repair + checkout history - [Job sites](https://nwtldemo.live/admin/job-sites): map pin drop, geofence radius, 17-item OHS site checklist - [Field map](https://nwtldemo.live/admin/field-map): sites, active locates and incidents on one map - [Permissions](https://nwtldemo.live/admin/permissions): admin / supervisor / crew capability matrix - [Offline tools](https://nwtldemo.live/admin/offline): PWA cache status, outbox queue, connectivity simulation ## Public site - [Home](https://nwtldemo.live/) — includes public safety performance dashboard (safe hours, LTI days, COR status) derived from real records - [Services](https://nwtldemo.live/services), [Safety](https://nwtldemo.live/safety), [Safety policy](https://nwtldemo.live/safety-policy), [Equipment](https://nwtldemo.live/equipment), [Contact](https://nwtldemo.live/contact), [Request a bid](https://nwtldemo.live/request-a-bid) - [vs SiteDocs comparison](https://nwtldemo.live/vs-sitedocs) ## Reusable patterns in this build - Offline outbox: write local first, queue, flush on reconnect, expose queue depth - Geofence flag (not block) by comparing device GPS to site radius on submit - Immutability after supervisor sign-off - Capability matrix instead of scattered role checks; roles in a separate table with a security-definer has_role() - Tables on desktop, card stacks under md; mobile baseline 393px - Chunk-load-error self-healing: purge caches, unregister service worker, reload once Built by Strategic Local Marketing Inc. — https://wa.me/message/4JNO3PZRLKDCG1