Selected Engineering Practice
SOFTWARE ENGINEERING / MACHINE LEARNING / DATA
Making allergen-aware recipe discovery easier to navigate.

An MSc research project exploring how NLP and faceted search could make allergen-aware recipe discovery easier to navigate. I built a full-stack prototype that combines structured allergen filtering with a hybrid NLP pipeline using rule-based matching, spaCy NER and Word2Vec semantic substitutions, while moving to a tiered approach to ethical data acquisition.
AUDITED
7,500
RECIPES
CLEANED
1,419
FALSE FLAGS
SEARCH
14
ALLERGEN GROUPS

Explored CNN architecture, regularisation and transfer learning for image classification, comparing several model variations before testing MobileNetV2.

Compared multiple supervised learning approaches, examining preprocessing, missing data and classification performance across several models.

A web-based IT support management system for reporting, tracking and updating school IT issues, built with PHP, JavaScript and a relational database.

Exploring artificial neural networks for binary classification, with a particular focus on class imbalance, oversampling and network architecture.
TASK
BINARY
CLASSIFICATION
FOCUS
IMBALANCE
DATA + MODELLING
ANN
12
HIDDEN NODES
A command-line true-or-false quiz built in Python, using functions, dictionaries, input validation and score tracking for multiple players.
QUESTIONS
10
INPUT
T / F
PLAYERS
MULTI
A Python-based library management system exploring object-oriented programming, catalogue operations and book borrowing logic.
LANGUAGE
PYTHON
FOCUS
OOP
SYSTEM
LOANS
02 // VISUAL ARCHIVE
Selected work from an earlier design practice spanning graphic design, editorial systems, photography and visual experimentation.
An exhibition identity exploring stereotyping, judgement and hidden identity through layered portraiture, colour and a four-gallery visual system.


An experimental type specimen exploring hierarchy, scale, spacing, glyphs and typographic composition through print and digital presentation.

A print-led exploration of personal creative principles, using experimentation, controlled mistakes, glitch processes and mixed media to turn failure into visual material.

Editorial handbook designed for international students, combining information architecture, photography, typography and layered print treatments.
// A LITTLE ABOUT HOW I THINK
I have an MSc in Computer Science (Distinction) and a BA in Graphic Design (2:1). For me, technology and design have always been closely connected. I like understanding how things work, figuring out why they don't, and finding ways to make them better. I care about building software that is useful, accessible and thoughtfully made.
A lot of my problem-solving mindset comes from working in an acute emergency general surgery environment. Before becoming a software engineer, I spent years working where things could change quickly and getting the details right mattered. Managing patient information, busy workflows and competing priorities taught me to stay organised, communicate clearly and think calmly when things don't go to plan.
I don't panic easily. When something goes wrong, my first instinct is to understand the problem, work out what matters most and start fixing it. I'm naturally diplomatic and I value clear communication, especially when people have different priorities or perspectives. I enjoy solving problems, working things through with others and finding practical solutions rather than making things more complicated than they need to be.

