All work

PlayStation Advent Calendar 2025

A localized, date-gated campaign app with five integrated games, reaching an estimated 1M users across four markets.

Client
PlayStation — delivered via agency partnership
Role
Frontend owner
Timeline
3-month build
Year
2025
The campaign landing page, with the market selector open on Germany, Canada in English and French, France and the Netherlands.
1M+
Estimated users reached
4
Markets, 3 languages
5
Games integrated

01

The challenge

An advent calendar sounds simple until every door has to work on the right day, in the right market, for the right user.

This campaign combined date-based content, four markets, three languages, five interactive games, authentication, real-time multiplayer, analytics, consent management and enterprise accessibility requirements — all under a fixed three-month delivery window.

The unusual constraint was that the deadline wasn't launch day. It was every day after launch. If December 5th's experience failed, fixing it on December 6th couldn't recover that day.

02

My role

I owned frontend delivery across the campaign.

I was responsible for the application architecture and shell, date-gating, authentication, localization, the integration layer for five games, engagement features, push notifications, and consent/analytics implementation.

I worked alongside the agency's design and backend teams and against Sony's accessibility review process.

03

The engineering

Date-gated content

The backend controlled campaign dates and availability; the frontend consumed that state and handled the corresponding calendar and door experiences.

To make the 24-day campaign testable before launch, I added route-level date overrides that let us request a specific campaign date from the backend without waiting for the real calendar date.

One app shell, five games

Five Phaser games lived inside the React application as separate game features. I integrated the game developers' exposed functions with the application's APIs, handled asynchronous responses and reward outcomes, and managed the Phaser lifecycle from mount through completion and teardown.

When a player completed a game and received their tickets, the game was cleanly unmounted before returning them to the campaign experience.

Real-time multiplayer and game integrity

I integrated Socket.IO on the frontend using the backend's connection configuration, listened for real-time game events, and mapped socket responses into the active game experience — including player identity, profile information and session state.

I also handled client-side integrity checks, such as detecting when a player left the active game tab and warning them instead of allowing the session to continue silently. These checks were particularly important for the quiz experience, where maintaining the integrity of an active attempt mattered.

Market-aware localization

Localization was modelled around market first, language second. Prize mechanics, eligibility and legal copy varied by territory, while Canada supported two languages under the same market rules.

Authentication, consent & accessibility

Authentication was a core part of the campaign flow: visitors could access the landing page publicly, but signing in was required to enter the main experience. I integrated the PSN and social authentication flows into the frontend and connected the authenticated user state to the campaign experience.

OneTrust handled consent before Adobe Analytics was enabled, while accessibility was treated as a release requirement throughout the build. I implemented the frontend accessibility requirements across the application, including the interactive game experiences.

04

What I shipped

  • Localized campaign experience across 4 markets and 3 languages, with market-specific content and daily door availability.
  • PSN and social authentication integrated into the campaign entry flow, with login required to access the main experience.
  • Five Phaser games integrated into the React application, connecting game functions to backend APIs and handling game outcomes, rewards and lifecycle.
  • Real-time multiplayer integration using Socket.IO, including socket connections, event handling, player/session information and client-side session integrity checks.
  • Daily engagement and reward flows, including door states, gameplay outcomes, tickets and related campaign interactions.
  • Push notifications using Firebase Cloud Messaging.
  • Consent and analytics integration with OneTrust and Adobe Analytics.
  • Accessibility implementation across the campaign experience to meet Sony's internal accessibility requirements.

05

Results

  • Reached an estimated 1 million users across Canada (EN/FR), Germany, France and the Netherlands.
  • Delivered on a fixed three-month window against an immovable campaign start date.
  • Passed Sony's internal accessibility review as a release gate.

06

Stack

Core
  • React
  • TypeScript
  • Vite
  • Tailwind CSS
Games & realtime
  • Phaser
  • Socket.IO
  • WebSockets
Platform
  • PSN auth
  • Firebase Cloud Messaging
Compliance & analytics
  • OneTrust
  • Adobe Analytics
  • WCAG 2.1

Next breakdown

Document Editor & Pagination Engine

Diagnosed a pagination bug causing incorrect page splits and freezing on long documents, fixed the underlying rebuild-timing problem, then forked, documented and published my own maintained version of the package.