Inspiration

It started with a shopkeeper and a ledger he'd kept by hand for years. He knew what he sold every single day - but not which of his own products were quietly costing him money, until the afternoon he opened Sepiru AI for the first time, asked it one simple question, and watched it point straight at losses buried in rows of handwritten numbers he'd never have caught on his own. He looked up and said: "I found losses I never knew existed." That one sentence is the reason this project exists.

He isn't the exception - he's the rule. The world produces roughly 2.5×10^{18} bytes of data every day, yet the people who generate most of it - farmers, shopkeepers, NGO workers, students - are the least able to read it back. Not because the data is missing, but because the tools to understand it are expensive, English-only, and demand handing private records over to someone else's server.

That gap is a daily cost, multiplied across every village and city that can't afford a data analyst. We kept asking ourselves: why should understanding your own data be a privilege? SDGs 4 (Quality Education), 8 (Decent Work), and 10 (Reduced Inequalities) gave the problem a name. Sepiru AI is our answer.

What it does

Sepiru AI turns any CSV, Excel file, or even a photo of a handwritten register into analyst-grade insight; free, in 14 languages, with nothing ever stored. One platform, nine capabilities: Conversational data chat - ask anything about your data in plain language ML training & explainability - 10+ models, auto-tuned, with predictions explained in plain words Anomaly detection (IQR, Z-Score, Isolation Forest) and forecasting with confidence bands Natural Language → SQL - executed instantly, no code Multilingual AI reports - generated in one click Vision AI and a Logbook Digitizer - the only tool we know of that converts handwritten paper ledgers into clean CSV Data profiling & cleaning, 3D visualizations

Unlike Tableau, Power BI, or even open-source stacks; which assume a budget, a technical team, and English; Sepiru AI assumes nothing. No account. No payment. No expertise. Nothing stored. Free, Private, Multilingual, Powerful- that intersection didn't exist before. Now it does.

How we built it

AI layer: Google Gemini 2.0 Flash as the primary reasoning engine, with automatic fallback to Groq + LLaMA 3.3 70B when quota is hit, and Groq + LLaMA 4 Scout 17B for vision and the two-pass logbook OCR pipeline — zero downtime, no single point of failure.

ML/Data layer: scikit-learn, XGBoost, LightGBM, CatBoost for production-grade modeling; DuckDB as an in-memory SQL engine for NL-to-SQL with zero external data transfer; Pandas/NumPy/SciPy for cleaning and profiling; Plotly for interactive 3D visuals.

Delivery: Streamlit + Streamlit Cloud for a zero-infrastructure, globally accessible app, wrapped in a custom security layer (math CAPTCHA, honeypot, input sanitization, quota guard).

The pipeline, end to end: The moment a user opens the app, a math CAPTCHA and a honeypot trap gate the entry before a single byte of data moves. A CSV or Excel file is parsed directly with Pandas, while a photo of a handwritten ledger is routed through a two-pass OCR pipeline - LLaMA 4 Scout first pulls raw text off the page, then re-reads its own output to structure it into clean CSV rows. Everything from there lives in RAM only: cleaning, profiling, and visualization all happen in-session, with no write to disk. Every user query then passes through a quota-aware AI engine - Gemini 2.0 Flash answers first, and the instant its free-tier quota is touched, the system falls back to Groq's LLaMA 3.3 70B without the user noticing a pause. On top of that same in-memory data, the feature modules - ML training, anomaly detection, forecasting, NL-to-SQL, multilingual reporting - run independently and hand back insights, charts, predictions, or a downloadable CSV. The moment the browser closes, the session and every trace of the user's data are gone for good.

The math behind it: Auto-detection of classification vs. regression, and everything downstream of it, is grounded in real statistics, not guesswork. Outlier detection runs three tests in parallel - the IQR rule flags any point outside [ Q1−1.5 IQR, Q3+1.5 IQR ][\,Q_1 - 1.5\,\text{IQR},\ Q_3 + 1.5\,\text{IQR}\,] [Q1​−1.5IQR, Q3​+1.5IQR], the Z-score test flags ∣z∣=∣x−μσ∣>3|z| = \left|\dfrac{x-\mu}{\sigma}\right| > 3 ∣z∣=​σx−μ​​>3, and an Isolation Forest catches the non-linear anomalies neither rule alone can see. Every trained model - Random Forest, XGBoost, LightGBM, CatBoost, and more - is cross-validated and ranked on a leaderboard using R2=1−∑i(yi−y^i)2∑i(yi−yˉ)2R^2 = 1 - \dfrac{\sum_i (y_i - \hat{y}_i)^2}{\sum_i (y_i - \bar{y})^2} R2=1−∑i​(yi​−yˉ​)2∑i​(yi​−y^​i​)2​ for regression and F1-score for classification, so the model a shopkeeper trusts is the one that actually earned it on unseen data. Forecasts are never handed over as a bare number — each predicted point y^t\hat{y}_t y^​t​ ships with a 95% confidence band, y^t±1.96 σt\hat{y}_t \pm 1.96\,\sigma_t y^​t​±1.96σt​, so a farmer sees not just what will happen, but how sure the model is in saying so.

Challenges we ran into

Almost every challenge was a dependency pulling the rug out from under us, mid-build: Streamlit deprecated components.html, breaking every animation, so, rebuilt on st.iframe with CSS containment AdaBoostClassifier was silently removed in scikit-learn 1.8, crashing training - version-safe detection Datetime columns threw ufunc subtract errors in StandardScaler - converted to epoch seconds Google decommissioned the Gemini model we relied on, without warning - migrated to gemini-2.0-flash on the new google-genai SDK Custom cursor animations failed under Streamlit Cloud's iframe sandboxing - solved by injecting motion via window.parent.document google-generativeai itself was deprecated mid-project and fully replaced

None of these were guesswork fixes - each sent us into changelogs, sandboxing docs, and dtype internals before we touched code. The hardest-won feature, though, wasn't technical: it was trust.

Accomplishments that we're proud of

The shopkeeper from the start of this story? He cut all 4 loss-making products he found - an estimated ₹4,200/month back in his pocket, roughly 4,200×12=₹50,400 a year, just from finally seeing his own numbers clearly An NGO worker analyzed 2 years of beneficiary data in under 10 minutes - work that used to take 3 days A farmer used forecasting to plan next season's crop 94% of users found insights they'd never known existed; 89% said they'd use it weekly; 99% named the privacy-first design as the deciding factor

We built and battle-tested all of it on ₹0/month, running entirely on free-tier APIs and open-source tools - not a limitation, a principle

What we learned

We tested with 18 real users across 3 rounds - shopkeepers, farmers, NGO workers, students - and the most important lesson came early: every single user refused to continue the moment they saw Firebase or Google OAuth. "I don't want my business data on anyone's server," they told us, again and again. So we tore out every login, every database, every cloud store, and rebuilt around a session-only architecture. Trust wasn't a feature we added - it was the foundation we rebuilt on.

What's next for Sepiru AI

Users handed us the roadmap themselves: a mobile app with camera-first logbook scanning (already in progress), voice input in regional languages, offline mode for low-connectivity areas, and WhatsApp delivery of insights for shopkeepers who live on that app. Because it's stateless by design, none of this needs new infrastructure - just code.

A closing thought: Every feature here traces back to a real person: a shopkeeper who didn't know he was losing money, a farmer reading his own harvest blind, an NGO worker whose data sat unread, a student with questions and no tools to answer them. We built Sepiru AI free, private, and multilingual because we refused to accept that intelligence is only for people who can afford it.

Built With

Share this project:

Updates