BALISE stands for Borne d'Accès aux Lieux, Informations, Services et Expositions (Access Point for Venues, Information, Services and Exhibitions).
It is an interactive kiosk application for visitors of the museums of the City of Liège, developed during my internship at the Département de la culture and as my thesis project (TFE).
Visitor kiosk
- Interactive floor maps of each museum, with spaces and points of interest
- Museum agenda
- Newsletter registration
Content management
- Secure staff login through Auth0 (OIDC)
- Management of spaces and points of interest
- Bulk content import from a JSON file
- Multilingual content support
| Area | Technology |
|---|---|
| UI | Avalonia |
| Pattern | MVVM with ReactiveUI |
| Data access | Entity Framework Core |
| Database | PostgreSQL |
| Authentication | OIDC with Auth0 (Duende client library) |
| Map | Mapsui |
| Language | C# |
- .NET SDK 10
- A PostgreSQL instance
- An Auth0 application configured for a native client
git clone https://github.com/Netris89/Museum.git
cd MuseumConfiguration lives in appsettings.json. Set the following values before the first run:
| Key | Description |
|---|---|
Postgres:ConnectionString |
PostgreSQL connection string |
Auth0:Domain |
Auth0 tenant domain |
Auth0:ClientId |
Client ID of the native Auth0 application |
Auth0:RedirectUri |
Redirect URI registered in Auth0 |
Do not commit secrets. Use user secrets or environment variables for local values.
dotnet ef database updatedotnet runThe application follows the MVVM pattern:
- Models and DTOs: domain entities and data transfer objects
- Repositories: data access through Entity Framework Core
- Services: business logic, authentication and session management
- ViewModels: presentation logic built with ReactiveUI
- Views: Avalonia XAML views
Content can be imported from a JSON file. Currently supported:
- Creation of spaces
Not yet supported:
- Standalone points of interest (without a parent space)
- Update of objects that already exist in the database
Developed as an internship project at the Département de la culture of the City of Liège and as a thesis project at the Institut Saint-Laurent in Liège.