Live demo: https://mediconnect-web-1ahm.onrender.com
API health: https://mediconnect-api-u1ou.onrender.com/api/health
MediConnect is a small healthcare web app for scheduling visits and running simple telehealth sessions. It is built as a realistic MVP: enough of a real product to walk through end to end, with extra care in the places that usually break (double booking, payment confirmation, access control, and live video signaling).
Someone visiting the site can browse doctors and open time slots without creating an account. When they are ready to reserve a visit, they register or log in, hold a slot for a few minutes, confirm payment (mock mode by default), and later join a video consult if the visit is virtual. Doctors manage their availability and day schedule, write notes after a visit, and start the consult room. Admins can see basic counts and manage whether accounts stay active.
The stack is a React front end (Vite), a Spring Boot API, PostgreSQL, WebRTC in the browser with a WebSocket signaling channel, and Docker for local packaging. The UI uses a light clinical red-and-white layout with Syne and Manrope. Notes for a simple AWS-style deploy live under infra/aws.
- Open the landing page and explore the product
- Browse the doctor directory
- Open a doctor’s page and preview available slots
- Reserve a slot (the system holds it briefly so nobody else takes it while you pay)
- Confirm payment and see the appointment move to confirmed
- View your appointments and medical notes
- Join a virtual consult when the visit is online
- Publish and edit availability
- See the day’s appointments
- Start a WebRTC consult with the patient
- Add a visit note afterward
- View high-level metrics (patients, appointments, payments)
- Review users and disable accounts when needed
Under the hood, booking uses a short-lived hold, a database rule that blocks two active bookings for the same doctor and start time, and a background job that releases expired holds. Payments currently run in mock mode so you can demo the full flow without Stripe keys; the same hold → confirm sequence is what you would wire to Stripe PaymentIntents later.
You need JDK 17, Node.js, and Docker (for Postgres). On this machine the app uses 5433 for Postgres and 8081 for the API so it does not collide with other projects on 5432/8080.
# 1) Database
cd infra/docker
docker compose up -d db
# 2) API
cd ../../apps/api
$env:JAVA_HOME="C:\Program Files\Microsoft\jdk-17.0.20.8-hotspot" # Windows
.\mvnw.cmd spring-boot:run
# 3) Web
cd ../web
npm install
npm run dev| Service | Where to open it |
|---|---|
| Web UI | http://localhost:5173 |
| API | http://localhost:8081 |
| Postgres | localhost:5433 — user mediconnect / password mediconnect |
To bring up web, API, and database together:
cd infra/docker
docker compose up --build| Role | Password | |
|---|---|---|
| Patient | patient@mediconnect.local |
Password123! |
| Doctor | doctor@mediconnect.local |
Password123! |
| Admin | admin@mediconnect.local |
Password123! |
Suggested walkthrough: open Find doctors while logged out, pick a slot, then log in as the patient to reserve and pay. In another browser (or profile), log in as the doctor to see the appointment and start the consult.
MediConnect did not appear as a finished blueprint. Features were added in stages, decisions changed when something was too heavy for an MVP, and several runtime issues (ports already in use, Spring Boot / Flyway startup, CORS when using 127.0.0.1, and so on) were fixed as they showed up.
The longer story — what shipped, what broke, and what changed — is in docs/DEVELOPMENT.md.
apps/api Spring Boot API — auth, scheduling, payments, records, signaling
apps/web React UI — public browse, role-based patient/doctor/admin areas
infra/docker Docker Compose and image definitions
infra/aws Short notes for a simple cloud deploy
docs/DEVELOPMENT.md Development journal