Vision Clashes in a Capstone Project
My own take on how I'd implement the multi-tenant architecture, with some comparisons and why I disagreed with RestaurantOrder's way.
A case study on how I made a Docker-ready image that serves a website with zero javascript packaged, but still has a live configuration.
Published on Feb 24, 2026
10 min read
Whoo, it’s been a hot minute since I took on a commission. My friend, who is a tech administrator and also the community ambassador of the trans-identities community, reached out to me for a simple configurable landing page for her March launch.
You can check out her community here. You can also commission me here, wink ;)
I did not know this process that I have been doing all my life has a specific term for it, called Requirements Analysis. Ironically, this is the process that is severely lacking in my capstone project, leading to a development team that can’t agree with each other on anything.
For this project, the client seems to want the following:
I settled on AstroJS, but using the standalone SSR module, for the following reasons:
Something I noticed is that a lot of people don’t understand the blurry lines between what you would consider a static website and a dynamic website, and to be honest, I don’t either because I don’t think everyone agreed on a solid definition. A good way to think about it is about how the page is built and delivered.
| Technology | The browser receives | Like a? | Pros & Cons |
|---|---|---|---|
| SSG | Full HTML | Frozen Pizza | Fastest, can be put on a S3 or CDN. But you need to recook (rebuild) every time you change a piece. |
| Partial Hydration | Skeleton HTML + JS to get content | DIY Pizza Kit | Slowest, but can be on a S3 or CDN. The browser has to assemble the pizza before you can eat. |
| SSR | Full HTML | Restaurant Meal | Fast, can’t be on a S3 or CDN*. A cook cooks a pizza when you need it, hot. |
To give her that nice configuration, I used js-yaml and zod. By using schema.safeParse,
I ensured that if she makes a typo in the YAML, the site doesn’t just crash silently
but it catches the error (and also calls her a dumbass but who cares).
import yaml from "js-yaml";
import fs from "fs";
import z from "zod";
const filePath = process.env.CONFIG_FILE || `${process.cwd()}/config.yml`;
const schema = z.object({
...
});
type ConfigSchema = z.infer<typeof schema>;
export { type ConfigSchema };
export function loadConfig() {
const data = yaml.load(fs.readFileSync(filePath, "utf8"));
return schema.safeParse(data);
}
The z.infer is to allow TypeScript and vstls (I think I spelled that right) can
auto-complete typenames.
Usually, you’d expect users to configure just raw text, because that’s the easiest thing to monitor, and you wouldn’t have to care about edge cases, since raw text easily wraps around in modern browsers. The problem here is that it’s not as customizable with raw text, as the client wants some level of bolding, and linking in the content. Thankfully, she is very happy with Markdown.
This is a short retrospective section of the commission as a whole. There were a few things that were dropped from the final product, due to some issues with several requirements, as well as being rather out of scope for the March launch.
The February 11th deadline was tight, especially with Lunar New Year falling right in the middle (Feb 17). Between visiting my father’s hometown and a trip with my mother, the “dev window” was tiny. (There are a lot of responsibilities that comes with being the eldest sister in the family). We had to drop a few:
But overall, we were able to complete some rather cool features that she was happy with:
I think that works rather well, or maybe I’m not as good to make it better yet. I didn’t want to rely on React or crazy amount of animations or interactivity, maybe this philosophy fit the client’s needs for accessibility for her diverse community.
My own take on how I'd implement the multi-tenant architecture, with some comparisons and why I disagreed with RestaurantOrder's way.
Hear me rant about the process of designing my capstone project, while people that have no clues about actual designs scream at me for not doing it well enough.
I noticed a lot of clean architecture specifications don't have any demonstration on what it would look like in practice. Taking the chance of learning it in a course of Software Architecture, I think I would like to write up a demo just like so!