Creating Web Applications
A project is rarely composed of only the backend. With Lino, it is also possible to create web applications to consume the generated APIs, providing interfaces for end users or internal teams.
Currently, the framework natively supports Blazor Web App (rendering mode interactive auto).
However, the architecture is designed to allow adding multiple frontends within the same solution, addressing different scenarios and audiences.
Frontends with Blazor Web App
When generating a frontend, Lino automatically creates a Blazor Web App project configured to:
- Simplified routing → standard navigation structure already configured.
- Native integration with Minimal APIs → direct consumption of created endpoints.
- Reusable CRUD components → standardized listing, creation, and editing pages.
- Support for authentication and authorization → if the service is configured for security.
This frontend is already prepared to consume the APIs generated in the application modules, with strong typing and automatic integration via typed HttpClient.
Multiple frontends
A project can contain as many frontends as needed. Each frontend is added as a new Blazor project within the solution, sharing the same APIs exposed by the backend.
Example scenarios:
- Public site → pages accessible to clients or visitors.
- Backoffice/Admin → internal management panel for operators or administrative teams.
- Partner portal → restricted access for partners, resellers, or suppliers.
This separation facilitates interface specialization while maintaining architectural consistency in API consumption.
Generating web pages
To speed up interface development, the Lino CLI provides the command:
lino page new
This command creates Blazor pages already connected to the backend, following established conventions:
- Form component generation → creation and editing pages.
- Automatic listings → index pages (paginated lists).
- Direct API integration → automatic connection to the corresponding endpoints.
This allows creating complete CRUDs (frontend → API → CQRS → database) without manually repeating code.
For example, creating pages for the Order entity will generate the following structure:
MyApp/
└── src/
└── WebApps/
└── MySite/
└── Services/
└── Pages/
└── Orders/
└── Registration/
├── Order.razor
├── Order.razor.cs
└── Components/
├── Form/
│ ├── OrderForm.razor
│ ├── OrderForm.razor.cs
│ ├── OrderFormExtensions.cs
│ └── OrderFormViewModel.cs
└── Grid/
├── OrderGrid.razor
├── OrderGrid.razor.cs
├── OrderGridExtensions.cs
└── OrderPagedQueryParams.cs
Additionally, integrated services are created to consume the OrdersEndpoints endpoints, ensuring end-to-end communication:
Frontend → API → Commands/Queries → Database
In this way, Lino delivers a complete full-stack development flow, drastically reducing the time needed to create new features.
