Builds

Last updated: 2026-08-14

56 projects from a portfolio of more than sixty AI and data systems: production platforms running in United Nations operations, applied prototypes that tested a specific question, and focused tools built to solve one problem well. On some Shahzad Asghar wrote the code, on others he set product direction for a team, and on several his contribution was the governance that made deployment possible. Each entry states what the system is, the problem it addresses, and the technology behind it. Source code is available on request.

Which seat I was in

The role changes from project to project, and that variation is the point. On some of these I wrote the code myself. On others I set the product direction and a team built it. On several my contribution was the governance work that made deployment possible at all: the risk classification, the data protection position, the human oversight design, and the signature that accepted the consequence. A few never left my own machine, which is also an answer.

I keep that distinction visible because the two familiar profiles each miss something. An engineer who has never had to defend a system to a protection officer builds things that cannot be deployed in the environments that need them. An executive who has only ever read a status report cannot tell a two-week fix from a two-quarter one, or notice when a convincing demonstration is hiding the part that does not work.

What this catalogue records is the range: more than sixty AI and data systems seen from every seat at some stage of their life, in the three dimensions that decide whether they survive contact with reality. The technology that has to work in the field, the governance that decides whether it is allowed to run, and the scaling problem that only appears once real users arrive. Leadership in this field is not a title held above the work. It is knowing, from having done it, what each of those three will cost you.

Production systems (14)

Career Platform for Refugees

A production FastAPI platform that aggregates national and international organisation vacancies into one searchable index, then runs credit-metered AI career tools against them.

Refugees applying for international posts track vacancies across hundreds of separate employer portals, then write applications against screening processes they cannot see. The platform closes both gaps. A scheduled scraper consolidates listings into a single index. A resume-to-vacancy matcher ranks fit using local embeddings, BM25 and reciprocal rank fusion, with optional cross-encoder reranking. Around that sit nine metered tools covering resume audit, resume building, cover letters, interview preparation, mock interviews, LinkedIn optimisation, skills gap analysis and salary coaching, with Stripe billing and transactional email across twenty templates.

Technology. Python, FastAPI, SQLAlchemy, Jinja2, Vue 3, Bootstrap 5, Microsoft SQL Server across 54 tables, APScheduler, sentence-transformers, rank-bm25, PyTorch on CUDA, Ollama running nomic-embed-text and gemma3, OpenAI GPT-4o and GPT-5 family, Anthropic API, Stripe, Resend.

UN Jobs Matching System

A FastAPI service that scrapes United Nations vacancy listings, parses candidate resumes, and scores the match between the two.

Vacancy notices carry short deadlines and sit behind different application systems. Finding the direct application link alone consumes time. The system scrapes listing and detail pages incrementally, fingerprints each vacancy to skip duplicates, and extracts the true apply URL from buttons, known career domains and links buried in the description text. Uploaded resumes are parsed into skills, experience, education and languages, then scored against each vacancy across six weighted factors so a candidate sees ranked matches and named skill gaps rather than a search results page.

Technology. Python, FastAPI, SQLAlchemy, Jinja2, Vue.js, BeautifulSoup, cloudscraper, Selenium, PyPDF2, python-docx, APScheduler, Microsoft SQL Server, ChromaDB, sentence-transformers all-MiniLM-L6-v2, OpenAI.

Raabta

An offline-first, multi-tenant survey and field data collection platform built for environments with weak connectivity and unreliable power.

Field teams collect data where networks fail, and country operations need isolation from one another rather than a shared namespace. Raabta answers both. Every screen works while the device is offline, with submissions held in IndexedDB and synced idempotently on a client-generated identifier so a resumed upload never duplicates a record. Each operation runs as its own PostgreSQL schema, routed by slug and header. An inline drag-and-drop designer covers 25 field types, and one logic grammar for relevance, constraint and calculation rules evaluates identically on the device and on the server.

Technology. Python, Django 5, Django REST Framework, django-tenants, GeoDjango, Celery, TypeScript, React 18, Vite, TanStack Query, Zustand, Dexie, vite-plugin-pwa, Leaflet, PostgreSQL 16 with PostGIS 3.4, Redis 7.

WhatsApp Scheduler

A multi-tenant software service that sends scheduled WhatsApp messages, syncs chat history and drafts short replies, with an isolated browser session per customer.

Sending WhatsApp messages on a schedule means keeping a real authenticated session alive without a person at the keyboard, and doing that for many customers at once without sessions colliding or leaking memory. The platform promotes a sandboxed QR sign-in into a persistent per-user authentication directory, then manages those sessions in a least-recently-used pool with eviction that preserves credentials on disk. A garbage collector tiers sessions hot, warm and cold, evicts under memory pressure, and cleans up orphaned browser processes. Sends run one-time or on daily, weekly, monthly or cron recurrence.

Technology. JavaScript, Express, whatsapp-web.js with Puppeteer, node-cron, fluent-ffmpeg, Winston, React 18, Vite, TanStack Query and Table, Radix UI, Tailwind CSS, SQLite via better-sqlite3 in write-ahead-log mode, Anthropic Claude for message drafting.

AI Meeting Gateway

An interview platform that fields a panel of two to five AI interviewers, each with its own voice, avatar and video tile, bridged into Google Meet or Zoom.

Panel interviews are expensive to schedule, run and record consistently. Coordinating several interviewers, asking every candidate the same questions and producing a fair written record all take time that scales with candidate volume. The platform seats each AI panelist as a separate participant with its own realtime session and talking-head avatar. A conductor manages turn taking: sessions start muted, one panelist speaks at a time, and the loop advances when that panelist yields or exhausts its time budget. Human panelists can join live, and their speech pauses the active AI interviewer.

Technology. TypeScript, Next.js 16, React 19, Tailwind CSS v4, Drizzle ORM, PostgreSQL 16, Python, LiveKit Agents, OpenAI Realtime and gpt-4o-transcribe, Deepgram nova-3, Tavus avatars, Silero voice activity detection.

English Fluency Assessment

A web application that scores spoken English against the CEFR scale without a human examiner.

Assessing spoken proficiency normally requires a trained examiner and a scheduled slot, which limits how many people can be tested and introduces rater variation. The application asks six questions of thirty seconds each, records the answers in the browser, and transcribes them with word-level timings so pauses become measurable. It returns a CEFR level from A1 to C2, an estimated IELTS speaking band, and component scores for grammar, vocabulary, fluency, pronunciation and coherence. A deeper analysis layer tracks recurring grammatical patterns across a candidate's attempts.

Technology. Python, Flask 3, Flask-JWT-Extended, SQLAlchemy 2, Celery, Redis, Flask-Talisman, pydub, soundfile, Chart.js, SQLite, OpenAI Whisper transcription, OpenAI GPT-4o analysis.

Project DAD, Digital Asset Discovery Tracker

A FastAPI application that runs a divisional digital asset discovery and remediation programme end to end.

An asset discovery exercise produces spreadsheets: survey exports, portal lists, database inventories, action logs. Nobody can act on that. This system holds the whole programme in one place, tracking 38 action items across six categories, more than 181 databases with lifecycle decisions, and more than 145 web portals with named technical leads and business owners. Around the inventory sit a kanban checklist, projects, milestones and multi-level dependency chains. A retrieval layer over the same content answers questions in natural language and generates written summaries.

Technology. Python, FastAPI across 72 endpoints, Uvicorn, Pydantic, LangChain, pandas, PyJWT with bcrypt, Tailwind CSS, Chart.js, Microsoft SQL Server via pyodbc, FAISS, OpenAI GPT-4o and text-embedding-3-small.

Citizen Perception Survey Intelligence Platform

An analytics platform presenting the results of a citizen perception and public service delivery survey in Khyber Pakhtunkhwa, Pakistan.

Survey data arrived as a KoboToolbox export carrying a second XML header row, unnamed section delimiter columns, four different response scales and inconsistent label casing. Beyond cleaning, the harder requirement was statistical honesty: a 52-record sample must not read as though it supports district-level conclusions. The platform detects the header row by content rather than position, never mutates stored values, and computes the measurement model in pure unit-tested functions with explicit base flags at thresholds of 30 and 5. Uploads are versioned, reconciled with field-level differences, published transactionally, and reversible for 24 hours.

Technology. TypeScript, Next.js 15 App Router, React 19, Tailwind CSS 4, next-intl, Recharts, TanStack Table, Zustand, Prisma 6, SheetJS, SQLite.

GeoPulse GIS

A single-file Flask application that computes street-network, walkability and routing analytics for any location on Earth from live OpenStreetMap data.

Urban network analysis usually means installing a heavy geospatial stack and preparing extracts before a single question can be asked. GeoPulse fetches street ways and points of interest directly over HTTP from Overpass mirrors, geocodes through Nominatim, and builds a weighted graph in memory. Every displayed metric is computed from returned data, with nothing fabricated. It reports segments, intersections, total length, density, circuity, dead-end ratio, road-class mix and a length-weighted orientation rose, then adds shortest-path routing, travel-time reachability and edge betweenness centrality behind a node-count guard.

Technology. Python, Flask 3, NetworkX 3, requests, waitress, Leaflet, optional Upstash Redis for rate limiting and caching, Anthropic Messages API for the natural-language query feature.

Full page

AttendanceHQ

A WhatsApp bot that converts free-text attendance messages into structured records, with an administrative dashboard and generated reporting.

Teams already report attendance over WhatsApp, in ordinary language, in whatever form each person prefers. That is convenient to send and impossible to aggregate. The bot parses each message into an employee and a status, matching names through typo tolerance, first-name resolution and phonetic comparison. Group messages are handled properly: one message can set a team-wide default status and name individual exceptions. The system then produces daily, weekly and monthly summaries with breakdowns and recommendations, rather than leaving a manager to count messages.

Technology. Python, Flask, Jinja2, Twilio TwiML, openpyxl, SQLite, OpenAI GPT-4o.

ShortClipper

A pipeline that turns long-form video into vertical short clips, selecting segments by content understanding and burning in captions.

Cutting short clips by hand is slow, and fixed time windows produce clips that begin or end mid-thought. Selection has to be driven by meaning so each clip is a coherent, self-contained idea. The pipeline ingests local files or URLs, transcribes at word level through either a hosted or a local model, reconstructs sentences from words using punctuation and pause detection, then scores candidate segments on hook strength, completeness and density. A weighted heuristic scorer takes over when the model is unavailable. It ships as both a command line tool and a hosted interface.

Technology. Python, Typer, Pydantic v2, FastAPI, Uvicorn, NumPy, Pillow, OpenCV, MediaPipe, ffmpeg-python, yt-dlp, OpenAI GPT-4o for selection, Whisper for transcription both hosted and local on CUDA.

JobKit AI Advantage

A credit-based web application that audits resumes and cover letters against a specific United Nations job description.

United Nations applications are screened against explicit criteria, and a generic resume fails that screen regardless of the candidate's record. The application scores a pasted resume against a pasted job description and returns a structured audit against a defined rubric, rather than general writing advice. Separate routes cover a standard CV audit, a comprehensive CV audit and a cover letter audit, with an audit history so a candidate can see whether revisions improved the score. Access is metered by credits, with balance checks, consumption tracking and a transaction history.

Technology. TypeScript, React 18, Vite 5, React Router 6, TanStack Query, shadcn-ui on Radix UI, Tailwind CSS, React Hook Form, Zod, Express 4, Microsoft SQL Server, OpenAI API.

LocalDrop

A self-hosted application for moving files, notes and links between devices on the same network through temporary rooms.

Sharing a file between two devices on the same Wi-Fi usually means routing it through a cloud service, which requires an account, an internet connection and trust in a third party. LocalDrop runs on hardware the user controls: a laptop, a Raspberry Pi, an office mini-PC or an internal server. Because anyone on the network can post to a room, the design also has to prevent executable and script content from being uploaded or rendered. Rooms carry a random identifier, an optional access code stored as a bcrypt hash, and a configurable expiry.

Technology. TypeScript, Next.js 16 App Router, React 19, Tailwind CSS 4, Prisma 6, Zod, busboy, archiver, qrcode, bcryptjs, SQLite, Server-Sent Events for live updates.

Learn AI, Senior Practitioner's Reference

A generator that compiles a GitHub-readable mirror of a learning hub directly from the source data of the parent site.

Technical readers find material on GitHub, but the canonical content lives on a website. Maintaining a second copy by hand guarantees the two drift apart. This tool parses the module dataset from the site's own source, groups modules into four ordered tracks, and writes a document where every module title links back to the canonical page. The mirror is regenerated rather than edited. A companion script audits the live site for title, meta description, canonical link, heading count, social image and schema markup across fifteen pages.

Technology. Python, standard library only.

Full page

Applied prototypes (27)

Unified Inbox

A multi-channel team inbox joining email, SMS, WhatsApp, Messenger, Instagram and live chat with internal team chat, tasks, rules and AI assistance, delivered as five clients from one monorepo.

Teams working a shared mailbox lose context in forwarding chains, blind copies and screenshots pasted into chat. The conversation and the internal discussion about the conversation live in different tools, so neither is complete. This platform holds both. Email arrives over IMAP and SMTP, Gmail API and Microsoft Graph, threaded by three strategies because no single one is reliable. Messaging channels share one adapter interface. A rules engine covers seven triggers, twelve condition operators and twelve actions, with dry-run preview and per-rule analytics. Self-hosting is the deployment target.

Technology. TypeScript, NestJS 11, React 18, Vite, TanStack Query and Virtual, Zustand, Tailwind CSS, Radix UI, Tiptap, Socket.IO, Storybook, Vitest, Playwright, Electron 33, Expo 52 with React Native, Prisma 6, PostgreSQL 16.

ESCWA Solar Energy Access Platform

A bilingual platform mapping AI-detected solar photovoltaic systems and renewable energy country profiles across 22 Arab states.

Renewable energy indicators for the region sit in scattered workbooks and portals with competing figures for the same measure, and satellite detection of rooftop photovoltaic installations produces spreadsheets nobody can query or map. The platform consolidates both. Country profiles carry seven headline indicators with dual provenance tracks on every value, so a reader can see where each figure came from. Detected installations render on a map with cascading country, governorate, district and town filters and server-computed statistics. Exports run asynchronously to six formats behind signed, expiring links.

Technology. Python, FastAPI, SQLAlchemy 2, Pydantic v2, openpyxl, pyshp, TypeScript, React 18, MapLibre GL 4, Recharts, Vite, SQLite for demonstration with PostgreSQL 16 and PostGIS as the production target.

ApplyCraft

An engine that drafts, scores and exports answers for United Nations P-level job applications across three model providers.

These applications demand long free-text answers against published shortlisting criteria under hard character limits, and a weak answer costs the application regardless of the underlying record. ApplyCraft ingests the job opening, the shortlisting questions and a candidate memory file, then runs a streamed pipeline: gap analysis, drafting, dry run, consistency audit. A seven-pass review scores each answer, screens for AI-detection signals, and checks repetition across answers. An adversarial red-team pass runs on a second provider so one model does not mark its own work. Per-task routing keeps a single application run under five dollars.

Technology. TypeScript, Next.js 16 App Router, React 19, Tailwind CSS 4, Shadcn UI, Zustand, Zod, Prisma 6, NextAuth, docx, Anthropic Claude, OpenAI, Ollama, local embeddings via Transformers.js.

AI-Powered IVR System

A voice agent that answers inbound business calls, holds a conversation, books appointments and answers questions, with an administrative dashboard and a visual flow builder.

Traditional interactive voice response forces callers through menu trees that rarely match what they actually want. The system replaces the tree with conversation: it accepts call, speech, recording and status webhooks, generates replies against per-call context with configurable model, token ceiling and temperature, synthesises speech and caches the generated audio on disk to cut both latency and cost. Behind it sit authenticated routes for appointments, leads, business configuration, analytics and integrations. A later revision adds a drag-and-drop flow builder so an administrator can shape call handling without code.

Technology. JavaScript, Express, Socket.io, React 18, React Query, Zustand, Tailwind CSS, Chart.js, Recharts, Bull, Winston, Jest, PostgreSQL 15, Redis 7, OpenAI, Groq, ElevenLabs, Twilio.

Financial Dashboard

A password-gated dashboard reporting budget consumption, staffing, grants and project delivery from four separate workbooks.

Financial and workforce data sat across four Excel files, which means any cross-cutting question required manual reconciliation before it could be answered. The dashboard converts those workbooks into a single browser view covering 2,919 funds management rows, 417 staffing rows, 31 grants and 23 projects, presented as linked charts and filterable tables across ten tabs. Because the content is sensitive, the dashboard module loads by dynamic import only after successful authentication, behind a salted password gate with attempt lockout and idle session timeout.

Technology. JavaScript, React 19, Recharts 3, Tailwind CSS 4, html2canvas, jsPDF, SheetJS, Vite 6.

text2code.ai

An application builder that turns plain English descriptions into complete runnable web projects, with an in-browser editor and live preview.

Code assistants return snippets. A person describing an application in ordinary language wants something that runs, and then wants to change it by describing the change. The builder streams generation from a prompt, replaying up to twenty prior messages so follow-up instructions iterate on the existing project rather than starting over. Model output is parsed into file operations through a diff engine with an automatic runtime error repair path. The workspace provides a full editor, file explorer, terminal panel and live preview in an iframe.

Technology. TypeScript, Next.js 14 App Router, React 18, NextAuth, Prisma 5, Zustand, TanStack Query, Tailwind CSS, Radix UI, Monaco Editor, SQLite with PostgreSQL and Redis declared for deployment, OpenAI GPT-4o with streaming.

AI enabled Project Proposal Preparation Rebuild

A front-end rebuild of a legacy proposal-drafting application, implementing a written interface and experience assessment.

The original application forced users through two-level horizontal tab strips that overflowed the viewport, offered no completion or progress model across an eight-section proposal, gave no breadcrumb or wayfinding, and exposed a submission action with no explanation of what submitting would do. Each of those is a specific, correctable failure. The rebuild replaces the tab strips with a vertical section rail carrying per-section completion marks, merges two overlapping screens into one work queue with filtering and confirmed export, and adds a portfolio dashboard with delivery indicators. Seventeen mocked route handlers let the interface be evaluated before any backend commitment.

Technology. TypeScript, React 18, Vite 5, React Router 6, TanStack Query and Table, Tailwind CSS, Radix UI, Recharts, Zod, i18next, Mock Service Worker.

HelpDesk AI

An agentic IT service desk where an autonomous agent triages, diagnoses and resolves tickets, pausing for human approval on anything that changes state.

Service desk queues absorb repetitive diagnostic work that an agent can perform, but handing an agent unsupervised authority over accounts and infrastructure is unacceptable. The design makes the control surface visible rather than implicit. Twelve simulated tools cover knowledge base search, account status, unlock, password reset, service health, network diagnostics, configuration queries and patch scheduling. State-changing tools are named explicitly and gated by a human approval callback. A pre-execution hook enforces a tool allowlist and a post-execution hook writes every call to an audit table. The whole system runs on one machine with no external dependencies.

Technology. Python, FastAPI, SQLAlchemy, Pydantic, React 18, Vite, Tailwind CSS, framer-motion, recharts, SQLite, Claude Agent SDK.

Refugee Feedback Analytical Centre

A retrieval application that answers analyst questions in natural language over transcribed refugee feedback records.

Feedback recorded and transcribed at scale cannot be read record by record, and category counts alone do not answer the questions leadership actually asks: what concerns are rising, how do two locations differ, what is urgent now. The application pulls records incrementally from a database view with timestamp tracking, converts each into a document carrying date, category, location levels, age, gender, transcript and urgency, and indexes them into a persisted vector store. Answers return with their source records attached so a reader can verify any claim.

Technology. Python, Flask, Flask-Login, LangChain, SQLAlchemy, pandas, Tailwind CSS, Microsoft SQL Server, Chroma, OpenAI GPT-4o with embeddings.

Refugee Insights

A conversational analytics tool answering questions about refugee messages held in an internal referral database.

Senior management needed to understand what people were raising in transcribed messages without writing database queries. The tool serves that audience directly: trends across locations and time, comparisons between regions and categories, emerging issues. Records are pulled incrementally from a database view, chunked with overlap, and persisted to a local vector store. Questions are answered over the eight nearest chunks at low temperature against a fixed analytical prompt, with source documents shown beside every answer. Quick-question chips expose the questions the tool was built to handle.

Technology. Python, Streamlit, LangChain, SQLAlchemy, pyodbc, pandas, Plotly, matplotlib, Microsoft SQL Server, Chroma, OpenAI GPT-4o.

Refugee Debt Analysis Dashboard

A dashboard that scores refugee debt cases from a spreadsheet export and ranks them into funding tiers.

Debt figures arrived as a single export, and available funding covered a fraction of the caseload. Deciding which cases to fund by reading rows is neither defensible nor repeatable. The dashboard converts rows into a priority score built from seven protection vulnerability markers, poverty rank and cash assistance status, then assigns each case to a high, medium or low funding tier. Five combined filters let a reviewer test how the ranking shifts under different assumptions. Parsing happens in the browser, so the export never leaves the reviewer's machine.

