Inspiration

Ask around and you will hear the same story many times. Someone has a fever, or a headache that will not go away, or a strange pain. The hospital is far, or the queue is long, or money is tight. So they do one of three things: they wait, they ask a neighbour, or they search the internet and read three pages of English they only half understand.

Waiting is the dangerous one. Most of the time it turns out to be nothing serious. Sometimes it is not, and the whole problem is that nobody can tell the difference from the outside.

I did not want to build an app that plays doctor. I wanted to build the thing that comes before the doctor: a calm, clear answer to two questions.

. What could this be? . Is this something I can handle at home, or do I need to go now?

And I wanted the answer in the language a person actually speaks at home, because health advice you cannot fully understand is not much help.

In my country Nigeria, the first question when someone feels unwell is often not "What could this be?" but usually "Is it enough to go to the hospital?". Most people have no quick way to answer that, In a language they fully understand. MEDUTECH is my attempt to give them one.

What it does

  • Symptom checker. Pick from 230+ symptoms, or type your own in plain words. You get a ranked list of possible causes, each marked Self-care at home, See a clinician soon or Emergency.
  • Health AI chat. Ask anything about symptoms, sleep, stress, food, tests or first aid. It only answers health questions.
  • Habits. Daily plans, streaks, a weekly view, mood check-ins, a breathing exercise and medicine reminders.
  • Find care and book checkups. Nearby care, and appointments you can add to your calendar.
  • Five languages. English, Nigerian Pidgin, Yoruba, Hausa and Igbo, across the whole site and in the AI's answers.
  • Emergency first. Warning signs put a 112 banner at the top of the page before anything else. ### The symptom checker is not just an AI

This was the part I cared about most. If the whole product were one prompt to a language model, I could not explain why it gave a certain answer. So the checker is its own piece of logic, built on a dataset of conditions. Each condition has weighted symptoms, a prior for how common it is, and an urgency level.

How we built it

I kept the stack small on purpose, so I could understand every part of it.

Part What I used
Front end Plain HTML, CSS and JavaScript. No framework.
Server A small Node.js server that holds the API key and talks to the AI
AI One switch in a .env file chooses Gemini, OpenAI or Anthropic
Accounts Passwords hashed with scrypt, signed HttpOnly cookies, rate limiting, optional Google sign-in

The API key never touches the browser. The browser talks to my server, and my server talks to the AI. The chat endpoint also refuses anyone who is not logged in.

Challenges we ran into

The chat box that disappeared. The message input was missing from the bottom of the chat page. The cause was a CSS grid row sizing itself to its content instead of the box height, so the form was pushed out and clipped. One line fixed it:

.chatapp { grid-template-rows: minmax(0, 1fr); }

Text spilling out of the result cards. On a narrow window, the symptom cards had a minimum width wider than the screen, so text ran over the border. I made the cards shrink and wrap, then tested on small screens.

The AI answering in English. When the language was set to Yoruba, the AI still answered in English if the question was typed in English, because my instruction said to match the user. I changed it so the chosen language wins.

Translated warning levels. For symptoms that are not in my list, I ask the AI to write possible causes. If the model translates the label Emergency into Yoruba, my code could not recognise it, and a serious cause could show up as harmless. So the AI now returns fixed English codes for the urgency, and only the name and the explanation are translated. If a label is ever unclear, the page falls back to See a clinician soon and never to the safest option.

Condition name | HOME or CLINIC or EMERGENCY | one short sentence on why

The network. At home, my computer sometimes could not reach the AI company's servers at all. It looked like a bug in my code. It was not. I wrote a small check.js script that tests which services are reachable, and the "AI test FAILED" message now tells me whether the problem is the network, the key or the free limit.

Accomplishments that we're proud of

The thing I'm proudest of is that it actually works. You can sign up, check your symptoms, chat with the health AI, track your habits and book a checkup. I built the server myself, so I can explain every part of it.

I also spent a lot of time on the languages. The site works in English, Pidgin, Yoruba, Hausa and Igbo, and the AI replies in whichever one you pick, even when you type in English. That took more fixing than I expected.

The symptom checker isn't only an AI. It has its own scoring, and when you type something that isn't in my list, the AI helps fill the gap.

I'm also glad I took safety seriously. Emergency symptoms show 112 first, and the match score never goes above 96%, because the app shouldn't sound sure when it can't be. It gives guidance, not a diagnosis.

What we learned

1. The AI should not be the whole product. The best part of MEDUTECH is what surrounds the model: the rules, the emergency checks, the scoring, the limits. Swapping one AI provider for another takes a one-line change. Rebuilding that logic would take weeks.

2. Safety is a design decision, not a disclaimer. A footer that says "not medical advice" does nothing on its own. What matters is what the product does: it shows 112 first, it caps its own confidence, it says when it does not know, and it tells you to see a clinician.

3. Language is more than translation. Pidgin is not broken English. Yoruba needs its tone marks. A health word that is clear in one language can sound frightening or vague in another. I learned to treat translation as part of the product and not a feature added at the end.

4. Small bugs can break trust. A chat box that is cut off the bottom of the screen looks unfinished, and a health tool that looks unfinished is not trusted.

5. Be honest about what it is. I did not train an AI model. MEDUTECH uses an existing model and gives it health-only rules, a style guide and a language setting. The part I built and can fully explain is everything around it.

What's next for MEDUTECH

MEDUTECH gives general guidance. It does not diagnose and it does not replace a doctor. I want that to be clear on every screen.

Before it is used with real patients, it still needs:

  • a paid AI tier, because free tiers may use prompts to improve the provider's products,
  • a real database instead of browser storage for appointments and habits,
  • email verification, password reset and https,
  • review of the symptom data by a clinician,
  • native speakers to check the Pidgin, Yoruba, Hausa and Igbo text.
  • if possible, patient can meet professional doctors online on the website and connect with them.
Share this project:

Updates

Submission history