Getting Started → Introduction
Introduction to OneTALA
OneTALA is an open-core, offline-first digital platform built and maintained by
Seriba Technology, a Nigerian software company specialising in cloud-native
infrastructure for health, humanitarian, and logistics operations. OneTALA covers public health
campaigns starting with Seasonal Malaria Chemoprevention (SMC) and extending to Vitamin A,
bednet distribution, and routine immunisation.
Open Core Licence: The platform is released under Apache 2.0. You can deploy,
modify, and redistribute it freely. Managed hosting and enterprise features are available as paid services.
What OneTALA covers
- Geo hierarchy management (7 configurable levels)
- User, role, and permission management
- Campaign setup and microplanning
- Training attendance tracking
- Workforce deployment and team assignment
- Beneficiary registration and service delivery (mobile, offline-first)
- Household and child-level tracking with unique IDs
- Cycle-based treatment and longitudinal cohort tracking
- Stock and commodity management (waybill system)
- Supervision and field monitoring
- Real-time dashboards and report exports
- Audit trails and compliance logs
Architecture overview
OneTALA is a two-component system:
🌐
Web Platform
Laravel + Vue.js. Used by admins, programme managers, warehouse officers, and data teams. Handles configuration, planning, oversight, and reporting.
📱
Mobile App
Flutter (Android). Used by CDDs, trainers, supervisors in the field. Offline-first with background sync via SQS queue.
Technology stack
Backend APILaravel 11 (PHP)REST API, JWT auth, Laravel Horizon queues
DatabasePostgreSQL 15+PostGIS extension for geo features
Cache / QueueRedisSession cache + Laravel Horizon queue driver
MobileFlutter 3 (Dart)Android-first, SQLite offline storage
Web FrontendVue.js 3Inertia.js or API-driven SPA
File storageAWS S3Photos, exports, APK hosting
EmailAWS SESNotifications and alerts
Getting Started → Installation
Installation
Requires: PHP 8.2+, PostgreSQL 15+, Redis, Node.js 18+
Prerequisites: You need PHP 8.2+, Composer, PostgreSQL, Redis, and Node.js 18+ installed on your server or local machine.
1. Clone the repository
git clone https://github.com/campaignos/platform.git
cd platform
2. Install PHP dependencies
composer install --no-dev --optimize-autoloader
3. Configure environment
cp .env.example .env
php artisan key:generate
Edit .env with your database, Redis, and AWS credentials. See the Configuration page for all variables.
4. Run database migrations
php artisan migrate --seed
5. Install frontend assets
npm install && npm run build
6. Start the application
# Development
php artisan serve
# Production (use Nginx + PHP-FPM or Docker)
php artisan horizon # Start queue worker in separate terminal
The platform will be available at http://localhost:8000. Default admin credentials are in your database/seeders/AdminSeeder.php.
Production deployments: Always use HTTPS, set APP_ENV=production and APP_DEBUG=false, and store secrets in environment variables or AWS SSM — never commit credentials to Git.
Core Concepts → Offline Sync
Offline Sync Architecture
Critical for field deployments in low-connectivity environments
OneTALA is designed around the assumption that field workers will operate in areas with no internet connectivity for extended periods. The sync engine handles this transparently.
How it works
1
Download — Before field work, the mobile app downloads the CDD's assigned area: households, children, stock balance, and forms.
2
Offline operation — All registrations, doses, stock movements, and supervision forms are saved to encrypted local SQLite with a sync_status: pending flag.
3
Queue push — When connectivity is detected, the app pushes pending records to SQS as JSON payloads.
4
Server processing — Laravel Horizon workers consume the SQS queue, validate, deduplicate, and write records to PostgreSQL.
5
Acknowledgement — The server returns confirmation; the app marks records as sync_status: synced and shows a success indicator.
Conflict resolution rules
Dose administrationAppend-only — each dose record is immutable; duplicates detected by child_id + cycle + date
Stock movementsAppend-only with server-side balance recalculation
Household registrationLast-write-wins with supervisor review flag for conflicts
Supervision formsAppend-only — each submission creates a new record
User profile editsServer timestamp wins; conflict logged for audit
Core Concepts → Licence Keys
Licence Key System
Standard and Enterprise tier deployments require a licence key issued by Seriba Technology (OneTALA).
The key is validated on startup and periodically during operation. Community (self-hosted, open source)
deployments do not require a key.
How it works
- You purchase a licence and receive a key by email (e.g.
CAMP-STD-2025-XXXX-XXXX)
- Add it to your
.env: CAMPAIGNOS_LICENCE_KEY=CAMP-STD-2025-XXXX-XXXX
- On startup, the platform calls
https://licence.campaignos.com/v1/validate
- The API returns your tier, limits (beneficiary cap, user cap), and expiry date
- The platform enforces limits in real-time. At 80% and 95% usage, admins receive alerts
- At 100% or on expiry, the platform enters read-only mode — no data loss
Community licence: Set CAMPAIGNOS_LICENCE_KEY=COMMUNITY to disable licence enforcement entirely. No limits are applied.
Licence API reference
POST https://licence.campaignos.com/v1/validate
Content-Type: application/json
{
"key": "CAMP-STD-2025-XXXX-XXXX",
"domain": "kano.campaignos.com",
"version": "1.0.4"
}
// Response
{
"valid": true,
"tier": "standard",
"limits": {
"beneficiaries": 5000000,
"users": 7000
},
"usage": {
"beneficiaries": 2341089,
"users": 312
},
"expires_at": "2026-06-01",
"renewal_url": "https://campaignos.com/pages/pricing.html"
}
API Reference → Authentication
API Authentication
OneTALA uses JWT (JSON Web Token) bearer token authentication. All API endpoints require a valid token except the login endpoint.
Obtain a token
POST /api/v1/auth/login
Content-Type: application/json
{
"username": "admin@kano.gov.ng",
"password": "your-password"
}
// Response
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expires_in": 86400,
"user": {
"id": 1,
"name": "Aminu Bello",
"role": "state_coordinator",
"geo_unit_id": 42
}
}
Use the token
GET /api/v1/beneficiaries
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Accept: application/json
Token refresh
POST /api/v1/auth/refresh
Authorization: Bearer {current_token}
API Reference → Beneficiary endpoints
Beneficiary API
geo_unit_id Filter by geo unit ID
page Pagination (default 1)
per_page Per page (default 50, max 200)
Deployment → AWS (recommended)
Deploying to AWS
Recommended region: af-south-1 (Cape Town) — lowest latency for Nigeria and West Africa, and keeps your data on the African continent.
The recommended production stack uses ECS Fargate (no servers to manage), RDS PostgreSQL Multi-AZ, ElastiCache Redis, and S3 + CloudFront. See the full deployment guide in the repository at DEPLOYMENT.md.
Quick reference — estimated costs (af-south-1)
RDS PostgreSQLdb.t3.large Multi-AZ~$185
RDS Read Replicadb.t3.medium~$92
ECS FargateAPI + workers~$108
ElastiCache Rediscache.t3.medium~$52
S3 + CloudFrontStorage + CDN~$35
ALB + WAF + DNSNetworking~$32
SQS + SNS + SESMessaging~$18
Total~$522/month
With Reserved Instances (1yr), reduce RDS and ElastiCache costs by ~35%, bringing total to ~$420/month.
Built and maintained by Seriba Technology
OneTALA is a product of
Seriba Technology, a Nigerian software company (founded 2025) building secure, cloud-native infrastructure for health, humanitarian, and logistics programmes. For managed hosting, enterprise support, or implementation partnership, contact
info@seribatech.com or visit
seribatech.com.