A personal trainer marketplace connecting students with personal trainers.
Screenshots coming soon.
- 🔐 Authentication — Sign up and sign in with email and password
- 🏠 Home — Browse featured and nearby personal trainers
- 🔍 Search — Search trainers by name, specialty or location
- 👤 Trainer Profile — View trainer details, rating and book a session
- 📅 Bookings — Schedule and manage training sessions (coming soon)
- 💬 Chat — Message your trainer directly (coming soon)
- 💳 Payments — Pay for sessions securely via Stripe (coming soon)
Movely is built with Clean Architecture + MVVM, ensuring clear separation of concerns across three layers:
Domain Layer → Entities, Use Cases, Repository Protocols
Data Layer → Repository Implementations, Firebase
Presentation Layer → ViewModels, Views, Routers
For a detailed explanation, see ARCHITECTURE.md.
| Layer | Technology |
|---|---|
| Language | Swift 5.9 |
| UI Framework | SwiftUI |
| State Management | Swift Observation (@Observable) |
| Backend | Firebase (Auth + Firestore) |
| Architecture | Clean Architecture + MVVM |
| Navigation | NavigationStack + Router Pattern |
| CI/CD | GitHub Actions |
| Code Quality | SwiftLint + SonarCloud |
- Xcode 15.4+
- iOS 17.0+ Simulator or Device
- Firebase account
- Clone the repository
git clone https://github.com/rudrigaum/Movely.git
cd Movely- Open the project
open Movely.xcodeprojConfigure Firebase
- Create a project at Firebase Console
- Add an iOS app with bundle ID
com.rudrigo.Movely - Download
GoogleService-Info.plist - Add it to
Movely/Resources/(never commit this file)
Resolve Swift Package dependencies
- Xcode will resolve packages automatically on first open
Run the app
- Select an iOS 17+ simulator
- Press
Cmd + R
# Run all tests
Cmd + U
# Run tests via xcodebuild
xcodebuild test \
-project Movely.xcodeproj \
-scheme Movely \
-destination 'platform=iOS Simulator,name=iPhone 15,OS=17.5'Movely/
├── App/ # App entry point and root navigation
├── Core/
│ ├── Domain/
│ │ ├── Entities/ # User, Trainer, Booking
│ │ ├── Repositories/ # Repository protocols
│ │ ├── UseCases/ # Business logic
│ │ └── Utils/ # Validators, helpers
│ ├── Data/
│ │ └── Repositories/ # Firebase implementations
│ └── DI/ # AppEnvironment (dependency injection)
├── Features/
│ ├── Auth/ # Login, Register, ForgotPassword
│ ├── Student/ # Home, Search, Bookings, Profile
│ ├── Trainer/ # Trainer dashboard (coming soon)
│ ├── TrainerProfile/ # Trainer detail screen
│ └── Navigation/ # MainTabView, routing
└── Shared/
├── Components/ # MovelyButton, MovelyTextField, TrainerCard
├── DesignSystem/ # Colors, Typography, Spacing
├── Extensions/ # Swift extensions
└── ViewModifiers/ # Reusable SwiftUI modifiers
MovelyTests/
├── Domain/
│ ├── UseCases/ # Use case unit tests
│ └── Utils/ # Validator tests
└── Presentation/
├── Home/ # HomeViewModel tests
└── Search/ # SearchViewModel tests
main → Production-ready code
feat/* → New features
fix/* → Bug fixes
chore/* → Internal tasks
refactor/* → Code refactoring
test/* → Test coverage
Commit messages follow Conventional Commits:
feat(auth): add forgot password flow
fix(home): fix trainer card tap not navigating
chore(ci): update GitHub Actions to v5
- SwiftLint — enforces Swift style and conventions
- SonarCloud — tracks code quality, coverage and security
- Design System
- Authentication Flow
- Home Screen
- Trainer Profile
- Search
- User Profile
- Firestore Integration
- Bookings
- Stripe Payments
- Chat
- Android Version (Kotlin)
- Push Notifications
This project is licensed under the MIT License — see the LICENSE file for details.
Rodrigo Cerqueira
- GitHub: @rudrigaum
Built with ❤️ using SwiftUI and Clean Architecture.