Mladi Pirati Beacon

Tech stack

The approved technologies for Mladi Pirati projects, and what each one is for.

Everyone uses the same small stack, so any developer can pick up any project. If you think a project needs something that isn't listed here, talk to Aiken before you build on it.

Language

TypeScript, always. No plain JavaScript: not in app code, scripts or new files. Where the tooling supports it, config files are TypeScript too (drizzle.config.ts, astro.config.ts, and so on).

  • Enable strict mode (the templates already do).
  • Don't use any. If a type really is unknown, use unknown and narrow it.
  • Prefer inferred types and discriminated unions over type assertions (as).

What to use for what

Use caseTechnologyTemplate
Static sites (landing pages, campaigns, blogs)AstroAstro template
Web apps (anything with logins, dashboards or dynamic data)Next.jsNext.js template
DatabasePostgreSQL + Drizzle ORMIncluded in the Next.js template
Mobile appsReact Native + ExpoReact Native template
DocumentationFumadocs in Next.jsThis site
AuthenticationKeycloak + NextAuth, or NextAuth aloneSee Authentication
File / object storageGarage (S3-compatible)See S3 storage

Astro or Next.js?

  • If the content is mostly static and there are no user accounts, use Astro.
  • If there are logins, forms that write to a database, or per-user data, use Next.js.

These aren't strict requirements, but reach for them first so projects stay consistent:

NeedLibrary
Validation (forms, API input, env vars)Zod
Client-side data fetchingTanStack Query
StylingTailwind CSS
Datesdate-fns

On this page