5. Domain, Conventions & Your First Changes
Goal for this page: understand the domain the app models, follow our naming and structure conventions, know how code ships, and then make a few changes locally to prove it all connects.
Step 5.1 — The domain model: Standard Categories
What & why: AquaGen is a water/energy monitoring platform, and almost every feature is
organized around Standard Categories — a hierarchy of
Standard Category → Services → Subcategories → Units (with six standard category types
like Source/Consumption). You cannot reason about features without this model.
Learn:
- Architecture — Standard Categories (the six types + the hierarchy, with examples)
Your task: In your own words, write out the category → service → subcategory → unit hierarchy with one real example. Then find where category data shows up in the running app.
Step 5.2 — Naming conventions & folder structure
What & why: Consistency is what keeps a large monorepo navigable. Match the existing
conventions — library layout (libs/{feature}/src/...), where stores/components/services
go, the @aquagen-mf-webapp/... import aliases, and file/component naming — rather than
inventing your own.
Learn:
- Re-skim Architecture Diagrams and Component Library with an eye for where things live and what they're named.
- Development — Utilities for the shared-helpers convention.
Your task: Document the "shape" of a feature library: given a new feature foo, where
would its store, components, services, and routes go, and what would they be named? Confirm
your answer by comparing against two existing feature libraries.
Step 5.3 — Deployment & environments
What & why: Know how your code reaches users before you ship it. The main production
app deploys via CI to Azure, while other apps deploy elsewhere (e.g. Firebase hosting), and
there are multiple environments.
Learn:
Your task: Identify which environment the app you ran locally points at, and how a merge to the main branch would reach production.
Step 5.4 — Make a few changes locally
What & why: The fastest way to consolidate everything above is to change the app and watch
what happens. Do this on the branch you created in
Setup & Monorepo, Step 1.3
— all local, nothing pushed to main.
Do this — try two or three small experiments, e.g.:
- Change a label or a value in one feature's
components/and see it update in the running app. - Add a
console.login a feature'sdataSource/and watch it fire when you open that screen. - Tweak a piece of state in a
store/and observe how the UI reacts. - Run the checks before you'd ever open a real PR:
npx nx lint <project>andnpx nx test <project>(see the Commands Reference).
Commit each experiment locally so you can git diff and, if needed, git restore to undo it.
Your task: Make at least two local changes across different layers
(components / dataSource / store), run the lint/test targets for that project, and confirm
the app still works. Jot down anything in this track that was unclear or out of date — that
feedback is the most useful thing you can bring to your lead.
Once you're comfortable, ask your lead for a "good first issue." Then follow the standard flow — branch → small commits → pull request → address review → merge. That's your first real contribution; this page was the rehearsal.
You can run the app, navigate the monorepo, trace routing/permissions/state, reuse the component and API layers, reason about the domain, follow our conventions, and change the code confidently on a local branch. Keep the Web Application docs handy as your day-to-day reference.