Skip to content
Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

18 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Meeting Transcription Full-Stack Application

A complete web application for transcribing, summarizing, and extracting action items from meeting recordings using AWS services (Transcribe, Bedrock, S3) with FastAPI backend and Next.js frontend.

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Next.js UI    │─────▢│ FastAPI      │─────▢│  AWS Services   β”‚
β”‚   (Frontend)    β”‚      β”‚  (Backend)   β”‚      β”‚ - S3            β”‚
β”‚   Port 3000     β”‚      β”‚  Port 8000   β”‚      β”‚ - Transcribe    β”‚
β”‚                 │◀─────│              │◀─────│ - Bedrock       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“‹ Prerequisites

  • Python 3.8+
  • Node.js 18+
  • AWS Account with:
    • S3 bucket created
    • Transcribe service enabled
    • Bedrock access with Claude models enabled
    • IAM credentials configured

πŸš€ Quick Start

1. Backend Setup (FastAPI)

# Backend directory
cd backend

# Create virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install dependencies
pip install -r requirements.txt

# Set environment variables
export AWS_ACCESS_KEY_ID=aws-access-key
export AWS_SECRET_ACCESS_KEY=aws-secret-key
export AWS_BEARER_TOKEN_BEDROCK=bedrock-api-token
export S3_BUCKET_NAME=your-meeting-recordings-bucket
export AWS_REGION=us-east-1
export JWT_SECRET_KEY=your-secret-key-change-this

# (Optional) Override DB URL; by default this uses a local SQLite file
# export DATABASE_URL=postgresql+psycopg2://meetings:meetingspassword@localhost:5432/meetings

# Run the backend (local dev)
uvicorn main:app --reload --host 0.0.0.0 --port 8000

2. Frontend Setup (Next.js)

# In a new terminal, go to frontend
cd frontend

# Install additional dependencies
npm install

# Create .env.local for environment variables
cat > .env.local << EOF
NEXT_PUBLIC_API_URL=http://localhost:8000
EOF

# Run the frontend
npm run dev

3. Running Everything with Docker Compose (incl. PostgreSQL)

The repository includes a docker-compose.yml that starts:

  • FastAPI backend (meetings-backend)
  • Next.js frontend (meetings-frontend)
  • PostgreSQL database (meetings-postgres)
# From the project root
docker compose up --build

This will:

  • Expose the backend on http://localhost:8000
  • Expose the frontend on http://localhost:3000
  • Start PostgreSQL on localhost:5432

The backend is configured to use PostgreSQL via the DATABASE_URL environment variable in docker-compose.yml:

DATABASE_URL=postgresql+psycopg2://meetings:meetingspassword@db:5432/meetings

To override this (e.g. for production), create a .env file in the project root and set DATABASE_URL there; Docker Compose will pick it up automatically.

4. Connecting to PostgreSQL from a Client (Optional)

You can connect to the DB (e.g. with psql or a GUI like TablePlus/DBeaver) using:

Host:     localhost
Port:     5432
Database: meetings
User:     meetings
Password: meetingspassword

3. AWS Configuration

Create S3 Bucket

aws s3 mb s3://your-meeting-recordings-bucket --region us-east-1

Enable Bedrock (Console)

  1. Go to AWS Console β†’ Bedrock
  2. Request model access for Claude 3.5 Sonnet
  3. Wait for approval (usually instant)

IAM Policy

Create an IAM user or role with this policy:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::your-meeting-recordings-bucket/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "transcribe:StartTranscriptionJob",
        "transcribe:GetTranscriptionJob",
        "transcribe:ListTranscriptionJobs"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "bedrock:InvokeModel"
      ],
      "Resource": "*"
    }
  ]
}

πŸ“¦ Project Structure

meeting-transcription-app/
β”œβ”€β”€ backend/
β”‚   β”œβ”€β”€ main.py                 # FastAPI application
β”‚   └── requirements.txt        # Python dependencies
β”‚
└── frontend/
    β”œβ”€β”€ app/
    β”‚   β”œβ”€β”€ page.tsx           # Root redirect
    β”‚   β”œβ”€β”€ layout.tsx         # Root layout
    β”‚   β”œβ”€β”€ globals.css        # Global styles
    β”‚   β”œβ”€β”€ login/
    β”‚   β”‚   └── page.tsx       # Login page
    β”‚   β”œβ”€β”€ dashboard/
    β”‚   β”‚   └── page.tsx       # Dashboard with session cards
    β”‚   └── session/
    β”‚       └── [id]/
    β”‚           └── page.tsx   # Session detail view
    β”œβ”€β”€ lib/
    β”‚   └── api.ts             # API client
    β”œβ”€β”€ package.json
    β”œβ”€β”€ tailwind.config.js
    └── tsconfig.json

