A self-hosted meeting recorder that works with Zoom, Microsoft Teams, and Google Meet.
┌─────────────────────────────────────────────────────────────────┐
│ Aramis │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Web App │ │ Bot Worker │ │ Storage │ │
│ │ (Next.js) │────▶│ (Playwright)│────▶│ (MinIO) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │ │ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ PostgreSQL │ │ Redis │ │
│ │ (Database) │ │ (Queue) │ │
│ └──────────────┘ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
- Multi-Platform Support: Record meetings from Zoom, Microsoft Teams, and Google Meet
- Automatic Transcription: AI-powered transcription with speaker identification
- Smart Summaries: Get AI-generated meeting summaries and action items
- Self-Hosted: Keep your data private with full control
- API-First: RESTful API for integration with your tools
- Scalable: Horizontal scaling of bot workers for concurrent recordings
- Frontend: Next.js 14, React, Tailwind CSS
- Backend: Next.js API Routes, Prisma ORM
- Bot Worker: Node.js, Playwright
- Database: PostgreSQL
- Queue: Redis + BullMQ
- Storage: S3-compatible (MinIO for local dev)
- Node.js 20+
- pnpm 9+
- Docker & Docker Compose
- Clone the repository:
git clone https://github.com/your-org/aramis.git
cd aramis- Install dependencies:
pnpm install- Start infrastructure services:
docker-compose up -d postgres redis minio- Set up environment variables:
cp .env.example .env
# Edit .env with your settings- Initialize the database:
pnpm db:push- Start development servers:
pnpm devThe web app will be available at http://localhost:3000.
# Build and start all services
docker-compose --profile production up -daramis/
├── apps/
│ ├── web/ # Next.js web application
│ │ ├── src/
│ │ │ ├── app/ # App router pages
│ │ │ ├── components/ # React components
│ │ │ └── lib/ # Utilities
│ │ └── Dockerfile
│ │
│ └── bot-worker/ # Meeting bot service
│ ├── src/
│ │ ├── bots/ # Platform-specific bots
│ │ ├── lib/ # Utilities
│ │ └── index.ts # Worker entry point
│ └── Dockerfile
│
├── packages/
│ ├── database/ # Prisma schema & client
│ └── shared/ # Shared types & utilities
│
├── docker-compose.yml
└── README.md
POST /api/meetings
Content-Type: application/json
{
"title": "My Meeting",
"meetingUrl": "https://zoom.us/j/123456789"
}GET /api/meetingsGET /api/meetings/:id| Variable | Description | Default |
|---|---|---|
DATABASE_URL |
PostgreSQL connection string | - |
REDIS_URL |
Redis connection string | redis://localhost:6379 |
S3_ENDPOINT |
S3-compatible storage endpoint | - |
S3_ACCESS_KEY |
S3 access key | - |
S3_SECRET_KEY |
S3 secret key | - |
S3_BUCKET |
S3 bucket name | recordings |
BOT_NAME |
Name displayed for the bot | Aramis Recorder |
DEEPGRAM_API_KEY |
Deepgram API key for transcription | - |
| Variable | Description | Default |
|---|---|---|
BOT_CONCURRENCY |
Max concurrent recordings per worker | 2 |
LOG_LEVEL |
Logging level (debug, info, warn, error) | info |
- User submits a meeting URL through the web dashboard or API
- System detects the platform (Zoom, Teams, or Meet) from the URL
- A job is queued in Redis for the bot worker
- Bot worker picks up the job and launches a headless browser
- Bot joins the meeting as a participant with the configured name
- Recording starts using browser media capture
- When meeting ends, recording is saved to S3
- Optional: Audio is sent for transcription
- Authentication: Some meetings may require authentication. Guest access must be enabled.
- Bot Detection: Platforms may detect automated browsers. The bot uses stealth techniques but cannot guarantee 100% success.
- Recording Quality: Quality depends on network conditions and meeting settings.
- Meeting Passwords: Currently not supported. Meetings must allow guests without passwords.
- Calendar integration (Google Calendar, Outlook)
- Scheduled recordings
- Real-time transcription streaming
- Speaker diarization
- Meeting analytics dashboard
- Webhook notifications
- Multi-language support
Contributions are welcome! Please read our contributing guidelines before submitting PRs.
MIT License - see LICENSE for details.