MegaMove MMDB · project explainer

Status · 13 August 2026

From fragile brownfield app to a working pilot release.

The short version: we have repaired the upload path, made the old code safer to change, added repeatable verification, and deployed the latest backend and frontend to Render. It is usable as a small pilot. The remaining work is mostly final security hardening and real browser-based user acceptance.

28Beads tickets closed
54backend tests passing
51frontend tests passing
3active follow-up tickets

Where we started

The repositories are older than this modernization effort. The earliest visible backend commit is cb7aeb3 from January 2026, and the earliest visible frontend commit is fa1a61e from March 2026. The concentrated repair and modernization sequence began on 11 August 2026.

Why the first pass was broad:

This was not one isolated bug. The app had duplicated legacy code, incomplete deployment assumptions, weak upload-state recovery, old validation paths, and little deterministic test coverage. We treated the upload flow as a connected system instead of patching only the visible error.

What we did, in order

11 August · foundations and deployment

Made the old application runnable in a modern environment.

Prepared the Django backend for Render, documented deployment gotchas, added missing migrations, switched storage configuration to the R2-compatible path, repaired dependency problems, served static assets, and made the frontend API base URL configurable.

11–12 August · backend safety and data contracts

Reduced hidden failure modes around uploads.

Removed dynamic header evaluation, rejected empty CSV drafts, normalized legacy header metadata and owner phone values, scoped upload access to the correct owner, restricted telemetry/origins, consolidated duplicate backend logic, and extracted validation phases so they could be tested.

11–12 August · frontend wizard and authentication

Made the upload wizard easier to reason about and recover.

Centralized session and resume state, made requests use the correct session-first token, split the large wizard component into clearer pieces, cleared stale matching state, escaped server-controlled messages, and added reproducible frontend verification.

13 August · final review and release

Closed the last release-blocking upload defects.

The backend now handles blank rows atomically and rolls back a partial upload if a later storage operation fails. The frontend accepts legacy licence naming, keeps Argos optional when that is the current business rule, preserves retryable wizard steps after request failures, and avoids race conditions when users select files quickly.

What is live now

Backend · commit 7174564

Live

The Render backend is serving Django, static assets, admin, and the upload APIs. The latest public health check returned HTTP 200 after the expected free-tier wake-up delay.

Frontend · commit 0a53f95

Live

The Render frontend has the matching, recovery, and file-selection fixes. Its production build and 51-test CI suite passed before deployment.

Environment

Small Render pilot

Both services auto-deploy from render-deploy-setup. This is intentionally acceptable as the small production-like environment until real users justify a larger operating setup.

What is next

These are the three remaining active Beads tickets. They are follow-through work, not evidence that the deployed release is broken.

P1 · mmdb-234

Restrict telemetry and host/CORS configuration

Finish the deployment hardening so telemetry and accepted origins are deliberately limited, then verify the live configuration.

P1 · mmdb-65r

Run deterministic browser QA

Use the GUI, not only API tests, to exercise the final upload wizard and capture repeatable evidence for success and failure paths.

P2 · mmdb-6ax

Complete the upload UX audit

Run the legacy/user-testing CSV scenario matrix, look for confusing validation messages or dead ends, and turn quick wins into tested fixes.

Practical next sequence:

First finish the telemetry/origin hardening. Then perform full GUI uploads with the legacy CSV scenarios, including valid, invalid, blank-row, missing-optional-Argos, and recovery cases. Finally decide which remaining documentation, sample-data, plans, and generated build artifacts in the worktrees should be committed or discarded; they were deliberately kept out of the release commits.

Bottom line

We are no longer at “old app deployed and hoping.” The core upload path is covered by tests, the highest-risk authorization and validation issues were addressed, the UI recovery behavior was improved, and the exact release commits are live. We should call it a stable pilot, not a fully finished product, until the remaining security review and browser QA are complete.