ESP/UCAD — team lead (3 students, AI & Big Data / Security / Telecoms) · May 2025
BoviBot
Cattle-herd management where the business logic lives in the database: stored procedures, triggers and scheduled events in PL/SQL, plus an AI assistant for farmers.
- Problem
- A herd has time-based rules — vaccination reminders, veterinary checks — that a web application only triggers if somebody opens the page.
- Outcome
- Fifteen PL/SQL objects in the database — procedures, functions, alert triggers and scheduled events — with their unit-test suite, an AI assistant chat, and full documentation (conceptual and logical models, data dictionary, integrity audit).
- Role
- Team lead — backend and database
What problem does BoviBot solve?
A calf must be vaccinated on a specific date. If the reminder depends on a farmer opening a web page, the reminder does not exist.
What technical decision was made?
Push the time-based logic down into the database. Counter-intuitive in an era of "business logic in the application", but correct here: the database is the only component running permanently and holding the truth.
- Scheduled events:
evt_alerte_velagesfor upcoming calvings,evt_rapport_croissancefor the periodic report. They run whether or not the application is open. - Alert triggers:
trg_alerte_vaccination,trg_alerte_poids_faible,trg_alerte_pesee_manquante. The third is the most useful — it detects an absence, which no write naturally raises. Andtrg_historique_statutkeeps a trace of every state change. - Stored procedures:
sp_enregistrer_pesee,sp_declarer_vente,sp_rapport_nutritionnel— compound business operations executed in a single transaction. - Business functions:
fn_age_en_mois,fn_gmqfor average daily gain,fn_cout_total_elevage. The computation lives where the data lives, rather than being copied into every caller.
Fifteen objects, and their tests. tests/unit_tests_plsql.sql verifies the database layer's behaviour. Business logic in the database without tests is business logic nobody dares change.
The Flask API becomes a thin façade: it exposes and formats, it does not arbitrate.
An AI chat assistant completes the setup on the farmer's side: it answers from the herd's data, not in place of it. Prompts are documented and versioned — undocumented model behaviour is behaviour you cannot reproduce.
What was my role?
Lead of a team of three students from three disciplines (AI & Big Data, Information Security, Telecoms). Full deliverables: conceptual and logical data models, a data dictionary, a SQL integrity audit, a deployment guide and a containerised platform.
What did BoviBot teach me?
"All the logic in the application" is a good default, not a law. When the business rule is time-based and continuous, putting it anywhere other than the component that runs continuously makes it optional.
A project of the same calibre ?
Based in Thiès, available in dakar & remote. I reply within 48 hours.
Let's talk