CV %20--%3e%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20version='1.1'%20id='SVGRoot'%20sodipodi:docname='download.svg'%20inkscape:version='1.4.3%20(0d15f75042,%202025-12-25)'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:svg='http://www.w3.org/2000/svg'%3e%3csodipodi:namedview%20id='namedview246'%20pagecolor='%23505050'%20bordercolor='%23eeeeee'%20borderopacity='1'%20inkscape:showpageshadow='0'%20inkscape:pageopacity='0'%20inkscape:pagecheckerboard='0'%20inkscape:deskcolor='%23505050'%20inkscape:document-units='px'%20showgrid='true'%20inkscape:zoom='11.930303'%20inkscape:cx='-3.3528067'%20inkscape:cy='14.91999'%20inkscape:window-width='1920'%20inkscape:window-height='939'%20inkscape:window-x='0'%20inkscape:window-y='32'%20inkscape:window-maximized='1'%20inkscape:current-layer='layer1'%3e%3cinkscape:grid%20type='xygrid'%20id='grid252'%20originx='0'%20originy='0'%20spacingy='1'%20spacingx='1'%20units='px'%20empspacing='8'%20/%3e%3c/sodipodi:namedview%3e%3cdefs%20id='defs241'%3e%3cinkscape:path-effect%20effect='mirror_symmetry'%20start_point='12,0'%20end_point='12,24'%20center_point='12,12'%20id='path-effect1'%20is_visible='true'%20lpeversion='1.2'%20lpesatellites=''%20mode='vertical'%20discard_orig_path='false'%20fuse_paths='false'%20oposite_fuse='false'%20split_items='false'%20split_open='false'%20link_styles='false'%20/%3e%3cinkscape:path-effect%20effect='mirror_symmetry'%20start_point='30,23.545847'%20end_point='30,45'%20center_point='30,34.272923'%20id='path-effect6126'%20is_visible='true'%20lpeversion='1.2'%20lpesatellites=''%20mode='free'%20discard_orig_path='false'%20fuse_paths='true'%20oposite_fuse='false'%20split_items='false'%20split_open='false'%20link_styles='false'%20/%3e%3cinkscape:path-effect%20effect='mirror_symmetry'%20start_point='30,10'%20end_point='30,30'%20center_point='30,20'%20id='path-effect6124'%20is_visible='true'%20lpeversion='1.2'%20lpesatellites=''%20mode='free'%20discard_orig_path='false'%20fuse_paths='true'%20oposite_fuse='false'%20split_items='false'%20split_open='false'%20link_styles='false'%20/%3e%3cinkscape:path-effect%20effect='mirror_symmetry'%20start_point='30,13'%20end_point='30,50'%20center_point='30,31.5'%20id='path-effect425'%20is_visible='true'%20lpeversion='1.2'%20lpesatellites=''%20mode='free'%20discard_orig_path='false'%20fuse_paths='false'%20oposite_fuse='false'%20split_items='false'%20split_open='false'%20link_styles='false'%20/%3e%3cinkscape:path-effect%20effect='mirror_symmetry'%20start_point='49.54956,11.853962'%20end_point='49.54956,40.066391'%20center_point='49.54956,25.960177'%20id='path-effect421'%20is_visible='true'%20lpeversion='1.2'%20lpesatellites=''%20mode='free'%20discard_orig_path='false'%20fuse_paths='false'%20oposite_fuse='false'%20split_items='false'%20split_open='false'%20link_styles='false'%20/%3e%3c/defs%3e%3cg%20inkscape:label='Layer%201'%20inkscape:groupmode='layer'%20id='layer1'%3e%3cpath%20style='fill:none;stroke:%23ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round'%20d='M%2012,3%20V%2017%20L%207,12%20m%205,-9%20v%2014%20l%205,-5'%20id='path1'%20inkscape:path-effect='%23path-effect1'%20inkscape:original-d='M%2012,3%20V%2017%20L%207,12'%20sodipodi:nodetypes='ccc'%20/%3e%3cpath%20style='fill:none;stroke:%23ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round'%20d='M%203,21%20H%2021'%20id='path2'%20/%3e%3c/g%3e%3c/svg%3e)
Skills
- Languages - TypeScript, C#, Python, Rust, GraphQL
- Frameworks - SvelteKit, Vue, React, PixiJS, Three.js
- Databases - SQL, MongoDB, Prisma
- Development Tools - Git, Vitest, ESLint, XUnit, Playwright, npm, Github Actions
Experience
Cambridge Intelligence / Software Developer
10th August 2026 - PresentCurrently working on improving developer experience through schema-based validation of passed data and experimenting with agent-based tools to accelerate development.
Cambridge Kinetics / Software Engineer
7th September 2022 - 31st December 2025Started off by working on various consulting projects before shifting to the launch and continuous development of their new product, Kinabase.
- Architected and implemented many of Kinabase's core features, including computed fields, aggregations and the automation system
- Acted as a technical leader for the project, reviewing the majority of pull requests, mentoring junior developers and presenting internal talks on software engineering best practices
- Modernised a client's sensor-data platform by migrating critical data synchronisation services from legacy PHP to fully unit-tested TypeScript
Gearset / Intern
June - September 2021Worked on various features for the company's Salesforce DevOps software, culminating in working with UX to design and build an entirely new user-facing page.
Softwire / Intern
June - August 2020Worked in a team of 5 other interns on a feature for a multiplatform phone app using Kotlin, Swift and React.
Education
University of Cambridge / MEng Engineering (specialising in Information and Computer Engineering)
September 2018 - July 2022- 1st Year: 1st
- 2nd Year: Unclassed due to COVID-19
- 3rd Year: 1st
- 4th Year: Merit
Projects
NoNotParty Arcade
7th April 2023 - PresentGames website built using SvelteKit, focusing on encouraging competitiveness via global leaderboards and using server verification of high scores to prevent cheating. Currently features over 30 games, the majority using PixiJS for rendering.
Methodoku Online
19th March - 15th April 2023Daily randomly generated version of a popular bellringing puzzle.
Inspired creating games with a similar daily puzzle + leaderboard format on my games website after noticing that many people were still playing it long after I'd stopped adding new features.
CUGCR Website Rewrite
1st - 19th September 2020As the CUGCR webmaster, decided to recreate the entire website using React after getting frustrated by the old site's admin interface. The new site is more performant and mobile-friendly.