The Problem
Users need a quick way to capture spoken ideas, turn them into searchable text, and extract actionable items without leaving a single interface. Manual transcription and note‑taking are slow and error‑prone, especially when the user is on the move.
What This Does
noteGPT is a Next.js app that records voice notes in the browser, uploads the audio to Convex file storage, and triggers a Whisper model (via Replicate) to produce a transcript. The transcript is summarized with a Mixtral LLM (via Together.ai) and parsed into a list of action items that are stored in Convex’s vector search for later retrieval.
Key files:
app/record/page.tsx– UI for starting/stopping a recording and submitting it.convex/whisper.ts– calls Replicate’s Whisper API, writes the transcript to Convex.convex/together.ts– sends the transcript to Together’s LLM, stores the summary and extracted tasks.convex/notes.ts– CRUD helpers that the frontend consumes through the generated API (convex/_generated/api.d.ts).
The frontend wraps the Convex client in app/ConvexClientProvider.tsx, exposing hooks used by components such as components/pages/dashboard/RecordedfileItemCard.tsx and components/pages/recording/RecordingDesktop.tsx.
How It Is Wired
Execution begins when a developer runs npm run dev. Next.js launches the server and loads app/layout.tsx, which mounts ConvexClientProvider. When a user clicks “record”, components/pages/recording/RecordingDesktop.tsx (or the mobile counterpart) invokes the browser MediaRecorder API, then calls convex/notes.ts via the generated client (api.recordNote).
convex/notes.ts stores the raw audio file in Convex file storage. A Convex mutation defined in convex/whisper.ts is automatically queued; it fetches the file, posts it to Replicate, and writes the returned transcript back to the same note record. After the transcript is saved, convex/together.ts reads it, calls the Together Mixtral endpoint, and writes both the summary and the derived action items to the note document and to Convex vector search (convex/utils.ts assists with embedding generation).
The internal import graph shows three hubs:
convex/_generated/api– imported by 3 files, no outgoing imports (instability 0).convex/utils– imported by 3 files, imports only one module (instability 0.25).components/ui/UserNav– imports 3 modules, is imported once (instability 0.75).
No circular dependencies were detected, so changes to a hub affect at most three downstream modules.
How To Use It
# Clone the repo
git clone https://github.com/moses-y/noteGPT.git
cd noteGPT
# Install dependencies
npm install
# Create a .env.local (copy .example.env) and add:
# CLERK_ISSUER_URL – from your Clerk dashboard
# REPLICATE_API_KEY – from Replicate
# TOGETHER_API_KEY – from Together.ai
# Run the dev server
npm run dev
The dev server starts the Next.js frontend and, on first run, prompts you to log into Convex and create a project. After the environment variables are set in Convex’s dashboard, the UI is usable; recordings will be stored, transcribed, summarized, and displayed on the dashboard.
Real‑World Use
A sales professional could open the web app on a laptop, dictate a meeting recap, and instantly receive a bullet‑point list of follow‑up tasks. The tasks are searchable via Convex vector search, and can be exported to a Notion page once the planned integration is added.
Code Health & Issues
- High – Missing LICENSE – no licence file at repository root; legal reuse is blocked.
- High – No test suite – 41 source files, zero test files; regressions are undetectable.
- High – No CI pipeline – no
.github/workflowsor other CI config; builds and tests are never automatically verified. - Medium – No Dependabot – only
package-lock.jsonpresent; dependencies are not auto‑updated. - Medium – Duplicated code blocks – identical 6‑line snippets appear in
app/dashboard/action-items/ais.tsx,components/pages/recording/RecordingDesktop.tsx,components/pages/recording/RecordingMobile.tsx, and generated API typings. Refactor into shared helpers. - Medium – Deep nesting – max indentation depth of 6 in the same three files makes the control flow hard to follow; early returns or extracted sub‑functions would improve readability.
The Bottom Line
noteGPT delivers a functional end‑to‑end voice‑note pipeline with modern cloud services, but it lacks the engineering hygiene (tests, CI, licence) required for production confidence. It is suitable for proof‑of‑concept work or as a foundation for a custom internal tool, provided the team adds testing, CI, and proper licensing before scaling.