Technology. JavaScript, React 18, Recharts, SheetJS, Lodash, Tailwind CSS.

AI Job Matching System

A recruitment platform pairing an embedding-based job matcher with a resume evaluation service.

Candidates in the target market do not reliably maintain passwords or email access, so the sign-in path itself was a barrier. The matcher uses one-time codes over WhatsApp and SMS instead. Ranking runs on embeddings generated from resume text, target roles, skills, location and salary, returning matches with a percentage and stated reasons rather than an opaque score. A second service scores uploaded resumes against a job description and returns strengths, gaps and interview recommendations. Per-user data isolation lets several recruiters share one deployment without seeing each other's evaluations.

Technology. JavaScript, Express 5, Mongoose, Helmet, Python, Flask, Flask-Limiter, PyJWT, pdfplumber, Gunicorn, SQL Server, MongoDB, OpenAI embeddings and GPT-4o-mini.

Humanitarian Job Matching Application

A mobile-first prototype matching humanitarian professionals to crisis response, development and aid sector vacancies.

Humanitarian professionals and the organisations hiring them find each other through personal networks and scattered job boards, which favours whoever is already connected. The prototype builds a two-sided platform: swipe-based matching, embedding-driven recommendations, generated CVs and cover letters, and aggregation from external job boards, across candidate, employer and administrator roles. Job and profile embeddings are ranked by cosine similarity computed in application code, keeping the matching logic inspectable rather than delegated to a hosted search service.

Technology. JavaScript, Express, Mongoose, Socket.IO, React Native with Expo, React Navigation, React Native Paper, Formik, Yup, MongoDB, OpenAI embeddings.

LIMC Livelihood Job Matching App

A Flutter application matching refugee and national job seekers to employers, with a facilitator role, in Arabic and English.

Job matching for refugee candidates fails at the form. Candidates may not have reliable email, may not read the interface language, and may not be able to complete a long CV form unassisted. The application registers users by phone with one-time passwords rather than email, supports three distinct sign-up paths for candidates, employers and facilitators, and lets a facilitator complete a form on a candidate's behalf. The candidate CV form runs in six parts covering education, work experience by country and duration, languages with proficiency, skills, self-introduction and preferred contact method.

Technology. Dart, Flutter, Provider, flutter_localizations, flutter_svg, socket_io_client, flutter_secure_storage, speech_to_text, with a Node, Express and Socket.IO backend.

WhatsApp Resume Builder

A chatbot that interviews a candidate over WhatsApp by text or voice, in any language, and assembles a downloadable resume.

Building a resume assumes a keyboard, a desktop, a web form and confidence writing in a second language. Each assumption excludes people. The bot removes all four: a candidate answers by voice message in their own language, transcription runs with automatic language detection, and an adaptive interview adjusts to what the candidate has already said by loading the last twenty turns plus current resume state before each reply. The webhook acknowledges immediately and processes asynchronously with a duplicate-message lock, because mobile networks retry.

Technology. JavaScript, Express, Prisma 5, React, Vite, Puppeteer, Twilio SDK, Winston, Helmet, PostgreSQL, OpenAI GPT-4o with function calling, Whisper transcription.

wikiforge

A knowledge wiki maintained by a language model, compiling source documents into linked pages with enforced provenance.

Source documents accumulate unread and unconnected, and summarising them with a model introduces a worse failure: confident text with no traceable origin. wikiforge treats provenance as the design constraint. Every claim on an entity or concept page must end with a source link, and a deterministic linter flags pages that drift from their sources. Compilation is incremental, hashing each source and re-summarising only what changed, with backlinks and indexes rebuilt in a pure text pass. Questions are answered through a bounded tool-use loop over the wiki itself, and answers can be filed back with the sources consulted recorded in frontmatter.

Technology. Python, Flask, Anthropic Python SDK, pypdf, pandas, matplotlib, Marp, with TF-IDF retrieval.

SYNAPSE

A learning application where an administrator types a topic and a model generates a validated, schema-conformant lesson for absolute beginners.

Content-driven learning tools require an author for every concept, which caps how fast the library grows. The design fixes the learner interface and makes all content data-driven, so a new concept renders without code changes. The pedagogical rules are enforced in the prompt: teach one concept at a time, start from a familiar everyday anchor, define every new term at first use. Generated output passes strict schema and content validation with one repair retry, then lands in draft for administrator review rather than going live. The learner application falls back to bundled seed concepts when the backend is unreachable.

Technology. TypeScript, React 18, Vite 6, React Router, Zustand, Tailwind CSS, Express 4, Prisma 6, SQLite, OpenAI GPT-4o in JSON mode with a separate vision model.

Offline Field Collector

An offline-first field survey application storing submissions on the device and syncing when a network returns.

Field collection frequently happens without connectivity, and tools that assume a network fail in exactly the conditions they are needed. The application caches its shell once while online and loads offline thereafter. Submissions are written to the device before any network call is attempted. The collector chooses explicitly between saving locally and uploading now, and every record carries a visible sync lifecycle of draft, pending, synced or error with an attempt count and the last error message, so nobody has to guess whether data made it.

