Kenya's cyber early-warning system — detects phishing and scam threats automatically from threat intel feeds and correlates user reports into campaign alerts, before most people even know there's a threat.
# SentinelPulse
Kenya's cyber early-warning system. See threats before they spread.
This is the backend: a FastAPI app, a database schema for tracking
flagged URLs, user reports, detected scam campaigns, and the alerts shown
in the mobile app.
## About
SentinelPulse is an independent cybersecurity project founded and
developed by Samantha Vivian, a cybersecurity student building tools
to protect Kenyans from cyber threats.
Licensed under the MIT License -- see LICENSE for details.
Live API:
sentinelpulse-api-v8sz.onre…
Interactive docs:
sentinelpulse-api-v8sz.onre…
## Project structure
sentinelpulse/app/main.py - FastAPI entrypoint
sentinelpulse/app/database.py - DB connection (SQLite by default, swap to Postgres)
sentinelpulse/app/models.py - SQLAlchemy ORM tables
sentinelpulse/app/schemas.py - Pydantic request/response shapes
sentinelpulse/app/scoring.py - Rule-based risk scoring engine plus WHOIS lookup
sentinelpulse/app/routers/urls.py - POST /urls/check, GET /urls/recent
sentinelpulse/app/routers/reports.py - POST /reports, GET /reports
sentinelpulse/app/routers/alerts.py - GET /alerts, GET /alerts/campaigns
sentinelpulse/app/ingest/fetch_feeds.py - Pulls from OpenPhish and URLhaus automatically
sentinelpulse/app/ingest/correlate.py - Groups reports into detected campaigns
## Setup
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
## Run the API
uvicorn app.main:app --reload
Visit
127.0.0.1 for interactive API docs.
## Run automated feed ingestion (proactive detection)
python -m app.ingest.fetch_feeds
Pulls phishing/malware URLs from OpenPhish and URLhaus automatically.
No reporter required. Schedule with cron every 15-30 min in production.
## Run the correlation job (turns reports into campaigns)
python -m app.ingest.correlate
Groups 3+ reports sharing a phone number or domain into a campaign and
auto-generates an alert.
## Switching to Postgres
Set DATABASE_URL …