University of Sunderland
Advanced core modules in Software Engineering, Data Structures & Algorithms, Database Systems Normalisation, and Full-Stack Architecture Development.
Southampton General Hospital
Southampton General Hospital
Maintained meticulous cleanliness, safety layout routines, and logistical flows to satisfy strict healthcare clinical parameters.
University of Southampton
Focused on Swiss typographic layout design systems, complex information mapping frameworks, advanced editorial layout geometry, and brand identity architecture.
Northampton College
A multidisciplinary creative foundation spanning graphic design, motion graphics, photography, and illustration.
Ritter UK — Innovations in Plastics, Wrexham
Calibrated, adjusted, and managed heavy mechanical silk-screen hardware configurations safely under tight production schedules.
MSc Computer Science // Research Project // 2026
Making allergen-aware recipe discovery easier to navigate.
PROJECT
MSc RESEARCH
DATA
7,500 RECIPES
NLP
HYBRID APPROACH
EVALUATION
16 PARTICIPANTS
01 // The Problem
For people managing food allergies, finding something to cook can involve far more than typing a recipe into a search bar. Recipe information can be inconsistent and unstructured, requiring users to manually inspect ingredients and repeatedly make decisions about what to avoid.
FreeFrom14 explored how structured data, faceted search and natural language processing could help make allergen-aware recipe discovery easier to inspect and navigate.
02 // The Question
How can recipe information be responsibly acquired, audited and structured?
Can faceted filtering help users navigate complex restrictions?
Can semantic techniques improve ingredient understanding beyond exact keyword matching?
How can transparency and data integrity be prioritised in an allergen-aware context?
03 // The Pivot
The original project explored web scraping as a method of acquiring recipe data. As the research progressed, questions around permissions, provenance, reliability and ethical data acquisition became increasingly important.
Rather than forcing the original approach, I reassessed the data pipeline and explored more controlled sources, including authorised APIs and open datasets.
The goal wasn't simply to collect more data. It was to build a pipeline I could better understand, justify and audit.
04 // The System
DATA → PROCESSING → INTELLIGENCE → DELIVERY
Authorised APIs + open datasets
Python processing pipeline
Clean + normalise recipe data
Structure information around 14 allergen groups
Regex + spaCy NER + Word2Vec
PostgreSQL via Supabase
Flask + responsive interface
05 // The Intelligence
The first approach used strict keyword matching. It was fast and understandable, but recipe language is rarely that tidy. Different ingredients and ways of describing the same thing could leave gaps in what the system recognised.
INCREASING SEMANTIC FLEXIBILITY
SYMBOLIC BASELINE
Deterministic rules for known patterns, structured terms and explicit ingredient signals.
ENTITY EXTRACTION
Used to identify ingredient-related entities in less structured recipe text.
SEMANTIC EXPLORATION
Used to explore semantic relationships between ingredients and potential substitutions.
WHY HYBRID?
The project explored how deterministic rules and semantic NLP could complement one another rather than treating one technique as a complete replacement for the others.
WORD2VEC CONFIGURATION
vector_size=200 · window=3 · min_count=2 · sg=1
TOOLS, METHODS & INFRASTRUCTURE
PYTHON
FLASK
POSTGRESQL
SUPABASE
SPACY
WORD2VEC
REGEX / RULES
JINJA2
HTML / CSS
JAVASCRIPT
PYTEST
OPEN DATA / APIS
Technologies and methods used across data acquisition, NLP, database design, application development and evaluation.
06 // The Search Experience

SEARCH / FILTER
Progressive recipe discovery
Structured around the major allergen categories recognised by UK/EU legislation.
Supporting more complex combinations of exclusions.
Allowing users to progressively refine results.
Moving beyond a simple include-or-exclude response.
The aim wasn't to make dietary decisions for the user. It was to make complex recipe information easier to inspect and navigate.
// KEY DESIGN SHIFT
Instead of stopping at an allergen warning, the project explored how semantic relationships could help users discover functional alternatives.
EXCLUDED
HONEY
EXPLORE
MOLASSES
Semantic relationship explored through Word2Vec

SEMANTIC SUBSTITUTION
From exclusion to exploration

