matcha

πŸ’˜ Matcha

Welcome to Matcha, a real-time, fully-featured dating platform built with Ruby, React, and Love πŸ’Ž
Swipe, connect, chat β€” all backed by a beautiful API and blazing-fast frontend.


πŸŽ₯ Demo Preview (Login) ![Screencastfrom2025-05-0611-48-52-ezgif com-video-to-gif-converter](https://github.com/user-attachments/assets/7348ffc8-25d3-4781-aef4-a75a07a00808) *** πŸŽ₯ Demo Preview (Profile & Matching) ![Screencastfrom2025-05-0611-49-11-ezgif com-video-to-gif-converter](https://github.com/user-attachments/assets/060adffc-3435-4936-8d11-f5f3679d6739)

🌐 Live Preview


🧱 The Architecture

Layer Stack
Backend Sinatra + PostgreSQL + RSpec + Docker
Frontend React 18 + TypeScript + Vite + Tailwind
Live Docs Static Viewer with Simulated API Calls
Auth JWT + OAuth (Google, Intra42)
Realtime WebSockets for Chat, Typing Indicators and audio with Faye

🧭 Architecture Diagram

For the backend we decided to implement an API with Sinatra, following M~V~C (model-~view~-controller) And we created a Domain-specific language (DSL) for the API documentation.

β”œβ”€β”€ api
β”‚Β Β  β”œβ”€β”€ app
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ controllers
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ helpers
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ lib
β”‚Β Β  β”‚Β Β  └── models
β”‚Β Β  β”œβ”€β”€ config
β”‚Β Β  β”œβ”€β”€ db
β”‚Β Β  β”‚Β Β  └── migrate
β”‚Β Β  β”œβ”€β”€ docs
β”‚Β Β  └── spec
β”‚Β Β      β”œβ”€β”€ controllers
β”‚Β Β      β”œβ”€β”€ helpers
β”‚Β Β      └── models
β”œβ”€β”€ docs
└── web
    β”œβ”€β”€ public
    └── src
        β”œβ”€β”€ api
        β”œβ”€β”€ components
        β”‚Β Β  β”œβ”€β”€ chat
        β”‚Β Β  β”œβ”€β”€ forms
        β”‚Β Β  β”œβ”€β”€ location
        β”‚Β Β  β”œβ”€β”€ match
        β”‚Β Β  └── profile
        β”œβ”€β”€ context
        β”œβ”€β”€ hooks
        β”œβ”€β”€ pages
        β”œβ”€β”€ types
        └── utils

πŸ”₯ Core Features


### πŸ–ΌοΈ Screenshots
🧭 Dashboard β€” Real-time feed and quick actions | | | | ---------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | | πŸ’¬ Real-time feed showing new matches, profile activity, and shortcuts to actions. | ![Dashboard](https://github.com/user-attachments/assets/886b169b-5f92-4481-a54c-b856d90bd3a7) |
πŸ’¬ Chat Interface β€” WebSocket-powered messaging + voice | | | | -------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | | Messaging UI with live typing indicators, full message history, and voice call button. | ![Chat](https://github.com/user-attachments/assets/d5754b88-0c8c-4f92-b277-8c88485b03b7) |
πŸ‘€ Profile Page β€” View user bios, tags, and photos | | | | -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | | Full user profile with block/report actions, pictures, online status, and shared tags. | ![Profile](https://github.com/user-attachments/assets/79b80c13-ac83-4aec-8fca-5598fb226015) |
πŸ—ΊοΈ Matches (Map View) β€” Interactive exploration | | | | --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | | Discover matches based on location. Interactive map with card popups and quick connect. | ![Matches](https://github.com/user-attachments/assets/cac31f7e-bfc8-48e4-aec5-6bb0275c4de1) |
πŸ’˜ Matches (List) β€” Customizable filter for matches | | | | -------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | | Search people to fall in love! | ![Matches](https://github.com/user-attachments/assets/2c9d006b-fbc3-4a3e-ae5b-96e16ddb7a6b) |

πŸ’‘ Philosophy

πŸ“œ Everything documented

πŸ§ͺ Everything tested

🧼 Everything clean

πŸ’₯ Everything fails gracefully

❀️ Everything feels human


Made with πŸ’˜ by @Jsarda42 & @pulgamecanica