2026-06-06 00:03:51 +01:00
2026-06-06 00:03:51 +01:00
2026-06-09 03:38:06 +01:00
2026-06-06 00:03:51 +01:00
2026-06-06 00:48:39 +01:00
2026-06-06 00:03:51 +01:00
2026-06-08 04:35:22 +01:00
2026-06-06 00:48:08 +01:00

IMFestival SMS Dashboard

A web-based SMS notification system for managing festival attendees and delivering workshop reminders via Clickatell.

alt text

Architecture

Three Docker services work together:

Service Tech Role
db MariaDB 11 Persistent storage for attendees, templates, schedules, and delivery logs
web PHP 8.3 + Apache Dashboard UI and REST API
worker Python 3 + Flask SMS dispatch service; polls for due scheduled rules every 60 s

Features

  • CSV import — upload an attendee export from splash; the importer auto-detects common column names for first name, last name, email, and mobile number
  • Workshop sessions — attendees are linked to named sessions with a start time, enabling per-workshop targeting
  • SMS templates — reusable message bodies (≤ 160 chars) with {name}, {workshop}, and {workshop_time} placeholders
  • Scheduled texts — rules fire relative to a workshop start time (e.g. 30 minutes before) or at a specific datetime
  • Send now — dispatch immediately to all attendees or a single workshop group
  • Delivery log — per-recipient status tracking (sent / failed)
  • Sandbox mode — tag sends as tests so they are excluded from sent stats or cost calculations without disabling the API
  • Admin panel — configure the Clickatell API key, cost-per-SMS, and sender ID through the UI

Getting started

Prerequisites

  • Docker and Docker Compose

1. Create a .env file

Create a .env file in the project root. All three services read from it.

# MariaDB
MYSQL_ROOT_PASSWORD=changeme
MYSQL_DATABASE=imf_sms
MYSQL_USER=imf_user
MYSQL_PASSWORD=changeme
MYSQL_HOST=db

# Optional — defaults to Europe/London
TZ=Europe/London

2. Start the stack

docker compose up --build

The dashboard will be available at http://localhost:8000.

3. Configure Clickatell

Open Admin in the dashboard and enter your Clickatell API key. You can also set a cost-per-SMS and a default sender ID here.

4. Import attendees

Go to Attendees and upload a CSV export from your event management tool. The required columns are first_name (or First Name), last_name, and mobile_number (or Custom: Mobile number). email and workshop session columns are optional but recommended.

CSV column mapping

The importer accepts comma- or tab-separated files and recognises these column names (case-insensitive):

Field Accepted column names
First name first name, first_name, firstname, first
Last name last name, last_name, lastname, last
Mobile custom: mobile number, mobile_number, mobile number, mobile, phone, telephone, cell
Email email
Workshop custom: please pick one workshop… (and similar variants)

SMS placeholders

Placeholder Replaced with
{name} Recipient's first name
{workshop} Workshop name
{workshop_time} Workshop start time

The character counter in the template editor calculates length against the longest possible substitution so the 160-character limit is never misrepresented.

S
Description
A web-based SMS notification system for managing festival attendees and delivering workshop reminders via Clickatell.
https://imfestival.jrdn.dev
Readme 457 KiB
Languages
HTML 42.4%
PHP 36.1%
Python 9.7%
CSS 6.4%
JavaScript 5.2%
Other 0.2%