RECIPE DETAIL
Allergen-aware recipe view
07 // Testing & Results
Evaluation combined technical testing with user feedback, allowing the project to look beyond whether the search worked and ask whether it was understandable, usable and useful.
7,500
Recipes evaluated
1,419
Erroneous flags removed
16
User test participants
89.6
Composite usability / 100
< 5 sec
Average allergen identification
17.94%
Tree Nut false-positive reduction
TASK 02
100%
All participants successfully completed the search-and-filter task, providing a useful indication that the core faceted interaction was understandable in testing.
Results are presented within the context of the MSc research prototype and its evaluation methodology.
// WHAT THE RESULTS SUGGEST
The results suggested that the hybrid approach reduced some false-positive allergen flags, while user testing indicated that the core search-and-filter interaction was understandable in practice.
08 // Security & Trust
Because the system processes user input and returns information that could influence dietary decisions, security and trust had to be considered throughout the application.
Supabase parameterisation was used to separate SQL commands from user input and reduce SQL injection risk.
Jinja2 automatic escaping helped prevent injected HTML from being interpreted as executable markup.
User queries were sanitised using regex-based filtering before processing.
Search input was limited to 100 characters to constrain malformed or excessive queries.
In an allergen-aware system, technical trust and user trust are closely connected.
09 // Reflection
01
The quality and provenance of input data affected every stage of the system.
02
Deterministic rules and semantic NLP approaches each had strengths and limitations.
03
In an allergen-aware context, uncertainty matters. A system should help users inspect information rather than create false confidence.
04
One of the biggest lessons was learning to change direction when evidence challenged the original plan.
// FINAL REFLECTION
The best outcome wasn't following my original idea perfectly. It was learning when — and why — to rethink it.
MACHINE LEARNING // EXPERIMENT LOG
Testing how different architectural and training choices affect image classification performance.
// QUESTION
Can iterative model changes improve a baseline CNN?
01 // The Starting Point
The project began with a baseline convolutional neural network (CNN) for CIFAR-10 image classification. From there, the experiment was to change one part of the approach at a time and observe how performance responded.
DATASET
CIFAR-10
TASK
10-CLASS
BASELINE
71%
APPROACH
ITERATIVE
The aim wasn't to find a perfect model immediately. It was to understand what changed when the model changed.
02 // Experiment Log
Each experiment changed a different part of the model so its effect could be compared against the baseline. Some changes helped, while others made performance worse.
EXPERIMENT 00
Three convolutional layers, two pooling layers, Adam optimiser and 10 training epochs.
71%
accuracy
EXPERIMENT 01
Increased network depth and added He kernel initialisation.
72%
accuracy
+1% vs baseline
EXPERIMENT 02
Increased the architecture to three convolutional and pooling blocks.
73%
accuracy
+2% vs baseline
EXPERIMENT 03
Added dropout after each pooling layer to improve regularisation.
75%
accuracy
+4% vs baseline · lowest loss: 0.71
EXPERIMENT 04
Applied an L2 kernel regulariser to the convolutional layers.
62%
accuracy
performance dropped
EXPERIMENT 05
Tested minimal image augmentation using flips and random cropping.
55%
accuracy
unexpected result · initial run plateaued at 10%
EXPERIMENT 06
Pre-trained transfer-learning model using features learned from ImageNet, trained for 20 epochs.
76%
accuracy
★ BEST RECORDED RESULT · LOSS 0.74
LAB NOTE
Increasing complexity did not guarantee better performance. Dropout produced a strong result, while L2 regularisation and augmentation performed less well. MobileNetV2 ultimately produced the highest accuracy in the experiment set.
03 // What Changed?
The experiments were not simply attempts to increase accuracy. Each one tested a different idea about architecture, regularisation, optimisation or transfer learning.
ARCHITECTURE + INITIALISATION
Increased network depth and introduced He kernel initialisation. Accuracy increased from 71% to 72%.
ARCHITECTURE DEPTH
Increased the network depth again, reaching three convolutional and pooling blocks. Accuracy increased to 73%.
REGULARISATION
Added dropout after each pooling layer to improve regularisation. Accuracy reached 75% with the lowest recorded loss of 0.71.
REGULARISATION
Applied L2 regularisation to the convolutional layers. Accuracy dropped to 62% after 10 epochs, reaching 65% when trained for 30.
DATA AUGMENTATION
Tested minimal augmentation on the training data. The first run plateaued at 10%, and simplifying the architecture eventually improved the result to 55%.
TRANSFER LEARNING
Tested a lightweight pre-trained architecture using features learned from ImageNet. This produced the highest accuracy at 76%.
// SIDE EXPERIMENT — OPTIMISER CHOICE
Four optimisers were compared. SGD reached 65% accuracy, Adam 69%, Adamax 69% and LAMB 71%. Changes to the default learning rate of 0.001 reduced validation accuracy, so the original rate was retained.

SIDE OBSERVATION // EPOCH TUNING
Training beyond 10 epochs did not improve validation accuracy. The widening gap between training and validation performance indicated overfitting, while loss increased to 2.45.
04 // The Result
After testing deeper architectures, regularisation and data augmentation, the strongest accuracy came from moving to a pre-trained MobileNetV2 model.
★ BEST RECORDED RESULT
76%
MobileNetV2 accuracy
0.74
loss
HIGHEST ACCURACY
76%
MobileNetV2
The pre-trained model produced the strongest accuracy across the experiment set.
LOWEST LOSS
0.71
Model 3 · 75% accuracy
The three-block network with 20% dropout produced the lowest recorded loss in the experiment set.

