Skip to content
About

Spring Cleaning, Then the Big Move

Merged two home pages into one, dropped three languages, then migrated ten pages to a brand-new frontend.

3 min readEvergreen2:04pmMiami Beach, FL, USA

Today was a clearing-the-decks kind of day. First, simplify. Then, rebuild. Four changes total: two about removing stuff that was getting in the way, two about moving the app's pages to a totally new setup.

One home page, one language

The app had two home pages. One was the normal hub with links to everything — compliance, the owner portal, documents, the study module, the association website. The other was a developer-only version I'd been using while building things. Over time the developer one got useful enough that having two was just confusing. So I merged them. One page, everything in one place. The old developer page now just redirects.

While I was at it, I expanded the navigation menu on the owner-facing side. It went from two links to five, with a collapsible menu for small screens.

Then I ripped out every other language. The marketing site had Spanish, Portuguese, and Italian versions — translated pages, translation files, the language switcher in the nav bar, even a whole Python module for managing and syncing translations. All gone. The site went from building sixteen pages down to three.

Redirects are in place so anyone who bookmarked a Spanish or Portuguese page lands on the English version instead of a dead end.

Moving the pages to a new frontend

This was the big work. Two rounds of the same surgery on different parts of the app.

Here's what was happening before: the Python server was doing everything — grabbing data, building the page, sending the whole finished thing to the browser. That worked fine, but mixing the page-drawing code with the data code made both harder to change. So I split the job in two. Now the Python side just hands over data, and a separate frontend draws the pages.

First up was the association website section — the public-facing part with pages about the building, meeting notices, records, and contact info. Five pages got converted. Each one has a simple flow: show a spinner while data loads, then the real content, or an error message if something goes wrong. About eighty files changed for that one alone.

Then the same treatment for the owner portal. Owners use a handful of pages: log in, see the dashboard, view documents, make a payment. All of these moved from the old system to the new frontend.

The sign-in flow is fun. An owner types their email, the app sends them a magic link — basically a special URL that logs them in automatically when they click it. No password to remember. It sets up a session and drops them on their dashboard.

The payment page talks to Stripe. Instead of the server redirecting the browser directly, it now sends back a checkout link and the frontend opens it. Same result, cleaner separation.

One thing to remember for next time: there's a server setting that needs a manual update before the magic links work on the live site. They need to point to the new web address. That's a configuration thing, not code — just a box to check at the next update.

Why all of this on the same day

The cleanup and the migration are connected. Dropping the extra languages and merging the home pages made the codebase simpler, which made the migration work less tangled. It's the "clean the garage before you reorganize the garage" approach.


PRs:

Related posts

Stay in the loop

Newsletter launching soon — follow along via RSS.