Skip to main content
2026

TaskForce Construction

Multi-tenant construction management platform where site teams run daily reports, equipment, scheduling, claims and procurement from one dashboard.

Showcase of TaskForce Construction

Role

Frontend Feature Developer (React / Next.js), with supporting Node backend work

Client

Concept Dash (in-house SaaS product, TaskForce suite)

Duration

May 2026 – Aug 2026 (repo); Jun 2026 – Aug 2026 for this developer's commits

TaskForce Construction is the construction vertical of Concept Dash's TaskForce SaaS suite (alongside Engineering, HRM and CRM apps that share a sign-in and an app switcher). It is a large multi-tenant web application: a Next.js 14 App Router frontend and an Express/PostgreSQL backend, covering roughly thirty dashboard modules — projects and tenders, RFIs, NCRs, special provisions, Daily Site Reports, scheduling, finance and invoicing, proposals and RFPs, timesheets, property and municipal asset management, and a deep Equipment module (asset register, maintenance work orders, inspections, cross-project transfers, live tracking, telematics, materials). Tenancy is enforced at the database layer — auth middleware resolves a JWT to a `schema_<tenantId>` Postgres schema that every query is scoped into — and background work (telematics ingestion, invoice generation, SLA and reminder crons, campaign sending) runs through BullMQ workers and node-cron jobs.

This developer joined the existing codebase as a frontend feature contributor and owned several features end to end, including their API integration. The most substantial was voice-to-text for the Daily Site Report. Filling a DSR meant working through a twelve-section form at the end of a ten-hour shift, so the feature lets a supervisor narrate the report instead. The design deliberately separates the two halves of the problem: speech-to-text happens in the browser via the Web Speech API so no audio ever leaves for company infrastructure, and only the text transcript is sent to a server-side AWS Bedrock (Claude, Converse API) proxy that returns structured JSON. Nothing is written to the form until the user reviews and confirms each proposed value. Phase 2 extended it from free-text fields to typed ones — enums, booleans and numbers — by making a shared field-spec registry the single source of truth that drives both the model prompt and the server-side coercion/validation, so the contract cannot drift between what the model is told and what it is held to. The proxy was initially a Next.js API route holding the credentials, then migrated to a backend-owned `/voice/map` endpoint.

The other headline piece was an AI-DSR (camera + drone) prototype: a gated `/dashboard/ai-dsr` module presenting six tabs — cameras, drone flights, six measured metrics, a pre-filled read-only DSR draft, and an alerts feed — built entirely on authored mock fixtures with no backend and no ML. What makes it more than a mockup is that its TypeScript types deliberately mirror the proposed Postgres schema, so the prototype doubles as a written-down API contract for the backend team, and the fixtures are internally consistent: gate truck counts sum to material volumes, and one unmanifested truck leaving at 15:42 is modelled as the single cause of a flagged metric, a raised alert and a flagged gate-log row — so the demo argues for human-in-the-loop confidence thresholds rather than asserting it. A scripted run state machine lives above the tab router so run state survives navigation, evidence media resolves photo → generated SVG stand-in → labelled gradient block so partial asset sets degrade instead of breaking, and a Node script handles the tedious part of demo media (downscaling drone originals from 8–12 MB and stripping GPS EXIF before anything reaches a customer demo). The module ships with its own Jest suite and a companion eleven-document set covering requirements, implementation plan, user journey, backend API spec and a capture/ML integration primer.

Smaller but representative work: the Telematics Integration Hub UI and its phased API integration (a provider-driven Add Source wizard where required fields are derived from each provider's capability flags, with unimplemented lifecycle steps explicitly disabled rather than faked); the Materials & Consumables Register; a cross-app switcher gated on the tenant's actual product entitlements, defensive about malformed redirect URLs coming from deployment configs out of the repo's reach; and a public Equipment & Asset presentation deck that had to be moved from a static file to an SSR route handler because AWS Amplify serves `public/` straight off the CDN and never hit the Next.js rewrite.

Tech Stack

Next.js 14 (App Router)React 18TypeScriptRedux ToolkitNextAuth.jsMUITailwind CSSstyled-componentsSassAxiosZodJestReact Testing LibraryLeaflet / react-leafletTurf.jsChart.jsSyncfusion GanttSocket.IO clientCKEditorjsPDFExpressPostgreSQL (pg)MongoDBRedis / ioredisBullMQAWS Bedrock (Claude, Converse API)AWS S3 / SESWeb Speech APIPuppeteerExcelJSMicrosoft GraphBitbucket Pipelines

Features

  • Voice-to-text Daily Site ReportA supervisor narrates the site report; speech-to-text runs in the browser via the Web Speech API so no audio leaves the device, and only the transcript goes to an AWS Bedrock (Claude) proxy that returns structured field values for review before anything is applied.
  • Typed field mapping with a single-source registryPhase 2 extended voice mapping from free text to enums, booleans and numbers using one shared field-spec registry that drives both the model prompt and the server-side coercion, so the prompt and the validation can never disagree.
  • AI-DSR camera and drone prototypeA six-tab module presenting camera and drone capture, a scripted analysis run, six measured metrics with confidence thresholds, a pre-filled read-only DSR draft and an alerts feed — built on internally consistent mock fixtures whose TypeScript types double as the backend API contract.
  • Telematics Integration HubAn Add Source wizard driven entirely by the backend provider list, deriving which fields are mandatory from each provider's capability flags and explicitly disabling lifecycle steps the backend had not implemented yet instead of faking them.
  • Cross-app switcher with entitlement gatingA sidebar switcher between the Engineering, Construction, HRM and CRM apps that only shows the products a tenant is actually subscribed to, and refuses non-absolute redirect URLs so a malformed deployment env var cannot navigate back into the current app.
  • Materials and Consumables RegisterA register screen for site materials and consumables in the Equipment module, wired to the backend materials list API.
Available for work

Let's create your next big idea.