Skip to content

dhruvil-codes/minutz

Repository files navigation

Minutz

Minutz

AI meeting intelligence that works invisibly.

No bots. No notifications. No one knows you're recording.

FastAPI Next.js OpenAI Supabase Chrome MV3

Install Extension · Live Demo · Architecture


The Problem

Every meeting recorder out there — Fireflies, Otter, Grain — joins your call as a visible bot. Everyone sees it. People speak differently. In sensitive meetings, it's simply not appropriate.

Minutz is different. It runs entirely inside your browser. No bot joins. No notification is sent. You hit record, have your meeting naturally, and structured intelligence is waiting for you when you're done.


What You Get

After every recorded meeting, Minutz automatically produces:

  • 📝 Full transcript — word for word, everything said
  • Executive summary — one paragraph, the key points
  • Action items — contextually inferred, not keyword-matched
  • 🎯 Decisions — what was committed to or agreed upon
  • 🔔 Follow-ups — open questions and promised deliverables
  • 📊 Sentiment + urgency — tone and priority signals

How It Works

You speak  →  Chrome extension captures audio invisibly
           →  10-second chunks upload to FastAPI in background
           →  You stop recording
           →  ffmpeg merges all chunks into one clean audio file
           →  OpenAI Whisper transcribes the full recording
           →  GPT-4o extracts structured intelligence
           →  Dashboard shows everything, ready in ~60 seconds

The extension injects directly into the Google Meet page, intercepting WebRTC audio streams before Meet can mute them. This is why it works when tab capture doesn't.


🔌 Installing the Extension (not yet on Chrome Web Store)

The extension is not published on the Chrome Web Store yet. You need to install it manually in Developer Mode — it takes 60 seconds.

Step 1 — Download or clone this repository

git clone https://github.com/dhruvil-codes/minutz.git

Step 2 — Open Chrome and go to:

chrome://extensions

Step 3 — Enable Developer mode using the toggle in the top-right corner

Step 4 — Click "Load unpacked"

Step 5 — Select the /extension folder from this repository

Step 6 — The Minutz ⚡ icon will appear in your Chrome toolbar. Pin it for easy access.

⚠️ Every time you update the extension files, go back to chrome://extensions and click the refresh icon (↺) on the Minutz card to reload it.


Stack

Layer Technology
Chrome Extension MV3, content scripts, Web Audio API, WebRTC interception
Backend Python FastAPI, OpenAI Whisper, GPT-4o, ffmpeg
Dashboard Next.js 16, React 19, Tailwind CSS v4, shadcn/ui
Database Supabase (PostgreSQL)
Deployment Render (backend), Vercel (dashboard)

Project Structure

minutz/
├── extension/          # Chrome MV3 extension
│   ├── manifest.json
│   ├── background.js   # Service worker, chunk upload
│   ├── meet-inject.js  # WebRTC audio interception (world: MAIN)
│   ├── meet-capture.js # Isolated world bridge
│   ├── popup.html/js   # Extension popup UI
│   └── offscreen.js    # Offscreen audio document
│
├── backend/            # FastAPI backend
│   ├── main.py         # All endpoints
│   ├── requirements.txt
│   └── .env.example
│
└── dashboard/          # Next.js dashboard
    ├── app/
    ├── components/
    └── .env.example

Getting Started

Prerequisites

  • Python 3.10+
  • Node.js 18+
  • Chrome browser
  • Supabase project
  • OpenAI API key

1. Backend

cd backend
python -m venv .venv

# Windows
.venv\Scripts\activate

# macOS / Linux
source .venv/bin/activate

pip install -r requirements.txt

Copy the example env and fill in your keys:

cp .env.example .env
OPENAI_API_KEY=sk-...
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_KEY=your-service-role-key
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...
SLACK_BOT_TOKEN=xoxb-...
SLACK_CHANNEL_ID=C0XXXXXXXXX

Start the server:

uvicorn main:app --reload --port 8001

2. Dashboard

cd dashboard
npm install

Create dashboard/.env.local:

NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
npm run dev
# Runs at http://localhost:3000

3. Chrome Extension

Follow the manual install steps above.

Make sure the backend URL in background.js points to your running backend — either http://localhost:8001 for local dev or your Render deployment URL for production.


API Reference

Method Endpoint Description
GET /health Health check
POST /upload-chunk Upload audio chunk from extension
POST /finalize/{session_id} Merge chunks, transcribe, summarize
POST /summarize Summarize a transcript directly
GET /meetings List all meetings
GET /meeting/{id} Full meeting detail
GET /meeting/{id}/status Processing status
POST /send-to-slack Post summary to Slack

Intelligence Modes

Minutz tunes the GPT-4o prompt based on meeting type:

Mode Best for
general All-purpose meetings, standups, team calls
sales Sales calls, demos, discovery sessions
pm Sprint planning, retros, product reviews
financial Earnings calls, budget reviews, investor meetings

Database Setup

The backend expects three Supabase tables: meetings, transcripts, and summaries.

Run the migrations in supabase/migrations/ to set up the schema and apply hardened RLS policies.

Also enable leaked password protection in your Supabase dashboard under Auth → Password Security — this cannot be set via SQL migrations.


Environment Variables

Backend (backend/.env)

Variable Description
OPENAI_API_KEY OpenAI API key for Whisper + GPT-4o
SUPABASE_URL Supabase project URL
SUPABASE_KEY Supabase service role key
SLACK_WEBHOOK_URL Incoming webhook URL
SLACK_BOT_TOKEN Slack bot token
SLACK_CHANNEL_ID Target Slack channel ID

Dashboard (dashboard/.env.local)

Variable Description
NEXT_PUBLIC_SUPABASE_URL Supabase project URL
NEXT_PUBLIC_SUPABASE_ANON_KEY Supabase anon key

Roadmap

  • Desktop app for Zoom, Teams, Webex (system audio capture — no browser needed)
  • Speaker diarization (who said what)
  • Real-time live transcript
  • Notion integration
  • HubSpot + Jira sync
  • Action item tracking with due dates and completion status
  • Search across all meetings
  • Chrome Web Store publish

Built With


Built for the Outskill × OpenAI Hackathon · May 2026

Made by Dhruvil Mistry

About

Stop taking notes. Start being present. Record any meeting silently — full transcript, action items, and decisions in 60 seconds.

Resources

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors