https://github.com/calku0/striveup
StriveUp is a cross-platform fitness tracking app built with Blazor Hybrid and .NET. It lets users track workouts, earn medals, connect with friends, and sync data from external providers like Strava and Fitbit. The backend is powered by ASP.NET Core, EF Core, Azure Functions, and hosted entirely on Azure.
https://github.com/calku0/striveup
activity-tracker aspnet-core azure azure-functions blazor cloudinary dotnet ef-core fitbit fitness-tracker garmin google-fit jwt-authentication maui strava webapi
Last synced: 3 months ago
JSON representation
StriveUp is a cross-platform fitness tracking app built with Blazor Hybrid and .NET. It lets users track workouts, earn medals, connect with friends, and sync data from external providers like Strava and Fitbit. The backend is powered by ASP.NET Core, EF Core, Azure Functions, and hosted entirely on Azure.
- Host: GitHub
- URL: https://github.com/calku0/striveup
- Owner: calKU0
- License: mit
- Created: 2025-03-30T13:26:31.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2025-06-11T17:02:58.000Z (about 1 year ago)
- Last Synced: 2025-06-11T19:03:50.166Z (about 1 year ago)
- Topics: activity-tracker, aspnet-core, azure, azure-functions, blazor, cloudinary, dotnet, ef-core, fitbit, fitness-tracker, garmin, google-fit, jwt-authentication, maui, strava, webapi
- Language: C#
- Homepage: https://striveup.kkurowski.com/
- Size: 6.53 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# StriveUp
> π **Thesis Project** β developed as part of a Bachelorβs thesis for the Applied Informatics at University of Economics in Cracow.
[](https://github.com/calKU0/StriveUp/actions/workflows/master_striveupapi.yml)
[](LICENSE)
StriveUp is a cross-platform activityβtracking app built with Blazor Hybrid and .NET. Track workouts, earn medals, connect with friends, and view rich activity charts (heart rate, speed, elevation, and more). The solution includes:
- **Blazor Hybrid Web App** (`StriveUp.Web`)
- **.NET MAUI Native App** (`StriveUp.MAUI`)
- **ASP.NET Core API** with Entity Framework Core (`StriveUp.API`)
- **Shared Models/Services** (`StriveUp.Shared`)
- **Infrastructure**: EF Core migrations and database-related tooling (`StriveUp.Infrastructure`)
- **Azure Functions**: External integrations and background jobs (`StriveUp.Sync`)
All services and apps are deployed to Azure App Service, Azure SQL Database, and Azure Functions.
---
## Table of Contents
1. [Features](#features)
2. [Architecture](#architecture)
3. [Tech Stack](#tech-stack)
4. [Repository Structure](#repository-structure)
5. [Prerequisites](#prerequisites)
6. [Getting Started](#getting-started)
7. [Configuration](#configuration)
8. [External Integrations](#external-integrations)
9. [Deployment](#deployment)
10. [Contributing](#contributing)
11. [License](#license)
---
## Features
- **Activity Tracking**: Record workouts, runs, rides, and more.
- **Medals & Achievements**: Earn badges for milestones and weekly challenges.
- **Social**: Connect with friends, like/comment their activities, and challenge each other.
- **Rich Charts**: View detailed charts for heart rate, speed, elevation, cadence, etc.
- **Multi-Platform**: Accessible via web browser or native mobile app (iOS, Android, Windows).
- **External Sync**: Import data from Garmin Connect, ZEPP OS, and other providers via Azure Functions.
---
## Architecture
```
ββββββββββββββββ βββββββββββββββββ ββββββββββββββββββββββ
β StriveUp.Web | βββββ β StriveUp.API β ββββββ β Azure SQL Database β
β (Blazor) β β (ASP.NET Core)β ββββββββββββββββββββββ
ββββββββββββββββ βββββββββββββββββ β²
β² β² β
β β β
ββββββββββββββββ ββββββββββββββββββ βββββββββββββββββ
βStriveUp.MAUI β β Azure Function β ββββββΆ β External APIs β
β (.NET MAUI) β β (Integrations) β βββββββββββββββββ
ββββββββββββββββ ββββββββββββββββββ
```
---
## Tech Stack
- **Frontend**: Blazor Hybrid (WebAssembly + server), .NET MAUI
- **Backend/API**: ASP.NET Core 9, Entity Framework Core
- **Database**: Azure SQL (Microsoft SQL Server)
- **Serverless**: Azure Functions (.NET 7)
- **CI/CD & Hosting**: Azure DevOps / GitHub Actions β Azure App Service & Functions
- **External APIs**: Unofficial Garmin Connect, ZEPP OS, etc.
- **Cloud Image Management**: User activity images and avatars are stored and served via Cloudinary.
- **Authentication**: Secure API access with JWT Bearer authentication for all endpoints.
---
## Repository Structure
```
StriveUp/
βββ StriveUp.sln
βββ .gitignore
βββ package.json # for Blazor Web client assets
βββ package-lock.json
βββ .github/ # Github related things, workflows
βββ StriveUp.API/ # ASP.NET Core Web API
βββ StriveUp.Infrastructure/ # EF Core migrations, domain models
βββ StriveUp.Sync/ # Azure Functions
βββ StriveUp.Shared/ # DTOs, shared services, shared components
βββ StriveUp.Web/ # Blazor Hybrid web project
βββ StriveUp.MAUI/ # .NET MAUI native app
```
---
## Prerequisites
- [.NET 9 SDK](https://dotnet.microsoft.com/download)
- [Visual Studio 2022](https://visualstudio.microsoft.com) or VS Code + C# extensions
- Azure subscription with:
- App Service Plan
- Function App
- Azure SQL Database
- External API credentials (Garmin, ZEPP, etc.)
---
## Getting Started
1. **Clone the repository**
```bash
git clone https://github.com/calKU0/StriveUp.git
cd StriveUp
```
2. **Restore & Build**
```bash
dotnet restore
dotnet build
```
3. **Run the solution**
- **API & Functions**:
```bash
cd StriveUp.API
dotnet run
```
In another terminal:
```bash
cd StriveUp.Sync
func start
```
- **Web App**:
```bash
cd StriveUp.Web
dotnet run
```
- **Native App**:
Open `StriveUp.sln` in Visual Studio, set `StriveUp.MAUI` as startup, and run on emulator/device.
---
## Configuration
All connection strings and secrets are managed in **`appsettings.json`** (local) or in Azure App Service / Function App configuration:
```jsonc
// StriveUp.API/appsettings.json
{
"ConnectionStrings": {
"DefaultConnection": "Server=...;Database=StriveUp;User Id=...;Password=..."
},
"Jwt": {
"Issuer": "...",
"Audience": "...",
"Key": "..."
},
"ExternalProviders": {
"Cloudinary": {
"CloudName": "...",
"ApiKey": "...",
"ApiSecret": "..."
},
"ZEPP": {
"ApiKey": "...",
"ApiSecret": "..."
}
}
}
```
- **Azure Functions**:
Set `FUNCTIONS_WORKER_RUNTIME`, `AzureWebJobsStorage`, and the same `ConnectionStrings` / provider secrets in your Function App settings.
---
## External Integrations
Azure Functions in `StriveUp.Functions` poll external APIs on schedule or webhook trigger, fetch user activity data, and push it into your appβs database via the APIβs endpoints. Supported providers:
- **Garmin Connect**
- **ZEPP OS**
- _...more to come!_
---
## Deployment
1. **Publish API & Web**
```bash
dotnet publish StriveUp.API -c Release
dotnet publish StriveUp.Web -c Release
```
2. **Deploy to Azure App Service**
- Create two App Services (API & Web).
- Deploy via CLI, Azure DevOps, or GitHub Actions.
3. **Deploy Azure Functions**
```bash
func azure functionapp publish
```
4. **Set Configuration**
In the Azure Portal, under each App/Function β Configuration, add your connection strings and secrets.
5. **Point Domain & SSL** (optional)
---
## Contributing
Contributions are welcome! Please:
1. Fork the repository
2. Create a feature branch (`git checkout -b feat/my-feature`)
3. Commit your changes (`git commit -m "Add my feature"`)
4. Push to your branch (`git push origin feat/my-feature`)
5. Open a Pull Request
Please follow the existing code style and include tests where applicable.
---
## License
This project is licensed under the [MIT License](LICENSE).
---
> Built with β€οΈ using .NET and Azure