Public diagrams · no secrets

Architectures

Live systems on one DigitalOcean account. Separate apps, databases, and secrets.

Shared account, separate products

One bill. Each product has its own app, JWT, user collection, and Mongo database. DNS lives on DigitalOcean for pushpullgame.com.

Push Pull Survival

Live at play.pushpullgame.com. Node/Express service plus a static landing host. Browser client extracted toward small objects: composition root, event bus, DI container, typed match/turn/hand state. PWA and a native iOS shell. Stripe and OAuth.

Browser / iOS / PWA Express API auth · match · store Mongo Valkey Stripe · OAuth Client: bus · container · typed match/turn state · not one giant HTML file

Landing www.pushpullgame.com and game play.pushpullgame.com are host-routed on the same app. Resume is a separate static app so a game deploy cannot take this page down.

The Dog Track — rebuilt since college

Same product, three generations. No public URL on this page yet. Desktop Delphi, then Java on an application server, now Node.js in the cloud with payments, ads, major authenticators, multiple databases, and multiplayer.

Hark the Herald

Native macOS operator window plus a chrome-free congregation window. Helper collaborators use hark.pushpullgame.com. Mongo database hark stores clocks and Apple Music identifiers — not the church MP3 library. Audio files live in object storage.

Operator (Swift) library · setlist · transport lyric clock resolution Congregation window karaoke crawl · scripture Helper web hark.pushpullgame.com Clock pick order heard mix → published LRC → Apple Music TTML → manual Mongo hark + Spaces audio catalog ID pinned; helpers cannot rewrite Music lyrics