This guidance applies to web applications built at RMI, that is: anything that serves a browser-based UI backed by a server-side API and database.
New web applications should use:
This is a default, not a mandate. But the default exists for a reason: shared tooling, transferable knowledge across teams, easier code review, and lower onboarding cost enable better engineer fungibility across repositories.
Deviating from the default is allowed when there is a strong, specific reason, not a preference.
Examples of reasons that would justify a different choice:
Reasons that are not strong enough on their own:
If you deviate, document the reason in the repository’s ARCHITECTURE.md or equivalent so future maintainers understand the context.
Everything below are helpful suggestions for adjacent tooling. “If you have no idea where to start, start here”. These are reasonable defaults that will not surprise anyone who has worked in another RMI web application. Deviate freely when you have a reason.
uv — fast, lockfile-based, workspace support for monorepos.ruff.pytest.RMI/stitch is a working example of this stack and the adjacent suggestions above. When starting a new web application, it is often faster to skim stitch’s README.md, ARCHITECTURE.md, and root configuration files than to assemble the pieces from scratch.
RMI/pbtar is a static web application that has no server-side API or DB. It does however follow the stack in the sense that the front-end is written in React.