Skip to content

rbrands/MeetUpPlanner

Repository files navigation

Server-master to slot dev Functions-master to slot dev

MeetUp-Planner

Everything you need to organize and track a "MeetUp", e.g. organizing a group bike-ride.

The first idea for this application came up during "Corona"-time: In order to arrange group bike rides or other "MeetUps" ensuring the traceability of the participants the corresponding tool was missing.

Therefore the following design principles for this web-app are:

  • Easy to use without complex registration and authentication process. Therefore only "keywords" are used as very basic access control.
  • Responsive design, usable on PC and smartphones with all modern browsers (Chrome, Edge, Firefox, Safari) supporting the WebAssembly Standard.
  • Minimal administrative effort: All meetups data should be deleted automatically after the configured time (typically 28 days). Everyone should be able to organize a MeetUp.
  • Availability of "private" MeetUps: The ability to organize a MeetUp and protect it with a "keyword" that can be given to potential participants.
  • Adaptable: The application has a front-end layer implemented with ASP.NET Core Blazor The application logic is provided via serverless Azure Functions. In this way it is possible to use the application layer independently with a different front-end.

Architecture

The application is divided into two parts:

  • The front-end is a Blazor WebAssembly application. It is a Single Page Application (SPA) that runs in the browser. The application is hosted on an Azure App Service.
  • The back-end is a set of Azure Functions that provide the business logic for the application. The Azure Functions are hosted in an Azure Functions App. The Azure Functions are implemented in C# and use the .NET Core 3.1 runtime. The Azure Functions use Azure Cosmos DB to store the data.
    graph TD
    subgraph Client
        A[Blazor WebAssembly]
    end

    subgraph Server
        B[ASP.NET Core Web API]
        C[Several Controllers]
        D[MeetUpFunctions]
    end

    subgraph Azure
        G[Azure Functions]
        H[Function1]
        I[Function2]
        E[Repositories]
    end

    subgraph Database
        F[CosmosDB]
    end

    A -->|HTTP Requests| B
    B -->|Controller Actions| C
    C -->|Business Logic| D
    H -->|Data Access| E
    I -->|Data Access| E
    E -->|Database Operations| F
    D -->|Invoke Functions| G
    G -->|Function Logic| H
    G -->|Function Logic| I
Loading

About this repository

  • Folder "MeetUpFunctions" has the source code of the Azure Functions used for the backend. The master branch is CI enabled with GitHub Actions and deployed to the slot "dev" of the Azure Functions App.
  • Folder MeetUpPlanner holds the source code of the Blazor WebAssembly and the ASP.NET Core hosting app. The master branch is CI enabled with GitHub Action and deployed slot "dev" of the web application.
    • Client - The Blazor WebAssembly project
    • Server - The ASP.NET Core web backend for the application
    • Shared - Model classes shared with all projects for serializing the objects to JSON

For documentation including deployment instructions see Wiki

References

The application is build on the following technology stack:

Some helpers: Blazored is an excellent colletion with some tools to make the life easier with Blazor. MeetUpPlanner uses the TextEdit and LocalStorage components.

The Blazor Component Library from Radzen provides a comprehensive set of components used by MeetUpPlanner for notification messages and numeric input.

Another handy tool to provide file download in Blazor: https://github.com/arivera12/BlazorDownloadFile

And of course Bootstrap for the responsive design is used.

Contributors