EXPERIMENT RESULTS
Model progression
// WHAT THE RESULT SHOWED
The experiments showed that more complexity did not automatically lead to better performance. Dropout produced a strong result, while L2 regularisation and augmentation performed less well. Transfer learning ultimately produced the highest accuracy.
05 // Data Source
ORIGINAL DATASET
CIFAR-10
A benchmark image-classification dataset created by Alex Krizhevsky, containing 60,000 32×32 colour images across 10 classes.
Krizhevsky, A. (2009) · University of Toronto
VIEW DATASET ↗06 // Lab Notes
NOTE 01
Increasing network depth produced incremental gains, but the results showed that adding more complexity alone was not enough to consistently improve performance.
NOTE 02
The 20% dropout experiment reached 75% accuracy and the lowest loss, while L2 regularisation reduced performance in this experiment.
NOTE 03
Data augmentation initially caused the model to plateau at around 10% accuracy. Simplifying the architecture improved the result, but it still finished well below the other experiments.
NOTE 04
With CPU-only resources, the project had to balance experimentation, training time and model complexity rather than testing every possible architecture.
// NEXT EXPERIMENTS
A natural next step would be to explore longer MobileNetV2 training, learning-rate scheduling, more refined augmentation and alternative pre-trained architectures such as EfficientNet.
// FINAL LAB NOTE
The interesting part wasn't finding the winning model. It was finding out why the others behaved differently.
MACHINE LEARNING // MODEL COMPARISON
Comparing four classification approaches to see which model best fitted the dataset.
01 // The Data
The dataset contained 699 observations with 9 predictor features and a binary classification target. Before modelling, the missing values had to be handled so the models could be compared consistently.
OBSERVATIONS
699
FEATURES
9
CLASSES
2
MISSING VALUES
16
DATASET IMPACT
2.29%
MISSING FIELD
Bare nuclei
DATA CLEANING
The 16 incomplete records were removed using complete-case analysis.
02 // The Approach
MODEL 01
A distance-based classifier used as a direct benchmark against the other approaches.
MODEL 02
A rule-based model that makes predictions by splitting the feature space into decision paths.
MODEL 03
A probabilistic classifier providing a different modelling assumption from the distance- and tree-based approaches.
MODEL 04
A feed-forward neural model used to test a more flexible non-linear approach.
03 // Data Preparation
Missing entries were identified in the Bare nuclei field.
Incomplete observations were removed before model training.
Performance was assessed using accuracy, sensitivity and specificity rather than accuracy alone.
04 // Model Comparison
★ BEST RESULT
The strongest overall classification result in the comparison.
98.25%
accuracy
sensitivity
1.00
specificity
0.95
DECISION TREE
91.20%
accuracy
sensitivity
0.91
specificity
0.90
NAIVE BAYES
97.07%
accuracy
sensitivity
0.91
specificity
1.00
NEURAL NETWORK
96.09%
accuracy
sensitivity
0.90
specificity
1.00
// WHAT THE COMPARISON SHOWED
KNN achieved 98.25% accuracy, with 1.00 sensitivity and 0.95 specificity. In the evaluated data, this meant the model correctly identified all malignant cases while correctly classifying 95% of benign cases.
// Why these metrics matter
In a medical classification problem, overall accuracy is useful, but it does not show what kinds of predictions the model gets wrong. Sensitivity and specificity provide additional context by showing how well the model identifies malignant and benign cases respectively.
ACCURACY
The proportion of predictions the model classified correctly overall.
SENSITIVITY
Shows how effectively the model identifies cases that are actually malignant. Higher sensitivity means fewer malignant cases are missed.
SPECIFICITY
Shows how effectively the model identifies cases that are actually benign. Higher specificity means fewer benign cases are incorrectly classified as malignant.
KEY TAKEAWAY
A high accuracy score alone does not guarantee a useful classifier. Looking at sensitivity and specificity helps reveal how the model behaves across both classes.
05 // Data Source
ORIGINAL DATASET
Breast Cancer Wisconsin (Original)
A structured classification dataset containing measurements of cell characteristics used to distinguish benign and malignant cases.
Wolberg, W. (1990) · UCI Machine Learning Repository
VIEW DATASET ↗06 // What I Learned
NOTE 01
Cleaning the missing values was an essential step before making meaningful model comparisons.
NOTE 02
The strongest result came from KNN rather than the more complex neural network approach.
NOTE 03
Accuracy gave a useful headline result, but sensitivity and specificity were important for understanding how the models performed across malignant and benign cases.
NOTE 04
Resampling, cross-validation and additional modelling approaches would provide greater confidence in the result.
// FINAL REFLECTION
The strongest result wasn't necessarily the most complicated model. It was the model that fitted this dataset best.
PHP // MYSQL // JAVASCRIPT // 2025
A PHP/MySQL support management system designed to handle staff IT requests from issue submission through technician resolution.
01 // The System

