This is the final episode of the frontend series. And true to the closing tradition of the neighboring series, this episode isn’t a victory party; it’s the closing inventory: what’s done, what’s intentionally left unfinished, and what living in a building whose two sides ended up occupied by the same person actually taught me hehe~
The Honest Closing Inventory #
The last four episodes opened the inherited frontend building. Now that the door is shut again, here’s what’s inside:
- 76 pages moved, 76 pages alive. A 1:1 port without leaving a single page behind, and every internal link between pages still knows its way home.
- Two UI libraries remain at peace. One hundred and one files for the majority, thirteen for the calendar monopoly holder, and still zero files catching them sharing a room.
- 194 type scars, measured.1 One hundred ninety-four small safety nets that honestly admit to being installments, not architecture.
- Three styling eras coexist,2 one backup corpse received a proper farewell, and standardization officially waits in the epilogue room.
Nothing on that list reads “everything is tidy”. And that’s exactly the honesty: this building finished being moved, not finished being renovated. Two different things, and telling them apart is the biggest lesson from both series hehe~
Two Sides of One Building #
If you read both series side by side, one pattern is impossible to miss: the lessons are identical, only dressed differently.
On the backend, the inheritance came as non-sargable queries and prepared statements killed mid-tunnel. On the frontend, it came as fields with opinions about their own types and two UI libraries at peace through a demarcation line. And on both sides, the solutions were identical too: measure first, move faithfully, record what gets canceled, and never fix while relocating.
Even the caretaker is the same. In both buildings, what raised the code wasn’t beautiful architecture policy, but time and urgency. Which is also why I can never hate the spaghetti smell I noticed in this building: it’s the same smell as the neighboring one, the smell of a place that keeps serving while its caretakers keep changing hehe~
What We Feed, What We Wait For #
To stay faithful to the debt-list tradition, here’s the division:
What we actively maintain from now on: the library demarcation line (zero mixed files), type contracts at the entrance, and the habit of recording carried inheritance, like these four episodes.
Waiting for its turn: TypeScript (a big decision whose time hasn’t come), cross-era naming standardization (epilogue, not suitcase), and internal structure refactoring (one decision at a time, with usage data in hand).
Canceled without regret: the state management migration. It’s on the didn’t-happen list, and that list is part of a healthy archive hahaha.
In the end, after all the wrestling with keeping this v3 web app alive, I feel more and more like a tourist here. The heart says no, but the demands keep coming, and production has to keep running.
In episode one I joked about the tourist visa being revoked and replaced with a resident ID. The honest answer turns out to be this: the ID card got issued, but the heart still carries its passport hehe~
Closing Both Series #
With this episode, two Hijrah series stand complete: one backend, one frontend, two sides of the same building, serving tens of thousands of users every day without ever once asking for applause.
If you’re standing in front of your own inherited building, backend or frontend or otherwise: measure first, move faithfully, take care of yourself, and let some inheritance calmly wait its turn. A building doesn’t need to finish renovating to be worth living in.
Thank you for following to the final episode. May your building serve well for a long time, and may its caretakers change without chaos.
Cheers.