All projects
CompletedJun 2026 — present

CareReach

Telemedicine demo: symptom checks, hospital search, appointments.

An AI-powered telemedicine platform for remote healthcare consultations, built as a Streamlit app. Users chat with Gemini 1.5 Flash about their symptoms, search nearby hospitals by specialist type through the Google Maps Places API, book appointments, and review their health history, with bcrypt-hashed logins stored in SQLite.

Built with

PythonStreamlitGemini APIGoogle Maps APISQLite

Highlights

  • ▸Symptom checker chats with Gemini 1.5 Flash, and every past conversation stays reviewable as health history.
  • ▸Hospital finder searches nearby hospitals by specialist type via the Google Maps Places API.
  • ▸Signup and login use bcrypt-hashed passwords stored in SQLite.

From the README

CareReach

AI-powered telemedicine platform for remote healthcare consultations.

License Python Streamlit

Features

FeatureDescription
Symptom CheckerChat with Google Gemini 1.5 Flash about your symptoms and get instant analysis
Hospital FinderSearch nearby hospitals by specialist type using Google Maps Places API
Appointment BookingSelect a date, time, specialist, and hospital — saved to your account
Health HistoryReview all past symptom conversations
Secure AuthSignup and login with bcrypt-hashed passwords stored in SQLite

Setup

Prerequisites

Install

git clone <repo-url>
cd CareReach
uv sync

Configure

Copy .env.example to .env and fill in your API keys:

cp .env.example .env
# Backend secret — only the Maps key is needed here
GOOGLE_MAPS_API_KEY=your_maps_api_key

# Optional — enables appointment confirmation emails:
SENDER_EMAIL=your_gmail@gmail.com
SENDER_PASSWORD=your_gmail_app_password

# Note: Gemini API key is NOT set here — each user enters their own in the app UI.

Run

uv run streamlit run app.py

Open http://localhost:8501.

Deploy to Streamlit Community Cloud

  1. Push this repo to GitHub
  2. Go to share.streamlit.io and connect your repo
  3. Set Main file path to app.py
  4. Under Advanced settings → Secrets, add:
GOOGLE_MAPS_API_KEY = "your_maps_api_key"
  1. Click Deploy — done.

Project Structure

.
├── app.py                  # Streamlit entrypoint — routing and sidebar
├── src/
│   ├── auth.py             # Login and signup UI
│   ├── db.py               # SQLite helpers (users, history, appointments)
│   ├── hospital.py         # Google Maps hospital search + optional email
│   └── pages/
│       ├── chatbot.py      # Gemini 1.5 Flash symptom checker
│       ├── appointment.py  # Hospital finder and booking
│       └── history.py      # Health history viewer
├── .streamlit/
│   └── config.toml         # Dark theme, monospace font
├── .env.example            # Secrets template — copy to .env
├── pyproject.toml          # uv project config and dependencies
└── uv.lock                 # Locked dependency tree

Secrets Reference

Backend secrets (set by you — in .env locally, in Streamlit Cloud app secrets for deployment)

KeyRequiredWhere to get it
GOOGLE_MAPS_API_KEYYesGoogle Cloud Console → APIs & Services → Enable Places API → Credentials
SENDER_EMAILNoYour Gmail address
SENDER_PASSWORDNoGmail App Password — requires 2FA enabled

Note on email: If SENDER_EMAIL / SENDER_PASSWORD are not set, appointments are still saved to the database — the confirmation email is simply skipped.

User-provided (entered in the app UI — never stored on the server)

KeyRequiredWhere to get it
Gemini API KeyYes, per userGoogle AI Studio → Get API key (free tier available)

Each user enters their own Gemini API key via the ⚙️ AI Settings panel in the sidebar after logging in. The app fetches their available models dynamically and lets them choose which one to use. The key lives only in their browser session and is never persisted.

Tech Stack

  • UI: Streamlit 1.58+
  • AI: Google Gemini 1.5 Flash via google-generativeai
  • Maps: Google Maps Places API via googlemaps + geopy
  • Database: SQLite (local file users.db)
  • Auth: bcrypt password hashing
  • Package manager: uv

License

Apache 2.0 — see LICENSE.

Local Storage Notice

This site uses local storage to cache GitHub data for better performance, and an anonymous visit counter. No personal data is stored or shared.