Skip to main content
ORVENATH
HB-EN-001|Engineering Standards
LAST UPDATED:

Default Stack

What Orvenath builds with by default, and why each choice was made.

Default Stack

Defaults exist so that stack selection is not re-litigated on every project. Deviate when a project genuinely requires it, and record the reason.

Web#

LayerDefaultWhy
FrameworkNext.js (App Router)Server components, file routing, one framework for static and dynamic
LanguageTypeScript, strictCatches at build what would otherwise be found by the client
StylingTailwind CSSFast, consistent, no naming overhead
DatabasePostgreSQLRelational by default; most client data is relational
ORMDrizzleTyped, close to SQL, no runtime overhead
HostingVercelZero-config Next.js deploys, preview environments, sensible free tier
DB hostingNeonServerless Postgres, branching for staging
AuthDepends on project — Auth.js defaultAvoid rolling custom auth
PaymentsStripeBest documentation, best test mode
EmailResendSimple API, good deliverability

Mobile#

LayerDefaultWhy
FrameworkFlutterOne codebase, both platforms, strong rendering consistency
LanguageDartComes with Flutter
StateBloc / RiverpodProject-dependent; structured reactive state and separation of concerns

Tooling#

  • Antigravity IDE for scaffolding and large generation passes
  • Git with GitHub, private repos by default
  • Figma for design work

Rules about the stack#

Do not learn a new framework on a client's money. If a project requires something unfamiliar, either quote the learning time honestly or decline.

Do not add a dependency to save twenty lines of code. Every dependency is a future security patch, a future breaking change, and something the client's next developer has to understand.

Prefer boring. The client is buying software that works in three years, not the newest thing.

When to deviate#

Record deviations as an ADR. If the same deviation happens three times, it is not a deviation — update this document.