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/workflows or other CI config; builds and tests are never automatically verified.
  • Medium – No Dependabot – only package-lock.json present; 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.