💡 Inspiration

🩺 Getting a doctor's appointment for something small — a weird patch of skin or a string of vague symptoms — often takes longer than it should. 😕 Many people end up self-diagnosing through random Google searches, which can be confusing or misleading. 🌐 I wanted to build a quick first-pass health screening tool that gives users an honest, explained starting point before deciding whether they should visit a doctor. ❤️


🚀 What it does

PULSE runs two independent health checks:

📷 Skin Scan

  • 🧠 A CNN model classifies a skin photo as Normal, Acne, or Eczema
  • 📊 Provides confidence scores for each prediction

💬 Symptom Checker

  • ✍️ Users describe their symptoms in plain language
  • 🤖 Predicts the most likely conditions using an ML model

✨ Every prediction is accompanied by a plain-English explanation generated by Groq AI, so users understand why the model reached its conclusion instead of seeing just percentages.

📁 Users can also:

  • 🕘 Save their scan history
  • 🔄 Revisit previous reports
  • 📄 Download a detailed PDF report containing:

    • 👤 User information
    • 📊 Prediction results
    • 💡 AI explanation
    • 🏥 Contact details of the nearest dermatologist (automatically fetched using OpenStreetMap)

🛠️ How I built it

💻 Frontend: React + TypeScript

⚙️ Backend: Flask

🖼️ Skin Disease Detection:

  • 🧠 Keras CNN

📝 Symptom Prediction:

  • 📚 TF-IDF Vectorizer
  • 📈 Logistic Regression

📄 PDF Reports:

  • jsPDF

🗺️ Nearest Dermatologist Lookup:

  • OpenStreetMap Overpass API (No API key required)

☁️ Deployment:

  • ▲ Frontend on Vercel
  • 🚀 Backend on Render

⚡ Challenges I ran into

🤖 Initially, the symptom checker used Bio_ClinicalBERT with PyTorch and Transformers.

💥 Unfortunately, it required far more RAM than a free-tier server could provide, causing the backend to crash whenever a symptom request was made.

🔄 I switched to a lightweight TF-IDF + Logistic Regression pipeline, which dramatically improved reliability while still providing meaningful, explainable predictions.

🐞 Along the way I also solved several deployment issues:

  • ❌ Missing Flask app initialization
  • 📂 Gitignored model files
  • 🐍 Python version mismatches
  • 🔧 Environment configuration errors

Each bug reinforced one lesson:

📖 Read the error carefully before guessing the solution.


🏆 Accomplishments I'm proud of

🎉 Building the entire project solo from start to finish.

✅ Successfully integrated:

  • 🧠 Two machine learning models
  • 🤖 AI-generated explanations
  • 📄 Automated PDF generation
  • 🗺️ Dermatologist locator
  • ☁️ Full-stack deployment

❤️ I'm also proud that PULSE doesn't overpromise.

Every prediction clearly states that it is:

  • ⚠️ A screening aid
  • 🚫 Not a medical diagnosis
  • 👨‍⚕️ Encourages consulting a real dermatologist when needed

📚 What I learned

💡 Free-tier infrastructure has real limitations.

🏗️ The most sophisticated model isn't always the best choice if it can't run reliably in production.

✅ A lightweight, dependable model that works every time provides a much better user experience than a larger model that repeatedly crashes.


🌱 What's next for PULSE

🚀 Planned improvements include:

  • 🩺 Support for many more skin conditions beyond Normal, Acne, and Eczema
  • ☁️ Backend database for persistent scan history instead of local storage
  • 📅 Integration with real telehealth platforms or dermatologist appointment booking APIs
  • 📱 Improved mobile responsiveness
  • 🌍 Multi-language support
  • 📊 Better model accuracy through larger medical datasets

❤️ Final Note

PULSE was built as a quick, honest first-pass health screening tool—not a replacement for a doctor 👨‍⚕️, but a smarter starting point than relying on random search results. 🔍

Built With

Share this project:

Updates