Skip to main content
Back to Projects
FeaturedFlutterReact.jsNode.jsMobile Workforce

TAL Workforce Platform

UK welfare app that helps mobile workers find venues with toilets, water and rest facilities. Sameem worked on it as an engineer at Webrange Solutions. Live on the web, iOS and Android.

TAL Workforce Platform
Google Maps API
Maps
Flutter
Mobile
Node.js + MongoDB
Backend
Webrange Solutions
Engineer at

Facts about the build and who it was for. Any figure here is shown on a public store listing or site linked on this page — how we present portfolio work.

Project Story

The Challenge

Mobile workers lacked access to safe, reliable welfare facilities, impacting their health and productivity.

What Was Built

As an engineer at Webrange Solutions, Sameem worked on venue search with the Google Maps API (custom markers, clustering) and a React frontend with Radix UI and Zustand, alongside the Flutter app and Node.js backend.

The Result

Live at talservices.co.uk, on the App Store and on Google Play.

Project Details

TAL helps mobile and deskless workers, such as surveyors and delivery drivers, find nearby venues where they can use toilets, refill water and rest. Sameem worked on it as an engineer at Webrange Solutions: Google Maps API search with custom markers and clustering, and a React frontend with Radix UI and Zustand, alongside the Flutter app and a Node.js, Express and MongoDB backend with files on AWS S3.

Tech Stack

Flutter
Node.js

Category

Node.js Backend & AWS
Written by DevoraXReviewed by Sameem Amjad, Founder & Lead Architect EngineerLast updated Based on project records and public sources (case study)

TAL is a UK welfare app that helps mobile and deskless workers, such as delivery drivers, surveyors and property maintenance staff, find nearby venues where they can use a toilet, refill water, heat food and sit down. Sameem Amjad, DevoraX's founder, worked on TAL as an engineer at Webrange Solutions; his work included the Google Maps integration, with custom markers and clustering, and work on a React frontend using Radix UI and Zustand. TAL is live on the web at talservices.co.uk, on the App Store as TAL Services and on Google Play as TAL.

What you can check

  • Web: talservices.co.uk
  • iOS: TAL Services on the App Store, id6737687790
  • Android: TAL on Google Play, developer TAL Services

Each item points to something public: a store listing, a live site or a demo build. See our terms for how we present portfolio results.

What problem is TAL solving?

Mobile workers spend their shifts away from any fixed workplace. Delivery drivers, surveyors, property maintenance staff and other field workers move between jobs with no guaranteed access to a toilet, drinking water, somewhere to heat food or a place to sit. TAL's own site describes basic amenities as both a legal requirement and a reasonable expectation, and for people on the road they are often simply not there.

The facilities usually do exist. Cafes, pubs and other independent venues have toilets and seating in every town. What was missing was a trusted, structured way to connect a worker on the street with a nearby venue that has already agreed to welcome them, and a way for the worker's employer to arrange it.

Without that connection, workers improvise, employers have little visibility of welfare provision, and venues have no route to offer spare capacity to people who need it. TAL is built to close that loop.

How does TAL work?

TAL connects three parties. Employers register with TAL and approve their mobile workers for access. Approved workers sign in to the app, find nearby venues offering facilities such as clean toilets, water refills, kettles, microwaves, seating and sanitary products, check what each venue provides, and get directions in their preferred navigation app. Venues join the network for free and, according to TAL's site, earn money from each worker who visits.

The Google Play listing frames TAL as a health and safety compliance tool for employers as much as a convenience for workers: employers can track usage and confirm that their field staff have the facilities they need, and workers pay no sign-up costs.

That makes TAL a multi-sided system rather than a simple venue directory. The backend has to model who is entitled to access, not just where the venues are, and a venue shown as participating has to actually welcome workers, or the product fails at the exact moment someone is standing at the counter.

What did Sameem work on?

Sameem worked on TAL as an engineer at Webrange Solutions. He integrated the Google Maps API with custom markers and clustering so workers can find toilets and water refills quickly, and worked on the React frontend with Radix UI and Zustand, aiming for smooth performance on the low-end phones field workers often use.

The wider platform is made up of Flutter for the worker apps on Android and iOS, React.js for the admin dashboard, and Node.js with Express on the backend, with MongoDB for data and AWS S3 for file storage. The sections below explain why that stack suits a location-led welfare app.

Why custom markers and clustering on the map?

A welfare app is only as useful as its map. A worker opening TAL wants to see, at a glance, what is nearby and what each place offers. Custom markers carry that information on the pin itself, so a worker can tell venues apart without opening each one.

Clustering solves the opposite problem. In a busy area, many venues can sit within a few streets of each other, and at a city-wide zoom their pins pile on top of one another until the map is unreadable and slow to draw. Clustering groups nearby markers into a single counted bubble at low zoom levels and splits them apart as the worker zooms in, which keeps the map legible and keeps the number of drawn elements manageable on a cheap phone.

The two work together with the search behind them. The backend answers which venues are near a point; the map's job is to show that answer in a form someone can read at a glance, often while standing in the rain.

How is the platform split across mobile, web and admin?

TAL is not a single app. The worker apps and the admin dashboard sit on one shared backend. Flutter powers the worker apps on Android and iOS. React.js powers the admin dashboard used to manage the venue network and platform operations. Node.js with Express sits underneath both, with MongoDB for persistence and AWS S3 for object storage. The public website at talservices.co.uk introduces TAL to employers and venues.

The split follows the users. The worker app is a frequent, location-driven tool used outdoors on patchy mobile data. The admin dashboard is a data-dense interface used at a desk. The website is where employers and venues first find TAL, so load speed and search visibility come first.

