top of page
2026
​Categories were implemented as a separate database entity rather than an enum, allowing new categories to be added or changed later without modifying and recompiling the application code. Each expense stores a CategoryId, which links it to the relevant category through Entity Framework Core.
​Categories were implemented as a separate database entity rather than an enum, allowing new categories to be added or changed later without modifying and recompiling the application code. Each expense stores a CategoryId, which links it to the relevant category through Entity Framework Core.
​Categories were implemented as a separate database entity rather than an enum, allowing new categories to be added or changed later without modifying and recompiling the application code. Each expense stores a CategoryId, which links it to the relevant category through Entity Framework Core.

ExpenseFlow

Tech: C# · ASP.NET Core MVC · EF Core · PostgreSQL · ASP.NET Identity · Razor · Bootstrap · Azure

ExpenseFlow is a cloud-hosted expense management web app with secure authentication, expense tracking, data visualisation, and admin account management.

Dash_edited_edited_edited_edited_edited.

AUTH

Verif.png
​When a user signs up, they receive an email containing a time limited verification link. They must confirm their email address before they can log in, helping ensure that only users with valid email addresses can access the application.
When signing up, the user’s account details are validated and securely stored in the PostgreSQL database using ASP.NET Identity. When logging in, ASP.NET Identity checks the entered email and password against the stored user account before granting access.
Users can create, edit, and delete expenses, with all changes stored in PostgreSQL through Entity Framework Core. Expense data is also grouped by category and displayed visually using a pie chart, allowing users to quickly see where their money is being spent.
Admin users have access to a protected admin area, allowing them to manage user accounts, including deleting accounts and associated expense data. Access is restricted using ASP.NET Identity roles so only users assigned the Admin role can perform these actions.

Change password

VerifUI.png
EmailVerif
ChangePass.png

Here are some code snippets from ExpenseFlow. You can find the full source code and more examples on the GitHub link.

ExpenseController
AdminController
Shown here are snippets from both the ExpenseController and AdminController, covering the core expense CRUD functionality and administrative features.
EmailService
This sends account confirmation and password reset emails to users.
HomeService
This retrieves and calculates the data displayed on the dashboard, including the user’s top spending category, monthly total and overall amount spent.
CategoryList.png
​Categories were implemented as a separate database entity rather than an enum, allowing new categories to be added or changed later without modifying and recompiling the application code. Each expense stores a CategoryId, which links it to the relevant category through Entity Framework Core.
AzureDash.png
​ExpenseFlow is hosted on Azure App Service, with PostgreSQL running through Azure Database for PostgreSQL Flexible Server and resources organised within a dedicated resource group.
2023

Todo App

The todo app was built using C# WinForms, utilising a SQL database (SSMS) and the user interface designed with Guna UI.

Authenticating Error Handling

When logging in, It will read through SQL table to find an existing username & password
When signing up, it will read through SQL table to check if the username or email the user entered already exists
It will check if the username & email are available then proceed to store and save the data into the table

Adding & Editing & Removing Todo's

Adding a todo will proceed to create a unique ID and store the ID, name, description and if it has been completed into the SQL table.
Checking / Completing the todo will update the table automatically.
When selecting the todo, it will open a panel where you can edit the name and description. Clicking on the update button will automatically update the table with the new information.
Remove the todo will remove it from the list and the SQL table.

Updating & Deleting User Account

When updating the account, the system will scan the table to check if the new information already exists. If the information is unique, it will proceed to update the table.
Removing the account will delete all user information from the table, along with all current to-dos linked to the account.
bottom of page