Skip to content

Idansss/meeting-action

Repository files navigation

MeetingActions

Turn meeting talk into shipped tasksβ€”automatically.

Every meeting β†’ Clear actions β†’ Posted to Slack β†’ In your task tool.

πŸš€ Features

  • AI Action Extraction: GPT-4 automatically identifies tasks, decisions, and owners from meeting transcripts
  • Multi-Platform Integration: Zoom, Slack, Linear, Asana, Jira
  • Real-Time Processing: Summaries and tasks created within 2 minutes of meeting end
  • Beautiful Dashboard: Track meetings, actions, and team performance
  • Flexible Billing: Free tier + Pro ($19/mo) + Team ($99/mo) with Stripe & Paystack (Africa)

πŸ› οΈ Tech Stack

  • Frontend: Next.js 14 (App Router), TypeScript, Tailwind CSS, Shadcn UI
  • Backend: Next.js API Routes
  • Database: PostgreSQL (Supabase)
  • Auth: Clerk (Google, Microsoft, Slack OAuth)
  • AI: OpenAI GPT-4 Turbo
  • Payments: Stripe + Paystack (Africa)
  • Hosting: Vercel

πŸ“¦ Setup

Prerequisites

  • Node.js 18+ and npm
  • Supabase account
  • Clerk account
  • OpenAI API key
  • Stripe account (for payments)
  • Zoom/Slack/Linear accounts (for integrations)

1. Clone & Install

cd meeting-actions
npm install

2. Environment Variables

Create .env.local in the root directory:

# App
NEXT_PUBLIC_APP_URL=http://localhost:3000

# Clerk Auth
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_...
CLERK_SECRET_KEY=sk_test_...
NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in
NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up
NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL=/dashboard
NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL=/onboarding

# Supabase
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key

# OpenAI
OPENAI_API_KEY=sk-...

# Anthropic (optional)
ANTHROPIC_API_KEY=sk-ant-...

# Zoom
ZOOM_WEBHOOK_SECRET_TOKEN=your-secret
ZOOM_CLIENT_ID=your-client-id
ZOOM_CLIENT_SECRET=your-client-secret

# Slack
SLACK_CLIENT_ID=your-client-id
SLACK_CLIENT_SECRET=your-client-secret
SLACK_SIGNING_SECRET=your-signing-secret

# Linear
LINEAR_CLIENT_ID=your-client-id
LINEAR_CLIENT_SECRET=your-client-secret

# Stripe
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_...
STRIPE_SECRET_KEY=sk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
STRIPE_PRICE_ID_PRO=price_...
STRIPE_PRICE_ID_TEAM=price_...

# Paystack (Optional - For African Markets)
PAYSTACK_SECRET_KEY=sk_test_...
PAYSTACK_PUBLIC_KEY=pk_test_...

3. Database Setup

Run the SQL schema in Supabase:

# Copy contents of lib/supabase/schema.sql
# Paste into Supabase SQL Editor
# Run the query

4. Clerk Setup

  1. Create app at clerk.com
  2. Enable Google, Microsoft OAuth providers
  3. Copy API keys to .env.local
  4. Set redirect URLs:
    • Sign-in: http://localhost:3000/sign-in
    • Sign-up: http://localhost:3000/sign-up
    • After sign-in: http://localhost:3000/dashboard

5. Zoom Setup

  1. Create app at Zoom Marketplace
  2. Enable webhooks for:
    • recording.completed
    • meeting.ended
  3. Set webhook URL: https://your-domain.com/api/webhooks/zoom
  4. Copy client ID, secret, webhook token to .env.local

6. Slack Setup

  1. Create app at Slack API
  2. Add OAuth scopes: chat:write, channels:read, groups:read
  3. Set redirect URL: http://localhost:3000/api/integrations/slack/callback
  4. Copy client ID, secret, signing secret to .env.local

7. Linear Setup

  1. Go to Linear Apps
  2. Create OAuth application
  3. Set redirect URL: http://localhost:3000/api/integrations/linear/callback
  4. Scopes: read, write
  5. Copy client ID and secret to .env.local

8. Stripe Setup

  1. Create account at Stripe
  2. Create products:
    • Pro: $19/month
    • Team: $99/month
  3. Copy price IDs to .env.local
  4. Set webhook URL: https://your-domain.com/api/webhooks/stripe
  5. Listen for events:
    • checkout.session.completed
    • customer.subscription.created
    • customer.subscription.updated
    • customer.subscription.deleted

9. Paystack Setup (Optional - For African Markets)

