Skip to content

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.

License

Notifications You must be signed in to change notification settings

calKU0/StriveUp

Repository files navigation

StriveUp

🎓 Thesis Project — developed as part of a Bachelor’s thesis for the Applied Informatics at University of Economics in Cracow.

CI License: MIT

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
  2. Architecture
  3. Tech Stack
  4. Repository Structure
  5. Prerequisites
  6. Getting Started
  7. Configuration
  8. External Integrations
  9. Deployment
  10. Contributing
  11. 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
  • Visual Studio 2022 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

    git clone https://github.com/calKU0/StriveUp.git
    cd StriveUp
  2. Restore & Build

    dotnet restore
    dotnet build
  3. Run the solution

    • API & Functions:
      cd StriveUp.API
      dotnet run
      In another terminal:
      cd StriveUp.Sync
      func start
    • Web App:
      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:

// 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

    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

    func azure functionapp publish <YourFunctionAppName>
  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.


Built with ❤️ using .NET and Azure

About

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.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published