This commit is contained in:
parent
0be50b6c24
commit
2c37e7fa62
39 changed files with 410 additions and 397 deletions
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: Ad Astra
|
||||
description: A tiny embedded game engine and custom PCB built around an ATtiny85V.
|
||||
description: A handheld game built from a custom PCB up — ATtiny85V, OLED, IR, EEPROM. 8-bit ALU at 8 MHz, 50 FPS floor.
|
||||
thumbnail:
|
||||
src: ./_assets/ad-astra.jpg
|
||||
alt: The Ad Astra handheld game running on its OLED display.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: Avoid
|
||||
description: A small early web game, kept as an archive of first experiments on the web.
|
||||
description: My first browser game, kept around so the timeline is honest.
|
||||
thumbnail:
|
||||
src: ./_assets/avoid.jpg
|
||||
alt: Screenshot of the Avoid canvas game.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: City Simulation
|
||||
description: A Unity traffic simulation where REST-controlled traffic lights could produce visible consequences for a cybersecurity challenge.
|
||||
description: A Unity city where REST-controlled traffic lights made bad PLC code visible as car crashes.
|
||||
thumbnail:
|
||||
src: ./_assets/city-simulation.jpg
|
||||
alt: Screenshot of a Unity city traffic simulation.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: Photo Colour Grader
|
||||
description: A proof-of-concept colour grading UI based on selecting colours and transforming nearby colour ranges.
|
||||
description: Pick a colour, edit every nearby colour as a function of distance. A grader built around one interaction idea.
|
||||
thumbnail:
|
||||
src: ./_assets/photo-colour-grader.jpg
|
||||
alt: Screenshot of a colour grading interface applied to a photograph.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: decla.red
|
||||
description: A team-based mobile multiplayer browser game with shared client/server game logic.
|
||||
description: Mobile multiplayer browser game where the client and server linked the same TypeScript game-rules module.
|
||||
thumbnail:
|
||||
src: ./_assets/declared.jpg
|
||||
alt: The decla.red browser game interface showing a space scene.
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
---
|
||||
title: Fleeting Garden
|
||||
description: A WebGPU drawing toy where coloured strokes spawn agents that follow them, branch off, and slowly rewrite the patch you laid down.
|
||||
description: A single-file WebGPU drawing toy. Your strokes seed a swarm; nine numbers per vibe give each preset its personality.
|
||||
thumbnail:
|
||||
src: ./_assets/fleeting-garden.jpg
|
||||
alt: A kaleidoscopic Fleeting Garden snapshot of cyan, violet, and yellow agent trails radiating from a central knot.
|
||||
period: '2026'
|
||||
sortDate: 2026-05-01
|
||||
technologies: ['TypeScript', 'WebGPU', 'WGSL', 'Compute shaders', 'Vite', 'Physarum']
|
||||
technologies: ['TypeScript', 'WebGPU', 'WGSL', 'Compute shaders', 'Vite', 'Tweakpane']
|
||||
selected: true
|
||||
essay: fleeting-garden-webgpu-drawing
|
||||
links:
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: Foreign Exchange Prediction Experiment
|
||||
description: A frequency-domain prediction experiment using smoothing, differentiation, STFT, extrapolation, and inverse transforms.
|
||||
description: A Hanning-windowed STFT experiment on EUR/USD. Passable backtest, sober conclusions, no real money risked.
|
||||
thumbnail:
|
||||
src: ./_assets/forex.jpg
|
||||
alt: Chart from a foreign exchange prediction experiment.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: GreatAI
|
||||
description: A Python framework and research project for making AI deployment best practices easier to adopt.
|
||||
description: One decorator on a Python function turned it into a deployed ML service. MSc thesis with a survey to back the API choices.
|
||||
thumbnail:
|
||||
src: ./_assets/great-ai.png
|
||||
alt: Example Python code using the GreatAI API.
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
---
|
||||
title: Lights Synchronized to Music
|
||||
description: A Raspberry Pi music player that drove RGB LED strips from audio analysis.
|
||||
description: Raspberry Pi music player, NumPy FFT, MOSFETs, RGB strips. The first thing I built that I actually finished.
|
||||
thumbnail:
|
||||
src: ./_assets/leds.jpg
|
||||
alt: RGB LED strips glowing from a music synchronization project.
|
||||
period: 'Spring 2016'
|
||||
sortDate: 2016-04-01
|
||||
technologies: ['Python', 'NumPy', 'FFT', 'Raspberry Pi', 'Vanilla web']
|
||||
technologies: ['Python', 'NumPy', 'FFT', 'Raspberry Pi', 'MOSFETs', 'vanilla web']
|
||||
selected: false
|
||||
essay: lights-synchronized-to-music
|
||||
links: []
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
---
|
||||
title: My Notes
|
||||
description: A minimalist Android markdown note organizer and editor powered by Markwon.
|
||||
description: A small Android Markdown note app. The point was a few weeks outside the web stack.
|
||||
thumbnail:
|
||||
src: ./_assets/my-notes.png
|
||||
alt: Screenshot of the My Notes Android markdown app.
|
||||
period: 'November 2019'
|
||||
sortDate: 2019-11-01
|
||||
technologies: ['Android', 'Kotlin/Java', 'Markdown', 'Markwon']
|
||||
technologies: ['Android', 'Markdown', 'Markwon']
|
||||
selected: false
|
||||
essay: my-notes-android-markdown-app
|
||||
links:
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: Graph Editor
|
||||
description: A JavaFX editor for creating and editing input graphs for the cooling system simulator.
|
||||
description: A drag-and-drop JavaFX editor that let event organisers reconfigure the cooling sim without me sitting next to them.
|
||||
thumbnail:
|
||||
src: ./_assets/process-simulator-input.jpg
|
||||
alt: JavaFX editor interface for the cooling system simulator input graph.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: Cooling System Simulation
|
||||
description: A graph-based process simulation with a monitoring client and JavaFX input editor.
|
||||
description: A live cooling-plant simulator for a PLC cybersecurity event. Flow as graph traversal, heat as a matrix solve — two passes instead of one PDE.
|
||||
thumbnail:
|
||||
src: ./_assets/nuclear-simulation.jpg
|
||||
alt: Cooling system simulator interface with pipes, pumps, and temperature values.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: Photo Site Generator
|
||||
description: A static photo site generated from a directory of images, with automatic resizing to multiple quality settings.
|
||||
description: Point a Webpack script at a folder of photos, get a static site with responsive image variants. An excuse to walk with a camera.
|
||||
thumbnail:
|
||||
src: ./_assets/photos.jpg
|
||||
alt: Screenshot of a generated photography site.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: Platform Game
|
||||
description: An early 3D game in C with SDL 1.2, random maps, destructible voxels, enemies, powerups, and time slowdown.
|
||||
description: My Basics of Programming project. 3D voxel game in C and SDL 1.2. Pointers, learned painfully.
|
||||
thumbnail:
|
||||
src: ./_assets/platform-game.jpg
|
||||
alt: Screenshot from an early 3D platform game.
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
---
|
||||
title: reconcile-text
|
||||
description: A Rust library that auto-resolves conflicting text edits without conflict markers, with WebAssembly and Python bindings.
|
||||
description: One Rust core, three packages. Merges Markdown notes from three editors I don't control, with no operation history. Never emits markers.
|
||||
thumbnail:
|
||||
src: ./_assets/reconcile.png
|
||||
alt: The reconcile-text logo and tagline "Conflict-free 3-way text merging".
|
||||
period: '2025'
|
||||
sortDate: 2025-05-01
|
||||
technologies: ['Rust', 'WebAssembly', 'Python', 'pyo3', 'Operational Transformation']
|
||||
technologies: ['Rust', 'WebAssembly', 'Python', 'pyo3', 'wasm-bindgen', 'Myers diff']
|
||||
selected: true
|
||||
essay: reconcile-text-3-way-merge
|
||||
links:
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
---
|
||||
title: SDF-2D
|
||||
description: A browser rendering library for optimized 2D ray tracing with signed distance fields.
|
||||
description: A browser 2D ray-tracer tuned for the phone in your pocket. Tile-based passes, deferred shading, shaders generated per scene and device.
|
||||
thumbnail:
|
||||
src: ./_assets/sdf2d.jpg
|
||||
alt: SDF-2D browser demo with soft lighting effects.
|
||||
period: 'Autumn-Winter 2020'
|
||||
sortDate: 2020-12-01
|
||||
technologies: ['TypeScript', 'WebGL', 'WebGL2', 'SDF rendering']
|
||||
technologies: ['TypeScript', 'WebGL', 'WebGL2', 'Signed distance fields']
|
||||
selected: true
|
||||
essay: sdf-2d-ray-tracing
|
||||
links:
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
---
|
||||
title: Life Towers
|
||||
description: A multi-device goal tracker where the lasting idea was syncing state with immutable tries.
|
||||
description: A multi-device goal tracker. The trie underneath made the sync diff free; the towers were just the UI.
|
||||
thumbnail:
|
||||
src: ./_assets/towers.jpg
|
||||
alt: Life Towers goal tracking interface with tower-like visual structures.
|
||||
period: 'August-September 2019'
|
||||
sortDate: 2019-09-01
|
||||
technologies: ['Python', 'Angular', 'State synchronization']
|
||||
technologies: ['Python', 'Angular', 'TypeScript', 'Immutable trie']
|
||||
selected: true
|
||||
essay: life-towers-immutable-tries
|
||||
links:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue