Case Study
Case Study: Building FIKIR — A Custom Case Management Platform for FENAID
How Afro Digital designed and built FIKIR, a purpose-built case management platform for FENAID — with multi-language support, a dual-calendar system, and secure donor-fund management.
Mohammed Salih · September 9, 2026 · 12 min read
Client: Fikir Ethiopian National Association on Intellectual Disabilities (FENAID) Industry: Non-profit / Disability services Services provided: Full-stack platform design, development, and deployment Built by: Afro Digital (afrodigital.dev)
About the Client
FENAID is an indigenous, non-political, non-religious non-profit founded in 1994 by 89 parents of children with intellectual disabilities. For over three decades, the association has provided support services — including physiotherapy, special education, and financial aid — to families across Ethiopia. Its mission is captured in its own motto: "Give us the maximum degree of feasibility, the same rights as other human beings."
The Challenge
As FENAID's membership grew, the organization was managing member records, service delivery, and donor funds without a standardized digital system. In its formal invitation to Afro Digital, FENAID outlined the need for a solution that could:
- Strengthen membership management across parents and children
- Improve data accuracy and reporting
- Support efficient service delivery and organizational planning
- Provide member registration, profile management, service tracking, reporting, and secure data management in one system
Beyond the functional requirements, the platform needed to work the way FENAID's staff actually work — in Amharic, Oromo, and English, and on the Ethiopian calendar that governs daily life and record-keeping in Ethiopia, not just the Gregorian calendar most off-the-shelf software assumes.
The Solution: FIKIR
Afro Digital designed and built FIKIR, a purpose-built case management platform, from the ground up as a modern, type-safe monorepo:
- Backend: NestJS + Prisma ORM on PostgreSQL, enforcing role-based access control (RBAC) and structured business logic
- Frontend: Next.js 14 (App Router) with Tailwind CSS and Radix UI for an accessible, responsive dashboard
- Shared packages: Centralized TypeScript types and utilities (`@fikir/types`, `@fikir/utils`) keeping frontend and backend in sync
- Infrastructure: Dockerized PostgreSQL for local and deployed environments, with Prisma-managed migrations and seed data
Core Capabilities Delivered
Member Management (Parents & Children)
A structured, auditable directory tracking parents and children as linked records, each assigned a human-readable ID (`FKP-####` for parents, `FKC-####` for children). Multi-step intake forms capture demographics, disability details, financial and social background, and case-worker assignment. Every member has a full profile view with tabs for progress, services, appointments, finances, and documents — plus lifecycle states (Active, Under Review, Graduated, Transferred, etc.) that mirror how FENAID actually tracks its beneficiaries.
Financial Management (Donations & Fund Allocations)
A complete pipeline from donation intake to disbursement: donations can be general or restricted to a specific child or service; funds are then allocated to individual families, tracked through `ALLOCATED → PARTIALLY_DISBURSED → DISBURSED` status, and closed out with a parent acknowledgment step (including receipt uploads). Automated notifications alert staff to large donations or completed disbursements.
Service Delivery & Assignment Tracking
Services such as physiotherapy, special education, and financial aid are modeled as a catalog. Assignments track start/end dates, frequency, and delivery method, with built-in validation to ensure services are matched to the right recipient type (parent vs. child).
Appointments & Attendance
A dual calendar-and-list scheduling interface lets staff book therapy sessions, home visits, and workshops, with support for recurring appointments (e.g., a weekly session with an `UNTIL` end date). Appointments move through a clear lifecycle — Scheduled, Completed, Cancelled, No-Show — and attendance is logged per participant, so a single session can independently record whether the parent and the child each showed up.
Progress Tracking (Milestones, Goals & Case Notes)
Case workers log chronological progress notes after each session, track developmental milestones (e.g., "Walking," "First Words") through a Not Started → In Progress → Achieved pipeline, and set granular goals that auto-timestamp the moment they're marked achieved. Every note or update automatically notifies the assigned staff member and admins, keeping oversight in the loop without extra manual reporting.
Document Management
A secure, per-beneficiary document repository stores IDs, medical reports, and other case files, each tagged with a category and an optional expiry date. Every upload and deletion is written to the audit log with before/after state, and document creation is restricted to Case Workers and Super Admins, while deletion is Super-Admin-only.
Automated Notifications & Daily Health Checks
A scheduled job runs every morning to proactively flag things staff might otherwise miss: children with no progress note in 30+ days, service assignments expiring within a week, documents (like ID renewals) expiring within a week, and reminders for the next day's appointments — each routed as its own notification type so nothing falls through the cracks.
Dual-Calendar System (Gregorian ⇄ Ethiopian)
One of the platform's most distinctive engineering pieces: every date is stored as a standard ISO Gregorian timestamp in the database, but staff can view and enter dates in the 13-month Ethiopian calendar throughout the entire application. A custom conversion library (built on Julian Day Number calculations) handles the translation — including the short 13th month, Pagume — with the preference persisted per system and cached locally to avoid UI flicker.
Multi-Language Interface
Full interface support for English, Amharic, and Oromo, built on a custom React-based localization provider with cookie-persisted preferences and namespaced translation dictionaries — covering everything from navigation labels to enum values (e.g., gender, disability type) shown in generated reports.
Data Query & Reporting Engine
A three-panel query builder (filters → results → saved queries) lets administrators construct multi-dimensional queries across children, parents, or parent-child pairs — filtering by demographics, location, service history, and financial status simultaneously. Queries can be saved and shared org-wide, results can be visualized as charts, and every export (up to 5,000 records) is logged with the exact filters, format, and record count used — building a durable audit trail of who accessed what data and why. A built-in anonymization toggle masks names and IDs for privacy-compliant reporting, and is automatically enforced for Viewer-role staff who lack explicit permission to export identifiable data.
Client-Side Export Engine
A unified export system generating PDF, CSV, Excel, and Word documents directly in the browser — no server-side document libraries required. Excel and Word exports use Office-compatible XML templating for native-quality formatting, and CSV exports include UTF-8 BOM handling to ensure Amharic and Oromo characters render correctly when opened in Excel.
Authentication, Session Security & RBAC
Every login issues a JWT tied to a database-backed session record, so sessions can be individually revoked — by an admin shutting down a compromised account, or by a staff member logging out a lost device. Every authenticated request re-validates that the account is still active and the session hasn't been revoked or expired. Password security includes forced resets for new/reset accounts and a 3-password reuse history check. On top of three staff roles (`SUPER_ADMIN`, `CASE_WORKER`, `VIEWER`), a module-based permissions matrix lets Super Admins independently set Full/Read-Only/No-Access per module (Finance, Children, Reports, Audit Logs, etc.) — enforced identically on the backend guards and the frontend route middleware, so restrictions can't be bypassed by navigating directly to a URL. Every sensitive action — logins, record creation, edits, deletions, permission changes, and system setting changes — is captured in an immutable audit log with actor, entity, and IP address.
Global Search & Self-Service Account Tools
A unified search bar lets staff find any parent or child instantly by name, ID, phone, or national ID, with results distinguishing record type and status at a glance. Every staff member also gets a self-service settings area to manage their own profile, change their password, and review or terminate their own active sessions — reducing routine account-support requests to the admin team.
Technical Highlights
| Area | Approach |
|---|---|
| Architecture | pnpm monorepo with shared, type-safe contracts (`@fikir/types`, `@fikir/utils`) between frontend and backend |
| Data model | Prisma-managed PostgreSQL schema covering Staff, Parent, Child, Services, Donations, Fund Allocations, Appointments, Progress Notes, Documents, Saved Queries, and Audit/Export logs |
| Data integrity | Single source of truth for dates (Gregorian in the DB), presentation-layer localization; denormalized name fields with B-Tree indexes for fast search at scale |
| Security | Session-backed JWT auth with individual session revocation, module-level RBAC enforced on both API and route middleware, password-reuse protection, full immutable audit trail |
| Automation | Scheduled daily jobs surfacing overdue case notes, expiring services/documents, and next-day appointment reminders — without manual staff monitoring |
| Reporting | Multi-entity query engine with saved/shared queries, chart visualizations, and privacy-aware export logging capped at 5,000 records per export |
| Accessibility | Radix UI primitives underpinning all interactive components (WCAG-conscious focus states, keyboard navigation) |
| Data portability | Native-format exports (PDF/CSV/XLS/DOCX) generated entirely client-side |
Why It Matters
Off-the-shelf CRM or membership software doesn't speak Amharic or Oromo, doesn't understand the Ethiopian calendar, and isn't built around the specific realities of donor-funded disability services — restricted donations, staff-mediated fund disbursement, and case-worker-based service delivery. By building FIKIR from the ground up, Afro Digital gave FENAID a system that fits its actual operations rather than forcing the organization to adapt to generic software, while still meeting modern standards for security, auditability, and data reporting.
Written by
AfroDigital · Case Study
Keep reading
Want help applying this to your business?
We turn practical insight into working software.
