Denis Martins / Senior Software Engineer

I make
things work.

I like making complicated things simpler. Sometimes that means untangling software that keeps a business running. Other times it means building a word game because the idea wouldn’t leave me alone.

denis@zone: ~– □ ×
$ whoami
Denis Martins
Senior software engineer. Arsenal supporter.
Usually planning the next trip.
$ ls
work/   projects/   notes/   life/
$
Try a command:
01 / Things I’ve made

Selected work

Things I’ve built, things I’m figuring out, and the occasional idea that got out of hand.

01The day jobAPIs, integrations and the platforms behind them, on Azure and AWS.
BEHIND THE SCENESCustomer web apps, internal tools and a self-service portal call a core API and an integration API, which share a database. The integration API calls partner APIs directly. The APIs publish events to a message bus; independent workers subscribe and sync each event to an external SaaS, comms or messaging platform. Status feeds and callbacks, some arriving by webhook, are published back to the bus.CLIENTSCLOUD PLATFORMEXTERNALCustomerweb appsInternaltoolsSelf-serviceportalCoreAPIDatabaseIntegrationAPIMESSAGE BUSSync workerComms workerNotify workerSaaS platformComms platformMessaging providerPartner APIsstatus feedstatus callbacksHTTP / RESTevents & feedswebhooksCustomer web apps, internal tools and a self-service portal call a core API and an integration API, which share a database. The integration API calls partner APIs directly. The APIs publish events to a message bus; independent workers subscribe and sync each event to an external SaaS, comms or messaging platform. Status feeds and callbacks, some arriving by webhook, are published back to the bus.CLIENTSCLOUD PLATFORMEXTERNALCustomerweb appsInternaltoolsSelf-serviceportalCoreAPIDatabaseIntegrationAPIMESSAGE BUSSync workerComms workerNotify workerSaaSplatformCommsplatformMessagingproviderPartnerAPIsHTTP / RESTevents & feedswebhooks
RUNS ON THE CLOUD
  • Containers
  • Serverless functions
  • Message queues
  • Infrastructure as code
  • CI/CD pipelines
  • Monitoring & tracing
A simplified picture, not a production diagram
01 / ENGINEERING

Make the pieces work together.

Platform modernisation, third-party integrations, APIs and event-driven workflows, built and run in the cloud on Azure and AWS. The kind of engineering you notice most when it stops working. Next, I’m taking it to financial services at Transact.

Explore my experience ↗
02Word DuelA real-time word game where the server referees every move.
A WORD LEADS TO ANOTHER
WORD DUEL MINI / 1 LETTER
CHANGE ONE LETTERSTREAK 0
TIME LEFT1:00
LAST WORD—
CURRENT WORD & MEANING
—

Loading meaning…

YOUR WORDS
—
Tap a tile, then choose a letter.
Uses the four-letter dictionary from the full game · one change per move
02 / PLAY

One word. Your turn.

Change exactly one letter to form a valid new word, without repeating a word. Try the four-letter demo, then play the full timed multiplayer game.

Play the full game ↗
How I built it

Word Duel looks simple on the surface. Underneath, it’s a real-time multiplayer system where every move must be fair, even when two players act at once or a connection drops.

01
One source of truth

Each game room is a Cloudflare Durable Object that applies moves one at a time and pushes the new state to both players over WebSockets. Clients can display the game, but they cannot rewrite the room.

02
Rules that survive concurrency

Dictionary checks, exact letter changes, turn ownership, deadlines and previously used words are enforced together. A shared used-word set persists across rematches.

03
Computer opponents without shortcuts

The bot plays through the same server-side rules as a human. Easy, medium and hard modes vary think time and move strategy rather than bypassing validation.

04
The details matter

Server-defined turn deadlines driven by alarms, cleanup of idle rooms, dictionary-based word meanings, and idempotent match-result recording keep the experience consistent.

Vite · JavaScript · Cloudflare Workers · Durable Objects · WebSockets · WordNet
03Last One StandingA party game for 2–8 players: hold the button, let go on time, don’t be the worst.
TIMER SHOWDOWN / THE REAL GAME
Last One Standing lobby with a room code, QR code and five players
Lobby
A Precision Knockout turn mid-hold at 1.04 seconds against a 1.00 second target
Your turn
Winner screen crowning Maya, with the match summary
Last one standing
Try it here
00:00.00
Try to stop at exactly 5.00 seconds.
03 / GAME

Timing is everything.

Everyone holds a button and lets go on time. The worst attempt each round is knocked out until one player is left. Four game modes, a hidden-timer option, and Pass & Play for one shared phone. Try the five-second challenge in the preview.

Play the full game ↗
02 / Beyond the keyboard

A little more human.

Software pays the bills. There’s quite a bit more to me.

Away from the screen, I’m usually lifting weights, worrying about Arsenal, planning the next trip or finding somewhere good to eat.

I’m curious by nature. Sometimes that ends in a side project; other times it ends in a conversation, an unexpected destination or another idea I probably didn’t need.

More about me
03 / Notebook

Notes from the bench

A word game became a systems problem

Server-side rules, real-time multiplayer and the engineering behind Word Duel.

The Conversations We’re Losing to AI

What happens to engineering teams when everyone solves problems with an assistant?

Modernising without starting again

Lessons from upgrading mature systems without rewriting everything.

04 / Contact

Get in touch

Have a project, an interesting engineering problem, or just want to say hello?

Email me

hello@denis.zone