DEV Community

Cover image for I Built A Tinder Clone Using The FARM Stack
Mahmoud Harmouch
Mahmoud Harmouch

Posted on

 

I Built A Tinder Clone Using The FARM Stack

Demo

What I built

I built a tinder Clone mainly using React, MUI, and Redux for the client, and FastAPI, ODMantic, MongoDB Atlas for the server.

Category Submission:

Think Outside the JS Box: FARM Stack.

App Link

  • Netlify Demo

  • Note: Web-sockets are not guaranteed to work in the demo. If it works, that's great. Otherwise, you have to run/deploy both the client and server locally.

Screenshots


Landing Page.


Sign Up Form.


OnBoarding Page.


Main Page.


Swiping Right.


Swiping Left.


Matches List.


Sending Messages.


User Info.


Edit Info.


Reset Password.

Description

Brave Date is a fully featured Tinder clone developed using open source tools from scratch. It's designed to become the ultimate Tinder clone. It is user-friendly with a clean interface that is easy to navigate.

Link to Source Code

Client Repo

GitHub logo brave-date / brave-date

The ultimate Tinder clone built with React, MUI, Redux, and friends.

Brave Date

Typing Netlify Status Demo on Netlify Tag Docs

All Contributors

Brave Date.

Table of Contents

Introduction

Brave Date is a fully featured Tinder clone developed using open source tools from scratch. It's designed to become the ultimate Tinder clone. It is user-friendly with a clean interface that is easy to navigate.

As well as being feature-rich, Brave Date is also fully responsive, meaning it will work seamlessly on a wide range of devices. So whether you're dating on your desktop or your mobile, you'll always have a great experience.

Supported Features

  • Landing Page.

Landing Page.

  • OnBoarding Page.

OnBoarding Page.

  • Tinder Cards.

Tinder Cards.

  • Keyboard shortcuts.

Keyboard shortcuts.

  • Sending and receiving text messages in real time.

Sending and receiving text messages.

  • Sending and receiving images in real time.

Sending and receiving images.

  • Emojies support.

Emojies support.

  • The ability to render HTML tags, links, emails, etc.

HTML tags being rendered.

  • The ability to render markdown text.

HTML tags being rendered.

Core Libraries

- Create React App

- React

- React Router 6

- Material…

Server Repo

GitHub logo brave-date / brave-date-server

Brave Date server powered by FastAPI, ODMantic, MongoDB, Deta, and friends.

Brave Date Server

linting: pylint Code style: black Static typing: mypy pre-commit.ci status License: MIT Codeql

Architecture

A Fully Async-based backend for Brave Date.

Table of Contents

Database

Brave Date Database Collections

You can refer to the official documentation for detailed information about the database collections and how data was modeled.

Development Requirements

  • Make (GNU command)
  • Python (>= 3.9)
  • Poetry (1.2)

Project Structure

❯ tree app
.
├── auth          # Package contains different config files for the `auth` app.
│   ├── crud.py       # Module contains different CRUD operations performed on the database.
│   ├── models.py     # Module contains different data models for ODM to interact with database.
│   ├── router.py     # Module contains different routes for this api.
│   └── schemas.py    # Module contains different schemas for this api for validation purposes.
├── matches       # Package contains different config files for the `matches` app.
│   ├── crud.py       # Module
Enter fullscreen mode Exit fullscreen mode

Permissive License

Background

I decided to push my knowledge of UI/UX design, databases, and programming in general by building a clone for a major brand. I gave it some thought, and I settled on building a Tinder clone.

How I built it

As mentioned in the intro, I built it mainly using React, MUI, and Redux for the client, and FastAPI, ODMantic, MongoDB Atlas for the server. I learned a ton about, including but not limited to, React, MUI, Redux, FastAPI, and MongoDB Atlas and how to model data in the NoSQL world. For instance, the following is a set of collections that demonstrate how the data was modeled and stored in the database.


Database Collections.

The following is a high overview of the server architecture, and how the components are interconnected.


Server Architecture.

Additional Resources/Info

For Hobbyists.

Show Daily Progress on Twitter

Day 1

unknown tweet media content Play butt Mahmoud Harmouch  profile image Mahmoud Harmouch  @wiseaidev twitter logo Finished the landing page of a @Tinder(don't sue me, bruh.) clone I am currently building using @MUI_hq.

👉 Demo: brave-date.netlify.app

#ReactJS #MUI #tinder 11:07 AM - 19 Nov 2022 Twitter reply action Twitter retweet action Twitter like action
unknown tweet media content Play butt Mahmoud Harmouch  profile image Mahmoud Harmouch  @wiseaidev twitter logo Login form? Done✅.

👉Demo: brave-date.netlify.app
👉Repo: github.com/brave-date/bra…

Built using @reactjs and @MUI_hq

The onboarding page for tomorrow.

@Tinder, you better watch out.

#ReactJS #mui #javascript 19:06 PM - 19 Nov 2022 Twitter reply action Twitter retweet action Twitter like action

Day 2

unknown tweet media content Play butt Mahmoud Harmouch  profile image Mahmoud Harmouch  @wiseaidev twitter logo OnBoarding page? Done✅.
👉Demo: brave-date.netlify.app
👉Repo: github.com/brave-date/bra…
Built using @reactjs and @MUI_hq

@olivtassinari, the Date picker com was pretty challenging to make it work.

Swiping cards page for tomorrow.

@Tinder, your title is on the line.

#ReactJS 20:03 PM - 20 Nov 2022 Twitter reply action Twitter retweet action Twitter like action

Day 3

unknown tweet media content Mahmoud Harmouch  profile image Mahmoud Harmouch  @wiseaidev twitter logo Today, I worked on the Onboarding page by replacing the img tag with react-dropzone. I have learned about CSS display grid and some CSS magic. Now it is pretty damn close to the real one. Less gooo!

Onboarding Demo: brave-date.netlify.app/app/onboarding
Repo: github.com/brave-date/bra…

#ReactJS 16:19 PM - 21 Nov 2022 Twitter reply action Twitter retweet action Twitter like action

Day 4

unknown tweet media content Play butt Mahmoud Harmouch  profile image Mahmoud Harmouch  @wiseaidev twitter logo Recs page? Semi-Done✅.

👉Demo: brave-date.netlify.app/app/recs
👉Repo: github.com/brave-date/bra…

Built using @reactjs and @MUI_hq

@olivtassinari, at this point, I feel like I went over every damn component in the MUI world.

@Tinder, you may go out of business.

#ReactJS #javascript 16:13 PM - 22 Nov 2022 Twitter reply action Twitter retweet action Twitter like action

Day 5

unknown tweet media content Play butt Mahmoud Harmouch  profile image Mahmoud Harmouch  @wiseaidev twitter logo Recs page? Close-To-Finish✅.

👉Demo: brave-date.netlify.app/app/recs
👉Repo: github.com/brave-date/bra…

Built using @reactjs and @MUI_hq

@olivtassinari, I like that MUI is equipped with all the icons needed. Many thanks for the effort.MUI='<3'

@Tinder, you are in real danger.

#ReactJS 14:34 PM - 23 Nov 2022 Twitter reply action Twitter retweet action Twitter like action

Day 6

unknown tweet media content Play butt Mahmoud Harmouch  profile image Mahmoud Harmouch  @wiseaidev twitter logo Today, I added redux to the website and configured the workflow between the pages. I know that redux is not mandatory, but it is ok to use it. Right @dan_abramov?

👉Demo: brave-date.netlify.app
👉Repo: github.com/brave-date/bra…

#ReactJS #redux #javascript #100daysofcoding 18:31 PM - 24 Nov 2022 Twitter reply action Twitter retweet action Twitter like action

Day 7

Mahmoud Harmouch  profile image Mahmoud Harmouch  @wiseaidev twitter logo Finally, I found what I was looking for. It is called ODM in the NoSQL world, not ORM. My life has been saved.
github.com/art049/odmantic

#fastapi #MongoDB #python 20:03 PM - 26 Nov 2022 Twitter reply action Twitter retweet action Twitter like action

Day 8

unknown tweet media content Mahmoud Harmouch  profile image Mahmoud Harmouch  @wiseaidev twitter logo Today, I managed to create 4 endpoints for the project I am currently working on using @FastAPI, @MongoDB, and ODMantic created by lord @Art049.

👉 Repo: github.com/brave-date/bra…

Until next time.

#python #fastapi #mongodb 21:14 PM - 27 Nov 2022 Twitter reply action Twitter retweet action Twitter like action

Day 9

unknown tweet media content Mahmoud Harmouch  profile image Mahmoud Harmouch  @wiseaidev twitter logo Today, I created two endpoints to insert/fetch users into/from the matches list.

👉Repo: github.com/brave-date/bra…

#python #fastapi 16:38 PM - 28 Nov 2022 Twitter reply action Twitter retweet action Twitter like action

Day 10

unknown tweet media content Mahmoud Harmouch  profile image Mahmoud Harmouch  @wiseaidev twitter logo Even pydantic doesn't have any clue about what the hell I am doing.

#python #fastapi 07:38 AM - 30 Nov 2022 Twitter reply action Twitter retweet action Twitter like action

I would appreciate reading your opinions on this project.


Top comments (0)