🚀 Pre-alpha state. A platform designed for building enterprise-grade, multi-tenant products using Azure, .NET, React, TypeScript, Infrastructure as Code, etc.
Kick-start building top-tier B2B & B2C cloud SaaS products with sleek design, fully localized and accessible, clean architecture, automated and fast DevOps, and top-notch security. All in one place – at zero cost.
This is in the box:
Still pre-alpha state, follow our up-to-date roadmap with core SaaS features like multi-tenancy, authentication, SSO, user management, telemetry, monitoring, alerts, multi-region, feature flags, back office for support, etc.
Show your support for our project – Give us a star on GitHub! It truly means a lot! ⭐
TL;DR: Open the PlatformPlatform solution in Rider or Visual Studio and run the Aspire AppHost project.
For development, you need .NET, Aspire, Docker, Node, and Yarn. And GitHub and Azure CLI for setting up CI/CD.
Open a PowerShell terminal as Administrator and run the following commands:
wsl --install
(Windows Subsystem for Linux, required for Docker)choco install dotnet-sdk git docker-desktop nodejs yarn azure-cli gh
dotnet workload update
and dotnet workload install aspire
Open a terminal and run the following commands:
brew install --cask dotnet-sdk
brew install git docker node yarn azure-cli gh
dotnet workload update
and dotnet workload install aspire
dotnet dev-certs https --trust
Open a terminal and run the following commands:
Install Wget
sudo apt update && sudo apt-get install wget -y
Install Microsoft repository
source /etc/os-release
wget https://packages.microsoft.com/config/$ID/$VERSION_ID/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
Install Node repository
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
Install GitHub Package repository
(type -p wget >/dev/null || (sudo apt update && sudo apt-get install wget -y)) \
&& sudo mkdir -p -m 755 /etc/apt/keyrings \
&& wget -qO- https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null \
&& sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
Update packages
sudo apt-get update
Install .NET SDK 8.0, Node, GitHub CLI
sudo apt-get install -y dotnet-sdk-8.0 nodejs gh
Install .NET Aspire workload
sudo dotnet workload update && dotnet workload install aspire
Install Yarn
npm install --global yarn
Install Azure CLI
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
Forking is only required to configure GitHub repository with continuous deployments to Azure (step 3).
Our clean commit history serves as a great learning and troubleshooting resource. We recommend you keep it 😃
To spin up the backend, frontend and all dependencies like SQL Server, Blob Storage, Mail Server in Docker, simply open the PlatformPlatform solution in Rider or Visual Studio and run the Aspire AppHost project.
With Docker Desktop installed, .NET Aspire will do all the orchestration and spin up everything with a single click. No need to learn Docker, install database and web server, or to learn complicated commands. It just works 🎉
If you prefer the CLI, you can run the following command:
cd application/AppHost
dotnet run
Run this command to automate Azure Subscription configuration and set up GitHub Workflows for deploying Azure Infrastructure (using Bicep) and compiling application code to Docker images deployed to Azure Container Apps:
cd development-cli
dotnet run configure-continuous-deployments # Tip: Add --verbose-logging to show the used CLI commands
You need to be the owner of the GitHub repository and the Azure Subscription, plus have permissions to create Service Principals and Active Directory Groups.
The command will first prompt you to login to Azure and GitHub, and collect information. You will be presented with a complete list of changes before they are applied. It will look something like this:
Except for adding a DNS record, everything is fully automated. After successful setup, the command will provide simple instructions on how to configure branch policies, Sonar Cloud static code analysis, and more.
The infrastructure is configured with auto-scaling and hosting costs in focus. It will cost less than 2 USD per day for a cluster, and it will allow scaling to millions of users 🎉
PlatformPlatform is a monorepo containing all application code, infrastructure, tools, libraries, documentation, etc. A monorepo is a powerful way to organize a codebase, used by Google, Facebook, Uber, Microsoft, etc.
.
├── .github # Separate GitHub workflows for deploying Infrastructure and app
├── application # Contains the application source code
│ ├── AppHost # .NET Aspire project starting app and all dependencies in Docker
│ ├── AppGateway # Main entry point for the app using YARP as a reverse proxy
│ ├── account-management # Self-contained system with account sign-up, user management, etc.
│ │ ├── WebApp # React SPA frontend using TypeScript and React Aria Components
│ │ ├── Api # Presentation layer exposing the API to WebApp or other clients
│ │ ├── Application # Use Case layer containing CQRS Command and Query handlers
│ │ ├── Domain # Business logic containing DDD aggregates, entities, etc.
│ │ ├── Infrastructure # Integrations for accessing external resources (e.g., database)
│ │ └── Tests # Tests for the API, Application, Domain, and Infrastructure
│ ├── shared-kernel # Reusable components for all self-contained systems
│ ├── [saas-scs] # [Your SCS] Create your SaaS product as a self-contained system
│ └── [back-office] # [Planned] A self-contained system for operations and support
├── cloud-infrastructure # Contains Bash and Bicep scripts (IaC) for Azure resources
│ ├── cluster # Scale units like production-west-eu, production-east-us, etc.
│ ├── environment # Shared resources like App Insights for all Production clusters
│ ├── shared # Azure Container Registry shared between all environments
│ └── modules # Reusable Bicep modules like Container App, SQL Server, etc.
└── development-cli # A .NET CLI tool for automating common developer tasks
** A Self-Contained System is a large microservice (or a small monolith) that contains the full stack, including frontend, background jobs, etc. These can be developed, tested, deployed, and scaled in isolation.
The backend is built using the most popular, mature, and commonly used technologies in the .NET ecosystem:
.DotSettings
), ensuring consistent code formatting. No need to discuss tabs vs. spaces anymore; Invalid formatting breaks the build.Although some features like authentication and multi-tenancy are not yet implemented, the current implementation serves as a solid foundation for building business logic without unnecessary boilerplate.
The frontend is built with these technologies:
PlatformPlatform's cloud infrastructure is built using the latest Azure Platform as a Service (PaaS) technologies:
This is how it looks when GitHub workflows has deployed Azure Infrastructure:
These are the resource groups created when deploying one staging cluster, and two production clusters:
This is the security score after deploying PlatformPlatform resources to Azure. Achieving a 100% security score in Azure Defender for Cloud without exemptions is not trivial.
https://123456789012345678901234.blob.core.windows.net/profileimages/01HS13BVF09A8AYYCMR2T9P7ZN.png