Status Report · Resume Briefing

Where We Are
And What's Next

Nine days of hard work, seventeen merged pull requests, one paused engine, and three decisions waiting on you. Everything you need to pick the thread back up.

2026-07-17 · covers 2026-07-06 → today · main @ PR #41 · thebrickdrop.com is LIVE
The 30-second version

The app is done being a skeleton. Over the last nine days it went from four bare screens to a real, browsable product: search that understands themes, a bottom tab bar, saved sets, compare, list view, and a sort-and-filter drawer that lets people browse by release month. All of it is live on thebrickdrop.com right now.

The grades got smarter too. The investor score used to be a fake number — literally 5.0 for every single set. It's real now. Scores can never come back blank. Every set has a hot take written in your voice. And the AI that reads reviews passed its first honest audit.

What's stalled: the LEGO® parts-price API locked us out after a runaway job, which blocks the next big feature. A grading sweep died mid-run five days ago and nobody restarted it. And there are three spending or judgment calls sitting in your court.

01The scoreboard

5,786
LEGO® sets fully graded, each with a letter and a hot take
28,810
grade rows in the database — every set scored five different ways
27,080
sets in the catalog total (the graded ones are the modern, buildable slice)
17
pull requests merged since 2026-07-06 (#25 through #41)
670
automated tests, all passing. Typecheck clean.
36,378
review references harvested — 3,877 sets now have two or more

One number worth knowing: 4,486 of 5,786 sets now have a real release date attached (77.5%). The 1,300 missing ones are mostly pre-2001 sets that Brickset simply never dated. That's what powers the new browse-by-month experience.

02What shipped, in plain English

On 2026-07-14 you got a review back that said, roughly: great grades, no way in. The grading engine was excellent and the front door was locked. Search for "star wars" returned zero results while 438 Star Wars sets sat graded in the database. That review became a four-phase plan, and all four phases have now shipped.

The front door got fixed — PRs #31, #32, #33

Search now understands themes, tolerates typos, and suggests as you type. There's a bottom tab bar so the app feels like an app instead of a website. Browse has filter chips and loads in chunks instead of dumping all 5,700 tiles at once. The Home page has shelves organized by what you care about — best for display, best for building, best for gifting — and each of those became its own page. And when something goes wrong, you get a branded 404 or error screen instead of a raw crash.

It remembers you — PRs #34, #35

You can save sets and see what you recently viewed, stored on your own device. No accounts, no login — you decided against that, partly because Instagram's in-app browser makes accounts miserable. Instead there's a gentle nudge to open in a real browser. You can also compare two sets side by side, the back button behaves, and pinch-zoom is disabled so it stops feeling like a webpage.

Browsing by release date — PRs #38, #40

This was the biggest single piece

First a background job went out to Brickset and pulled a real launch date for every set it could find. Then that data became a sort-and-filter drawer — an animated sheet that slides up from the bottom, drag to dismiss, letting people sort and filter by year, theme, price, and piece count. Sets group under sticky month headers, with a "Rest of 2024" bucket for the ones with no exact date. Grades are color-coded by theme.

Crucially: no new navigation tab. It folded into Browse instead of adding another thing to the bottom bar. 670 tests, verified live.

The share card got its framing back — PR #37

The 4:5 downloadable card was ignoring all your hand-tuned Crop Curator framing and just centering every image. It now honors your crops exactly. Every card is also guaranteed to show a real image, falling back to a branded "COMING SOON" placeholder for the two unreleased sets that have no photo yet. And 68 sets that had never been cropped got auto-framed by a script that finds the subject against the white product-shot background.

Legal cover — PRs #36, #39

LEGO®'s Fair Play rules are now enforced in code. A helper function stamps the registered mark on every mention, the trademark is always capitalized and used as an adjective, and the required disclaimer sits in the site footer. This went live 2026-07-15.

Grades that never lie and never blank — PRs #28, #29

You said it plainly: I don't ever want to see a score be blank. That's now guaranteed. Before this, 32% of price reads and 98% of "will you love it" reads showed a dash. Now every read resolves to a real letter derived from facts, upgraded by opinion when reviews exist — and the honesty lives in the confidence line underneath ("Early read") instead of in a missing number.

Worth noting: a full dry run proved all 28,810 existing rows already had letters, so this moved zero grades. It's a forward-looking guarantee, not a retroactive fix. The reads were the real problem.

The investor score became real — PRs #20, #21, #22

Before
5.0
every set, identical

Both ingredients of the hold-value score were dead. One needed retirement and exclusivity flags that were never populated. The other needed resale prices we don't have. So it froze at a meaningless middle number for all 3,600 sets.

→
After
A− to C−
28,810 rows, real spread

Rebuilt as Value Floor (what the parts are worth versus what you pay) plus Appreciation Outlook (how far into its life the set is, weighted by how much collectors want that theme). Floored at C− because a bad investment shouldn't read like an F.

Every set got a voice — PRs #24, #25, #26, #27

All 5,762 graded sets had their hot takes rewritten in about three and a quarter hours. Each set now has short per-lens takes plus a longer "Full Take" panel. The new prompt is diversity-first — it hooks on whatever actually stands out about that specific set, which killed the formulaic "I have to admit... fam... the receipts" pattern that was showing up everywhere. Two automated guards enforce your rules: any mention of price-per-piece triggers a regenerate and then fails closed, and filler intensifiers get caught on short takes. Verified across the whole catalog: zero violations.

The price math became visible — True Value, shipped 2026-07-14

The "Is the price fair?" line grew into a real breakdown — anchor price, what you get in parts, the ratio between them, with proportional bars and tagged insights (Bargain, Fair, Overpriced, Licensed, Retired). It uses the exact same math the grade uses, so the number you see and the grade you get can never disagree. It renders on the roughly 982 sets that have both a parts valuation and a price. It's deliberately kept off the share card to keep that clean.

03Where your machine is sitting right now

Read this before you type anything

Your local checkout is on the branch fix/lego-trademark, and it is stale. That work already merged as PR #39. Your local copy is 12 commits behind what's actually on main — it's missing the entire browse-by-release feature.

First move tomorrow: git checkout main && git pull. The old branch is safe to delete.

ThingStateDetail
Local branchStalefix/lego-trademark, 12 behind origin/main
Tests / typecheckClean656 passing locally, 670 on main. Typecheck clean both passes.
Uncommitted workMinorOne tracked file: .gitignore, adding .vercel and .env*. That second line is what keeps your credentials out of git — worth committing.
Untracked docsPiling up~25 design and report HTML files never committed, including several you liked
Review mining jobFinished cleanRan 2026-07-14, 5.9 hours, 696 sets, 463 grades moved, zero failures, 2,925 reviews mined
Grade sweepDied mid-runThird sweep started 2026-07-12 21:07 and stopped 10 minutes later at 21:17. Never resumed.
Open pull requestDraft #42Hardening the minifig audit. Waiting on a full database re-run to finish.

04What's broken or stuck

1. The parts-price API locked us out — this is the big one

Blocked

On 2026-07-14 a pricing sweep made 145,582 calls to BrickLink in a single day. The key got blocked. It's still blocked.

What was built in response: a hard daily budget (4,500 calls, tracked in a file that survives a Ctrl-C), the per-set price ceiling cut from 500 parts to 150, and a clean pause-and-resume so a sweep stops rather than writing half-priced grades.

And a nasty bug got found along the way (2026-07-16): BrickLink returns HTTP 200 even when it's rejecting you — the real error hides inside the response body. So the blocked key was silently returning "no price" for every part, which would have quietly fallen back to MSRP across the entire database. That now throws loudly and aborts the sweep instead. Eight new tests cover it.

What it blocks: real minifig pricing, any full re-grade, and re-grading the sets we know are undercounted.

2. Minifigs are missing from the value math

Two separate problems, both about minifigs, both real:

The parts valuation ignores them entirely. The pricing code only prices the loose bricks, not the figures. Proof: the Elite Praetorian Guard Battle Pack — five minifigures — values out at $4.09. Roughly 957 of 2,338 priced sets are undercounted, and the 88 figure-heavy ones are badly wrong. Their price grades are unfairly harsh.

Some sets showed "no minifigs" when they clearly have them. Fixed and merged as PR #41. The cause: Brickset sometimes has no minifig count recorded, and the code treated "no data" and "zero figures" as the same thing — which tripped the "figureless" classification and dropped the entire Minifigures cluster from the grade. It now keeps unknown separate from zero and cross-checks Rebrickable. PR #42 is hardening the audit that finds the remaining affected sets, because rate-limiting made the first sweep undercount them.

3. The grade sweep left 445 failures

Most are transient network blips, but the dominant recent error is one specific fixable thing: the database rejects a grade with a null score. Around 46 sets can't save because of it. The never-blank work may have already made this moot, but nobody has confirmed that.

4. Your memory pipeline is dead

Silent failure

The .remember system that's supposed to log daily history has been erroring out since 2026-07-06. Its main file is zero bytes, and the logs show the same crash repeating every day. Nothing has been captured for the entire eleven-day stretch we just worked.

The good news: the other memory system — the one that produced most of this report — is healthy and detailed. But that broken pipeline should either get fixed or turned off, because right now it's failing quietly and giving you nothing.

05The three calls waiting on you

These are the things I can't decide for you. Each one costs money, changes what shows on live grades, or both.

06The goals you set, and how they stand

Back on 2026-06-23 you named three directives. Here's the honest accounting, nearly a month on.

DirectiveStatusWhere it actually stands
A new value calculationPartialThe investor rebuild and the Smart Price fail-soft fix both landed. True Value made the math visible. But Smart Price v2 is still just a design doc — you paused it pending judge validation, and that validation is only half done.
Plain-language honesty layerNot startedNever-blank scores addressed part of the spirit. But the actual vocabulary rewrite — replacing insider terms like "data-light" and "withheld" with language a normal buyer understands — hasn't been touched.
Massively expand sourcesNot startedThe review corpus more than tripled (10,936 to 36,378 references) via a pagination fix, which is real progress. But the new source types — podcasts, Reddit, social — are still just a plan.

Also still open, from the roadmap

More movement in the UI Per-lens hot takes (Slice 17) Theme desirability tuning Living grades / monthly re-grade cron Tighter hero crop for share cards Retry the 271 rate-limited sets Prediction model for pre-release sets Full-catalog search

Two of these are worth calling out.

Per-lens hot takes matters more than it sounds. Now that the investor grade is real, there are sets where the card shows a C− while the take underneath is still talking like it's a B−. The take should lean into resale and cite the actual investor grade. This was named "next in the recommended order" and then got leapfrogged by all the UI work.

More movement is the one thing left from the UI review that never shipped — view transitions between pages and press feedback on tiles. Everything else in that four-phase plan is done.

07Where I'd start tomorrow

One thing to unblock separately

The BrickLink key needs to come back. Everything downstream of real parts pricing — Phase 2 minifig value, any full re-grade, fixing the 957 undercounted sets — waits on it. The rate-limit guards that caused the block are now built and tested, so it won't happen again. A spike script is written and ready to run the moment access returns.

08The rules I'm holding to

These are locked, and several are enforced by code rather than trust.

RuleHow it's enforced
Never price-per-piece. Not in takes, not in copy, not anywhere.A regex guard scans every field of every generated take, regenerates up to three times, then fails closed. All 5,762 takes verified clean.
Never a blank score.Engine-level. Every read and every overall grade resolves to a letter. Honesty lives in the confidence line.
No emoji. Phosphor icons only.Convention, applied throughout the UI and the copy prompts.
LEGO® Fair Play. Caps, registered mark, adjective not noun, disclaimer in footer.A helper function stamps every mention. Live since 2026-07-15.
Branded fonts in every generated image. Avenir Next Condensed, grade letters at Heavy 900.Subsetted fonts committed to the repo, weights registered explicitly.
No end-of-turn questions.Decide, act, report. You redirect mid-stream.
Take incremental asks literally."A better crop" means better crop values, not a new rendering pipeline.
Never mass-mutate live grades without your explicit go.Every write script defaults to dry-run and requires a --write flag.

Bottom line

You built a real product in nine days. The thing that was hardest to get right — the grading engine — is now honest, defensible, and audited. The thing that was most obviously missing — a way for anyone to actually find a set — is now built and live.

What's left is a short list of specific, tractable things: one API key to unblock, one dead job to restart, one estimate to ship, and one badge to decide on. Nothing here is a mystery, and nothing is a rewrite.

The Brick Drop · Status as of 2026-07-17