Itinerary Management is a web application designed to simplify travel planning.
It allows users to create trips, manage unvisited locations, and optimize itineraries efficiently using modern technologies and optimization algorithms.
The app is built with Angular 20 for the frontend and ASP.NET Core 9 for the backend.
It integrates with Azure services (SQL Database, Blob Storage, Key Vault) for secure storage and seamless deployment.

Interface for managing trips and locations, with days and map visualization.

Example of route optimization using the Ant Colony Optimization algorithm.
- Create, manage, and plan personalized travel itineraries
- Automatically optimize routes and daily schedules using advanced algorithms
- Manage places, tags, and trip details with full CRUD functionality
- View interactive maps and calculated optimal routes
- Fetch location details from external APIs
- Secure user authentication and password reset functionality
- Error tracking and performance monitoring
- Responsive design optimized for desktop and mobile use
- Angular 20 – main framework for UI and client logic.
- Angular Material – responsive components and theming.
- ngx-toastr – toast notifications for user feedback.
- Lightbox – image preview and gallery functionality.
- ASP.NET Core 9 – REST API and authentication layer.
- Entity Framework Core – database ORM for migrations and data access.
- Itinero – routing engine that calculates optimal paths using OpenStreetMap data.
- Azure SDK – integration with Azure services (Key Vault, Blob Storage, SQL).
- Sentry SDK – error tracking and diagnostics.
- SendGrid API – sending transactional emails (e.g., password resets).
- Azure SQL Database – data storage.
- Azure Blob Storage – storing user and trip images.
- Azure Key Vault – secure management of application secrets.
- OpenStreetMap / Overpass API – base map and location data.
- Wikipedia API – fetching descriptions for places.
- Nominatim API – geocoding and reverse geocoding.
- OpenAI API – intelligent recommendations and content generation.
- Frontend: Angular application
- Backend: ASP.NET Core API
- Deployment: Azure App Services
- Configuration: Secure loading of secrets via Azure Key Vault
- Azure account
- Azure CLI or access to Azure Portal
- Visual Studio (for ASP.NET Core backend)
- Node.js + Angular CLI (for frontend)
- .NET SDK 8.0 or later
git clone https://github.com/Jyrycek/ItineraryManagement.git
cd ItineraryManagement- Create a SQL server and a new database in Azure Portal.
- Add your IP address to the allowed firewall rules.
- Save the connection string (e.g.,
Server=tcp:xyz.database.windows.net;Database=db;User Id=...;Password=...) to Azure Key Vault as:ConnectionStrings--UserDatabase. - On first run, the backend will automatically apply EF migrations to create the database schema.
- Create a new Storage Account.
- Create a blob container, e.g.,
images. - Save the connection string and container name/SAS token to Key Vault.
- Create a Key Vault, e.g.,
ItineraryManagementKeys. - Store the following secrets:
| Secret Name | Description |
|---|---|
| ConnectionStrings--UserDatabase | SQL database connection string |
| AccountStorage | Storage account connection string |
| AccountStorage--blob | Blob container name or SAS token |
| JwtPrivateKey | Private key for JWT signing |
| PasswordKey | Key used for password encryption/decryption |
| SENDGRIDAPIKEY | SendGrid API key for sending emails |
| Sentry | Sentry DSN |
| OpenAI | OpenAI API key |
| EmailSender | Email address for sending password reset emails |
- Enable System Assigned Identity for your Azure App Service.
- In Key Vault, add an Access Policy granting this identity Get permissions for secrets.
Set the Key Vault URI in ItineraryManagement.Server/Program.cs:
var vaultUri = "https://<yourkeys>.vault.azure.net/";
var keyVaultEndpoint = new Uri(vaultUri);
builder.Configuration.AddAzureKeyVault(keyVaultEndpoint, new DefaultAzureCredential());The project uses Angular environment files to manage configuration for different environments (development and production).
environment.example.ts– example configuration with placeholders (committed to Git).environment.ts– local development configuration (not committed).environment.prod.ts– production configuration (not committed).
- Create local development environment file:
cp src/environments/environment.example.ts src/environments/environment.ts- Create production environment file:
cp src/environments/environment.example.ts src/environments/environment.prod.ts- Update configuration values in each file with your actual keys and URLs:
export const environment = {
production: false, // set to true in environment.prod.ts
apiUrl: '/api', // backend API endpoint
mapboxKey: 'YOUR_MAPBOX_KEY_HERE',
sentryDsn: 'YOUR_SENTRY_DSN_HERE'
};The backend uses appsettings.json for configuration. Do not commit your real appsettings.json with secrets.
appsettings.example.json– example configuration with placeholders (committed to Git).appsettings.json– local development configuration (not committed).
- Create local configuration file:
cp ItineraryManagement.Server/appsettings.example.json ItineraryManagement.Server/appsettings.json- Edit
appsettings.jsonand replace placeholders with your actual values
- Images – default URLs for profile/project/place images
- BlobStorage – Azure storage account URL and container paths
- KeyVault – Azure Key Vault URI
The application requires OSM map files for routing.
-
Download
czech-republic-latest.osm.pbffrom:
https://download.geofabrik.de/europe/czech-republic.html -
Place the file in the backend project root:
ItineraryManagement.Server/czech-republic-latest.osm.pbf
- Backend and frontend run automatically via
launchSettings.json. - Backend URL:
http://localhost:5000/ - Frontend URL:
http://localhost:4200/ - Backend automatically applies database migrations on first run.
cd ItineraryManagement.Server
dotnet run- Open the frontend project folder:
cd itinerarymanagement.client- Make sure you have a Node.js version compatible with Angular 20.3.X
- Install dependencies:
npm install- Run the development server:
ng serveThe application will be available at http://localhost:4200/ in your browser.
- Sorting may behave unexpectedly when swapping places
- Make sure all secrets are correctly configured in Key Vault before running the application.
- For production deployment, configure Azure App Services and environment variables accordingly.
This project is licensed under the MIT License. See the LICENSE file for details.