Game Developer & Junior Software Engineer
Creating immersive experiences through code and creativity
Combining technical skills with creative vision
Key milestones in my development career
Created Rot&Root, a physics-based zombie farming tower defense game. Built with Unity featuring full Steam multiplayer integration in just one week.
Started my journey in game development education
A selection of my work
A physics-based zombie farming tower defense game created during a week-long game jam. Features full Steam multiplayer integration, unique physics-driven gameplay mechanics, and cooperative survival. Defend your farm against waves of the undead.
Full website development for SBG Shropshire, a Brazilian Jiu-Jitsu and martial arts gym. Built a modern, responsive site with class schedules, membership information, instructor profiles, and an integrated contact system.
This interactive portfolio showcasing my work and skills. Features particle animations, smooth scroll effects, responsive design, and a custom conveyor-style project showcase. Built with modern web technologies for optimal performance.
A comprehensive gym management platform currently in active development. Features member management, class scheduling, payment processing, and analytics dashboards. Building a scalable solution for fitness businesses of all sizes.
Website development for SBG Crewe martial arts gym. Created a clean, professional online presence with training information, class timetables, and easy-to-use enquiry forms. Optimized for mobile users and local SEO.
A physics-based zombie farming tower defense game created during a week-long game jam. Features full Steam multiplayer integration, unique physics-driven gameplay mechanics, and cooperative survival. Defend your farm against waves of the undead.
Full website development for SBG Shropshire, a Brazilian Jiu-Jitsu and martial arts gym. Built a modern, responsive site with class schedules, membership information, instructor profiles, and an integrated contact system.
This interactive portfolio showcasing my work and skills. Features particle animations, smooth scroll effects, responsive design, and a custom conveyor-style project showcase. Built with modern web technologies for optimal performance.
A comprehensive gym management platform currently in active development. Features member management, class scheduling, payment processing, and analytics dashboards. Building a scalable solution for fitness businesses of all sizes.
Website development for SBG Crewe martial arts gym. Created a clean, professional online presence with training information, class timetables, and easy-to-use enquiry forms. Optimized for mobile users and local SEO.
A physics-based zombie farming tower defense game created during a week-long game jam. Features full Steam multiplayer integration, unique physics-driven gameplay mechanics, and cooperative survival. Defend your farm against waves of the undead.
Full website development for SBG Shropshire, a Brazilian Jiu-Jitsu and martial arts gym. Built a modern, responsive site with class schedules, membership information, instructor profiles, and an integrated contact system.
This interactive portfolio showcasing my work and skills. Features particle animations, smooth scroll effects, responsive design, and a custom conveyor-style project showcase. Built with modern web technologies for optimal performance.
A comprehensive gym management platform currently in active development. Features member management, class scheduling, payment processing, and analytics dashboards. Building a scalable solution for fitness businesses of all sizes.
Website development for SBG Crewe martial arts gym. Created a clean, professional online presence with training information, class timetables, and easy-to-use enquiry forms. Optimized for mobile users and local SEO.
The programming languages in my toolkit
A glimpse into how I write code
public class PlayerController : MonoBehaviour
{
[SerializeField] private float moveSpeed = 5f;
private Rigidbody rb;
void Start() => rb = GetComponent<Rigidbody>();
void FixedUpdate()
{
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
Vector3 move = new Vector3(h, 0, v);
rb.MovePosition(rb.position + move * moveSpeed * Time.fixedDeltaTime);
}
} <template>
<div class="project-grid">
<ProjectCard
v-for="project in filteredProjects"
:key="project.id"
:project="project"
@click="openProject(project)"
/>
</div>
</template>
<script setup lang="ts">
import { ref, computed } from 'vue'
import type { Project } from '@/types'
const projects = ref<Project[]>([])
const filter = ref('all')
const filteredProjects = computed(() =>
filter.value === 'all'
? projects.value
: projects.value.filter(p => p.category === filter.value)
)
</script> void AWeaponBase::Fire()
{
if (!CanFire()) return;
FHitResult Hit;
FVector Start = MuzzleComponent->GetComponentLocation();
FVector End = Start + (GetActorForwardVector() * Range);
FCollisionQueryParams Params;
Params.AddIgnoredActor(this);
Params.AddIgnoredActor(GetOwner());
if (GetWorld()->LineTraceSingleByChannel(Hit, Start, End, ECC_Visibility, Params))
{
if (AActor* HitActor = Hit.GetActor())
{
UGameplayStatics::ApplyDamage(HitActor, Damage, GetInstigatorController(), this, DamageType);
}
}
CurrentAmmo--;
}
The tools I use to bring ideas to life