7 min read

Weekly Dev Roundup: Aug 24–31

Weekly Dev Roundup: Aug 24–31

One of the things that's genuinely hard about juggling five active projects is that some weeks, they all decide to need attention at the same time. This was one of those weeks. Special Bylaw Unit dominated the commit log — the courtroom got a near-complete visual overhaul and the backend infrastructure took a big step toward production readiness — but every other game had something going on too, whether it was a convention demo, an iOS compatibility push, or the kind of responsive-design grind that only happens when app review sends you screenshots from a phone you don't own.

Special Bylaw Unit

I threw myself at the courtroom this week and didn't really come up for air until Sunday. The centrepiece was the jury selection flow, which got torn down to the studs and rebuilt. The old version had a static jury box and a "pick your jurors" toggle — functional, but not exactly dramatic. The new version has an animated pan-zoom camera that sweeps across the jury box, a prosecution-reveal sequence, and the whole thing just feels weightier now; there's a sense of ceremony that wasn't there before, which matters a lot when the emotional core of the game is whether a jury of animals is going to believe your client.

Alongside the jury rework, the coin-flip view got a complete redesign. I landed on a five-layer courtroom image overlay — it stacks the bench, the gallery, the jury box, and the prosecution desk into a single composed scene, and introduces Attica Fetch as the Crown Prosecutor, which is a character I've been wanting to bring into the spotlight for a while now. The prosecution needed a face, and Attica fits the tone perfectly: stern, theatrical, a little bit intimidating.

SBU login screen with paper texture and stamp

The login experience got an upgrade too. The old fox animation is gone, replaced by an intro video that sets the mood before you've even signed in. The login menu itself got a custom background paper texture, a title stamp asset, and a subtle tilt effect that makes the screen feel like a physical document — the kind of detail nobody consciously notices but everyone feels. I also wired up proper Google Sign-In with backend token verification, which meant finally ripping out some legacy Game Services plugins I'd been meaning to clean up.

On the infrastructure side, this was the week the game got "serious." I enabled Google Cloud Vertex AI Enterprise client initialization for the LLM layer, built out a nightly docket pre-generation system that runs as a Cloud Run Job, and wired up JWT authentication for the pregenerate endpoints. The idea is that by the time a player opens the daily docket, all the case data is already generated and waiting — no loading spinner, no waiting on an LLM call. The first request should feel instant, and that only works if you do the work before they ask for it.

There were also some important guardrails: character selection now enforces constraints that had been soft-coded — certain animal types can't serve as jurors, witnesses, or defendants. The female dog headshots got renamed and repointed (she's now consistently "Lawyer" in the code, which better matches her role), and I fixed a transparency artifact in the headshot slicing that had been bugging me since the pipeline was built. The daily docket menu got some navigation fixes and a description length limit to keep the UI tight.

What strikes me looking back at this week is how much of this work is about feel — not new mechanics, not new systems, but the thousand small adjustments that turn a functional UI into a world you want to spend time in. The animated jury selection, the five-layer courtroom, the paper-textured login with the tilted stamp — none of these are things a player would list in a feature request, but they're what makes the difference between "this is a courtroom game" and "I'm in this courtroom."

ShutterClash

I'Il be honest: I wasn't planning to touch ShutterClash this week. But app review came back with feedback about smaller-screen devices, and when you see your arena layout on a compact phone and the defending card is getting clipped by the bottom of the screen, you kind of have to drop everything.

The fix was a full responsive-design pass across the filve screens that matter most: arena, camera, collection, the GameCard component, and the tutorial overlay. Instead of relying on static Dimensions.get('window') calls that are frozen at launch, everything now uses useWindowDimensions — which means the UI responds in real time to rotations, split-screen, and the absurdly tall aspect ratios some Android phones ship with.

The key insight was that I needed a compact threshold. Anything with a screen height under 720 pixels gets tighter spacing, smaller fonts, and dynamically calculated card sizes. The arena used to hardcode a 749px showcase card; now it calculates available vertical space by subtracting the top HUD, the bottom hand tray, and the safe-area insets, then constrains the card width by aspect ratio so it never overflows. The same logic went into the camera screen — the preview image now scales dynamically so it doesn't push the odds panel and guarantee toggle off screeen on short displays. The collection screen got the same treatment for the showcase card.

Was it fun? Not really — responsive work at this scale is meticulous and hard to test across the full device matrix. Did the game need it? Absolutely. The whole point of ShutterClash is that quick photo-and-battle loop, and if a player on a budget Android phone can't see the card they're about to play, they're not going to stick around. App review was right to flag it.

Doodle Doo

Doodle Doo shipped one commit this week, but it was a doozy: convention demo mode, a migration to gemini-3.6-flash, and prompt optimizations, all in a single push.

The convention demo is the headliner here. I've got an event coming up — Sask Retro Game Con — where I need to be able to hand someone a phone and have Doodle Doo work reliably in a short, controlled loop — no account required, no daily limit, no weird edge cases where the AI generates a rooster roast that's funnier than intended (or, more accurately, exactly as funny as intended but not appropriate for a public demo table). The demo mode lives in the layout and home screen layers — it bypasses the auth gate, serves a curated set of drawing categories, and constrains the generation parameters to keep things snappy.

The model migration is the quieter story but honestly the one I'm more curious about long-term. Doodle Doo has been on gemini-3-flash for a while, and the jump to 3.6-flash brings faster response times and, based on my testing so far, better adherence to the rooster's specific personality constraints. The prompt optimizations that went alongside the migration were mostly about reducing token waste — tightening the system instructions so the model spends fewer tokens on setup and more on the actual roast. When you're generating a response for every single drawing, over thousands of daily players, those token savings compound fast.

Headline Harmonies

The lightest week of the bunch, but still worth noting: Headline Harmonies got a fix for the category sticker overlay alignment on the game screen, plus a bump to the Android versionCode. There's also a lingering login.tsx.orig artifact sitting in the working tree that I need to clean up — one of those merge-conflict leftovers that's easy to forget about until it shows up in git status and makes you think "I really should get rid of that."


It's satisfying to look back at a week like this and see how different the work is across every project. SBU is in full creative-sprint mode — every screen getting reimagined, the infrastructure hardening for launch. ShutterClash is doing the responsible-maintenance thing — app review feedback driving precise, unglamorous fixes. Doodle Doo is prepping for its public debut at Sask Retro Game Con.

I don't know if all five will stay hot at once — that's not really sustainable, and I'm aware I need to be strategic about which fires I feed — but for now, the momentum feels good. See you next week.