FAQ | BlazorPlate - A Multi-Tenant SaaS Starting Point Template

Common Questions

Feel like your questions are playing hide and seek? No worries! Dive into the excitement by exploring our FAQ list or feel free to shoot us an email at info@blazorplate.net for all the answers you hunt! Let's unravel the enigmas together!

General Questions

  • BlazorPlate is a project template for startups that utilizes .NET 8 and Blazor WASM to provide developers with commonly used boilerplate code in many .NET projects with minimal customization.
  • Features like authentication, multi-tenancy, authorization, logging, localization, and others frequently appear in almost every .NET project, requiring considerable time and resources.
  • BlazorPlate's primary goal is to aggregate all repetitive code and standard UI pages associated with the aforementioned features into a single, standardized template that developers can use repeatedly in their future projects, significantly reducing development effort and cost.

Yes, BlazorPlate includes the full source code. Upon payment acceptance, BlazorPlate will be available for immediate download. Additionally, you will receive an email at the email address used during purchase with an invitation link to our private GitHub repository. This allows you to access the complete source code of the BlazorPlate solution, facilitating seamless customization to meet your specific requirements.

However, it's important to note that the solution incorporates several free and open-source libraries, such as MediatR library and some other NuGet packages. To maintain efficiency and avoid unnecessary complexities, the complete source code for these libraries is not included in the main solution. Instead, you can obtain the source code of these packages directly from their respective repositories, if needed.

Moreover, if you wish to receive the invitation link to our private GitHub repository at an alternative email address from the one used during the purchase, kindly email us at sales@blazorplate.net, providing your PayPal payment transaction number along with your GitHub email/username. We'll ensure the invitation is sent to your preferred GitHub account.

No. BlazorPlate is only available for purchase along with its source code, and there is no trial version available.

If you have any further questions, please don't hesitate to you can send us an email at info@blazorplate.net

Yes, you can! We have several code samples available here. These samples demonstrate the best practices for writing clean code for CRUD functionality for a sample entity, and they can serve as a guide for your own implementation of various entities. These samples will provide you with a thorough and accurate understanding of how BlazorPlate was implemented.

BlazorPlate's source code is meticulously documented with detailed XML and inline comments, providing a deep understanding of each line of code. These comments comprehensively cover every single line of the source code.

Additionally, the source code is self-explanatory and written in a clear and concise style. The code's documentation is fully integrated into the codebase, providing a transparent explanation of the logic behind it.

The BlazorPlate GitHub repository also includes documentation for various topics such as configuring the project on your local machine, automating deployment via Azure Pipelines upon Git push to master, deploying BlazorPlate apps to IIS Server and Azure, setting up Azure SQL Server instances and databases, and configuring wildcard custom domain and SSL certificates in Azure to support multi-tenancy.

Technical Questions

BlazorPlate uses Clean Architecture, which is an architecture that emphasizes the separation of concerns and the independence of the layers within an application. This type of architecture helps developers to maintain a clear and organized project structure that is scalable and easy to modify. In Clean Architecture, the application is divided into several layers including the Presentation layer, Application layer, Domain layer, and Infrastructure layer.

BlazorPlate's use of Clean Architecture allows for a clean separation of concerns, making it easy to modify and test the application's functionality. Each layer in the architecture is independent and can be modified without affecting the other layers. This type of design pattern is especially useful for large projects that require frequent updates and modifications.

BlazorPlate also includes several architectural features, such as the use of interfaces and dependency injection, which further enhances the modularity and maintainability of the application.

Core Layers

Domain Layer

BP.Domain

This project houses the core domain logic, comprising entities, value objects, enumerations, and custom exceptions. It serves as the foundation of the application, encapsulating business rules and domain-specific behavior.

Application Layer

BP.Application

This project embodies application-specific business logic, including use cases, commands, queries, validators, and custom exceptions. It orchestrates the flow of data and operations within the application, bridging the gap between the domain and infrastructure layers.

Infrastructure Layer

BP.Infrastructure

This project encompasses implementations of external interfaces and tools necessary for the application's operation. It includes components such as database access, file system operations, and communication with external services.

Presentation Layer

BP.Endpoints

This project serves as the entry point for interaction with external systems, providing endpoints for communication via APIs or web services.

BP.Tdap (TDAP)

This project encompasses the Tenant Dedicated/Administration Portals, as outlined below:

  • Tenant Dedicated Portal (TDP): This project represents a specialized platform tailored for tenant subscribers, serving as a centralized hub for tenant-specific functionalities and administrative tasks. It serves both tenant administrators and regular tenant users within each tenant organization, and it is accessible through a custom sub-domain tailored to the tenant's name, such as tenant01.example.com.
  • Tenant Administration Portal (TAP): This project represents a centralized platform overseen by Host Administrators for tenant management purposes. It offers functionalities such as tenant creation, modification, and deletion. Accessible via the primary domain, such as example.com, TAP streamlines administrative tasks for efficient tenant management.

BP.Top

This project represents the Tenant Onboarding Portal (TOP), serving as the primary gateway for new tenants. This project represents the Tenant Onboarding Portal (TOP), serving as the primary gateway for new tenants. It streamlines the onboarding process with a personalized subdomain URL, enabling an effortless transition to access the dedicated Tenant Dedicated Portal (TDP) through a personalized subdomain.

No, BlazorPlate exclusively utilizes Blazor WASM and does not yet support the new SSR/AutoRenderMode features. However, support for SSR/AutoRenderMode will be available in future releases.

BlazorPlate's data access layer is built using EF Core, ensuring compatibility with a variety of relational database providers including SQL Server, PostgreSQL, MySQL, SQLite, and Oracle, among others. For a comprehensive list of supported providers, please refer to the official EF Core documentation here. Should you have any uncertainties or questions regarding relational database compatibility or any other matter, don't hesitate to contact us at info@blazorplate.net.

No, BlazorPlate does not support NoSQL databases out of the box.

However, while it's technically possible to integrate BlazorPlate with NoSQL databases such as Azure CosmosDB or MongoDB, it would require significant code changes due to differences in architecture and Entity Framework support for NoSQL databases.

For example, MongoDB employs a different query syntax compared to SQL-based databases. Instead of using LINQ queries with methods like Where(), OrderBy(), etc., MongoDB utilizes customized EF Core extensions such as Filter(), Sort(), Limit(), and Skip().

Moreover, The challenge lies in the fact that there is a wide variety of NoSQL databases, each with its own EF Core extensions. This variability makes it challenging to include different implementations for all kinds of NoSQL databases within BlazorPlate.

BlazorPlate's Concurrency Conflict Detection is a powerful mechanism that handles scenarios where multiple users try to edit or delete the same record simultaneously. With this feature, data integrity is safeguarded, preventing any loss caused by concurrent updates or deletions. Moreover, it seamlessly supports various database systems, ensuring a smooth experience across different database engines.

Absolutely yes! BlazorPlate has a flexible architecture that enables the substitution of the default MudBlazor component library with an alternative library that better suits your project needs. There are several options available, such as Infragistics, Syncfusion, or Telerik, among others, that you can use to replace the default library. The Blazor framework is designed to be versatile and adaptable, allowing for customization to meet specific requirements.

Certainly yes, it's possible to replace the Blazor client-side project with a custom-built client-side project using a JavaScript framework such as Angular or React, and still utilize the same Web API's within the BlazorPlate platform.

BlazorPlate has a flexible architecture that enables the incorporation of different client-side frameworks, empowering developers to select the framework that aligns with their project requirements. In essence, developers can create sophisticated client-side applications utilizing their preferred technology stack, while leveraging the robust functionality and capabilities offered by BlazorPlate's Web APIs.

Multitenancy Questions

BlazorPlate supports single-tenant model and multi-tenant model.

