GoWithMe is a full-stack cross-platform app that helps people find partners for sports and healthy lifestyle activities in their local area. The project was built during the Flutter Summer Course at Innopolis University
| Name | Role(s) | Responsibilities |
|---|---|---|
| Lavrova Marina | Frontend, Task Planning | Flutter, UI, integration with backend, task board |
| Alexander Blinov | Backend, DB | Architecture, database, backend, API, design slides |
| Leonid Merkulov | DevOps, Tests, Docs, Slides | CI/CD, Docker, tests, documentation, presentation |
- [3] Go-based backend (3 points)
- [2] RESTful API with Swagger documentation (2 point) - api and docs
- [1] PostgreSQL database with proper schema design (1 point) - db
- [1] JWT-based authentication and authorization (1 point) - jwt
- [1] Comprehensive unit and integration tests (1 point) [- tests][https://github.com/MAL-da-udal/GoWithMe/blob/dev/backend/internal/api/api_test.go]
- [3] Flutter-based cross-platform application (mobile + web) (3 points)
all app - [1] Responsive UI design with custom widgets (1 point) - custom widgets
- [1] State management implementation (1 point) - for search and for theme
- [1] Offline data persistence (1 point) - sharedPrefs and getStorage
- [1] Unit and widget tests (1 point) - here
- [1] Support light and dark mode (1 point) - here
- [1] Docker compose for all services (1 point) - here
- [1] CI/CD pipeline implementation (1 point) - here
- [0] Environment configuration management using config files (1 point)
- [1] GitHub pages for the project (1 point) - gh-pages
- [1] GitHub organization with well-maintained repository (1 point)
- [1] Regular commits and meaningful pull requests from all team members (1 point)
- [1] Project board (GitHub Projects) with task tracking (1 point) - board
- [1] Team member roles and responsibilities documentation (1 point)
- [1] Project overview and setup instructions (1 point)
- [1] Screenshots and GIFs of key features (1 point)
- [1] API documentation (1 point)
- [1] Architecture diagrams and explanations (1 point)
- [1] Consistent code style and formatting during CI/CD pipeline (1 point)
- [1] Code review participation and resolution (1 point)
- [2] Localization for Russian (RU) and English (ENG) languages (2 points) - here
- [3] Good UI/UX design (up to 3 points) - PR with design
- [0] Integration with external APIs (fitness trackers, health devices) (up to 5 points)
- [2] Comprehensive error handling and user feedback (up to 2 points) - here
- [3] Advanced animations and transitions (up to 3 points) - custom transitions via go_router
- [2] Widget implementation for native mobile elements (up to 2 points) - settings page
Total points implemented: 29/30 (excluding bonus points)
GoWithMe is designed to help users find activity partners for sports and healthy lifestyle events. The app supports user registration, profile management, activity search, and real-time results.
- Docker & Docker Compose (recommended for all platforms)
- (For development only) Flutter (3.22+) and Go (1.22+)
The easiest way to run the project (backend, frontend, and database) is using Docker Compose:
# Clone the repository
git clone https://github.com/MAL-da-udal/GoWithMe.git
cd GoWithMe
# Build and start all services
docker compose up --build- Backend: http://localhost:8080
- Frontend (Web): http://localhost:80
- Swagger API docs: http://localhost:8080/swagger/index.html
If you want to run and update services separately:
cd frontend
flutter pub get
flutter run Then choose the device on which you want to run
Important note: now the frontend connected to the API of the deployed server , so if you want to use your local mashine as a server: - change the baseUrl ( uncomment the line 7 and comment the line 6 in the file
frontend/lib/data/api/api_client.dart)
cd backend
go mod tidy
go run cmd/main.go- You can use the database from Docker Compose or your own local PostgreSQL instance.
cd frontend
flutter test --coveragecd backend
go test ./...All documentation can be found in swagger. You can access it on http://mhdserver.ru:8080/swagger/index.html
- HTTP Server framework: gin
- Database ORM: gorm
- Database: PostgreSQL
- JWT Authentication and authorization
- gORM for convenient communication with Database
- Gin framework to organize RESTful API
- Swagger for documentation
- State Management: Flutter_riverpod
- HTTP Client: Dio handle errors and refresh auth token automatically
- Storage: GetStorage for auth/refresh tokens and shared_prefs for other data
- Routing: GoRouter with custom tranistions
- Cross-platform: supports all platform with specific settings customization
- Localization: easyLocalization
- Authorization - login/register, handling tokens
- Automatically update access token after it expired using refresh token and interceptors in Dio
- Handle errors
- Store tokens in getStorage
- Profile - create and update profile, offline storing
- Store in cache with shared_prefs
- Upadte via dio
- Search - apply filters, store state in riverpod
- Load interests list from api
- Load users matched the filters
- Allow to open user profile with info and redirect to telegram
- Settings - theme and language switch + logout
- Theme switching via Theme and riverpod
- Translates all texts to chosen language
- Allows to logout
[User]
↓
[UI Layer: Screens & Widgets]
├── auth_page.dart
├── home_page.dart
├── profile_tab.dart
├── search_tab.dart
├── settings_page.dart
└── user_profile_page.dart
↓
[State Management (Riverpod Providers)]
├── searchProvider
└── themeProvider
↓
[Repositories]
├── AuthRepository
├── ProfileRepository
└── SearchRepository
↓
[API Client Layer]
└── ApiClient (Dio + interceptors + token refresh logic)
├── Base URL: http://mhdserver.ru:8080
├── Request Interceptor (adds Authorization header)
├── Error Interceptor (handles 401 + refreshes token)
└── Token Storage: GetStorage
↓
[HTTP REST API (Go Backend + PostgreSQL)]
[Models]
├── user.dart
└── (interests, etc.)
[Utilities & Helpers]
├── validations.dart
├── show_api_error.dart
├── open_url.dart
└── text_to_string.dart
[Local Storage Services]
└── shared_preferences_service.dart
[Theming & Localization]
├── app_theme.dart
├── app_colors.dart
├── app_text_styles.dart
└── assets/translations/ (en.json, ru.json)
Full app structure
[User]
|
v
[Flutter App]
|
v
[ApiClient] --> [AuthRepository, ProfileRepository, SearchRepository]
|
v
[REST API on Go] (Swagger)
|
v
[Business Logic Layer (Go)]
|
v
[PostgreSQL Database]
Full demo you could see here
- GitHub Organization: MAL-da-udal
- Repository: GoWithMe
- GitHub Pages (Web Demo): https://mal-da-udal.github.io/GoWithMe/
- Presentation video: https://drive.google.com/drive/folders/16_uYnuXlzk4iJTm0Z0DVk7sfJwKf0gUK?usp=sharing
- Project board: https://github.com/orgs/MAL-da-udal/projects/5




