Lifeguard Operations Platform for an Algarve Beach Safety Service
Designed and built a clickable supervisor console for a council beach safety service in the Algarve: a live map of every tower and its flag, rescue and first aid records with casualty health data kept behind a logged reason, lost child alerts matched across 18 beaches, and a roster that refuses lifeguards whose qualifications have lapsed.
Most of our work is under NDA. Per agreement, we can share the work but not the company details - all names and identifying information shown here have been changed.
Live map, incidents, incident detail, lost child alerts and the weekly roster, plus the tower panel, incident quick view and Message towers panel.
Nadador-salvador certificate, fitness test and AED training are checked for the day of each shift. An assignment with a lapsed one is refused with the reason, and cells also flag below minimum crew, no tower lead and over 40 hours.
Each lost child alert counts down to the 112 prompt, tracks which towers have acknowledged, and matches found to missing children on age, sex, clothing colours and height. Descriptions are removed 72 hours after close.
18 beaches in 3 zones, 121 lifeguards, 414 roster shifts in one week, 24 incidents with escalations and addenda, and 10 lost child reports.
Barrocal Mar patrols 18 beaches with about 220 seasonal lifeguards and ran the season on paper tower logbooks, radio calls and a WhatsApp group per beach. Flag changes were phoned to the office, so the council website often showed the morning flag in the afternoon. Rescue records with casualty health data sat in unlocked binders and on personal phones, and lapsed certificates surfaced only when the maritime authority asked for the list.
Riptide covers the three places the work happens: a tower app for lifeguards on rugged tablets, a supervisor console for the operations room and a public beach status page. The console shows every tower's flag as the tower set it, keeps casualty details hidden until a reason is given, coordinates lost child alerts across all towers and builds a roster that only accepts qualified crews.
Beach safety in Portugal falls under the maritime authority, lifeguards need a valid certificate to work, and the records a lifeguard writes on the sand can later be requested by INEM, the police or insurers. All of it happens on a hot, busy beach with wet hands and patchy signal.
Only the lifeguard on the tower may set the flag. Changes were written in a logbook and phoned in, so the public saw a green flag long after a tower had raised yellow or red, and nobody could say who changed it or why.
Rescue and first aid records hold casualty health data, a special category under GDPR Article 9, and lost child reports describe minors. Both sat at the towers on paper or in phone photos, with no record of who had looked at them.
A missing child's description was repeated tower to tower and changed with each telling. There was no way to know which towers had heard it, or to see that a child found three beaches away matched the report.
The roster lived in a spreadsheet. A lapsed certificate, fitness test or AED training was found only when the authority asked, and a defibrillator pad out of date was found only when someone opened the case.
Mapped 9 roles from lifeguard and tower lead to data protection officer and the public, 36 screens across the tower app, supervisor console and public pages, and the data model for towers, flag changes, conditions logs, incidents, casualties, escalations, lost child reports, qualifications and roster shifts. Wrote down the rules the design follows: AMN and ISN certification, Portuguese flag meanings, 112 and INEM escalation, INEM's AED programme, GDPR and Law 58/2019.
Built the supervisor console's 5 key screens on a production dashboard kit, set on a busy August afternoon: the live map with tower pins coloured by flag and a tower panel, the incidents list without casualty names, an escalated rip current rescue with timeline, AED and oxygen use and an addendum, lost child alerts with a possible match, and the week roster with qualification warnings. All actions run on local state.
The tower app with offline logging that syncs later and the public beach status pages in Portuguese and English. IPMA sea and weather data, APA water quality advisories, map tiles, Firebase push to towers with an SMS fallback, Microsoft Entra ID sign-in, device management for tower tablets and EU file storage. Field-level encryption for casualty records, an append-only audit log, retention set with the DPO and a data protection impact assessment.
Every pin on the live map shows the flag the tower set, who set it, when and why, with a chequered flag when a tower is unmanned for a rescue. Grey pins mark towers not signed on, and conditions older than 60 minutes turn amber.
The incidents list and redacted exports never show casualty names. On the incident page, health fields stay hidden until a supervisor gives a reason, and each view is written to an access log shown on the same page.
A red strip on every console page shows the active missing child and escalation. The alert lists towers that have not acknowledged with a re-send button, offers a found child as a possible match, and prompts Hand to police at 45 minutes.
An incident keeps its original entries. Later changes are addenda with the author and reason, such as an oxygen duration corrected after handover, and escalations carry the agency's reference number, arrival and handover times.

Designed and built a clickable route setting app for a chain of 5 bouldering and rope climbing gyms around Denver: every climb with the setter's grade next to the members' view, setting sessions run from strip and set checklists, and hazard reports that reach staff on shift at once and close a climb in one tap.

Designed and built a clickable league management console for a volunteer-run county football association in Aarhus: a weekend dashboard with referee coverage and weather risk, every fixture with its officials and team sheets, results checked against three submissions, and discipline cases that turn cards into sanctions from the association's own tariff.
Enterprise Software Engineering - Human + AI
Contact Us
© 2026 - Copyright. All Rights reserved Oceanlab
Location
Global Headquarters
21 Merchant Road, 3rd Floor, Singapore 058267
Main corporate office and leadership operations
North America Office
548 Market Street, PMB 12345, San Francisco, CA 94104
Client operations and business development
India Office
402 Shivalik Shilp II, SG Highway, Ahmedabad 380015
Engineering and delivery center
Enterprise Software Engineering - Human + AI
Contact Us
Locations
Global Headquarters
21 Merchant Road, 3rd Floor, Singapore 058267
Main corporate office and leadership operations
North America Office
548 Market Street, PMB 12345, San Francisco, CA 94104
Client operations and business development
India Office
402 Shivalik Shilp II, SG Highway, Ahmedabad 380015
Engineering and delivery center
© 2026 - Copyright. All Rights reserved Oceanlab