Technical Support Engineer · an enterprise data-storage company
EVEV.
Pragmatic, delivery-oriented engineer with a weakness for
reliability, radio antennas, the
south coast of Ireland — and, lately, building
things with AI. I dig into the toughest
enterprise support cases at work — and run a 24/7 ship-tracking station from a
Raspberry Pi at home.
I'm a Technical Support Engineer at an enterprise data-storage
company in Ireland. My work is the deep end of troubleshooting: logs,
traces and configs across enterprise data-management platforms,
getting customers unstuck and their backups bulletproof.
Off the clock I apply the same discipline to my home lab. A Raspberry Pi
with an RTL-SDR dongle and a rooftop antenna decodes AIS signals from real
ships off the Irish coast and NOAA weather-satellite passes overhead,
around the clock. Every service ships with tests on push, pull-based
deploys and auto-rollback — because home projects deserve production
standards too.
My main interest right now is vibe coding — pairing
with AI to go from idea to working software at a pace that wasn't
possible a few years ago. Most of what I ship these days, from the
maritime dashboard to this very site, started life as a conversation
with a model.
I got into engineering through hackathons and curiosity — my team won
the university's Open Data Hackathon in the city with a
pool-testing optimisation that cut the COVID-19 tests Ireland
needed by 45%.
02 — Projects
Things I've built & run.
🛟 Flagship2026
Maritime Dashboard
A self-hosted marine situation display for the south coast of Ireland,
running 24/7 on a Raspberry Pi touchscreen kiosk. Decodes AIS signals
from the station's own antenna, captures NOAA weather-satellite imagery
as birds pass overhead, and blends in an online vessel feed.
An autonomous improvement loop for everything else on this page:
at 01:00 an agent writes the daily devlog and proposes what's
next; at 04:00 a second agent picks one idea and ships it —
code, tests, docs, brand-new repos included. Fifteen ledger
entries in: a dead-man's switch, an ntfy notification
backbone, borg backups with a weekly restore drill, an
upstream release watcher, a service uptime scoreboard, an
alert-storm kill switch — one flag that silences every
notification on the box — nightly chaos drills that break
things on purpose and check the box notices, the
architecture reference that maps every running unit, a heal
ledger that makes the self-healer show its work, and a
Prometheus + node_exporter scrape backbone that answers
the RAM question with ~102 MB — then a ledger dig that
corrected itself: the 09-03 "healers never deployed"
verdict was wrong, they were Hermes-cron jobs, live and
green all along; the empty heal ledger just means a
healthy box. Prom step 2 was concretised into a stdlib
prom-dash — Grafana isn't even in Debian trixie — so the
pinned graphs render on demand at ~0 MB resident, and the
board has now recorded the step Done with receipts
(220/220 pytest, a live 24-hour render, docs matching the
shipped code). Then the heal ledger, empty through
August, stopped being empty: five ci-rerun entries since
09-05 all trace to one ruff F821 in the Train
self-evaluation hook — not a flake — and the mine
paid out on 09-07 with a one-line import fix
(9e78d03) and closed itself on 09-08:
the last two CI-only hermeticity tests fixed
(aa54bd4), the first fully green CI
run since 09-05 recorded, and a heal that fired
five times since 09-05 with no job left. The
very next pick, Prom step 3a — the ntfy
/metrics scrape — shipped the
following morning with receipts: loopback :9091
joined prometheus.yml, the one planned ntfy
restart done at the quiet 05:32 hour, live
up{job="ntfy"}=1, 220/220 pytest,
leaving step 3b, the alerting-consumer decision,
as the open item. The
idea ledger, every run and
every failure are public.
A personal CS2 coach that measures real gameplay mechanics
server-side — crosshair offset at fire, counter-strafe stop
quality, burst discipline — via a CounterStrikeSharp
plugin, 497 scenarios across the Active Duty pool, and
a deliberate-practice engine that builds timed sessions
around measured weaknesses. A coach brain on top — an
intelligence ledger, Player DNA, adaptive sessions, demo
analysis — decides what to train and says "not enough
data" when it can't. It reached release candidate with
receipts: 54/54 live scenario runs passed on a real
server (6 maps × 3 modes), fourteen release gates green,
and a customer side went up with it — public landing
page, real accounts, a Train library with history and
progress. Since the verdict the first post-release
features have started landing overnight: a redesigned,
map-centric coach app, a routine generator that actually
prescribes, an arena trainer with personal bests, and
practice bots with real reaction time. Then the validity
pass went through the corpus: an audit engine over all 581
scenarios — honest labels, contracts everywhere — a
crosshair-placement scoring dimension, blind-review QA with
a false-progress detector, real-geometry spatial validation,
and a security pass that moved runtime data out of the repo.
The last gate is
still a human in the seat. The
game server spawns on a rented cloud box only while you
train; Hetzner CPU boxes are the default now — a
practice server never needed the GPU — and the control
plane lives on the Pi.
Paste a Goodreads profile link, get twelve book recommendations
with reasons — no account, no API key, no tracking. Built on the
public RSS shelf feed Goodreads forgot to wall off and
rating-weighted subject profiles from Open Library. Python
stdlib only; tests, CI and pull-based deploys included.
Pro Counter-Strike tracker for the kitchen touchscreen: live series
and near-live round scores, a week of upcoming matches with
countdowns, and results — fed by Liquipedia's parse API, with a
Camoufox headless-browser scraper filling in match details.
Single-page operations portal for my Raspberry Pi home server: live
port and systemd health for every project on the box, an uptime
scoreboard fed by five-minute probes, host vitals, pull-based CD
with auto-rollback. The bookmark I actually use dozens of times a
day.
The CI/CD machinery that runs the Pi itself: a project-guard that
auto-adopts and versions every directory on the box, pull-based
deploys with compile gates, health checks and automatic rollback,
loop-heartbeat — a dead-man's switch that pages when any
scheduled job goes silent — an ntfy notification backbone with
one topic per job and a one-flag kill switch for alert
storms, pi-backup with a weekly restore drill that
byte-compares the recovery, release-watch digesting upstream
releases, service-probe taking the box's pulse every five
minutes, chaos-drill breaking things on purpose each night to
prove the monitoring notices, a CI audit that self-heals
what it finds — and logs every fix to a heal ledger the
portal displays — and pi-doctor auditing every project each
morning — and a prom-dash that answered the Grafana
question with a stdlib script: the pinned CPU-vs-load and
unit-state graphs as one self-contained HTML page, on
demand, ~0 MB resident.
The architecture reference for how everything here ships.
A from-scratch AIS decoder for the signal pile the rooftop antenna
collected: GMSK demodulation, bit-timing recovery, HDLC framing
and message parsing in pure Python — built test-first. The
synthetic round trip works end to end; decoding the real capture
is parked on a branch until I circle back.
Almost everything on this page runs 24/7 on a single Raspberry Pi 5 in
the city — a ship-tracking RF station and weather-satellite receiver, the
DNS for the whole house, pro and personal CS2 trackers, pull-based
deploys with auto-rollback, and a pair of AI agents that write the
devlog and ship improvements while I sleep — watched over by a
dead-man's switch, probed every five minutes, paged through a
notification server, audited over breakfast, and backed
up nightly to deduplicated archives that prove themselves in a
weekly restore drill.
ROOFTOP ANTENNA
AIS 162 · NOAA 137 MHz
INTERNET
GitHub CI · live data feeds
TAILSCALE VPN
phones · laptops · anywhere
RASPBERRY PI 5 · 8 GB
LAN + tailnet · Ireland
24/7
RF / SDR STACK
RTL-SDRtuner gain 40
AIS-CATCHER:8080 · ship decoder
SDR-MONITORsignal health
NOAA SCHEDpass recorder
SAT-AUDIO:8085 live audio
ONLINE-SHIPSlive vessel backup☁ aisstream.io
WEB SERVICES
MARITIME DASHBOARD:8000 · AIS + NOAA + fleet
CS2 DASHBOARD:8001 · matches + live scores☁ hltv.org
CS2 TRACKER:8092 · FACEIT + Premier☁ Steam · GSI
PROJECT HUB:8090 · ops portal
SHELFMATE:8086 · book recommendations☁ Goodreads · Open Library
KIOSK HOME:8091 · launcher
ADGUARD HOME:53 DNS for the whole house · admin :3001
Supporting enterprise data-management customers: deep troubleshooting
of backup and restore issues, escalation management, and working with
engineering to make the product more reliable one case at a time.
University in the city
Ireland · Computer Science
2018 – 2022
Computer science coursework across software engineering, algorithms and
data science; hackathon regular on the side.
05 — Journey
A short timeline.
Now
Support engineer, ship spotter, agent supervisor
Deep-dive troubleshooting by day; AIS receivers, satellite decoders and ops portals on a Pi by night — now orchestrated by a devlog → implementer loop of agents that ships while the city sleeps, pages me when something breaks, takes the box's pulse every five minutes, proves its own backups in a Sunday restore drill, and audits every project on the box over breakfast.
2025 – 2026
The home lab gets serious
A maritime dashboard, a service portal, pytest suites and auto-rollback. The turning point was treating side projects like production systems.
2021
Hackathon win & first team projects
Won the university's Open Data Hackathon in the city with a 45% pool-testing optimisation; built Tweet Guard, an NLP abuse scanner, with four teammates.
2018
First commit
Joined GitHub as a student in the city and started shipping — scrapers, stock models, linked lists and everything in between.
06 — Contact
Let's talk.
Happy to talk reliability engineering, Raspberry Pi experiments, radio,
or the city's maritime traffic. The fastest way to reach me is
GitHub — I read everything.