- TypeScript 95.4%
- Python 2.6%
- JavaScript 1%
- Shell 0.6%
- Dockerfile 0.3%
|
|
||
|---|---|---|
| .gitea | ||
| apps | ||
| deploy | ||
| dev | ||
| docs/adr | ||
| infra | ||
| packages | ||
| scripts | ||
| .dockerignore | ||
| .drone.yml | ||
| .editorconfig | ||
| .gitignore | ||
| .npmrc | ||
| .nvmrc | ||
| .prettierignore | ||
| .prettierrc.json | ||
| api.sh | ||
| CLAUDE.md | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| README.md | ||
| roadmap.json | ||
| turbo.json | ||
| web.sh | ||
mrrmlabapp
Personal monorepo app with a pluggable feature-module architecture. First feature: shopping list. Later: whatever is interesting at the time.
Stack
- Monorepo: pnpm workspaces + Turborepo
- Web: Vite + React + TanStack Router
- Mobile: Expo (managed) + Expo Router
- Backend: NestJS
- UI: Tamagui (cross-platform)
- DB: PostgreSQL + Drizzle ORM
- Auth: Keycloak (OIDC)
- CI: Drone + Gitea
Structure
apps/
api/ # NestJS backend
web/ # Vite web app
mobile/ # Expo React Native app
packages/
config/ # shared tsconfig / eslint / prettier presets
shared-types/ # Zod schemas — single source of truth for API contracts
api-client/ # typed API client + TanStack Query hooks
auth/ # Keycloak OIDC (web + native)
ui/ # Tamagui components
feature-shopping-list/ # first feature module (blueprint for future ones)
Requirements
- Node 24+ (the version pinned in
.nvmrc) - pnpm 9.15.x (see
packageManagerfield inpackage.json) - git
Node itself: use fnm or nvm to install the version from .nvmrc, e.g.:
fnm install # reads .nvmrc
fnm use
Setup
1. Clone
git clone https://git.mrrm.de/admin-mrrm/mrrmlabapp.git
cd mrrmlabapp
2. Install pnpm
pnpm is the package manager for this monorepo. There are two ways to get it,
and the right one depends on your platform.
macOS / Linux / Windows (recommended: Corepack)
Corepack ships with Node 16.9+ and reads the packageManager field in
package.json so everyone automatically uses the exact same pnpm version.
corepack enable
corepack prepare pnpm@9.15.0 --activate
pnpm --version # -> 9.15.0
Termux (Android)
Termux's Node build does not include Corepack. Install pnpm globally via npm instead:
npm install -g pnpm@9.15.0
pnpm --version # -> 9.15.0
If the global install fails due to permissions, use the standalone installer:
curl -fsSL https://get.pnpm.io/install.sh | sh -
Note: keep the version in sync with the
packageManagerfield in the rootpackage.json. When that field is bumped, re-run the install command above with the new version.
3. Install dependencies
pnpm install
This installs everything for all workspace packages in one go.
4. Verify
pnpm exec turbo --version
Should print the Turborepo version without errors.
Common commands
pnpm dev # run all dev servers in parallel
pnpm build # build everything
pnpm lint # lint everything
pnpm typecheck # type-check everything
pnpm test # run tests