In the single-tenant model, each tenant operates within its own instance of the software application and database, which cannot be shared with other tenants. This grants each tenant complete control over their application instance, but it may also entail higher costs and maintenance efforts.

In contrast, in the multi-tenant model, numerous tenants have access to a single instance of the SaaS application and database. This approach offers potential cost reductions and streamlines maintenance efforts. Depending on the configuration, this could involve a shared database for all tenants or a dedicated database for each individual tenant.

BlazorPlate provides powerful support for tenant data isolation, ensuring that each tenant can access and manipulate only their own data. This is achieved through two primary strategies: a shared database for all tenants, or a separate database for each tenant. In the first strategy, each tenant's data is logically separated by a unique identifier within a common database. In contrast, the second strategy physically separates each tenant's data into their own separate database.

With these flexible data isolation strategies, BlazorPlate enables developers to create highly secure, scalable, and customizable web applications that cater to the unique needs of each tenant.

The Tenant Onboarding Portal (TOP) in BlazorPlate serves as the primary gateway for new tenants, simplifying the registration process with a customized subdomain URL based on the tenant's business name. This ensures a seamless transition to their dedicated Tenant Dedicated Portal (TDP), accessible via their unique subdomain URL, like my-business-name.saas.com.

In a SaaS/Multi-tenant BlazorPlate application, the Host refers to the company that owns and manages the system. They are responsible for managing the subscription of tenants and providing them with access to the service. On the other hand, the Tenant refers to the customer who pays for and uses the service provided by the host. Each tenant is a separate entity with its own data, settings, and permissions within the application.

The Tenant Administration Portal (TAP) serves as a centralized platform managed by Host Admins, who represent the company behind the Software as a Service (SaaS) model. It efficiently handles tenant management, including the creation of tenant accounts on behalf of customers, providing Host Admins with basic functionalities for modifying, deleting, and managing these accounts.

The Tenant Dedicated Portal (TDP) in BlazorPlate is a dedicated platform provided by the SaaS provider (The Host) for each tenant organization. It serves as a centralized hub for tenant-specific functionalities, customizations, and administrative tasks.

In addition to Tenant Admins, there are regular users within each tenant organization who have standard user accounts. These regular users have access to the TDP but typically have limited privileges compared to Tenant Admins. They may use the TDP to access features and resources relevant to their roles within the organization, such as viewing content, interacting with specific modules, or collaborating with team members.

Tenant Admins play a crucial role in managing the TDP. They have administrative privileges within the tenant organization, allowing them to control user access by granting or revoking permissions, configuring settings, managing user accounts, and overseeing the overall functionality of the portal.

While Tenant Admins oversee the TDP and have administrative control over its configuration and management, regular users utilize the portal to perform their day-to-day tasks within the scope of their roles and responsibilities.

In BlazorPlate, the Hybrid Multitenancy Model refers to a flexible approach where tenants have the choice to select their preferred data isolation strategy during the tenant onboarding process. This model allows tenants to decide whether they want to utilize a shared database for all tenants or have a separate database for each tenant. BlazorPlate seamlessly accommodates their choice, providing a versatile solution tailored to their specific needs.

In BlazorPlate's implementation of hybrid multi-tenancy, tenants can opt for either a shared database for all tenants or a separate database for each tenant. Hybrid database isolation is achieved by deploying two instances of the Tenant Dedicated Portal (TDP), each configured with a different Data Isolation Strategy. Additionally, the Tenant Onboarding Portal (TOP) can be customized to enable customers to select their preferred strategy during registration, automatically directing them to the appropriate TDP instance. This comprehensive approach ensures that tenants have the flexibility to customize their environment according to their unique requirements while maintaining the efficiency and resource sharing benefits of multi-tenancy.

Licensing Questions

BlazorPlate provides developers with an Ultimate License, granting unlimited and perpetual rights to utilize the BlazorPlate template without any restrictions, except for those outlined in our End User License Agreement.