πŸ” Default Credentials

  • Username: admin
  • Password: m33t!ng5

🎯 Features

Authentication

  • JWT-based authentication
  • Secure login with bcrypt password hashing
  • Token stored in localStorage

Meeting Management

  • Upload audio files (MP3, WAV, MP4, M4A, FLAC, OGG)
  • Create titled meeting sessions
  • View all sessions as cards
  • Delete unwanted sessions
  • Session history persists

AI Processing

  • Transcription: AWS Transcribe with speaker identification
  • Summary: AI-generated meeting summary using Claude
  • Action Items: Extracted tasks and follow-ups

UI/UX

  • Modern, responsive design with Tailwind CSS
  • Real-time status updates
  • Progress indicators
  • Download transcription, summary, and action items
  • Session cards with status badges

πŸ”§ Configuration

Backend Environment Variables

S3_BUCKET_NAME=your-meeting-recordings-bucket
AWS_REGION=us-east-1
JWT_SECRET_KEY=your-super-secret-key-change-this
AWS_ACCESS_KEY_ID=your-access-key
AWS_SECRET_ACCESS_KEY=your-secret-key
DATABASE_URL=postgresql+psycopg2://meetings:meetingspassword@localhost:5432/meetings

Frontend Environment Variables

NEXT_PUBLIC_API_URL=http://localhost:8000

πŸ“ API Endpoints

Authentication

  • POST /api/auth/login - Login and get JWT token

Sessions

  • GET /api/sessions - Get all sessions
  • GET /api/sessions/{id} - Get specific session
  • POST /api/sessions - Create new session
  • POST /api/sessions/{id}/process - Check/process transcription
  • DELETE /api/sessions/{id} - Delete session

Health

  • GET /api/health - Health check

🚦 Usage Flow

  1. Login with credentials
  2. Click "New Meeting" to upload a recording
  3. Enter title and select audio file
  4. Wait for processing:
    • Upload to S3 βœ“
    • Transcribe with speaker labels βœ“
    • Generate summary with Claude βœ“
    • Extract action items βœ“
  5. View results in session detail page
  6. Download transcription, summary, or action items
  7. Delete unwanted sessions

πŸ› Troubleshooting

Backend Issues

# Check if backend is running
curl http://localhost:8000/api/health

# Check AWS credentials
aws sts get-caller-identity

# Check S3 bucket access
aws s3 ls s3://your-meeting-recordings-bucket

Frontend Issues

# Clear cache and reinstall
rm -rf node_modules package-lock.json
npm install

# Check environment variables
cat .env.local

AWS Issues

  • Ensure Bedrock model access is approved
  • Check IAM permissions
  • Verify S3 bucket exists in correct region
  • Check CloudWatch logs for Transcribe errors

πŸ”’ Security Notes

⚠️ Important for Production:

  1. Change the default JWT secret key
  2. Use environment variables for all secrets
  3. Implement proper database instead of in-memory storage
  4. Add rate limiting
  5. Use HTTPS
  6. Implement proper CORS policies
  7. Add input validation and sanitization
  8. Use secure password requirements
  9. Implement user registration and password reset

πŸ“Š Monitoring

Backend Logs

# View uvicorn logs
tail -f uvicorn.log

AWS CloudWatch

  • Monitor Transcribe job failures
  • Check Bedrock invocation metrics
  • Review S3 access logs

πŸŽ“ Development Tips

  1. Test locally first before deploying
  2. Use small audio files during development to save time
  3. Monitor AWS costs - Transcribe and Bedrock can be expensive
  4. Keep sessions list refreshed to see status updates
  5. Check browser console for frontend errors
  6. Use background tasks (Celery, etc.) for production processing

πŸ“¦ Deployment

Backend (FastAPI)

# Using Docker
docker build -t meeting-backend .
docker run -p 8000:8000 --env-file .env meeting-backend

# Using systemd service
sudo systemctl start meeting-backend

Frontend (Next.js)

# Build for production
npm run build

# Start production server
npm start

# Or deploy to Vercel
vercel deploy

🀝 Contributing

This is a Phase 1 implementation. Future enhancements could include:

  • User registration and management
  • PostgreSQL database integration
  • Real-time WebSocket updates
  • Collaborative session sharing
  • Email notifications
  • Calendar integration
  • Multiple language support
  • Custom AI prompts

πŸ“„ License

MIT License - feel free to use and modify!

πŸ†˜ Support

For issues:

  1. Check AWS service status
  2. Verify credentials and permissions
  3. Review backend logs
  4. Check browser console
  5. Test API endpoints with curl/Postman

Happy Meeting Transcribing! πŸŽ™οΈ

About

An AI application, leveraging AWS servives, to summarise audio meetings

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages