A modern matchmaking application designed for older people. Built with Java, Spring Boot, PostgreSQL, TypeScript, and React.
- Features
- Tech Stack
- Prerequisites
- Installation
- Seed Database
- Usage
- Project Structure
- Docker Commands
- Authors
- Profile Management - Create and customize your profile with bio, hobbies, preferences, and profile picture
- Find New Connections - Smart matching algorithm finds perfect matches based on:
- Gender preference
- Age
- Location
- Mutual interests
- Real-time Chat - Talk to your connections in real-time powered by WebSocket
- Responsive Design - Find new connections on every device
Frontend:
- TypeScript + React + Vite + Tailwind CSS
Backend:
- Java + Spring Boot
Database:
- PostgreSQL 14 + Docker
- Docker Desktop - Required for running the application
- Java 17+
Download Docker Desktop for free: https://www.docker.com/products/docker-desktop/
git clone https://gitea.kood.tech/jeremyvaask/web.git
cd webNote: Use docker compose (modern) or docker-compose (legacy) depending on your Docker version. Both commands work the same way.
docker-compose build --no-cache
docker-compose upThis automatically installs all the necessary dependencies and runs both backend and frontend.
- Go to: http://localhost:5050
- Log in with:
- Email:
admin@matchme.com - Password:
adminho
- Email:
- Create a new server with these settings:
General:
Name: matchme-db
Connection:
Host: postgres
Port: 5432
Database: matchme
Username: matchme_user
Password: matchme-password
Go to: http://localhost:5173
(Optional)
To use the application with 100 seed users:
- Go to
docker-compose.ymland uncomment line 42 by removing the#:
SPRING_DEVTOOLS_RESTART_ENABLED: "true"
# Remove the # below to automatically seed 100 users
SPRING_PROFILES_ACTIVE: seed- Run:
docker-compose upThe seed users will be automatically created.
- Navigate to the registration page at http://localhost:5173/
- Create an account by completing the registration steps
- After successfully creating an account, you'll be guided through the account completion steps
- Browse recommended profiles
- Like (❤️) users you're interested in
- Skip (✕) to move to the next profile
- When you like a user, it sends them a connection request
- Received requests can be found and interacted with in the Requests tab
- Once a request is accepted, the user appears in the Matches tab
- Click on a match to view their full profile
- You can Disconnect from users at any time if needed
- Open the Messages tab
- Click on a match to open the chat window
- Send messages with real-time delivery
- See when the other person is typing
- Unread message notifications appear as red dots on the Messages icon
web/
├── backend/
│ ├── src/main/java/com/matchme/backend/
│ │ ├── config/ # Security, WebSocket, CORS configs
│ │ ├── controller/ # REST API endpoints
│ │ ├── dto/ # Data Transfer Objects
│ │ ├── model/ # JPA entities
│ │ ├── repo/ # JPA repositories
│ │ ├── service/ # Business logic
│ │ ├── security/ # JWT authentication
│ │ ├── util/ # Utility classes
│ │ ├── UserSeeder.java # Database seeding
│ │ └── MatchMeBackendApplication.java # Main application
│ ├── src/main/resources/
│ │ └── application.properties # Backend configuration
│ ├── Dockerfile # Backend container setup
│ └── pom.xml # Maven dependencies
│
├── frontend/
│ ├── src/
│ │ ├── api/ # API service layer
│ │ ├── components/ # React components
│ │ │ ├── buttons/ # Button components
│ │ │ ├── chat/ # Chat components
│ │ │ ├── create-user/ # Steps to complete profile
│ │ │ ├── edit-profile/ # Profile editing
│ │ │ ├── headers/ # Header components
│ │ │ └── sidebar/ # Navigation sections
│ │ ├── context/ # React Context providers (global state)
│ │ ├── pages/ # Page components
│ │ ├── types/ # TypeScript type definitions
│ │ ├── App.tsx # Main app component
│ │ └── main.tsx # Application entry point
│ ├── index.html # HTML entry point
│ ├── vite.config.ts # Vite configuration
│ ├── Dockerfile # Frontend container setup
│ └── package.json # npm dependencies
│
└── docker-compose.yml # Docker orchestration
Note: Use docker compose (modern) or docker-compose (legacy) depending on your Docker version. Both commands work the same way.
docker-compose updocker-compose up --buildPress Ctrl + C in the terminal where docker-compose is running, then run:
docker-compose down- Jeremy Vaask
- Aigar Orav
- Timo Lipp