A mission-critical workforce-transport platform that gets hundreds of shift workers to a 24/7 smelter, correctly, every rotation.
Nordural runs a 24/7 aluminium smelter at Grundartangi where hundreds of shift workers must be bused and carpooled to the plant on every rotation. We replaced the fragile spreadsheet-and-email workflow with a single internal platform that syncs live HR and shift data straight from the client's on-prem SQL Server, geocodes every worker's home, and runs a custom GPS road-distance engine to pack the right people into the right vehicles by geographic corridor. Around that core it governs the entire vehicle fleet lifecycle, driving-agreement compliance, and per-shift utilization reporting, built on Next.js 16, React 19 Server Actions, Prisma and Tailwind v4, engineered for correctness, speed of use, and future expansion.
Admin-only, built for the operations staff who plan the commute and run the fleet, not a public app.
- A GPS road-distance carpool-matching engine that partitions hundreds of workers into route corridors and packs them into vehicles to seat capacity, with locked-seat optimisation and clear reasons for anyone who cannot be placed
- A live bridge to Nordural's on-prem Microsoft SQL Server that syncs employees and rotating shift groups, soft-deactivates departed staff, and audits every run
- One source of truth for the company vehicle fleet, spanning registry, lease contracts, returns, loaners, cleaning and driving-agreement compliance, replacing email and spreadsheets
- Per-shift and fleet-wide utilization dashboards plus one-click XLSX reporting, with Icelandic-aware bulk Excel import across every module
A system of systems.
Norðurál is not one product but a connected platform of purpose-built systems, each engineered to do one job exceptionally well.
Carpool Routing and Assignment Engine
Built for Nordural's daily commute to the Grundartangi smelter, the Carpool Routing Engine turns a roster of unassigned workers into tight, geography-aware vehicle groups. It first partitions employees into route corridors derived from the compass bearing and road distance of each home to the plant, Akranes-local, north toward Borgarnes, and the Reykjavik-area spokes through Mosfellsbaer, Kopavogur and Hafnarfjordur, then sub-clusters each corridor with a farthest-point-seeded nearest-neighbor pass refined by 2-opt swaps that minimise the road-distance spread inside every car. Distances come live from Google's Distance Matrix API, deduplicated by address and cached pairwise so co-located colleagues cost zero calls, with a Haversine fallback whenever road data is missing. Clusters are packed into vehicles up to seat capacity while honouring locked seats, re-optimisation reshuffles everyone except the assignments a coordinator has pinned, and any worker who cannot be placed is surfaced with a precise reason, whether no vehicle was free or their address had no corridor data. The whole engine is deterministic, transactional, and verified against a dedicated test suite covering clustering, optimisation, and the assignment server actions.
On-Prem HR and Shift Sync Service
Connected straight into Nordural's own on-prem SQL Server, the HR and Shift Sync Service treats the company's HR system as the single source of truth, pulling employees from HR.EmployeeList and shift groups from Shifts.Shifts live over a pooled mssql connection, never a stale export. It does more than copy rows: an Icelandic-aware resolver reads each department and job title to map staff onto the right rotating vakt, Kersmidja, Skautsmidja, or Dagvinna shift, normalises kennitolur and employment types, upserts the result, and soft-deactivates anyone who has dropped out of the remote set instead of deleting them. When an employee's home address changes, it surgically invalidates only the affected distance and pairwise-distance caches so commute calculations stay correct without a full recompute. Every run, whether full, employees-only, or shifts-only, is written to an auditable SyncLog capturing fetched, created, updated, and deactivated counts, captured errors, duration, and trigger, so each sync is fully accountable and a partial failure never silently corrupts the local dataset.
Shift and Work-Pattern Engine
Built for Nordural's Grundartangi smelter, the Shift and Work-Pattern Engine is the organising spine of the entire fleet system: every employee, vehicle and vehicle assignment is foreign-keyed to a single shift group, so the work pattern is the one record everything else hangs from. It reconciles those groups against a live SQL Server view (Shifts.Shifts, scoped to the last month of rostered dates), resolving each remote GroupNameShort and Area into the smelter's real taxonomy, rotating A-E vakts, department-specific Kersmidja and Skautsmidja, and Dagvinna day work, while persisting the source GroupId and AreaId on every record so the local pattern stays traceable back to its origin. The resolver is deliberately order-aware: it matches department patterns before generic vakt patterns so an A-vakt Kersmidju entry lands on Kersmidja rather than A-vakt, and falls back to the POS/JOB column for shared crews like idnadarmenn whose true shift only appears there. Because Dagvinna never surfaces in the remote view, the engine guarantees it always exists as a safety net for non-rotating staff, and unknown groups are logged rather than silently dropped, so a sync that imports 200 employees can never strand one against a shift that is not there. The result is a self-healing pattern registry that keeps the smelter's rotating-shift reality and the local fleet database in lockstep, every sync auditable down to records fetched, created and updated.
Distance and Geocoding Engine
Built for Nordural's commuter-vehicle planning, the Distance and Geocoding Engine turns a worker's home address into actionable routing data at the source, geocoding to lat/lng and resolving real road distance to the Grundartangi plant through the Google Maps Distance Matrix and Geocoding APIs, region-pinned to Iceland. From each geocoded point it computes the forward bearing to the plant and assigns the worker to a route corridor, Akranes-local by distance, or one of the directional corridors from Borgarnes in the north through Reykjavik, Kopavogur and Hafnarfjordur in the south, with wrap-around bearing logic so no commuter falls between the lines. Beneath that sits a cost-aware caching layer: single-address results are cached per employee, while pairwise road distances are deduplicated by shared address, served from a SQL Server cache first, and only then batched to the API in exactly-100-element blocks across the upper triangle, throttled and quota-guarded to halve and rate-limit calls. When a road distance is unavailable it falls back cleanly to a Haversine great-circle estimate, feeding the matching engine cheap, reliable distances for every assignment it suggests.
Distance Refresh Engine
Built to keep Nordural's carpool optimiser fed with fresh commute data without burning Google Maps quota, the Distance Refresh Engine works incrementally rather than recalculating everything on every run. It scans each shift's active employees and selects only the records that actually need work, those with no cached distance, or whose cached origin address no longer matches the employee's current home address, then processes them strictly one employee at a time, streaming live progress back to the operator. For each address it resolves road distance to the Grundartangi plant and geocodes the coordinates in parallel, deriving a bearing and route corridor before persisting the full result to a per-employee distance cache. Typed error handling distinguishes invalid addresses, network faults and quota limits, halting the batch cleanly the moment the maps API is exhausted so no work is lost. The result is a self-maintaining distance layer the carpool engine reads instantly, re-hitting the maps API only for the handful of records that genuinely changed.
Employee Master Records
Anchored to Nordural's HR system, Employee Master Records is the single editable register for every worker in the carpool programme, synced from the live HR.EmployeeList view by a stable hrId anchor that maps Icelandic employment categories (Fastradning, Afleysing, I starfi, I leyfi) into clean status and type enums without ever overwriting locally curated phone, email, or notes. It treats the commute address as a first-class source of truth: per agreement with HR, the synced address reflects current residence (Adsetur) over legal domicile, and every kennitala is normalized through a dedicated canonicaliser that restores leading zeros silently dropped by numeric storage and reconciles hyphenated, plain, and imported forms into one comparable shape. Beneath the editable register sits the system's spatial intelligence: because home address is the input to road-distance and carpool clustering, any edit to address, postal code, or city automatically invalidates that worker's pairwise distance cache, so the matching engine never suggests carpools from stale geography. Bulk onboarding runs through a spreadsheet importer with validate-all-then-transact semantics, every row is checked before a single record is written, and the whole batch commits or rolls back as one transaction. The result is a register that is authoritative enough to drive distance calculation and carpool matching, yet resilient to the messy, inconsistent ways HR data actually arrives.
Fleet Registry and Operations Backbone
The Fleet Registry is the system of record for Nordural's vehicle fleet, every car keyed by its Icelandic plate, normalised to a canonical uppercase-and-hyphen format at the validation layer so to125, TO-125 and TO125 all resolve to one row. Each vehicle carries its make, model, energy type (electric, hybrid, petrol or diesel), ownership, shift, and a hard 4-seat capacity policy enforced both in the schema and by a one-off migration that gracefully bumps overflow assignments. A live fitness layer flags any vehicle missing its fuel card or keys, and surfaces lease contracts that have expired or fall due within thirty days, turning the table into an at-a-glance readiness board. Beneath the CRUD sits the operational backbone for the whole platform: transactional guardrails refuse to reassign a vehicle's shift while crew are seated in it, block deletion of a car that is mid-loan or actively assigned, and spin up a lease contract in the same write when a vehicle is created as leased, while XLSX and CSV import validates every row, resolves shift names, and bulk-loads the fleet in a single atomic transaction.
Driving Agreement Compliance Registry
Built for Nordural's fleet operations, the Driving Agreement Registry holds the single source of truth for who is cleared to drive or ride in company vehicles, one binding agreement per employee, classified as permanent (Fastradning) or substitute (Afleysing) and switchable between active and inactive without ever deleting the record. Bulk onboarding is handled by a kennitala-matched importer that reconciles messy HR spreadsheets at the source: it normalises Icelandic national IDs to bare digits, restores leading zeros that numeric columns silently drop, and falls back to HR employee number when a kennitala cannot be resolved, while accepting employment types in either Icelandic or English. Every import is validated all-or-nothing, if a single row fails, nothing is written, and the accepted rows are committed inside one database transaction that guards against duplicate agreements and orphaned employee references. The whole register exports back to a clean, column-sized Excel workbook in the same vocabulary the team already uses (kennitala, shift, name, type, status), closing the loop between spreadsheet-driven HR and a system of record that the rest of the fleet platform can trust.
Contract and Lifecycle Tracker
Built for Nordural's leased fleet, the Contract and Lifecycle Tracker binds every vehicle to its leasing agreement, contract type (lease, short-term, seasonal), supplier, and the start, end, and scheduled-return dates that govern it. A single expiry window, tuned through CONTRACT_EXPIRY_WARNING_DAYS, drives the whole system: contracts are classified at query time into active, expiring within thirty days, and already expired, surfacing as colour-coded badges in the contracts table and as dedicated expiring and expired alert cards on the fleet dashboard so renewals are never missed by accident. Return tracking runs in parallel, separating vehicles still scheduled for handover, flagging any past their return date as overdue, from a historical record of everything already returned or retired. Bulk onboarding is handled by a spreadsheet importer that parses XLSX, XLS, and CSV files, resolves plate numbers to fleet IDs, validates every row against the contract schema before committing, and writes the whole batch inside one transaction so a partial import can never corrupt the ledger.
Loaner Vehicle Manager
Built for Nordural's fleet operations, the Loaner Vehicle Manager tracks every short-term vehicle handed to a visitor or contractor, capturing who has it, which organization they represent, the rental window, and the pickup and return locations against a single TemporaryVehicle record. Status is never entered by hand: the system derives active, overdue, or returned from the rental period and the actual return date, and an on-loan flag is computed from any open assignment and reflected straight back onto the vehicle's row in the fleet registry. Before a vehicle can go out, an availability guard blocks double-booking, refusing any car that already carries an open loan or an active day-work assignment. Closing a loan is a single confirmed action that stamps today's return date and flips the vehicle back to available across the whole system. A multi-step XLSX and CSV importer rounds it out, parsing and validating every row, resolving plate numbers to vehicles, and committing the batch in one transaction with per-row conflict reporting so nothing half-imports.
Fleet Utilization Intelligence
Built for Nordural's vehicle fleet, the Fleet Utilization engine turns raw shift, vehicle, and assignment records into a live picture of how hard the fleet is actually working, filtering to active vehicles only, summing seating capacity per shift, and computing utilization as distinct assigned employees against available capacity, rounded to a tenth of a percent. A single Prisma query feeds both per-shift and fleet-wide rollups: total vehicles, total capacity, assigned versus unassigned headcount, and a fuel-type mix that spans electric, hybrid, petrol, and diesel, so EV adoption is tracked alongside everything else. Above the math sits a Recharts dashboard layer, a utilization donut, a stacked per-shift assigned-vs-unassigned bar chart, fuel-type and employment-type breakdowns, and a per-shift table that colour-grades each shift green, amber, or red against utilization thresholds. The same numbers stream straight into a downloadable XLSX workbook, one row per shift plus a TOTAL line and a column for every fuel type, exported on demand as a dated nyting-bila file ready for management review. Every figure is covered by a dedicated test suite, so the headline percentage on the dashboard and the cell in the spreadsheet always agree.
Bulk Excel Import Pipeline
Built to swallow the messy real-world spreadsheets Nordural's fleet runs on, the Bulk Excel Import Pipeline reads XLSX, XLS, and CSV from a single shared parser and coerces every cell into clean domain data at the source, decoding Icelandic DD.MM.YYYY dates and raw Excel date serials, Icelandic and English booleans (ja and nei, yes and no, 1 and 0), and case-insensitive enums for fuel type, contract type, cleaning type, and employment type. It validates each row independently against a Zod schema and returns a precise, row-numbered error instead of failing the whole file, so a preview table can show valid, error, and skipped counts and let staff toggle individual rows off before committing. Reference columns resolve intelligently against live lookups: vehicles match by plate or numeric ID, shifts by name or ID, and employees by kennitala, normalised on bare digits to survive hyphenation and the dropped leading zero that numeric spreadsheet columns silently strip. Legacy values are migrated transparently (old LOAN and RETURNED statuses and Icelandic Fastradning and Afleysing job types map to the current enums), and each of the six modules ships a one-click, pre-formatted XLSX template with a worked example row so imports start clean rather than guessing the format.
Fleet Cleaning Ledger
Built for Nordural's vehicle fleet, the Fleet Cleaning Ledger records every full, interior, and exterior cleaning as a dated event tied to a specific vehicle, then resolves the single most recent cleaning per active vehicle straight from the source, a Prisma query that orders each vehicle's events by date and takes the latest, surfacing it as a status badge that flags anything past thirty days. Because most cleanings arrive as emailed spreadsheet reports, the ledger ingests XLSX, XLS, and CSV files directly: it matches each row's vehicle by plate number or numeric ID, normalises cleaning types case-insensitively, and parses dates across ISO, Icelandic DD.MM.YYYY, and raw Excel serial formats so the quirks of exported reports never silently corrupt a record. Every upload runs through a preview step where each row is validated and badged, problem rows can be toggled out, and only the clean set is committed, all-or-nothing on validation, then written inside a single database transaction so a partial import can never leave the fleet's cleaning history half-updated. Drilling into any vehicle shows its full cleaning timeline alongside an inline form to log the next event, keeping the record of who-cleaned-what-when complete and Icelandic-localised end to end.
Let's build something exceptional.
Tell us your ambition and we will show you exactly what is possible, with a precise plan, a clear quote, and a team that delivers at speed.