Why Paystack? Better conversion rates in Nigeria, Ghana, South Africa, and Kenya.

  1. Create account at Paystack
  2. Get your API keys from Settings > API Keys & Webhooks
  3. Add to .env.local:
    PAYSTACK_SECRET_KEY=sk_test_your_key_here
    PAYSTACK_PUBLIC_KEY=pk_test_your_key_here
  4. Set webhook URL: https://your-domain.com/api/webhooks/paystack
  5. Supported currencies:
    • πŸ‡³πŸ‡¬ Nigeria (NGN): ₦45,000 (Pro) / ₦235,000 (Team)
    • πŸ‡¬πŸ‡­ Ghana (GHS): GHβ‚΅120 (Pro) / GHβ‚΅625 (Team)
    • πŸ‡ΏπŸ‡¦ South Africa (ZAR): R350 (Pro) / R1,825 (Team)
    • πŸ’΅ USD: $19 (Pro) / $99 (Team)

Payment Methods: Cards, Bank Transfer, USSD, Mobile Money

10. Run Development Server

npm run dev

Open http://localhost:3000

🚒 Deployment

Vercel (Recommended)

# Install Vercel CLI
npm i -g vercel

# Deploy
vercel

# Set environment variables in Vercel dashboard
# Update webhook URLs to production domain

Environment Variables (Production)

Update these in Vercel:

  • NEXT_PUBLIC_APP_URL β†’ Your production domain
  • All webhook URLs β†’ Point to production domain
  • Use production keys for Stripe, Zoom, etc.

πŸ“– API Documentation

Webhooks

Zoom: /api/webhooks/zoom

Receives meeting recordings and transcripts. Triggered by Zoom after meeting ends.

Stripe: /api/webhooks/stripe

Handles subscription events (created, updated, canceled).

Paystack: /api/webhooks/paystack

Handles payment events (charge.success, subscription.create, subscription.disable).

Integrations

Slack OAuth: /api/integrations/slack

Start: GET /api/integrations/slack?workspace_id={id}
Callback: GET /api/integrations/slack/callback

Linear OAuth: /api/integrations/linear

Start: GET /api/integrations/linear?workspace_id={id}
Callback: GET /api/integrations/linear/callback

πŸ—οΈ Architecture

meeting-actions/
β”œβ”€β”€ app/
β”‚   β”œβ”€β”€ (auth)/
β”‚   β”‚   β”œβ”€β”€ sign-in/
β”‚   β”‚   └── sign-up/
β”‚   β”œβ”€β”€ dashboard/
β”‚   β”‚   β”œβ”€β”€ page.tsx          # Main dashboard
β”‚   β”‚   β”œβ”€β”€ integrations/     # Connect tools
β”‚   β”‚   β”œβ”€β”€ meetings/          # Meeting history
β”‚   β”‚   └── actions/           # Action items
β”‚   β”œβ”€β”€ api/
β”‚   β”‚   β”œβ”€β”€ webhooks/
β”‚   β”‚   β”‚   β”œβ”€β”€ zoom/          # Zoom webhook
β”‚   β”‚   β”‚   └── stripe/        # Stripe webhook
β”‚   β”‚   └── integrations/
β”‚   β”‚       β”œβ”€β”€ slack/         # Slack OAuth
β”‚   β”‚       └── linear/        # Linear OAuth
β”‚   └── page.tsx              # Landing page
β”œβ”€β”€ lib/
β”‚   β”œβ”€β”€ supabase/
β”‚   β”‚   β”œβ”€β”€ schema.sql        # Database schema
β”‚   β”‚   └── client.ts         # Supabase client
β”‚   β”œβ”€β”€ openai.ts             # AI extraction
β”‚   β”œβ”€β”€ stripe.ts             # Billing
β”‚   β”œβ”€β”€ types.ts              # TypeScript types
β”‚   └── config.ts             # App config
└── components/
    └── ui/                   # Shadcn components

πŸ’‘ Usage

For End Users

  1. Connect Zoom: Authorize MeetingActions to receive meeting transcripts
  2. Connect Slack: Choose channels for meeting summaries
  3. Connect Linear (optional): Auto-create tasks from action items
  4. Have meetings: MeetingActions processes automatically
  5. Review actions: Check dashboard for extracted items
  6. Update status: Mark actions as complete

For Developers

Process a Meeting Manually

import { extractActions, generateSummary } from '@/lib/openai';

const actions = await extractActions(transcript, meetingTitle);
const summary = await generateSummary(transcript, meetingTitle);

Post to Slack

const response = await fetch('/api/integrations/slack', {
  method: 'POST',
  body: JSON.stringify({
    workspace_id: 'xxx',
    channel_id: 'C12345',
    text: 'Meeting summary...',
  }),
});

🎯 Roadmap

  • Zoom integration
  • Slack integration
  • Linear integration
  • Google Meet integration
  • Asana integration
  • Jira integration
  • Microsoft Teams integration
  • Custom action types
  • AI-powered meeting insights
  • Recurring meeting patterns
  • Export to PDF/CSV

πŸ“„ License

MIT License - Build whatever you want!

🀝 Contributing

PRs welcome! Please open an issue first to discuss changes.

πŸ’¬ Support


Built with ❀️ by developers who hate losing track of follow-ups.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors