Case studyFeatured

Dialogue Time – Time Tracking & Planning Portal

Replaced scattered timesheets and manual payroll processes with a single source of truth. Consultants log hours in one system, managers approve in real-time, and exports are audit-ready by default.

Full-stackInternal toolsIntegrationSecure & Auditable
ReactNode.jsExpressSequelizeMySQLMongoDBMicrosoft GraphAzure AD / MSALDockerApache

Client

Dialogue One A/S

Industry

Consulting / IT services

Role

Lead architect & full-stack developer

Timeframe

2019-2021

Location

Copenhagen, Denmark

Published

Dec 1, 2021

Context

Dialogue One wanted a single source of truth for hours, payroll, and scheduling. Time registration lived in spreadsheets and email, project planning sat in Outlook calendars, and payroll checks were manual. Off-the-shelf tools were either too heavy or didn’t integrate with Microsoft 365.

Approach

  • Architecture: React PWA + Node/Express API with Sequelize on MySQL; MongoDB for announcements and WebSocket notifications.
  • Security & identity: MSAL2 SSO with Azure AD groups, JWT bridge for the API, and Graph for calendar awareness.
  • Data model: Double-ledger schema linking hours, salary periods, and audit trails via Sequelize hooks.
  • Integrations: Emply HR data on login, Ninox CRM and Danløn targets, Swagger-documented REST API.
  • Ops: Dockerised services on an Ubuntu host behind Apache; service workers for cache-first UX and update prompts.

Highlights

  • Flux-style global state and Axios interceptors that pair Graph bearer tokens with JWTs.
  • Excel add-in + VBA tooling for billing/export to match the database schema.
  • Rate-limited API with CORS allowlists and method guards; WebSocket reminders for missing hours.

Impact

  • Centralised hours and scheduling instead of scattered spreadsheets.
  • Reduced manual payroll checks through ledger-backed exports and add-ins.
  • Higher adoption thanks to SSO, calendar alignment, and a fast PWA experience.
  • Reusable patterns (Docker host, reverse proxy, identity bridge) now power other internal tools.