AllCareMatch
AllCareMatch connects families needing in-home and specialized care ("careseekers") with independent caregivers and agencies ("caregivers") in one tracked workflow. Patients post care jobs and search vetted providers by specialization, rate, availability, and language; caregivers — gated behind a Stripe subscription — apply, chat in real time, and get hired into contracts that close with a star-rated review. CodingStack built the system end to end: an Express/MongoDB API, two role-scoped React apps plus a landing page served behind a single nginx domain, Socket.IO chat with read receipts, Stripe subscription billing backed by a webhook-synced mirror, S3-backed document uploads, and a Dockerized deploy with auto-renewed TLS and pre-release database snapshots.
Role Full-stack & infrastructure — domain modeling, REST API, real-time chat, Stripe billing, both React client apps, and Docker/nginx deployment
Problem
Families needing in-home or specialized care have no reliable way to find, vet, and hire qualified caregivers, while independent caregivers and agencies lack a steady channel to win work and get paid. Hiring happens over scattered calls and referrals with no shared record of credentials, schedules, rates, or who actually completed the job. AllCareMatch puts both sides on one platform — discovery, messaging, hiring, and reviews — so every engagement is tracked from posting to payment to rating.
Architecture
- H01
Two apps, one origin, role-scoped sessions
The caregiver and careseeker experiences are separate React 19 SPAs (plus a landing page) served behind a single nginx host at /caregiver and /careseeker. Each app namespaces its JWT under a role-specific localStorage key (doctor-access-token / patient-access-token) and sends an active-profile header (doctor-id / patient-id) that the API's auth middleware reads to scope every query and subscription check — so the two products share one domain without session collisions.
- H02
Subscription-gated marketplace with a Stripe mirror
Caregivers subscribe through Stripe Checkout (separate individual vs. agency price IDs, trial support, promo codes, billing-address collection). A webhook handler mirrors Stripe products, prices, subscriptions, and customers into MongoDB and flips the subscribed flag on both the user and caregiver records with computed expiry. A checkSubscriptionLimit middleware then enforces active, non-expired subscriptions before a caregiver can apply to jobs or accept invitations.
- H03
Real-time chat with presence-derived read state
Socket.IO connections authenticate via JWT in the handshake; rooms use deterministic IDs built from the sorted pair of user IDs. Messages persist to Mongo and are marked read based on whether the recipient's socket is already in the room, with a fan-out to per-user notification rooms for offline delivery, typing events, and unread counts. Conversation lists are assembled in a single aggregation that groups by room, counts unread, and joins the counterpart's caregiver or patient profile.
- H04
Aggregation-driven profiles and analytics
Caregiver listings run one $lookup-heavy aggregation that computes average rating, lifetime earnings, completed-job count, success percentage, and the three most recent populated jobs across the reviews, applications, jobs, and patients collections — then $facet-paginates. Contracts and applications use the same pattern, keeping multi-collection joins and pagination on the database rather than in app code.
- H05
Three hiring paths over one Application model
A contract can form three ways — a caregiver applies to a posted job, a patient invites a specific caregiver (a 7-day invitation that converts to an application), or an instant book-from-chat that creates a system-type job with a pre-approved application. All three funnel into a single Application lifecycle (applied → approved/hired → completed → review, or withdrawn/rejected/terminated), so downstream queries, analytics, and reviews stay uniform.
- H06
Dockerized multi-service deploy on shared infra
docker-compose orchestrates four app images plus MongoDB and an nginx reverse proxy that terminates Let's Encrypt TLS, auto-renewed by a certbot sidecar; the API runs under PM2. A deploy script pulls every repo, takes a mongodump snapshot before each release, and supports all-services or single-service redeploys. Uploaded documents/images live in S3 with a CloudFront asset path, and the same nginx co-hosts a separate inventory product on a shared external proxy network.
Key features
- 01Dual-role signup via email/password or Google OAuth, with the role (caregiver vs. careseeker) chosen at registration and a matching profile provisioned automatically.
- 02Guided onboarding wizards — 2 steps for patients, 5 for caregivers (credentials, certification documents, availability, then Stripe subscription) — with progress tracked server-side via a steps counter and enforced by client route guards.
- 03Care-job posting with budget, location, schedule window, medical history, care type, and gender/language/specialization preferences.
- 04Caregiver discovery with keyword search and filters (rate band, care type, specialization, availability, gender, language), returning per-provider rating, lifetime earnings, and success stats.
- 05Job applications with duplicate-prevention and subscription gating, plus a paginated applicant view per job.
- 06Patient-initiated invitations to a specific caregiver (7-day expiry) that convert into an application on accept.
- 07Instant "book from chat" flow that spins up a system job and an auto-approved contract directly from a conversation.
- 08Full contract lifecycle: accept/hire, mark complete (with rating + review), withdraw, reject, and terminate-with-reason.
- 09Real-time 1:1 chat with typing indicators, presence-based read receipts, unread counts, file/image messages, and a conversation list resolving the other party's caregiver/patient profile.
- 10Caregiver analytics dashboard: ongoing jobs, total applications, amount received, earnings from active contracts, average rating, and success percentage.
- 11Star-rating reviews tied to completed contracts, aggregated into the rating shown on caregiver profiles.
- 12Profile management with image and typed credential-document uploads streamed to S3, plus tokenized email verification and password reset over SMTP.
Stack
Frontend
Backend
Data
Infra
Status
Live
An idea, an existing app, or something in between?
Tell us what you're trying to ship. We reply within one business day with a written take on scope and timeline, not a sales pitch.