Case study · № 082026ImpactThon

Kidnex

A full-stack health platform where users upload a kidney CT scan and get an AI classification — cyst, normal, stone, or tumor — with per-class confidence, plus Gemini-generated health guidance, medication tracking, vitals logging, and a context-aware chatbot. Built by a team at the ImpactThon hackathon.

Team~5 people
My roleFront end / UI
ModelResNet50
Classes4
kidnex · ct scan
ClientAPIServices & dataReactVite · drag-drop uploadNode / ExpressorchestrationCloudinaryscan storeFlask · ResNet50Keras · 4-class softmaxPostgreSQLPrisma · historyGeminihealth guidancestoreinferadvice
Fig. 1 · Three-tier CT screening — React → Node → Flask/ResNet50, four-class prediction with per-class confidence, Gemini guidance. (I owned the front end.)
01

Context

Kidney conditions — cysts, stones, tumors — are common, but reading a CT scan needs a radiologist, and that’s slow and access-limited. Kidnex screens a scan automatically and wraps the result in a patient-facing platform: history, risk scoring, and AI guidance to make early detection and follow-up more reachable.

An ImpactThon team project — a healthcare-impact hackathon. Roughly five contributors.

upload · classify
02

The three-tier flow

A user drags a CT image into the React front end. A Node/Express backend validates it, stores it on Cloudinary, and relays it to a Python Flask service that runs a Keras model and returns a prediction plus per-class probabilities. The backend then persists the result, computes a risk score, and asks Gemini for a plain-language recommendation.

The model is ResNet50 transfer learning on 256×256 RGB input, softmax over four classes — Cyst, Normal, Stone, Tumor.

react → node → flask
03

My role, honestly

I was the front-end developer, not the model author. I built most of the React surface — the dashboard, detection page and history, health logs, medications, profile, the onboarding flow, the landing page, the shared layout, and the floating context-aware chatbot widget — plus a cross-cutting bug-fix pass that reached into the Flask service and the Gemini config. The deep-learning model and its training were a teammate’s work; I made the thing usable around it.

confidence bars
04

What worked

Color-coded confidence bars for everyclass, not just the winner, made the output honest — a borderline scan looks borderline instead of falsely certain. And feeding the user’s profile and recent detections into the chatbot’s context turned it from a generic bot into something that could answer “what does my last result mean?” sensibly.

05

What I would change

The scan relays through Base64 in the request body, which is fine for a demo image and wrong for anything larger — I’d stream directly to the Flask service or hand it a Cloudinary URL. And an AI medical result needs a loud, non-negotiable “not a diagnosis, see a doctor” framing everywhere it appears, not just once.

Built with
React 18ViteTailwindNodeExpressPrismaPostgreSQLPythonFlaskTensorFlow / KerasResNet50Gemini
← PreviousMGNREGA PortalNext →Cafe POS
You found the trick.
Thanks for
looking closely.
↑ ↑ ↓ ↓ ← → ← → B A · konami