Notesutra
An AI-powered meeting notes app that transforms raw, unstructured notes into structured action items, decisions, and summaries using Gemini AI, with JWT auth, Prisma ORM, and SQLite persistence.
Overview
Notesutra is a meeting notes application that solves the post-meeting processing problem: you have a wall of raw notes and need to extract action items, key decisions, and a clean summary before the next meeting starts. You paste or type your notes, Gemini AI structures them into a standard format, and the app stores everything with full auth and per-user history.
Why it was built
Built because every BA eventually accumulates a graveyard of half-processed meeting notes. The tool was designed for personal use first, a scratchpad that does the extraction work automatically so the focus stays on facilitation, not post-processing.
AI Note Structuring
Paste raw meeting notes and Gemini AI returns a structured breakdown: a one-paragraph summary, a numbered list of action items with owners and due dates where present, and a list of key decisions made.
JWT Authentication
Full auth system with bcrypt password hashing and JWT tokens stored in httpOnly cookies. Middleware protects all note routes, and unauthenticated requests redirect to login.
Prisma + SQLite Persistence
Each note is stored with its raw input, AI-generated output, and a timestamp. Prisma handles the schema and migrations, while SQLite keeps the setup dependency-free for local development.
Tech Breakdown
The @prisma/adapter-better-sqlite3 adapter runs Prisma against a local SQLite file, zero external database setup, perfect for a single-user or small-team tool.
Stateless auth with httpOnly cookies. The token carries user id and email, validated on every protected API route via a shared verifyJWT utility.
Passwords are hashed with bcrypt before storage. The compare function is used on login, and plaintext passwords never touch the database.
The structuring prompt is designed to return JSON with summary, actionItems, and decisions keys. The server-side API route calls Gemini, parses the JSON response, and returns it to the client.
- 1
Gemini's JSON output is reliable for well-structured notes but degrades on very short or incoherent inputs. Fallback parsing handles cases where the model returns prose instead of the expected JSON shape.
- 2
SQLite file locking becomes relevant if multiple users hit the app concurrently: better-sqlite3 is synchronous, which avoids async locking issues but means the API is single-threaded per request.
Auth and storage are complete. The AI structuring flow is working end-to-end. Next: a meeting templates system (standup, sprint retro, client call), a shareable link for processed notes, and a bulk export of all notes as a single Markdown file.
Want to know more?
Happy to walk you through the details, just reach out.