AUTHENTICATED ACCESS
Staff and technician entry point
01
LOGIN
02
REPORT
03
TRACK

STAFF ISSUE LOG
Details + optional evidence

TECHNICIAN DASHBOARD
Separate active and completed work
STAFF WORKFLOW
Log an issue
Staff enter their details, location, asset number and issue description, with an optional file upload for supporting evidence.
TECHNICIAN WORKFLOW
Manage jobs
Jobs are separated into incomplete and complete views, with status updates written back to the database.
02 // Building It
SERVER
Handles form processing, authentication flow, validation and database operations.
DATABASE
Stores submitted IT issues and supports retrieval and status updates through PDO.
VALIDATION
JavaScript provides immediate feedback while server-side validation remains the control layer for submitted data.
INTERFACE
Flexible layouts and mobile/tablet media queries were used to adapt the prototype to different screen sizes.
03 // Security & Validation

VALIDATION IN ACTION
Input rejected before submission
ACCESS
The prototype restricted access to staff or technician accounts through server-side validation.
INPUT
Input was validated on the server and sanitised, with JavaScript used to improve feedback and user experience.
TEST RESULT
Security testing identified no SQL injection vulnerability, while also exposing further session and header hardening opportunities.
// CRITICAL EVALUATION
The prototype was not treated as production-ready. Testing highlighted remaining issues around the session cookie and missing security headers such as CSP and HSTS, giving a clear direction for future hardening.
04 // UX & Testing

ACTIVE JOB QUEUE
Technician-facing workflow

STATUS UPDATE
Complete the workflow
3
Users observed
UX
Flow tested
RWD
Responsive test
WHAT WORKED
Users found the flow logical and easy to follow, while login and issue submission worked correctly during observation.
WHAT NEEDED WORK
Testing highlighted contrast, navigation and smaller-screen job-list improvements as areas for further development.
05 // What I Learned
01
Client-side checks can improve the experience, but they should not replace server-side validation.
02
User observation and security testing exposed issues that would not be obvious from the happy path alone.
03
A working prototype can still reveal clear next steps for stronger authentication, session security and accessibility.
// FINAL ENGINEERING NOTE
The most useful part of the build was discovering where a working system still needed to become a better one.
MACHINE LEARNING // BINARY CLASSIFICATION // 2025
Exploring how class imbalance, oversampling and neural network architecture influence binary classification performance.
01 // The Problem
The project used the Bank Marketing dataset as a binary classification problem. A key focus was understanding how class imbalance could affect model behaviour and how oversampling could be used to address it.
TASK
BINARY
CLASSIFICATION
CHALLENGE
IMBALANCE
CLASS DISTRIBUTION
MODEL
ANN
NEURAL NETWORK

BASELINE // CLASS IMBALANCE
The initial model predicted only the negative class, exposing the impact of the 77:23 class imbalance.
02 // The Approach
STEP 01
Examine the structure of the classification problem and the distribution of the target classes.
STEP 02
Prepare the dataset for neural network modelling and account for the imbalance problem.
STEP 03
Explore oversampling as a way of giving the minority class greater representation during training.
STEP 04
Compare network configurations and examine how architecture changes affect the classifier.

