# NoteFlow

NoteFlow is an intelligent meeting notetaker: local-first audio capture, navigable recall, and evidence-linked summaries. It uses a gRPC API for bidirectional audio streaming and transcription.

## What's in this repo

- Python backend (gRPC server + domain services): `src/noteflow/`
- Tauri + React desktop client (Vite): `client/` (git submodule)

## Pulling the client submodule on another device

If you clone the repo without submodules, initialize them after cloning:

```bash
git submodule update --init --recursive
```

If you already have the repo and want the latest submodule commit:

```bash
git submodule sync --recursive
git submodule update --init --recursive
```

You can also clone everything in one step:

```bash
git clone --recurse-submodules <YOUR_GIT_URL>
```

## Prerequisites

- Python 3.12+
- Node.js 18+ (for the Tauri/React client)
- Rust toolchain (only if running the Tauri desktop app)
- Docker (optional, for containerized dev)

## Local development

### 1) Backend server

```bash
python -m pip install -e ".[dev]"
python -m noteflow.grpc.server
```

Optional: run with autoreload (watches `src/` and `alembic.ini`):

```bash
python scripts/dev_watch_server.py
```

By default the server listens on `localhost:50051`.

If you want PostgreSQL persistence, set `NOTEFLOW_DATABASE_URL` in your environment or `.env` (see `example.env`).

### 2) Tauri + React client

```bash
cd client
npm install

# Web (Vite dev server)
npm run dev

# Desktop (Tauri dev)
npm run tauri dev
```

The Tauri desktop app requires a working Rust toolchain.

## Container-based development

The repository includes a `compose.yaml` with a server container (and a commented-out Postgres service).

### Option A: Run the server in Docker, clients locally

1) Create a `.env` file from `example.env` and set any needed settings.
2) Start the server container:

```bash
docker compose up -d server
```

The server will expose `50051` on the host; point your client at `localhost:50051`.

### Option B: Enable PostgreSQL in Docker

`compose.yaml` includes a commented `db` service using `pgvector/pgvector:pg15`. To use it:

1) Uncomment the `db` service and `depends_on`/`environment` lines in `compose.yaml`.
2) Set `NOTEFLOW_DATABASE_URL` to the container URL (example):

```
postgresql+asyncpg://noteflow:noteflow@db:5432/noteflow
```

3) Start services:

```bash
docker compose up -d
```

## Common commands

```bash
# Backend
pytest
pytest -m "not integration"
ruff check .
mypy src/noteflow

# Client (from client/)
npm run lint
npm run format
npm run test
```

## Configuration

Runtime settings are read from `.env` and `NOTEFLOW_` environment variables. See `src/noteflow/config/settings.py` and `example.env`.
