If Metaluce saves you time, please drop a ⭐ on the repo - it genuinely helps others discover the project.
Metaluce reads any meeting transcript (Zoom, Meet, manual notes, whatever) and extracts:
- Executive summary focused on decisions, changes, and risks - not narration.
- Action items with a named owner, verbatim deadline, priority, and conditional commitments ("Tuesday if Jordan is freed up") surfaced separately.
- Risk register that flags implied risks too - single points of failure, missed dependencies, revenue at stake, regulatory exposure.
- Deferred topics ("revisit Monday", "talk offline") kept distinct from real action items so nothing gets fabricated.
- Branded PDF export with a structured action plan table, page numbers, and the full transcript on its own page.
The result feels less like a transcript summary and more like a chief of staff handed you a one-pager.
- Premium UI - hand-tuned palette, glassmorphism, Framer Motion choreography, video hero with custom buffer-aware loader, full mobile parity.
- Smart prompt engineering - the model is instructed to extract verbatim deadlines, flag conditional commitments, reassign ownership when someone leaves, and never invent owners for soft commitments.
- Polished PDF pipeline - ASCII-sanitized output, color-coded priority cells, orphan prevention, page numbers, brand header on every page.
- Type-safe end to end - shared Zod schemas between client and server via Drizzle's
$inferSelect. - Production-hardened auth - Passport.js local + Google OAuth, session fixation mitigations, CSRF-safe state.
| Layer | Stack |
|---|---|
| Frontend | React 18, TypeScript 5, Vite 7, Tailwind CSS 3, Framer Motion, shadcn/ui, Wouter |
| Backend | Node.js, Express 4, Passport.js (Google OAuth + Local), express-session |
| Database | PostgreSQL via Supabase, Drizzle ORM, drizzle-zod |
| AI | NVIDIA NIM (nvidia/nemotron-3-super-120b-a12b) via the OpenAI-compatible SDK |
| Build & Deploy | Vite, esbuild, Vercel (frontend), Render (full-stack option in render.yaml) |
| PDF & Export | jsPDF + jspdf-autotable, html2canvas |
- Node.js 20+ and npm 9+
- A PostgreSQL database (a free Supabase project works perfectly)
- An NVIDIA NIM API key from build.nvidia.com
- (Optional) Google OAuth credentials from Google Cloud Console
# 1. Clone
git clone https://github.com/sx4im/Metaluce.git
cd Metaluce
# 2. Install
npm install
# 3. Configure - copy the example and fill in your keys
cp .env.example .env
# 4. Migrate the DB
npm run db:generate
npm run db:migrate
# 5. Run
npm run devThe app boots on http://localhost:5000 with Vite middleware proxying the client.
| Command | What it does |
|---|---|
npm run dev |
Start the dev server (Express + Vite middleware) |
npm run check |
Strict TypeScript check, no emit |
npm run build |
Build client (Vite) + server (esbuild) into dist/ |
npm run start |
Run the production bundle |
npm run db:generate |
Generate a new Drizzle migration from schema changes |
npm run db:migrate |
Apply pending migrations |
All secrets are loaded from .env. The full annotated template lives in .env.example; the essentials:
DATABASE_URL=postgresql://... # Supabase or any Postgres
NVIDIA_API_KEY=nvapi-... # build.nvidia.com
SESSION_SECRET=... # 32+ char random string
GOOGLE_CLIENT_ID=... # optional - enables Google sign-in
GOOGLE_CLIENT_SECRET=...
FRONTEND_URL=http://localhost:5173
NODE_ENV=developmentGenerate a session secret with:
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"The repo ships with a render.yaml blueprint for one-click Render deploys, and a vercel.json for the static frontend.
Render (full-stack):
client/ Vite-powered React SPA
├─ pages/ Landing, AppPage, AnalysisResult, History, Auth
├─ components/ layout + shadcn/ui primitives + brand widgets
└─ hooks/ useAuth, useAnalysis, useVideoLoader, ...
server/ Express API
├─ routes.ts REST endpoints (/api/analyze, /api/analyses, ...)
├─ auth.ts Passport strategies + session wiring
├─ openai.ts NVIDIA NIM client + prompt engineering
└─ db.ts Drizzle client
shared/ Zod + Drizzle schemas shared by client & server
- Real-time meeting capture (Whisper streaming)
- Slack / Linear / Jira webhooks to push action items
- Team workspaces with role-based sharing
- Multi-language transcript support
- Self-host docker-compose recipe
Got an idea that isn't here? Open an issue.
PRs are very welcome - especially around new export formats, prompt improvements, and accessibility polish.
git checkout -b feat/your-idea
# hack hack hack
npm run check && npm run build
git commit -m "feat: your idea"
git push origin feat/your-ideaThen open a PR against main. Please run the type check and build locally before pushing.
If Metaluce made your meetings less terrible, the most helpful things you can do are:
- ⭐ Star this repo - it's the single biggest signal on GitHub.
- Share it on Twitter / LinkedIn / your team Slack.
- Open an issue with feedback or a feature you want.
Distributed under the MIT License. See LICENSE for details.