Logo Lanfrica

abigailsylvie/afritechelles-impact

Record type:

software
Creator:
abi
Host:
Data pipeline + small web app for AfriTechElles, an NGO based in Cameroon supporting women and girls in tech. # AfriTechElles Data Pipeline A small tool I built to help AfriTechElles (a Cameroon-based NGO supporting women and girls in tech) make sense of their community sign-up data. Their member information comes in through Google Forms and ends up as messy CSV exports, inconsistent phone numbers, missing fields, no easy way to see who's actually in the community at a glance. This project cleans that data, stores it, and generates a report someone can actually read without a spreadsheet background. ## What it does - Takes a CSV export of form responses (the real field names are in French Nom complet, Numéro WhatsApp, Adresse email, etc.) - Validates and cleans each row: normalizes phone numbers, fixes name casing, parses inconsistent date formats, checks email format - Anything that fails validation gets set aside (not silently dropped) with a reason, so someone can go back and fix it manually - Stores the clean data in a local SQLite database - Generates a PDF summary report with a chart, plus lets you view the same summary on a small dashboard page - Has a basic form to add a member manually, in case someone signs up outside the Google Form - Has a simple password login for the upload/add pages, since they modify data ## Why I built it this way I originally planned this as a script you'd run from the command line, but switched to a small Flask app once I realized the actual users (Afritechelles' team) aren't developers, they need something they can open in a browser, not run `python main.py` in a terminal. I went with a PDF for the report instead of an Excel file on purpose. My first instinct was Excel since it's more "data-y," but the actual goal is for someone without a data background to open it and understand the numbers in a few seconds. A PDF is read-only, so there's nothing to accidentally break by editing a cell, and it can lead with the important number instead of a wall of rows. The "rejected records" idea came from thinking about what happens to bad d …