Note taking app with sync to a wiki / md
Lets a photo of a book page fill in the note text instead of typing it out. OCR runs entirely client-side (tesseract.js, dynamically imported so it doesn't bloat the main bundle) - no server changes, no API keys, and the photo never leaves the device. Recognized text is appended into the textarea for the user to review/edit before saving. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C3DGg1pvmvf81zXs4pk1J7 |
||
|---|---|---|
| client | ||
| server | ||
| shared | ||
| .env.example | ||
| .eslintrc.json | ||
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
Notes
A small PWA for jotting down short notes while reading — e.g. an interesting sentence from a book. Each note is tagged with a book/topic (existing or new) and can optionally include a page number. Notes are saved as markdown directly into pages of a Nextcloud Collective, one page per book/topic, nested under a parent page (default: "Reading Notes"). A note's text can be typed by hand or filled in by scanning a photo of the page (on-device OCR via tesseract.js — no image or text ever leaves the device for this step).
Stack
npm workspaces monorepo:
shared/— TypeScript types & Zod schemas shared by client and serverserver/— Express API: session auth, and a Nextcloud integration that talks to both the Collectives OCS API (page metadata/creation) and WebDAV (page content read/append)client/— React + Vite PWA
Setup
- Copy
.env.exampleto.envand fill in:SESSION_SECRET,ADMIN_USERNAME,ADMIN_PASSWORD— the app's own loginNEXTCLOUD_URL,NEXTCLOUD_USERNAME,NEXTCLOUD_APP_PASSWORD— generate an app password under Nextcloud Settings → Security → App passwordsCOLLECTIVE_NAME— the exact name of an existing collective the user has access to
- Install dependencies:
npm install - Run in dev mode:
npm run dev(client onhttp://localhost:5173, proxies/apito the server on port 3000)
Build & run
npm run build
npm run start
Docker
docker compose up --build
Reads secrets from .env in the project root (same variables as above).