--- description: Dyolink project context — stack, org types, git safety, verification alwaysApply: true --- # Dyolink overview Monorepo: `backend/` (NestJS + Prisma), `frontend/` (Next.js + next-intl), `infrastructure/` (Docker). ## Domain - **CLINIC** orgs: patients, appointments, treatment, staff. - **LAB** orgs: cases, tasks, lab workflows. - Tab access: `TAB_*_READ` / `TAB_*_EDIT` in `backend/src/common/permissions.ts`. EDIT implies READ. ## Agent behavior - Read `AGENTS.md` and file-scoped rules before large changes. - **Never commit or push** unless the user explicitly asks. - Prefer minimal diffs; reuse existing components and API patterns. - After cross-cutting changes: `backend` → `npm run build`; `frontend` → `npx tsc --noEmit`. ## i18n All user-visible strings: `frontend/messages/en.json`, `fa.json`, `nl.json` — add keys to **all three**. Dates/times/numbers: `frontend/src/lib/i18n/format.ts` + `useLocale()`. **Form date fields:** `AppDateInput` only (no native ``); wire format `YYYY-MM-DD`. **Filter selects:** `FORM_SELECT_CLASS` from `components/shared/formSelectStyles.ts` (chevron via `globals.css`). **Tables:** `components/ui/shared/Table.tsx` — use `text-start`/`text-end`/`text-center`, never physical `text-left`/`text-right`. Appointments: `ScheduleDayPicker`. Skill: `.cursor/skills/i18n-formatting/SKILL.md`. ## Treatment / appointment colors Treatment-type colors and labels: `components/shared/treatmentTypeDisplay.ts` + `catalog-type-colors.ts`. UI badges: `components/ui/treatment/TreatmentTypeBadge.tsx`.