Case study · Aer Lingus Virtual
An operations portal with rules built in
An operations portal for Aer Lingus Virtual: role-based dashboards, automated OCC reporting, NOTAM acknowledgement and recruitment, built in Next.js and Supabase.
- Client
- Aer Lingus Virtual
- Role
- Full-Stack Engineer, Contract
- When
- Jan 2026 - Feb 2026
- Where
- Remote

Overview
Aer Lingus Virtual is a virtual airline community with pilots, staff and an operations control centre (OCC). I built its operations portal from scratch as a contract full-stack engineer, in Next.js and TypeScript with Supabase.
The portal handles membership, documents, operations reporting, notices to airmen (NOTAMs), recruitment and live weather. It also replaced the community's WordPress site on cPanel with a migration to Hostinger, where I configured the server, SSL and domain.
The challenge
A virtual airline runs on process: who can see what, which reports need escalating and when, and which notices every pilot must read before flying.
The goal was a portal that enforces those rules itself, rather than relying on people remembering them, while notifying staff where they already are: Discord and email.
How it fits together
The portal is a Next.js application backed by Supabase for accounts, data and file storage. Operational events fan out to Discord (through webhooks) and to email (through SMTP) at the same time.
Members
- Pilots
- OCC & staff
- AdministratorsApprove accounts, manage content
Portal
- Next.js + TypeScriptRole-gated dashboards
- Live METARWeather and runway selection
Supabase
- AuthEmail verification, admin approval
- DatabaseReports, NOTAMs, vacancies
- Blob storageNested PDF document library
Notify
- Discord webhooks
- Email via SMTP
Key workflows
The processes the system runs, step by step. Amber steps are checks or gates; green steps are the outcome.
Joining the portal
New members can't simply sign up and walk in. Registration is email-verified, then an administrator approves the account, and only then does the member see the dashboard for their role.
- 01Register
- 02Verify email
- 03Admin approval
- 04Role-based dashboard
OCC report with escalation
Operations reports use conditional forms across multiple categories, so each report asks only for what's relevant. Filing one notifies staff on Discord and by email at the same time. A report left without action for 60 minutes escalates automatically, and comment threads lock after 24 hours to keep the record clean.
- 01File reportConditional multi-category form
- 02Notify Discord + emailSimultaneously
- 03Actioned within 60 min?
- 04Resolved
from 03 · No action after 60 minutes
- Automatic escalation
- Comments auto-lock after 24 h
NOTAM acknowledgement gate
Notices to airmen must be read. When a NOTAM is published, pilots are locked out of the dashboard until they acknowledge it. NOTAMs expire automatically, so outdated notices never block anyone.
- 01NOTAM published
- 02Dashboard lockedFor pilots who haven't acknowledged
- 03Pilot acknowledges
- 04Access restored
from 01 · At its expiry date
- NOTAM expires automatically
Recruitment
Vacancies are posted in the portal with a deadline, announced on Discord, and applications are made inside the portal. When the deadline passes, the vacancy removes itself.
- 01Post vacancyWith a deadline
- 02Announce on Discord
- 03Applications in portal
- 04Auto-deleted at deadline
What I built
Accounts and access
Email-verified registration with administrative approval, role-based dashboards, and a nested PDF document library with blob storage.
Automated operations reporting
Multi-category OCC reporting with conditional forms, 60-minute delay escalation and 24-hour comment auto-lock, with Discord and email notifications sent at the same time.
NOTAMs with acknowledgement
NOTAMs expire automatically, and the dashboard stays locked until each pilot acknowledges them.
Recruitment and live data
Vacancies with deadline auto-deletion, in-portal applications and Discord announcements, plus live METAR weather data and runway selection.
Migration
Moved the site from WordPress on cPanel to Hostinger and configured the server, SSL and domain.
Results
- 80%
- performance improvement after the migration
- 50%
- more organic traffic
- 60 min
- automatic escalation for unactioned reports
- 24 h
- comment auto-lock on reports
Stack
- Next.js
- TypeScript
- Supabase
- Discord webhooks
- SMTP
- RBAC
- Blob storage
Questions
- What stack is the Aer Lingus Virtual portal built on?
- Next.js and TypeScript with Supabase for authentication, the database and blob storage, plus Discord webhooks and SMTP for notifications.
- How does the NOTAM acknowledgement work?
- When a NOTAM is published, pilots can't reach the dashboard until they acknowledge it. NOTAMs expire automatically.
Have a similar project?
I take on contract and full-time work from Muscat, Oman and remotely. Tell me what you're building.
Get in touch