Building all of them from one codebase would mean compromising on each. Instead, each surface uses tools suited to its job, while a shared API keeps venue, user and access data consistent between the apps and the dashboard.

Why Flutter for the worker apps?

The worker app is the product; everything else supports it. It has to behave the same on an older Android handset and a current iPhone, including map rendering, location permissions and long lists of results.

Flutter compiles to native code and draws its own widgets rather than bridging to each platform's UI components. In practice that means map overlays, venue cards and search results look and behave consistently across a wide range of devices, and the location, filtering and venue-detail logic exists once instead of twice.

Both builds are public: TAL Services on the App Store and TAL on Google Play. Releasing to both stores from one Dart codebase keeps the two apps in step without reconciling features by hand on every release.

How does venue search work?

Finding a venue is a geospatial query. The worker's phone reports a location, and the platform has to return nearby partner venues, ranked by distance and filtered by what the worker needs right now: a toilet, a water refill, somewhere to heat food.

MongoDB, the platform's datastore, handles this natively: its geospatial indexes can hold venue coordinates as GeoJSON and run proximity queries inside the database, rather than loading every venue into application memory and computing distances in Node.js. That is the difference between an instant answer and a spinner at the moment a worker is in a hurry, and the gap grows as the venue network grows.

On the phone, position updates are best debounced, so a worker walking or driving does not trigger a fresh search on every GPS reading. Searching again only once the worker has moved a meaningful distance protects both the backend and the phone's battery.

What do Node.js, Express, MongoDB and S3 each contribute?

A welfare app's traffic is bursty and dominated by input and output rather than computation: it tends to cluster around shift starts and break times, and almost every request is a database read, a location lookup or a file fetch. Node.js suits that shape. Its non-blocking event loop holds many concurrent requests without a thread per connection, and Express adds a thin middleware layer so authentication, validation and error handling are applied the same way on every endpoint. One API serves both the Flutter apps and the admin dashboard, so a venue change made in the dashboard reaches a worker's search results without a second sync process.

MongoDB's document model fits venues, which are not uniform. A pub, a cafe and a petrol station offer different facilities, opening patterns and partnership terms. Storing each venue as a document lets those attributes vary while staying indexed and searchable, without sparse columns or a sprawl of join tables.

AWS S3 is the place for files such as venue photos and other uploads. Keeping them out of the database and off the application servers keeps the API stateless, so servers can be added or replaced freely, and lets file delivery scale separately from API traffic.

What engineering challenges does a welfare app for field workers raise?

Field work does not keep office hours. TAL's site says it aims to support out-of-hours teams night or day, so early-morning drivers, night-shift workers and weekend crews all use the same API. There is no maintenance window that is quiet for everyone, so deployments, index builds and schema changes have to be non-breaking by default.

Location accuracy is the second hard problem. GPS degrades between tall buildings, in underground loading bays and in multi-storey car parks, which is exactly where mobile workers spend a lot of time. The app has to fail gracefully when the location fix is poor rather than showing an empty or misleading list.

Battery is the third. A worker's phone is also their navigation. Continuous high-accuracy tracking would drain it, so location sampling has to stay conservative and tied to what the worker is actually doing. The same care shows up in store review: both Apple and Google expect apps that use location to justify that access clearly, in the listing and in the permission prompts.

Where can you see TAL?

TAL is live on all three of its public surfaces. The website runs at talservices.co.uk, with separate pages for venues and employers. The iOS app is TAL Services on the App Store (id6737687790), and the Android app is TAL on Google Play, listed under the developer name TAL Services.

Why this stack

  • Google Maps API (Sameem's work): custom markers show what each venue offers on the pin itself, and clustering groups nearby pins at low zoom so a busy area stays readable and quick to draw on a cheap phone.
  • React with Radix UI and Zustand (Sameem's work): Radix UI supplies accessible, unstyled interface primitives such as dialogs, menus and popovers, so effort goes into styling rather than re-implementing keyboard and focus behaviour. Zustand keeps shared state in small stores that components subscribe to selectively, which avoids needless re-renders on the low-end phones field workers often use.
  • Flutter (worker apps, Android and iOS): the worker app is the primary surface and has to feel native on both platforms. Flutter compiles to native code and draws its own widgets instead of bridging to platform UI, which keeps map overlays, venue lists and search results consistent across a wide range of devices. One Dart codebase means the location, filtering and venue-detail logic exists once, so the Google Play and App Store builds stay in step by construction.
  • Node.js (API layer): the workload is bursty and bound by input and output rather than computation, since almost every request is a database read, a geospatial lookup or a file fetch. Node's non-blocking event loop holds many concurrent requests without a thread per connection, so peaks around shift changes queue cheaply. It also keeps one JavaScript-family toolchain across the API and the React.js dashboard.
  • Express (routing and middleware): a thin, composable middleware layer means authentication, request validation and error handling are declared once and applied uniformly to every endpoint, which matters when one API serves consumers as different as the Flutter apps and the admin dashboard.
  • MongoDB (primary datastore): venues are genuinely varied, since a pub, a cafe and a petrol station expose different facility sets, opening patterns and partnership terms. A document model lets those attributes vary per venue without sparse relational columns or a sprawl of join tables, and MongoDB's geospatial indexes let proximity queries run inside the database over GeoJSON coordinates rather than in application memory.
  • AWS S3 (object storage): files such as venue photos and other uploads are large, immutable objects that do not belong in the database or on application disks. Putting them in S3 keeps the API tier stateless and therefore easy to scale, and lets file delivery scale independently of API traffic.
  • React.js (admin dashboard): the operations surface is data-dense, desk-based and interaction-heavy, the opposite profile to the worker app. React's component model suits the venue-management tables, forms and administration views needed to run a platform where workers, venues and employers each have a stake.