OVERSAMPLING // TRAINING DATA
RandomOverSampler was used to rebalance the minority class without discarding existing observations.
03 // Network Architecture
TEST ACCURACY // 77%
TEST ACCURACY // 98%
TEST ACCURACY // 93%
TRAINING ACCURACY // 90%
12 HIDDEN NODES
Increasing the hidden layer from 6 to 12 nodes produced the strongest configuration, reaching 98% test accuracy.
ARCHITECTURE SNAPSHOT
MODEL
ANN
HIDDEN NODES
12
FOCUS
BINARY


HOW TO READ THE MATRIX
Each cell shows how the model's predictions compared with the actual class. The diagonal shows correct predictions; the off-diagonal cells show errors.
For this model, 912 class-0 cases and 856 class-1 cases were correctly classified, while 3 class-0 cases were predicted as class 1 and 30 class-1 cases were predicted as class 0.
04 // What the Experiment Showed
DATA
An imbalanced dataset can make overall performance look better than the model's behaviour on the minority class.
RESAMPLING
Rebalancing the training data can change how effectively the classifier learns the minority class.
ARCHITECTURE
Network structure, hidden-layer size and data preparation all influence model behaviour, so the architecture has to fit the problem rather than simply become larger.
06 // Data Source
ORIGINAL DATASET
Bank Marketing
Originally published through the UCI Machine Learning Repository, the dataset contains data from direct telephone marketing campaigns conducted by a Portuguese banking institution.
Moro, S., Rita, P. & Cortez, P. (2014)
VIEW DATASET ↗07 // What I Learned
01
The classifier cannot be evaluated separately from the data it was trained on.
02
Looking beyond overall accuracy is important when one class is represented differently from the other.
// FINAL LAB NOTE
The interesting part wasn't just building the neural network. It was understanding how the data shaped what the network learned.
PYTHON // MINI PROJECT // 2025
A command-line true-or-false quiz exploring Python dictionaries, functions, input validation and score tracking.
01 // The Idea
The project is a 10-question true-or-false quiz. Players enter their name, answer each question and receive a final score and percentage.
QUESTIONS
10
TRUE / FALSE
INPUT
T / F
VALIDATED
PLAYERS
MULTI
SCORE TRACKING
02 // The Structure
The questions are stored in a separate Python dictionary, allowing the main quiz program to import and work with the question data independently.
QUESTION DATA // PYTHON DICTIONARY
quiz = {
1 : {"question" : "An octopus has three hearts...",
"answer" : "t"
},
2 : {"question" : "Goldfish have a two second memory...",
"answer" : "f"
}
}
03 // Input Validation
The answer-checking function validates the player's response and accepts both uppercase and lowercase T/F input.
INPUT VALIDATION // USER RESPONSE
answers = ['t', 'f', 'T', 'F']
while user_answer not in answers:
user_answer = input(...)
if quiz[question]['answer'].lower()
== user_answer.lower():
04 // Score System
Each correct answer increments the score, which is then converted into a percentage based on the total number of questions.
SCORING // PERCENTAGE CALCULATION
nr_quiz_questions = 10
def percentage_score(score, nr_quiz_questions):
percent = (score / nr_quiz_questions) * 100
return percent
05 // What I Learned
FUNCTIONS
Practised breaking the quiz into reusable pieces of logic.
VALIDATION
Built predictable handling for user input and case-sensitive responses.
// FINAL PROJECT NOTE
The project helped turn basic Python syntax into a complete interactive program with a clear beginning, middle and end.
PYTHON // SOFTWARE PROJECT // 2025
A Python-based library management system exploring object oriented programming, catalogue operations and book loans.
01 // The Model
The system uses Python classes to represent the main parts of the library. Each Book object stores attributes such as title, author, publisher, year and number of copies.
OBJECT MODEL // BOOK CLASS
class Book():
def __init__(self, ID, title, author,
publisher, year, no_copies,
publication_year):
self.ID = uuid.uuid4()
self.title = title
self.author = author
self.no_copies = int(no_copies)
02 // Catalogue Operations
Books can be added, removed and searched by title, author, publisher and publication year.
SEARCH // TITLE LOOKUP
user_search = input('Please enter book title to search: ')
book_search = [book for book in self.book_list
if book.title.lower() == user_search.lower()]
03 // Loans
The Loans class manages borrowed books, available books and due dates, storing each borrowing transaction against a user account.
BORROWING // USER ACCOUNT
self.due_date = datetime.now() + timedelta(days=30)
self.available_books = Book_list.available_books
borrowed_book = [{self.user_name:
[self.book_title, self.due_date]}]
self.user_account.extend(borrowed_book)
04 // What I Learned
OBJECT-ORIENTED DESIGN
Classes provided a way to represent books, users and loans as distinct parts of the system.
STATE MANAGEMENT
Borrowing and returning books required the system to keep track of availability and user loan information.
// FINAL PROJECT NOTE
A small Python system that introduced me to modelling real-world relationships through code.
BA GRAPHIC DESIGN // 2014
An exhibition identity exploring stereotyping, judgement and hidden identity through portraiture, colour, typography and a four-gallery visual system.
01 // CONCEPT
The project challenged ideas around stereotyping and judging. The mask became the central visual concept, representing the idea of an object that can hide a person's true identity.
CORE IDEA
What we see is not necessarily what we understand.
02 // VISUAL SYSTEM
The visual system was developed for four neighbouring galleries, with each gallery presenting a different portrait theme. Colour was used to distinguish the venues while keeping the overall identity connected.
GALLERY 01
GALLERY 02
GALLERY 03
GALLERY 04
03 // PRIMARY ARTWORK