Source Code without Limits

  • With the Ultimate License, access the full source code for BlazorPlate.
  • With the Ultimate License, use BlazorPlate to develop an unlimited number of public web applications, internal projects, cloud projects, and mobile apps.
  • With the Ultimate License, install BlazorPlate on an unlimited number of development machines within your organization.

Maintenance Plan & Support

  • With the Ultimate License, receive one-year complimentary access to the latest updates and releases from BlazorPlate's GitHub Repo.
  • With the Ultimate License, enjoy lifetime technical support provided via GitHub, email, Discord, or WhatsApp.

Maintenance Plan & Technical Support Questions

With the Ultimate License, you receive a one-year maintenance plan at no cost, providing you with direct access to the newest BlazorPlate releases and updates through our private GitHub repository.

With the Ultimate License, enjoy lifetime technical support provided via GitHub, email, Discord, or WhatsApp, along with the ability to submit an unlimited number of support tickets without any additional charges.

Our support team is available through multiple channels for handling technical support requests related to BlazorPlate. You can submit requests via our private GitHub repository, or send your request via email to support@blazorplate.net , You can also chat with us on Discord using the ID blazorplate, or reach out to us on WhatsApp at +962796226992. Our support team is dedicated to assisting you with any issues, technical inquiries, or questions you may have.

If your maintenance plan expires, you can still seek assistance from our technical support team regarding any issues you encounter with your current version of BlazorPlate. Nonetheless, access to the latest releases and updates of BlazorPlate via our private GitHub repository will no longer be available to you.

To extend or renew your BlazorPlate maintenance plan, kindly contact our sales team at info@blazorplate.net. The cost for renewing or extending your maintenance plan subscription is 50% of the original license price.

BlazorPlate continually evolves with new features and enhancements. We prioritize maintaining a lasting partnership with our clients by ensuring they have access to the latest updates and upgrades.

Upon purchasing BlazorPlate, you will receive an email invitation containing a link to our private GitHub repository at the email address provided during your purchase. You can then download the latest source code from our GitHub repository whenever needed.

Moreover, if you wish to receive the invitation link to our private GitHub repository at an alternative email address from the one used during the purchase, kindly email us at sales@blazorplate.net, providing your PayPal payment transaction number along with your GitHub email/username. We'll ensure the invitation is sent to your preferred GitHub account.

Purchasing Questions

Our website accepts PayPal as a payment method. With PayPal, you can make payments in over 200 countries using Visa, MasterCard, or American Express.

Moreover, we accept payments through MoneyGram and Western Union. If you require further details about the recipient information, please get in touch with our sales team at sales@blazorplate.net.

Yes, you can request an invoice for your purchase of BlazorPlate. However, in order for us to generate the invoice, we will require some details such as your company name, address, VAT number, etc. Once we receive the required information via email at sales@blazorplate.net , we will send the invoice to your email within one business day.

BlazorPlate will be available for immediate download once your payment is accepted.

Additionally, you will receive an email at the email address used during purchase with an invitation link to our private GitHub repository, where you can access the source code of BlazorPlate at any time.

Moreover, if you wish to receive the invitation link to our private GitHub repository at an alternative email address from the one used during the purchase, kindly email us at sales@blazorplate.net, providing your PayPal payment transaction number along with your GitHub email/username. We'll ensure the invitation is sent to your preferred GitHub account.

Yes, you can easily upgrade BlazorPlate from a lower edition to a higher edition after making a purchase. Whether you've purchased the Starter or Professional Edition, you can upgrade to a higher Edition whenever you're ready. Our sales team at sales@blazorplate.net is always available to provide more information on the upgrading process.

To upgrade to a higher edition of BlazorPlate, you will be required to pay the difference between the edition you're currently on and the one you're moving to. The cost will vary depending on the specific edition you are upgrading from and to. Rest assured, our sales team at sales@blazorplate.net can provide you with a clear breakdown of the costs associated with upgrading to any edition of BlazorPlate.