Small Fixes, in the Order I Found Them

2026-08-23

Small Fixes, in the Order I Found Them

# Small Fixes, in the Order I Found Them I spent most of this weekend somewhere I didn't expect to end up, which was inside my own website's plumbing instead of at a table with dice on it. No con, no session report, just a laptop, a half-finished Monster, and a running list of things about the site that had been quietly bothering me for weeks. It started Friday night with the unglamorous stuff. I gave the site actual app icons and a manifest file, the kind of thing that lets someone add it to their home screen and have it open like a real app instead of just another browser tab buried under six others. I wrote a service worker, set proper cache headers so the icons and the meeple SVG can sit there forever unbothered while the manifest and service worker itself always get rechecked, and built social preview images for the landing page, the photography section, and the Game Shelf, so a link dropped into a text message actually shows something worth clicking instead of a blank gray box. None of it is visible in the way a new feature is visible. It's the kind of work that only shows up as an absence of small annoyances, which I've come to think is most of what good craft actually is. Saturday I wrote up the rate limiting plan for four public endpoints, the concierge, the geocoder, the nearby-stores lookup, the BGG import, capping each one per visitor so nothing gets hammered by accident or on purpose. I left it failing open on purpose, meaning if I never run the one-time setup command, nothing breaks, it just stays unprotected. I liked writing that note to myself. There's something honest about building a safety net and then writing down, plainly, what it doesn't catch. Comments and reactions still write straight to the database with no net under them at all, and I said so, rather than pretending the job was more finished than it was. Somewhere in that same stretch I also built the golden hour widget for the booking calendar on the photography side, which ended up being one of my favorite pieces of the whole weekend. A client picks a date off the calendar, and the site works out, right there, no API key and no network call, the morning and evening golden hour windows, sunrise, sunset, and both blue hours for that day, using nothing but the sun's actual position in the sky. It defaults to Memphis since that's where the shoots happen, but there's a quiet "use my location instead" link under it that asks for geolocation and, if it's denied or the browser balks, just falls back to Memphis without a word of complaint. I keep thinking about how much of photography is really just scheduling around light you don't control, and here's a little tool that does the math on that light before anyone's even shown up with a camera. It felt like the kind of thing worth building even if only three people ever click it. Then today, Sunday, I finally sat down with the Game Shelf itself and went hunting for bugs I'd been telling myself I'd get to eventually. The one that had actually been nagging at me was a game mismatch in my own collection. I'd search for Go! Go! Go Kart and somehow get an Arkham Horror promo card instead, and I'd shrugged it off as bad data more than once. Turns out it wasn't the data at all. It was timing. Typing quickly fired off a new search on every keystroke, and if a slower response for an earlier, shorter guess like "Go K" happened to land after the correct one for "Go Kart," it would silently overwrite the dropdown with noise right as I went to click. The fix was to give every request a sequence number and only ever trust the most recent one. It's a small thing, a few lines, but I keep turning it over. How much of what we mistake for wrongness in a system, or in a person, is actually just an earlier answer arriving late and getting mistaken for the current one. After that I moved the monthly play log up to sit right under the heatmap where it belongs instead of stranded at the bottom of the page, gave it a heading it never had, and fixed an edit button that would quietly do nothing if you opened a game from anywhere other than the Collection tab. Three commits, all logged properly for the first time, since I'd been running this site off a live "baseline" for longer than I want to admit. None of this is the kind of weekend I usually write about here. There's no table, no dice, no one across from me. But I noticed the same thing I notice after a good long game, that satisfaction of a system finally doing what it was always supposed to do, quietly, without anyone having to think about it again. I closed the laptop with the cursor still blinking in an empty terminal, four fixes deeper into a site nobody's grading me on, and it felt exactly as good as it should. Now to play a game.... By Norman, BigGame, BGG Tabletop. Photography. Philosophy. The spaces where they all live.

Install this app for quicker access from your home screen.
Game News
Sign in
New here? Create an account
Game Shelf

Roll for fun, seriously.

Session recaps, convention trips, and a running record of every game played — now I can track how I waste both time and money!!

On the shelf

My Game Collection

The Game Steward
Silas
Good evening. What are we feeling like this evening?
Head to Head
Compare Collections

Enter a BoardGameGeek username to see the overlap with this shelf — what you both own, and what they have that's worth a look.

Buy & sell

Games In & Out

On the road

Conventions

Coming up

Find a Convention Near You

Search live convention listings via Tabletop.Events — results link straight back to the real event page, and any of them can be added to your list above with one click.

The record

Games Played

Games Played by Month

Head-to-head

Win % by game

Compare periods

Pick any year, or a year + month, on each side.
vs
Period A
Period B
In depth

Reviews

Want to buy

Wishlist

From BoardGameGeek

Trending Right Now

Your shelf, by the numbers

Insights

Cost per Play

Purchase price divided by sessions logged — lowest cost per play first.

Weight vs. Plays

Does complexity predict how often a game hits the table?

Weight Distribution

How your shelf spreads across BGG's 1–5 complexity scale.

Top Mechanics & Categories

The most common mechanics and categories across your collection.

Publication Timeline

When the games on your shelf were originally published, by decade.

Player-Count Coverage

How many owned games support each player count, versus how often you've actually played at that count.
Games that support itSessions actually played
Who's been at the table

Players

Your Achievements

Sharing

Shows next to your name in Friends, the Leaderboard, and the Activity feed.

Make your collection browsable by anyone with the link — sessions, reviews, and everything else you track stays visible read-only, exactly like Norman's public shelf.

Sessions, belts, and trophies from your week, sent once a week. Skipped automatically on a quiet week — no empty emails.

A friend request, a trophy, a game night invite, or an RSVP to a night you're hosting. Nothing else pings you.

Friends

Link an account so you can tag them directly in a session, instead of just typing their name.

Your friends
No friends linked yet — send a request to tag them in sessions and start a rivalry.

Belts

Who currently holds bragging rights at each game you've played against a linked friend.

Leaderboard

How you stack up against everyone you've linked as a friend.

Site

Visible to you alone.

Registered users
Notes from the shelf

Blog

10 games · 10 plays each

10x10 Challenge

Support your FLGS

Game Stores

Anywhere else

Find Stores Near You

Free search via OpenStreetMap — coverage depends on how well a shop is tagged there, so it's a helpful complement to the picks above, not a complete directory.

Owner only

Piece ID

Photograph a game's component list to teach it, or photograph a stray piece to find out which game it's from. Runs through Claude, only visible when you're signed in.

Teach a game

What is this?

Comparing against the whole library

Games taught so far

Check the games that are actually out today to scope "What is this?" to just those — cheaper and faster than comparing against everything you've ever taught. Leave all unchecked to compare against the whole library.

Loading…

About this shelf

Hi, I'm Norman — this is my personal board game collection tracker: every game I own, every session I've logged, and honest reviews as I write them. I built it to keep an accurate record for myself, and to give other hobbyists something real to compare notes against.

0
Games owned
0
Sessions logged
0
Plays this year

Are you sure?