Skip to content
M. SALL
Work

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
FlaskMySQLPL/SQLDockerREST API

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_velages for upcoming calvings, evt_rapport_croissance for 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. And trg_historique_statut keeps 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_gmq for 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