Technology. JavaScript, React 19, Vite 6, Dexie 4, vite-plugin-pwa with Workbox, Express 4, Helmet, SQLite, IndexedDB.

MCP WhatsApp Server

A server that bridges WhatsApp to a language model through a session and context protocol.

Connecting a chat channel to a model is straightforward until conversations run long, at which point context has to be managed rather than accumulated. The server implements six dispatched actions covering session creation and closure, and context addition, retrieval and clearing. Sessions map to sender phone numbers and hold context in memory with token estimation and oldest-first trimming at a configured ceiling. Media attachments and delivery status callbacks are handled as part of the message flow.

Technology. JavaScript, Express 4, twilio, axios, winston, Anthropic Claude messages API.

ECharts MCP Server

A Model Context Protocol server that returns chart configuration objects rather than rendered images.

Chart servers that return static images produce output the reader cannot interact with. Tooltips, zoom and legend filtering all disappear at the point the image is generated. This server returns configuration objects that the client renders itself, so interaction survives. It builds configurations for thirteen chart types, transforms input data through pivot, aggregate, group, sort and filter operations over CSV or JSON, and recommends a chart type with a confidence score, stated reasoning and alternatives.

Technology. TypeScript, Model Context Protocol SDK, ECharts 6, Zod, lodash.

UNHCR API Explorer and Refugee Dashboard

Browser tools for querying and visualising public refugee statistics through a local proxy.

The published statistics API blocks direct browser calls through cross-origin policy, so exploratory querying from a static page fails before it starts. A small proxy forwards requests and serves the client from the same origin, which makes the API usable for analysis without a build pipeline. A second problem was temporal: the dashboard had a maximum year hardcoded, while annual statistics publish one to two years behind the present, so year bounds are now derived at runtime. The query builder covers eleven endpoints and returns results as a formatted summary, raw JSON or a table.

Technology. JavaScript, Express 4, cors, axios, Chart.js, Mapbox GL JS, Select2.

Face Authentication Web Application

A browser-based face verification prototype matching a live webcam feed against an uploaded reference photograph.

The prototype tests whether face verification can run entirely in the browser without a server-side recognition service. A reference image is uploaded, a facial descriptor extracted, and subsequent webcam frames compared against that descriptor with a confidence score. One practical finding shaped the build: loading models from a content delivery network proved unreliable, so the weights are fetched once and served locally, removing an external dependency from the authentication path.

Technology. Python, Flask, JavaScript, face-api.js with locally served detection, landmark and recognition models, facenet-pytorch, PyTorch, OpenCV, Pillow, NumPy.

Cognitive Load Management System

A prototype estimating a user's cognitive load from webcam, audio and interaction signals, then adapting content difficulty in response.

Learning and working interfaces present the same difficulty regardless of whether the person is comfortable or overloaded. Measuring load in real time makes adaptation possible, but the measurement has to happen without sending video and audio anywhere. The originating specification set three requirements: local model execution, on-device processing, and end-to-end latency under 500 milliseconds. The prototype estimates load independently from face and eye detection, vocal stress indicators, and interaction patterns covering mouse movement, typing and response time, then fuses the three into a single value with a confidence figure and a configurable threshold.

Technology. Python, FastAPI, Uvicorn, Pydantic, Flask, OpenCV with Haar cascade detection, TensorFlow, NumPy, pandas, matplotlib, PyAudio.

CareerBridge

An application that analyses a resume against a job description and returns match scoring with targeted feedback.

Generic resume advice does not help a candidate applying to a specific posting, because the gap is always between two particular documents. The application parses both into structured JSON covering contact details, experience, education, skills and certifications, then scores the match and returns specific suggestions. Prompts carry humanitarian sector framing referencing the Core Humanitarian Competency Framework, so feedback is calibrated to that sector rather than generic corporate hiring. Total experience is estimated automatically and classified into a career stage.

Technology. JavaScript, Express 5, Mongoose 8, React 19, React Router 7, Vite 6, Tailwind CSS 4, Multer, Mammoth, bcryptjs, MongoDB, OpenAI.

AI Hospital

A demonstration of how a 400-bed tertiary care hospital could operate with an AI agent attached to every staff role, across nine role dashboards.

The design constraints are the interesting part. High patient load, scarce staff time, varied literacy, Urdu and Sindhi ahead of English, and intermittent power and connectivity. On top of that, the deployment target is standard shared hosting with no server runtime and no database, so every screen is a self-contained page persisting locally. Nine agents carry distinct personalities, system prompts, guardrails and permitted data scopes. Every agent response shows a confidence band and a source line, and any write to a patient record requires explicit human approval. All clinical content is synthetic and labelled as such.

Technology. HTML, CSS and JavaScript with no framework and no build step by design, inline SVG charts, browser local storage, Anthropic Messages API.

DigitalAAP Presentation Platform

An interactive presentation of a digital accountability and participation platform for refugee feedback, with a live map.

A platform argument needs to be made to decision-makers before the platform can be funded, and a slide file does not carry an interactive map or an embedded demonstration. This is the presentation layer for that argument, built as an application: a fifteen-slide sequence with navigation, an interactive map of Jordan with animated markers and popups covering 39 nationalities against a total of 581,886 people, and a five-stage animated walkthrough of the capture, transcribe, validate, analyse and act pipeline.

Technology. TypeScript, React 18, React Router, Vite 5, Tailwind CSS, shadcn/ui on Radix UI, TanStack Query, Recharts, Mapbox GL.

