A local-first patient triage system that prioritizes privacy and PIPEDA/PHIPA compliance.
Install the following on your machine:
- Node.js (v18+):
brew install node - Python (3.9+):
brew install python@3.9 - Ollama (for local translation):
brew install ollama
-
Install Node dependencies:
cd repo npm install -
Set up Python environment for speech API:
cd apps/speech python3 -m venv venv source venv/bin/activate pip install -r requirements.txt
-
Download Ollama model (one-time):
ollama pull gemma2:2b
cd repo
npm run devRuns on http://localhost:3000
ollama serveRuns on http://localhost:11434
cd repo/apps/speech
source venv/bin/activate
python api.pyRuns on http://localhost:5001
Patient records are saved to local filesystem in:
repo/patient_records/[patient_name]_[timestamp]/
├── transcript.txt (name, symptoms, metadata)
├── photo.jpg (patient photo)
└── metadata.json (structured data)
Example folder structure:
patient_records/
├── john_doe_2026-01-10T12-30-45-123Z/
│ ├── transcript.txt
│ ├── photo.jpg
│ └── metadata.json
└── jane_smith_2026-01-10T12-35-12-456Z/
├── transcript.txt
├── photo.jpg
└── metadata.json
- All data is local: No cloud APIs, no external servers
- Whisper: Local speech-to-text (runs on your machine)
- Ollama: Local translation (runs on your machine)
- Filesystem storage: Patient records saved to local disk
- No database: Simple file-based storage for transparency
- Camera access: Only in-browser via WebRTC (no uploads)
┌─────────────────────────────────────────┐
│ Frontend (Next.js) │
│ - Patient name (type or voice) │
│ - Type or voice symptom input │
│ - Camera feed (WebRTC) │
└─────────────────────────────────────────┘
│ │
▼ ▼
┌──────────────────┐ ┌──────────────────┐
│ Python API │ │ File Storage API│
│ - Whisper │ │ - Save to disk │
│ - Ollama │ │ - Patient files │
└──────────────────┘ └──────────────────┘
This Turborepo starter is maintained by the Turborepo core team.
Run the following command:
npx create-turbo@latestThis Turborepo includes the following packages/apps:
docs: a Next.js appweb: another Next.js app@repo/ui: a stub React component library shared by bothwebanddocsapplications@repo/eslint-config:eslintconfigurations (includeseslint-config-nextandeslint-config-prettier)@repo/typescript-config:tsconfig.jsons used throughout the monorepo
Each package/app is 100% TypeScript.
This Turborepo has some additional tools already setup for you:
- TypeScript for static type checking
- ESLint for code linting
- Prettier for code formatting
To build all apps and packages, run the following command:
cd my-turborepo
# With [global `turbo`](https://turborepo.com/docs/getting-started/installation#global-installation) installed (recommended)
turbo build
# Without [global `turbo`](https://turborepo.com/docs/getting-started/installation#global-installation), use your package manager
npx turbo build
yarn dlx turbo build
pnpm exec turbo build
You can build a specific package by using a filter:
# With [global `turbo`](https://turborepo.com/docs/getting-started/installation#global-installation) installed (recommended)
turbo build --filter=docs
# Without [global `turbo`](https://turborepo.com/docs/getting-started/installation#global-installation), use your package manager
npx turbo build --filter=docs
yarn exec turbo build --filter=docs
pnpm exec turbo build --filter=docs
To develop all apps and packages, run the following command:
cd my-turborepo
# With [global `turbo`](https://turborepo.com/docs/getting-started/installation#global-installation) installed (recommended)
turbo dev
# Without [global `turbo`](https://turborepo.com/docs/getting-started/installation#global-installation), use your package manager
npx turbo dev
yarn exec turbo dev
pnpm exec turbo dev
You can develop a specific package by using a filter:
# With [global `turbo`](https://turborepo.com/docs/getting-started/installation#global-installation) installed (recommended)
turbo dev --filter=web
# Without [global `turbo`](https://turborepo.com/docs/getting-started/installation#global-installation), use your package manager
npx turbo dev --filter=web
yarn exec turbo dev --filter=web
pnpm exec turbo dev --filter=web
Tip
Vercel Remote Cache is free for all plans. Get started today at vercel.com.
Turborepo can use a technique known as Remote Caching to share cache artifacts across machines, enabling you to share build caches with your team and CI/CD pipelines.
By default, Turborepo will cache locally. To enable Remote Caching you will need an account with Vercel. If you don't have an account you can create one, then enter the following commands:
cd my-turborepo
# With [global `turbo`](https://turborepo.com/docs/getting-started/installation#global-installation) installed (recommended)
turbo login
# Without [global `turbo`](https://turborepo.com/docs/getting-started/installation#global-installation), use your package manager
npx turbo login
yarn exec turbo login
pnpm exec turbo login
This will authenticate the Turborepo CLI with your Vercel account.
Next, you can link your Turborepo to your Remote Cache by running the following command from the root of your Turborepo:
# With [global `turbo`](https://turborepo.com/docs/getting-started/installation#global-installation) installed (recommended)
turbo link
# Without [global `turbo`](https://turborepo.com/docs/getting-started/installation#global-installation), use your package manager
npx turbo link
yarn exec turbo link
pnpm exec turbo link
Learn more about the power of Turborepo: