Role
Frontend Developer (module owner)
Client
Concept Dash
Duration
Dec 2025 – Aug 2026 (9 months of contribution; the repos themselves run from Jan 2024)
TaskForce Engineering is the engineering vertical of Concept Dash's multi-product TaskForce suite: a tenant-isolated B2B platform that a consulting firm runs its whole operation on. One login covers the bid pipeline (RFPs, tenders, proposal generation), delivery (projects, tasks, daily site sheets, transmittal logs, lessons learned), the money (AP/AR invoicing, budgets, timesheets and approvals), and the relationship side (organizations, contacts, activity timelines, SES email campaigns). The frontend is a Next.js 14 App Router application; the backend is an Express API over PostgreSQL, isolated per tenant by schema (`schema_${tenant_id}`) resolved in auth middleware, with MongoDB for document-shaped data, Redis and BullMQ for queued work, and a dozen node-cron workers driving timesheet reminders, invoice generation and follow-up nudges.
My work sat in three areas. The largest was the contacts and people module. I built an Add Contact wizard that turns a photographed business card into a saved contact: the image goes to an AWS Bedrock extraction service, the parsed organization and person fields come back pre-filled across four review steps, and the record saves exactly once with duplicate matching rather than blind inserts. Hardening from QA went in alongside it — stripping `<UNKNOWN>` placeholder tokens the model emits when a field is unreadable, requiring a client email, and redirecting to the new profile on both the Send and Skip paths. The same module gained an activity timeline with notes and reminders, a spreadsheet contact-import flow with an inline-edit review modal, and a "fill by voice" prototype on the Web Speech API.
On top of that I built region-scoped follow-up email. Regions became a first-class backend entity — their own table, a child table of project managers CC'd on every send — and I built the frontend to match: a template management page where marketing uploads whole HTML templates, with a mandatory sandboxed preview and a placeholder scanner that separates recognised tokens from unrecognised ones and flags `{{double braces}}` the substitution engine would send literally. The migration had a genuinely dangerous edge: templates began filtering on `region_id` rather than region name, so the old query string was silently ignored and returned every region's templates with no error. Catching that class of silent-success failure, rather than the loud ones, was most of the work.
The third area was cross-cutting platform work. I built the TaskForce app switcher that moves users between the Engineering, Construction, HRM and CRM products, then gated it on the tenant's actual entitlements by reading the central admin backend's product list instead of hardcoding tiles — and wrote up the gap that analysis exposed: the API answers "what has this organization subscribed to", not "what may this user open", so the switcher needs an intersection of two layers, the second of which did not yet exist anywhere. The same review turned up a JWT signing bug where `(process.env.JWT_SECRET = 'abc123')` assigned rather than read, meaning every token in both product backends was signed with a literal that the verifier also accepted as a fallback. Earlier work covered the proposal generator's multi-step API integration, the timesheet executive-review and approval screens, and a field-inspection module for a municipal rural resurfacing program — an eight-section inspection form with a driveway reinstatement checklist and map-linked road/area selection, alongside an embedded Power BI dashboard behind per-user access checks.
Tech Stack
Features
- AI business-card contact captureA four-step wizard that uploads or photographs a business card, runs it through an AWS Bedrock extraction service, pre-fills organization and person details for review, and saves the contact exactly once with duplicate matching instead of re-creating records.
- Region-scoped follow-up emailMarketing uploads whole HTML templates against a region; the send panel filters by the contact's region, CCs that region's project managers, gates Send behind a consent checkbox, and logs every send to the contact's activity timeline.
- Template upload validationUploaded HTML is scanned before it can be saved — recognised merge placeholders are separated from unrecognised ones, `{{double braces}}` that the engine would send literally are flagged, and a sandboxed preview is mandatory before the template goes live.
- Cross-product app switcher with entitlement gatingA sidebar switcher across the Engineering, Construction, HRM and CRM TaskForce products, showing only the apps the tenant's subscription actually grants and failing closed when the entitlement lookup is unavailable.
- Contact activity timelinePer-contact activity, notes and reminders with inline edit and delete, a Log Activity form reachable from three surfaces, and a voice-to-text prototype built on the Web Speech API that pre-fills the form from spoken input.
- Municipal field inspection moduleAn eight-section site inspection form for a rural resurfacing program — quantities, driveway reinstatement checklist, deficiencies, milestones and site conditions — with map-linked road and area selection and an embedded Power BI dashboard behind per-user access checks.
