- Date: June 9, 2025
- Categories: Product Development
This software was originally developed a few years ago for a travel agency based in Kosovo, which is why the content on the site is in Albanian. The software was built precisely according to the client’s requirements to automate their daily operations, from employee tasks to managerial oversight. The manager has full visibility into everything happening within the company. In the latest version update, I integrated a feature powered by AI to detect anomalies and notify the management accordingly.
Techstack used here: Laravel, Vue, Docker, Pinecone, OpenAI.
Below, I’ll provide a brief overview along with screenshots to illustrate the key features.
After the user logs in, they are directed to this second authentication page:
This means all sensitive data is encrypted using Laravel’s Crypt facade, which applies AES-256-CBC encryption with a server-side APP_KEY. Decryption is only possible within the application context, ensuring that even if API endpoints or the database are accessed externally, the encrypted values remain unreadable without passing through Laravel’s decryption logic, so the user should know his security code.
After user authentication, the first page displayed is the Reports section. Here, the manager can filter and view various types of reports, including general summaries and wallet-specific data. The wallet feature was a custom request from the client to monitor the balance each employee holds. While the interface appears simple, it is backed by complex business logic, including integrated AI features for advanced insights. I will provide screenshots of all the reports in the next sections.
Next is the Sales section, where employees can sell travel tickets and view all sales records. Sales can be processed in multiple currencies (USD, EUR, CHF) and have various statuses such as sold, debt, or cancelled. The system automatically adjusts all calculations in the corresponding currency.
These are the options included in the ticket sales form used for manual sales (i.e., when sales are not made through the website). By filling out the form, all information is properly recorded. It is important to specify whether the payment was made in cash or via bank transfer, so the balance is accurately reflected in the corresponding Wallet or Bank Account.
The manager and employees can also view detailed sales records to monitor all ongoing activities. For each row, there are actions available to view detailed sales information and to generate invoices or pre-invoices when a sale was initially registered as a debt.
After an employee receives a ticket, it initially carries a debt status, as permitted by the agency. If the debt was originally registered in euros, the customer has the option to make future payments either in a different currency, either as full or partial payment. The system will correctly calculate the remaining debt or the total amount paid in the different currency, while maintaining the original debt amount accurately.
The manager will be notified of any anomalies related to ticket sales and can view detailed reports for every employee in the company. Further actions are available but cannot be disclosed here due to confidentiality.
When sales are made, the funds will be allocated to the appropriate destination, such as a Wallet or a specific Bank Account. The manager can view all the details, and all records must remain consistent with the corresponding funds.
The system also includes a feature to switch wallets. For example, if the manager leaves only one employee working in the office over the weekend, they may not want to leave the full wallet there. Instead, they can assign a temporary wallet with a starting balance of 50 EUR, 50 USD, and 50 CHF. The manager can then switch the active wallet in the system from the main wallet to this temporary wallet. The next day, they can switch back to the main wallet, and the system will automatically transfer the balances from the temporary wallet back to the main wallet. All transactions and balances are properly managed and recorded in the database.
Additional features available within Wallets and Bank Accounts include the ability to top up funds, withdraw money from wallets to bank accounts, and transfer funds from bank accounts back to wallets.
Here are all the balances that correspond to the funds in the bank accounts and wallets.
The system includes partner accounts that can be funded as needed. The agency can also borrow money from its partners, with all transactions managed within the system, whether payments are made in full or partially. Notifications are sent when debt repayment deadlines approach. This ensures that when the agency processes payments, the corresponding partner’s system is updated and fully synchronized.
This is the Expenses section, where all outgoing transactions, such as employee purchases using wallet funds or salary payments, must be recorded in the system. At the end of each month, the previous month can be closed at the beginning of the next. When that time comes, the manager can review total sales in all currencies, track earnings and expenses, and then close the month with a final summary in euros.
To maintain accuracy, the closing process is done manually, as currency exchange rates are not always reliable. At the client’s request, no external API is used for currency conversion, everything is handled internally. If an mistake occurs during the closing, the company has a grace period of 3 days to reset and re-close the month properly, referring to gray button.
Additionally, this page includes the ability to record withdrawals from the main bank account, separate from the account where sales revenue is deposited, referring to yellow button.
After the month is closed, the remaining euro balance is deposited into the main bank account, and the transaction is recorded here, similar to how withdrawal transactions are tracked. Additionally, if the manager transfers funds using e-banking from the main account for any payment or other purpose, the system automatically syncs with the bank account and reflects the transaction accordingly.
Once the system confirms that the deposit has been successfully processed by the bank, it generates a full report containing all relevant details. As shown here, some information is blurred due to confidentiality. Generated reports also keeps any transfers made during the month from the temporary wallet to the main wallet, along with all other necessary financial details for every employee.