MeRaG

A local retrieval system over a monitoring and evaluation document library, with interchangeable answer backends.

Evaluation libraries hold answers that nobody can find, because the useful content sits inside long documents rather than in their titles. The tool ingests PDF and Word files from a plain list, chunks them with overlap, embeds them locally on GPU and persists them to a vector store. Answering is deliberately backend-agnostic: a command line argument selects between local quantised models and hosted APIs, so the same index can be queried under different cost, privacy and quality constraints without reindexing.

Technology. Python, LangChain, Transformers, PyTorch, sentence-transformers, Chroma, with local models including Mistral 7B Instruct, Phi-2 and TinyLlama alongside hosted OpenAI and Groq endpoints, using 8-bit quantisation.

Focused tools (15)

Unlimited OCR Workbench

A document intelligence workbench that wraps a long-context OCR model in an auditable, reviewable export pipeline.

Basic OCR produces text but rarely produces trust. There is no reproducible run record, no page-level risk scoring, no visual grounding of extracted values, no searchable output package and no clean handoff to downstream systems, which means a human has to re-verify everything anyway. The workbench closes those gaps. It ingests images, image folders or PDFs rendered at configurable resolution, routes automatically between model modes based on document shape, and masks common personally identifiable patterns into a review-safe transcript before anything is exported.

Technology. Python, PyTorch, Hugging Face Transformers, accelerate, PyMuPDF, Pillow, matplotlib, with a long-context vision language OCR model running in half precision on CUDA across four prompt profiles.

HumOps Blind Spot

A humanitarian operations dashboard that surfaces divergence between beneficiary feedback and official situation reports.

Leadership works from two sets of signals that disagree. Ground-level feedback tells one story and official reporting tells another, and operational failure lives in the gap between them. Most monitoring tools aggregate both into a single view, which averages the contradiction away. This dashboard ranks and displays the contradiction itself. Evidence cards across 24 administrative areas and eight themes carry divergence, urgency, volume, novelty and sentiment scores, and a four-column channel feed flags situation report entries that contradict what the other channels are saying.

Technology. JavaScript, Leaflet with heat overlay, Python standard library on the server, Playwright, Pillow, OpenAI GPT-4o generating deterministic monitoring scripts rather than prose.

A recruitment platform with resume parsing and natural language candidate search over vector embeddings.

Keyword search cannot answer a hiring question phrased the way a hiring manager actually thinks about it. The system parses pasted resume text into a structured profile, embeds it, and stores the vector alongside the record. A plain English hiring query is then parsed into skills, experience, location and education filters and ranked by similarity, returning candidates with a calculated match percentage rather than a keyword hit count.

Technology. Python, FastAPI, Uvicorn, Pydantic, python-jose, NumPy, React 18, Tailwind CSS, Microsoft SQL Server, MongoDB, OpenAI embeddings with similarity ranking computed in NumPy.

UNHCR MCP Server

A Model Context Protocol server exposing public refugee population statistics to AI assistants. Released under MIT licence.

The published statistics API is a well-documented REST service, but an assistant cannot use it without a tool layer that describes what each endpoint does and what arguments it accepts. This server wraps five endpoints as declared tools with JSON input schemas covering population statistics, demographics, countries, durable solutions and internally displaced person figures, with query construction from optional year range, country of origin, country of asylum, population type and result limit.

Technology. JavaScript, Model Context Protocol SDK, axios, Node.js ES modules over stdio transport.

Email RAG Assistant

A local chat application answering questions across a personal email archive with retrieval and citations.

Years of correspondence hold answers that inbox search cannot reach, because the question is rarely a keyword. The tool ingests an exported archive, cleans directory-service sender paths into readable names, splits long messages with overlap, and embeds locally so message content never leaves the machine for indexing. Each question is decomposed into three to eight targeted sub-queries and classified by type before retrieval, which handles questions that no single query would answer, and results are deduplicated before synthesis.

Technology. Python, LangChain, Streamlit, pandas, ChromaDB, SQLite, Ollama nomic-embed-text for local embeddings, OpenAI for query decomposition and answer synthesis.

RAG Dashboard

A dashboard comparing assistance categories across two selectable time periods and reporting growth between them.

A database view holding timestamped, classified assistance records answers what happened but not what changed. Reading period-over-period movement requires two filtered queries and a manual comparison every time. The dashboard exposes two independent date range selectors, filters by category, region and age group, and reports the difference directly, with headline counters, time series, category distribution and a growth chart. It falls back to generated sample data when the database is unavailable, so the interface can be demonstrated without access.

Technology. Python, Dash, Plotly, pandas, NumPy, statsmodels, WeasyPrint, Gunicorn, SQLite.

Full page

Synthetic Data Generator

A browser-based tool that turns an uploaded spreadsheet into a privacy-labelled synthetic dataset.

An analyst holding sensitive records often needs a shareable substitute that preserves the shape of the data without exposing anyone in it. Uploading the original to a hosted service to produce that substitute defeats the purpose. This tool runs entirely in the browser, so the sensitive file never leaves the machine. A four-step process covers preparation, column-level selection of which attributes are sensitive, synthesis, and export, with a choice between differential privacy under an epsilon budget or k-anonymity at a chosen k.

Technology. TypeScript, Next.js 14, React 18, Tailwind CSS, PapaParse.