04 // PHYSICAL OUTCOME


05 // SELECTED MATERIAL


ARCHIVE NOTE
An important early project in my visual practice, combining conceptual thinking, information structure, typography and physical production.
BA GRAPHIC DESIGN // 2014
An experimental typography project investigating how type changes through scale, spacing, weight, structure and composition across physical and digital formats.
HISTORICAL REFERENCE
The specimen format was inspired by early manuscript and book design, translating the visual language of handwritten manuscripts and early printed books into a contemporary typographic object.
01 // TYPE SYSTEM
The specimen explores different weights, scales and typographic relationships, using large letterforms alongside detailed character and glyph studies.

02 // SCALE / SPACING
Size, spacing and tracking become part of the composition, allowing typography to move between information, image and graphic form.
03 // GLYPH STUDIES


04 // PHYSICAL SPECIMEN







05 // DIGITAL SPECIMEN
The project was also explored through a web-based specimen, translating the typographic system into a digital presentation rather than treating the printed work as a static outcome.




ARCHIVE NOTE
An exploration of typography as both information and visual material — moving between structured specimen pages, physical print and digital presentation.
PERSONAL ETHOS // PRINT + EXPERIMENTATION
The brief was to design an outcome that communicated personal beliefs and work ethic. The project became a visual exploration of the principles that informed my approach to design.
CORE ETHOS
The concept challenged the idea that mistakes should simply be corrected or hidden. Instead, mistakes became part of the visual language of the work, allowing experimentation and controlled failure to generate new forms.
The imagery was deliberately corrupted using a controlled glitch process. JPEG script characters were replaced with the word “mistake”, creating a visual progression in which increasing levels of corruption altered the original image.


The final outcomes were assembled into a series of concertina books. The format allowed the viewer to see the transition from the original image through increasingly damaged and corrupted versions.









Letterpress printing, laser printing, digital image manipulation and book binding were combined to create the final physical outcomes.




PROCESS // MATERIAL // OUTPUT
Archive note // Earlier creative practice, BA Graphic Design, 2014. Preserved as part of the visual archive to show the development of experimentation, print practice and visual thinking that continues into later digital work.
COLLEGE // FINAL MAJOR PROJECT
A student handbook designed for international students, combining editorial structure, photography, typography and layered visual treatments into a cohesive information system.
01 // VISUAL LANGUAGE
The handbook combines photography, large-scale typography, translucent colour blocks and repeated graphic structures to organise a substantial amount of information without relying on a conventional page hierarchy.

02 // EDITORIAL SYSTEM
INFORMATION
Content was organised into navigable sections using repeated numbering, consistent typography and strong visual anchors.
IMAGE
Photography was treated as part of the information structure, rather than simply as supporting decoration.
03 // SELECTED PAGES





04 // PROCESS & TOOLS
ARCHIVE NOTE
An early example of the visual systems thinking that later became part of my work across interface design, information architecture and software development.