Velox: delivery orders for local restaurants
Desktop application for a restaurant to manage its menu, orders and deliveries, with a Telegram bot that customers use to place orders.
- Problem
- A restaurant that delivers has to keep track of the menu, the open orders and which courier has each one, all at once. Customers want to order without installing another app.
- Solution
- The operator works in a JavaFX application with the menu, the orders and delivery by postcode zones. Customers sign up and order through a Telegram bot, which listens on its own thread so the interface never blocks. Addresses are validated with the Mapbox geocoding API and data is stored in MySQL 8 through JPA/Hibernate.
- What I learned
- To design an application before coding it: starting from UML diagrams and an entity-relationship model to reach the MySQL schema. Mapping it with JPA/Hibernate showed me how a layered architecture is organised and how much it matters to model the life cycle of an order properly from the start. I also learned to document a project so that other people can understand it.
- 10 JPA entities and an order with 6 states. Transitions are validated in a single place in the service layer and every change is written to a history table.
- Couriers are assigned by hand or automatically from the free couriers in the order’s zone.
- Operator passwords hashed with BCrypt.
- 38 JUnit 5 tests, including integration tests on H2.
- Written report with use cases, class diagram, entity-relationship model, state and deployment diagrams.
Technologies
- Java 21
- JavaFX
- Hibernate/JPA
- MySQL 8
- Docker
- JUnit 5
- Telegram API
- Mapbox



