A Frappe custom app for managing event invitations with:
- Personalized card generation (Pillow image composition)
- Unique QR codes per guest
- WhatsApp delivery (Fonnte / WaBlas / Custom)
- Guest download page
- Gate check-in QR scanner
# 1. Navigate to your bench
cd /path/to/frappe-bench
# 2. Get the app
bench get-app event_manager /path/to/event_manager
# OR if hosted on git:
# bench get-app event_manager https://github.com/yourorg/event_manager
# 3. Install Python dependencies
cd apps/event_manager
pip install -r requirements.txt
# 4. Install on your site
bench --site yoursite.com install-app event_manager
# 5. Run migrations
bench --site yoursite.com migrate
# 6. Build assets
bench build --app event_manager
# 7. Restart
bench restartGo to: Settings > Event Manager Settings
- WhatsApp Provider: Choose Fonnte (recommended for Tanzania)
- WhatsApp API URL:
https://api.fonnte.com/send - WhatsApp API Token: Your Fonnte token
- Sender Label: e.g.
MN Printing - Base URL: Your site URL e.g.
https://yourdomain.com - Name Color:
#8B6914(gold — matches most designs) - Card Type Color:
#C8960C - Name Font Size:
36(adjust based on your card design)
- Register at https://fonnte.com
- Connect your WhatsApp number
- Copy your API token to settings
- Go to Event Manager > Event > New
- Fill in event details (name, date, time, venue, dress code, contacts)
- Upload your Canva card design as PNG/JPG
- Add guests in the Guest table (name, phone, card type)
- Save
- Click Actions > Generate All Cards
- System overlays each guest's name, card type, and unique QR code
- Cards saved as images in Frappe files
- Click Actions > Send All WhatsApp
- Sends card image + Swahili text message to each guest
- Message includes download link, event details, contacts
Each guest gets a unique link:
https://yourdomain.com/invitee/download/event-card/123456
Page shows:
- Their personalized card
- Download button
- View Location button
- Event details
Staff opens on mobile:
https://yourdomain.com/gate-checkin
- Scans QR with phone camera
- ✅ Valid — new entry, shows guest name & card type
⚠️ Already Used — duplicate scan- ❌ Invalid — not registered
The system auto-detects overlay positions as percentages of the card dimensions:
- Guest Name: 58% from left, 53% from top
- Card Type: below name
- QR Code: 68% from left, 72% from top, 20% of card width
For different card designs, you may need to adjust these values in:
event_manager/utils/card_composer.py
Look for the # --- Positioning --- section and adjust the percentages.
event_manager/
├── event_manager/
│ ├── doctype/
│ │ ├── event_manager_settings/ ← Global settings (Single)
│ │ ├── event/ ← Event doctype
│ │ └── event_guest/ ← Guest child table
│ ├── utils/
│ │ ├── card_composer.py ← Pillow image composition
│ │ ├── qr_generator.py ← QR code generation
│ │ └── whatsapp_sender.py ← WhatsApp API integration
│ └── www/
│ ├── invitee/download/event-card/ ← Guest download page
│ └── gate-checkin/ ← Gate scanner page
├── requirements.txt
└── setup.py