Incident Response and Reporting for a Vienna Payroll Platform
Designed and built a clickable incident management console for a Vienna payroll SaaS serving about 1,400 employers in Austria, Germany and Switzerland: one alerts inbox, an incident room with roles, timeline and update cadence, and a regulatory tracker that keeps GDPR, NIS2 and DORA contract notices on their deadlines.
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.
Dashboard, alerts inbox, incidents list, incident room and regulatory tracker. Every one of the 18 demo incidents opens its own room, with Timeline, Alerts, Updates, Tasks and Regulatory tabs.
Sev 1 needs a public update every 30 minutes and a commander, comms lead and scribe; Sev 2 every 60, Sev 3 every 120 and Sev 4 every 240 minutes. Each severity carries its own playbook checklist.
GDPR controller, GDPR processor notice, NIS2, DORA customer contracts and other contract notices, each case with its stages, due times and a countdown that is flagged under 12 hours and again under 4.
22 alerts from five monitoring sources, 12 report cases, 12 tenants, 10 components with 90-day uptime, 3 maintenance windows and 12 staff users.
When something broke at Kahlbergau, alerts landed in three tools and nobody was sure who was in charge. Engineers debugged in whichever Slack channel they were in, customer success hand-edited a status page hosted on the same infrastructure that was down, and enterprise customers phoned their account manager to ask whether their pay run was safe. Timelines were rebuilt from Slack scrollback, and banks and insurers began asking, in their contracts, for incident notice within fixed hours.
Pegel takes a problem from the first monitoring alert to closure. Alerts from Datadog, Alertmanager, PagerDuty, Grafana and Checkly land in one inbox, grouped by fingerprint. Declaring an incident opens a room with roles, a Slack channel, a captured timeline and a next-update countdown set by severity, and every possibly reportable incident gets a report case with its deadlines.
A payroll outage near month end is a technical problem, a customer problem and sometimes a legal one at the same time. Each audience runs on its own clock: the pay run cut-off, the public update cadence, each tenant's contract notice time and the regulator's deadline.
Datadog, Prometheus Alertmanager and PagerDuty each paged on their own, and one failing node pool could send dozens of near-identical alerts. There was no single place to see what was firing, who had acknowledged it and whether an incident had been declared.
Status updates were written by hand on a static page deployed from the platform that was failing. Around the month-end pay run, enterprise tenants phoned their account manager because nothing told them whether payroll would finish on time.
A payslip shown to the wrong employer can be a GDPR personal data breach, where Kahlbergau as processor must tell each controller without undue delay. NIS2 sets 24-hour, 72-hour and one-month stages for significant incidents, and DORA contracts with banks and insurers set their own notice times per tenant.
After each incident someone pieced the timeline together from Slack. SLA credits against the 99.9% monthly availability promise were worked out in a spreadsheet at quarter end, and contract customers asking for proof of follow-up could not get it quickly.
Mapped 11 user roles, from on-call engineer and incident commander to compliance officer, finance and enterprise tenant users, and 34 screens across staff, public status page and private tenant pages. Modelled alerts, routing rules, versioned severities, incidents, timeline entries, status updates, tenants, report cases, postmortems and SLA policies, and wrote down the rules the design follows: GDPR Article 33, NIS2 staged reporting, DORA contract duties, the SLA credit policy and subscriber consent.
Built 5 key screens on a production dashboard kit: the dashboard with platform status, active incidents, KPIs, 90-day uptime bars and pay-run calendar risk; the alerts inbox with noise grouping and an alert detail panel; the incidents list; the incident room with roles, timeline, status update composer and customer contracts at risk; and the regulatory tracker with report case panels. All actions run on local state.
Webhook intake from Datadog, Alertmanager and Grafana, PagerDuty or Opsgenie paging, a Slack bot with slash commands, Checkly synthetic checks, Postmark email and Twilio SMS, Jira action items, Entra ID or Okta SSO and Stripe Billing for approved credits. Plus the public status page on separate hosting, private tenant pages, postmortems, SLA credits, a full audit log, and counsel's confirmation of NIS2 scope under Austrian law.
The top strip shows the roles with who was assigned when, the next update due with the last public text, and the impact summary: components and their status, tenants and employees affected, and whether a pay run is at risk before its cut-off.
The update countdown comes from the severity's cadence and is marked overdue on the room and the dashboard once it passes. A Sev 1 without a scribe shows a red Assign button and a warning to fill the role before the next update.
The scribe tags timeline entries as impact started, detected, acknowledged, mitigated or resolved. Those tags give the room its time to detect and acknowledge, and the dashboard its mean time to acknowledge and resolve, without anyone rebuilding the timeline later.
Each report case records who decided it was reportable or not, and why, with the aware-at time set by the compliance officer. Stage deadlines follow from that time and from each tenant's contract notice terms, so Pegel never makes the legal call itself.

Designed and built a clickable API gateway console for a Brno parcel carrier whose rates, labels, tracking and pickup APIs serve e-shops, marketplaces and shipping platforms across five countries: partner plans and limits, a request log with personal data redacted before storage, and version retirements with Sunset and Deprecation headers.

Designed and built a clickable developer console for a Riyadh payments and open banking fintech: a journey tracker from first sandbox call to production, app credentials with shown-once secrets, keys and mTLS certificates, synthetic sandbox data with scenario switches, and request logs that explain each error in plain words.
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