What it is
A platform where local businesses get their own website with what their line of work needs (catalogue, detail page, contact) and the owner edits it alone, without depending on a developer for every text change.
Architecture
- Multi-tenant with per-client isolation, a database per tenant and JWT authentication.
- Server-side rendering with Jinja2, packaged in Docker.
- Themes by line of business, with features that can be switched on individually per client and a palette configurable through CSS custom properties, so the theme does not have to be duplicated per colour.
Technical decisions
SSR instead of a client-side application, on purpose. The customer of these sites is a local business, and what they want is to show up in search. A server returning complete HTML means the search engine does not depend on executing JavaScript to read the page. It is a product decision disguised as a technical one, and in this case it is worth more than any front-end sophistication.
Isolation between tenants is a test, not an intention. Multi-tenant fails silently: a data leak between clients breaks nothing, it just shows the wrong thing to the wrong person. That is why the isolation has its own regression test, which tries to reach one tenant’s data while authenticated as another and requires the response to be denied. It is the test I run first after any change to a query.
Themes through CSS custom properties. The alternative was one theme per client, which would multiply maintenance by N. With variables, the palette is data, not code.
Status
The item detail page is finished: a gallery with a lightbox in plain JavaScript, keyboard and touch navigation, structured data and a contact call to action. Under active development.