Twilio Voice AI Agent

A voice agent connecting ordinary telephone calls to a speech-to-speech model, with a browser softphone and click-to-call.

Most voice assistants insert a text step between the caller and the model, which adds latency and strips prosody. This agent opens a media stream from the call directly into a realtime speech model, so the exchange stays in audio end to end. It serves a browser softphone, mints access tokens with a voice grant, places outbound calls through the telephony API pointed at its own webhook, and answers inbound calls with a recorded introduction before opening the stream.

Technology. JavaScript, Fastify 5, websocket and static plugins, ws, twilio, OpenAI Realtime API with server-side voice activity detection.

GPT-OSS Jordan Humanitarian Assistant

A fine-tuning scaffold and serving API for a multilingual refugee support assistant built on a 20-billion-parameter open model.

General-purpose models answer questions about registration, work permits, education access, healthcare and camp services with plausible text that is often wrong for a specific country context, and the people asking cannot tell the difference. The scaffold fine-tunes an open model on that domain with low-rank adaptation under 4-bit quantisation, so the work runs on accessible hardware and the resulting weights stay controllable. All hyperparameters are held in configuration rather than code. Target languages are Arabic, English, Somali and Farsi or Dari.

Technology. Python, PyTorch, transformers, trl, peft, datasets, Flask, with LoRA supervised fine-tuning under BitsAndBytes 4-bit quantisation and mixture-of-experts layer targeting.

Audio Transcription Application

A web application that transcribes uploaded audio locally, with a default focus on Urdu and right-to-left display.

The underlying model supports over a hundred languages but ships no interface, which puts it out of reach for anyone who does not work at a command line. The application wraps it in a browser upload form accepting seven audio formats, loads the model once at startup and uses GPU acceleration where available, and populates a language selector from the model's own supported codes. Right-to-left rendering for Urdu, Arabic, Hebrew and Persian is handled properly, which a command line tool does not address at all.

Technology. Python, Flask, Bootstrap, PyTorch with optional CUDA, transformers, ffmpeg-python, running OpenAI Whisper locally.

YouTube Playlist Transcriber

A command line tool that pulls captions from a video playlist, translates them to Urdu, and produces summary documents and quiz questions.

A playlist of lectures is a poor study format: it cannot be skimmed, searched or revised from, and for a learner working in a second language the barrier compounds. The tool enumerates a playlist, retrieves captions with a language preference order and a fallback to whatever track exists, translates to the target language, writes the full text, produces a summary at ten to fifteen percent of the original length as a document, and generates twenty mixed-format quiz questions per video. Every stage has a non-AI fallback path.

Technology. Python, Click, pytube, youtube-transcript-api, googletrans, reportlab, fpdf2, beautifulsoup4, OpenAI for translation, summarisation and question generation.

LangChain Refugee Assistance Chat

A chat application answering questions over refugee assistance records with retrieval and derived metadata.

Assistance records hold trend information that is invisible at the row level and lost in a plain aggregate. The application loads records, derives category, urgency and specificity metadata for each document before indexing, and retrieves with maximal marginal relevance so results cover distinct aspects of a question rather than repeating the closest match. The answering prompt asks specifically for numbers and percentages when describing trends, and for recommendations grounded in the retrieved patterns.

Technology. Python, Flask, LangChain with langchain-openai and langchain-community, pandas, Jinja2, Chroma built in memory at startup, OpenAI chat and embedding models.

LinkedIn Comment Assistant

A Manifest V3 browser extension that drafts a contextual comment from a post's content and inserts it without posting.

Writing a substantive comment takes more time than most people have, so the alternative is generic praise that adds nothing. The extension reads the post body, generates a short constructive comment against a configurable prompt that explicitly rules out generic praise, and inserts it into the comment field for the user to edit and send. Nothing is posted automatically. Post detection uses an ordered list of eight content selectors with fallbacks and a mutation observer, because the target page changes structure without notice.

Technology. JavaScript, HTML and CSS with no framework, OpenAI chat completions with a selectable model.

Portal Monitor

An uptime monitor polling eleven named web portals and raising SMS alerts on failure.

Portal outages were being discovered by users rather than by the team responsible, which turns a short technical fault into a reputational one. The monitor polls each site every sixty seconds on its own thread using browser-like request headers, and grades responses sensibly rather than binary: authentication and authorisation failures count as reachable, server errors count as down. Alerts fire on transition into the down state, not on every failed poll, with a per-site cooldown so a sustained outage does not flood the recipient.

Technology. Python, Flask 3, requests, Twilio, python-dotenv.

Prepaid Card Information Extractor

A command line tool extracting structured card records from PDF statements, with an OCR fallback for scanned pages.

Source documents mixed true PDFs with scans, so a text-layer extraction alone silently returned nothing for whole pages. The tool reads the text layer first and falls back to per-page OCR at configurable resolution when the layer is too thin to trust. Recognition accuracy on scanned pages required a preprocessing chain: greyscale conversion, non-local means denoising, adaptive Gaussian thresholding and morphological close. Dependency checks with installation guidance run before any optional import, since the OCR engine is an external binary.

Technology. Python, PyMuPDF, Pillow, pytesseract with Tesseract OCR, opencv-python, NumPy.

The delivery method behind these systems is set out in the Last-Mile AI Framework, and the flagship United Nations deployments are described in more depth on the AI projects page.