What I Did
I defined the full requirements roadmap and directed engineering across five major workstreams: a complete visual rebrand, an admin portal for daily player management, a nightly NBA roster sync, a new "Flashback" replay mode, and Google Ad Manager monetization. Every feature was spec'd in Figma and prioritized against retention and revenue goals.
Key Features
01Admin Portal for Daily Player Management
A Microsoft-SSO-gated internal portal where staff manage the day-to-day game. Mystery players are auto-scheduled a month or two ahead by a rotation algorithm that favors whichever players have been used least, and staff can override any day by hand. Editing today's player republishes the homepage instantly, no redeploy required.
02Nightly NBA Roster Sync
A nightly job re-scrapes current rosters and player bios and diffs them against the database, adding, updating, or retiring players automatically. A field-level override system means a manual correction staff make in the portal always wins over the next scrape, so the automation never silently overwrites a human fix.
03Flashback Replay Mode
A dedicated route lets players replay any past day's puzzle back to the game's February 2024 launch, with its own guess-tracking session and rate limit, explicitly excluded from stats and streaks.
04Google Ad Manager Monetization
A full Google Ad Manager integration, not a simple AdSense drop-in, with side-rail, sticky-footer, and full-screen interstitial placements, plus the consent-management and content-security-policy work that comes with running third-party ad tags responsibly.
05Visual Rebrand
Retired the game's original Dunktown-era branding for a fully NBPA-branded identity, from the logo and color system down to the player silhouettes served through a headless CMS image pipeline.
System Architecture & Tech Stack
Poeltl runs as a single TypeScript monolith, a custom in-house MVC framework (deliberately not Next.js, since anonymous session state doesn't fit a serverless model well) that server-renders React and serves both the game and the admin portal from one Express app. Game state is fully anonymous by default: a Postgres row keyed to a session id tracks games played, streaks, and win distribution with no account required, and players can optionally opt in with an email address. The homepage is pre-rendered to static HTML and player/team data is held in an in-memory cache, so a guess never has to round-trip to Postgres on the hot path, the core strategy behind handling hundreds of thousands of monthly plays.
TypeScriptNode.js / ExpressReact (SSR)PostgreSQLKnex.jsRedisPassport.js (Microsoft SSO)Cosmic CMS
Notable Engineering Decisions
- Manual edits always win. The nightly roster scraper tracks which fields staff have manually corrected and skips overwriting them until the scraped value and the correction agree again.
- Wordle-style hints, seven dimensions deep. Every guess is scored server-side against the mystery player across height, age, jersey number, position, team, division, and conference, each graded exact, close, or far rather than a flat right-or-wrong.
- Two rate limiters, not one. The live daily game and the Flashback replay mode are rate-limited independently, so replay traffic can't starve the main game's limits or vice versa.
- Instant publish, no redeploy. Changing today's mystery player from the admin portal re-triggers the homepage's static pre-render immediately, so the fix is live in seconds.
Impact
The relaunched game scaled to 365,000 games played and 895,000 page views per month, across 190+ countries. The built audience of 14,000 email subscribers became a direct marketing channel for the NBPA, and Google Ad Manager monetization generated $30,000 in ad revenue in 2025 alone.