Mosaic
A private project, shared as a showcase
This entry shows what I’m building and how the pieces fit together. Mosaic is my private personal workspace; there is no public sign-in or visitor access from this portfolio.
An operating system for me
Mosaic started as a private personal memory hub and is growing into a place for my everyday tools: notes, projects, tasks, a journal, home controls and an assistant inbox. I want the useful parts of my digital life to share context, instead of becoming another collection of disconnected apps.
Building it with AI
I’ve used AI-assisted development to build the interface, data model, tools and deployment, then worked through the practical details of connecting it to my home and assistants. The interesting part is making the whole journey understandable: ask for something, use the right context, act through a permitted tool, and show what happened.
Two complementary assistant paths
My ChatGPT dot, Nova, connects to Mosaic through the Personal Hub MCP plugin. I’m also setting up OpenClaw on a dedicated Ubuntu virtual machine at home to explore a persistent local companion. OpenClaw is a separate assistant with its own permissions and state; its direct Mosaic MCP connection is still being resolved.
A home for the things I use
An editable Home, dock and app menu open projects, tasks, Capture, Journal, a searchable Library and the Memory web. The aim is a familiar personal workspace that works across a computer and phone, with appearance and layout choices I can control.
Talk to Dot from Mosaic
The Dot app saves conversations and replies in Mosaic. Signed MCP Events notify an authorised listener about deliberately sent messages, and the assistant replies through Mosaic’s tools. The live status reports a listener and a saved reply; it does not import the dot’s existing ChatGPT or Slack conversation history.
Bring the home into the workspace
Home Assistant supplies exposed device context and permitted controls. Mosaic also provides shortcuts to Plex, Proxmox and Cloudflare. These shortcuts open the existing services with their own sign-in; they do not automatically grant an assistant control over them.
See how it all fits together
The Architecture app maps systems, connections, access points, outputs and storage. It keeps implemented code, configured services and dated verification distinct, with change receipts and exports. Authorised AI can read and maintain this documentation through MCP.
The hosted application
React and Vinext provide the interface and routes, compiled for Cloudflare Workers through Sites. The browser calls owner-scoped HTTP APIs, while authorised assistants call a stateless Streamable HTTP endpoint at /mcp. Both use the same persistent Cloudflare D1 database, with Drizzle migrations for schema changes.
Getting it online
I published Mosaic as a private Sites application, then connected a custom hostname using Cloudflare DNS, domain verification and managed TLS. The GoldieHome entry point redirects to Mosaic. Recorded checks showed the signed-in workspace loading existing data, while anonymous and forged-identity API requests remained blocked. The custom-domain browser route is separate from proving OAuth on that hostname.
Shared context through MCP
The Personal Hub plugin exposes tools for focused memory search, entities and sourced facts, tasks, projects, Journal, Dot and Architecture. MCP is the interface that lets an authorised assistant work with Mosaic’s data and actions; it does not automatically copy private chats into the database or make every external AI client compatible with the hosted sign-in.
How Dot messaging works
An owner message is saved first. Mosaic sends a signed event to a verified listener, the assistant reads the conversation and posts a reply through MCP, and Mosaic saves the response with delivery or work receipts. The outbox supports retries and duplicate protection. A saved reply proves a round trip; a Listening badge alone does not.
Connecting Home Assistant
Mosaic connects over HTTPS to Home Assistant’s Assist MCP tools and API. The integration credential is encrypted in D1 and is not returned to the browser or AI. Home Assistant controls which entities are exposed, and Mosaic separately controls whether device actions are allowed. The current live configuration has home controls enabled.
The home-server side
Proxmox hosts the home services and a dedicated Ubuntu companion VM. I prepared the VM, installed its desktop and guest agent, set automatic startup, and installed OpenClaw under a separate non-administrator account. Mosaic’s computer surface and service shortcuts provide access to existing interfaces; that is distinct from proving autonomous desktop control.
What remains in progress
OpenClaw’s model setup and Mosaic MCP authentication have been under investigation. Local records include an authorisation rejection, and I have not established a successful OpenClaw tool list and Mosaic tool call. The companion is therefore an ongoing integration experiment, rather than a completed extension of Nova.
Keeping ownership visible
Mosaic has an AI pause switch, writing controls, record visibility, owner-scoped storage and activity receipts. Browser-local layouts and recovery state are separate from server records. The goal is to make context and permitted actions available without silently giving every assistant access to everything.
HarMesh
What I’m building
HarMesh is a local creative workspace that brings AI and 3D modelling into one guided journey. The aim is to move from an idea or reference image to a model I can inspect, change and keep editing in Blender.
From a thought to a shape
The creative journey is Prompt → Designs → Model → Refine. I describe an idea, explore visual directions and approve a design before the app starts building. The result is editable geometry, with a chance to compare it against the original intention and work through the details.
A project in development
I’m developing HarMesh as a desktop application and experimenting with both creative modelling and measured parts. This portfolio shares the thinking and workflow; public access and downloads are not offered here.
Explore before building
An idea can start with a description and optional reference images. Design sheets make the possible directions visible, so I can choose, revise and approve the brief before committing to a full build.
Inspect and refine
The model viewer lets me rotate the result, select parts and mark areas that need work. AI conversation helps prepare an edit; applying it creates a new model revision to review. Saved versions make it possible to compare changes and return to an earlier result.
Make parts that need to fit
A separate Precision CAD path starts from dimensions, a STEP component or a dimensioned drawing. It uses an approved measurement contract and checks exported geometry. Print preparation produces a separate copy for assessment; slicing, calibration and physical fit still require practical checks.
Keep the work editable
The handover includes editable Blender scenes and portable model exports, with STEP and STL for the measured CAD route. The purpose is to keep building on the work in familiar modelling tools.
AI as the modelling harness
HarMesh coordinates a brief, design approval, construction, validation and revision history. Compatible Codex or Claude tooling supplies the AI connection through the user’s own subscription. The selected model and reasoning effort remain visible in the workspace.
Blender and CadQuery do the geometry
For creative models, the AI prepares construction code that runs in a local Blender worker. CadQuery provides the measured solid-modelling route. Projects and revisions are stored locally, with persistent job state and checkpoints for interrupted work.
Checks alongside visual review
The build workflow reopens saved scenes, renders several views and checks dimensions and exports. A portable GLB can be validated and imported again to catch handover problems. These checks support inspection; visual fidelity and real-world fit still need human judgement.
The next challenge
I’m working on the quality and consistency of the whole journey: clearer design choices, useful feedback on failures, better refinement and reliable editable exports. HarMesh is an evolving development project, and model quality varies with the brief and construction.
Secret project
This file is mostly black ink
I’m working on a secret project around mixed reality. The idea is staying under wraps for now. Consider this your highly unofficial, heavily redacted heads-up ;)
Your clearance level
Curious visitor. Approved information: mixed reality, in development, and I’m having fun with it. Everything else is classified.
A sneak peek. Sort of.
The blur is intentional. The details are redacted. The button is optimistic. More when I’m ready to lift the lid ;)
[REDACTED]
Nice try. This part of the file is staying sealed for now.
Motion Studio · Claude vs GPT
One prompt. Two Motion Studios.
I started with the shared brief shown in a research note crediting Nate Parrott, built separate apps with Claude Opus 5.5 and GPT / Sol 6.1, then used both to make animations. Read the full post for the two development routes, actual UI screenshots and paired films.
Claude’s route
The Claude implementation builds characters from editable SVG drawings, parent attachments, named poses and overlapping tracks. Its detailed layer list and timeline expose the construction of the scene.
GPT’s route
The GPT implementation develops imported character performances into specialised rig, facial and motion workflows, with a curve editor, diagnostics and validated authoring commands. Later films show further iterations of those tools.
The quality wall
The full post includes both development retrospectives: Claude’s film-driven feature rounds and remaining drawing limits, GPT’s rejected character rebuild, and the visual feedback that exposed problems successful tests did not catch.
Compare the films
Use the named gallery buttons to watch each build’s exported animations. The motion-graphics and Louis Goldsbrough films offer an introduction to both versions, followed by the more ambitious character work.
From graphics to performance
I explored timing, scene changes, camera movement, dialogue, expressions and character posing. Later films reflect further iteration on the editor and assets, so they show the development journey as well as the visual result.
My role
I directed the experiment, tested and iterated on the software with AI, developed the animation ideas and reviewed the exports. Both builds remain local creative tools.
Giving myself a voice
I used ElevenLabs and recorded my own voice to voice myself in the animations. The other characters use randomly chosen voices.
Two independent implementations
Both projects use React and TypeScript with a local server. Scenes, layers, keyframes and easing are editable on a timeline; a browser renderer and FFmpeg produce MP4 exports.
The GPT character workflow
The GPT build includes rig and pose tools, facial animation, lip-sync controls, follow-through and an authoring API that applies changes through the running editor.
What the comparison establishes
The films are concrete creative results from my tests. Different amounts of follow-up work, revised assets and later tool improvements affect the results. I am showing the work for visitors to judge, without assigning unsupported scores or treating all exports as equivalent stages.
Read the comparison story
Paracosm Studio
Why I’m making it
I love maps, stories and the possibility of worlds that don’t exist yet. Paracosm brings those interests together in a workspace for planets, civilisations and the stories that connect them.
My part
Creative development, with work on representing 3D world data, saving it as JSON and reconstructing it in the browser. This is where my interest in logical systems meets my imagination.
Where it is now
The public alpha brings generated planets, geography, civilisations, orbital systems, a Wiki and story tools into one workspace. Creation and editing are desktop experiences; mobile supports exploring existing worlds, Wiki and Scribes.
Start with a world
Explore generated worlds and their map layers, then develop the places and civilisations within them.
Give the world a story
Connect geography with celestial systems and canon so the setting has more than a visual surface.
The usability challenge
Keep a complex creative process understandable: the world should remain something you can explore and work on, rather than a collection of disconnected data.
An editable representation
The central challenge is saving a useful representation of a generated 3D world and rebuilding it later, rather than treating the rendered scene as the only source of truth.
Persistence and reconstruction
My work uses JSON persistence, Supabase and React to connect saved world data with its front-end reconstruction.
Where the interests meet
Map data, 3D interaction, procedural worlds and storytelling all have to describe the same place. That connection is the part I find especially interesting.
Explore Paracosm Studio
Contour Studio
A map that becomes an object
Contour Studio turns real terrain, roads, waterways and buildings into 3D-printable map art. It brings together my interests in cartography, software, 3D modelling and making things you can hold.
Why it feels like me
It combines manipulating geographic data, 3D modelling, software and physical making. The idea is to take somewhere meaningful and turn it into something tangible.
Free, open source and ready to explore
The public website offers Apple Silicon Mac and Windows desktop previews, a local browser version and the MIT-licensed source. The web designer lets you save a design; generating geometry and storing projects happen on your own computer. Physical printing and slicer compatibility remain part of the development work.
1. Start with the thing you want to make
Choose a single map, continuous tiled artwork or a collection of separate places. Jigsaw and shaped artwork options broaden what a map can become. Pick the location, dimensions and layout together so the selected area matches the intended object.
2. Make it your own
Choose terrain and building styles, adjust the frame and add personal-place markers. Advanced controls sit with the part of the artwork they affect.
3. Inspect, then make
Generate locally, inspect the assembled or separated pieces, and export STL or 3MF print files. Print-pack and slicer handoff work includes plate layout and assembly information. The final printer, filament and material assignments are chosen in the slicer.
Real geography to physical geometry
React, TypeScript and MapLibre handle the selection workspace. A Python/FastAPI engine processes terrain and map features using tools including NumPy, Shapely, Manifold3D and Trimesh. Three.js renders the resulting model.
One landscape, then individual tiles
The engine builds a continuous landscape before cutting it into tiles. This keeps the neighbouring edges based on the same source surface, instead of sampling each piece independently.
Designing for a printer
Geometry is expressed in millimetres. Print-pack generation includes solid-mesh checks, local print-bed coordinates, alignment keys and assembly information. The data comes from terrain sources, OpenStreetMap and, in the current generator, supplementary Overture building outlines.
Getting it into people’s hands
The desktop packages bundle Python and the geometry engine, so the Mac and Windows apps do not require a development environment. A public download site and GitHub releases distribute the app; the geometry work runs locally rather than on a shared generation server.
Explore & download Contour Studio
The Tavern
A game made for learning
I wrote a command-line text adventure in Python to teach junior developers how to code in the language and practise good coding habits. Rooms, a game loop and puzzles gave us a practical project to learn from, with a story to tie the pieces together.
Coming back to an old idea
I asked Claude Opus 5.5 to transform that original game into a 3D version. A few prompts later, I landed on The Tavern: a browser game built around my original adventure, with a 3D world surrounding the text and commands.
Why I wanted to include it
It connects teaching, storytelling and experimentation. It is also a small example of how an earlier project can take on a new life when the tools change.
Enter the Halothane Tavern
Enter a name and begin in a misty street outside the tavern. The ledger describes the room and the choices available.
Type, or follow the scene
Type commands or choose the visible actions. Drag to look around, zoom into the scene and click outlined objects. The interface combines a traditional text adventure with a spatial view.
Follow the clues
The interface tracks lives, three keys and six clues, with a map and command help available. Discovery and puzzles drive the journey through the tavern.
From a command window to the browser
The original was a command-line Python text adventure written as a teaching project. I asked Claude Opus 5.5 to transform it into a 3D version, and iterated over a few prompts to reach the browser game linked here.
A world generated in code
The artifact’s About panel describes its rooms, props, textures and sound effects as generated in code, rather than built from a collection of image assets. The screenshots here are captures of that actual game.
The role of AI
The original Python game, teaching purpose, story and puzzles are my work. Claude Opus 5.5 produced the 3D browser transformation through a short series of prompts. It is a practical experiment in carrying an existing idea into a different medium with AI.
Play The Tavern
Desktop Displays
Something beyond the screen
A collaborative project connecting a physical desktop display with software and live information. It gives me a way to bring product design, electronics, 3D printing and creative brand work into the same project.
What I’m working on
The physical enclosure, iteration through CAD and printing, the product’s identity, and visual demonstrations of how it could live on a desk. I also developed the idea of the display bezel transforming into the brand’s D mark.
From concept renders to First Edition
The gallery now includes the designated Model A First Edition geometry, alongside earlier room concepts and the V15 film. CAD, print-fit work and rear-wall revisions continue to inform the design. Renders illustrate geometry and finish; they are not photographs of production hardware.
Useful at a glance
The design explores information you can keep in view on a small physical display. The room demos show flight and train display concepts.
An object that belongs on a desk
The screen, enclosure, cable access and proportions need to work together. I use room renders to consider the display in a workspace, studio or living room.
Make it maintainable
The enclosure work includes fit, screen retention and deliberate hand access. Ease of assembly and serviceability are part of the design, alongside appearance.
From CAD to a printed enclosure
The project uses 3D models, STL/STEP exports and small fit-test pieces to explore tolerances, clips and the housing around the display and Raspberry Pi electronics.
Physical and digital parts
The physical product is being developed alongside software as a service. Getting the housing, electronics and on-screen experience to work together is the central challenge.
A reusable product asset system
The First Edition website pack includes matching transparent stills, screen masks and interactive GLB models with a separate editable screen surface. That makes it possible to demonstrate different display views while keeping the enclosure geometry and screen proportions consistent.
Visit Desktop Displays
Vault Barbershop
A website with a real job to do
A website and booking system for a Swinton barbershop. It needs to give the business a digital home and support the everyday work of getting appointments into the diary.
My part
I built, tested, deployed and iterated on the system using AI-assisted development, including JavaScript and React changes. It handles live bookings for multiple barbers, with ongoing fixes and improvements.
Choose the appointment
Customers can explore the shop, choose a service and barber, and book an available appointment.
Make returning straightforward
The customer area gives people a place to manage their bookings. The staff experience is separate, with calendars and controls appropriate to barbers and administrators.
Support the whole journey
Availability, blocked time and confirmation emails matter as much as the first screen. The design has to work for the person booking and the person managing the day.
The application
A Next.js/React front end connects to Supabase for authentication and database-backed scheduling. The project includes customer, barber and administrator roles.
Scheduling and access
Services, barber pricing, working hours, blocked times and bookings are separate parts of the data model. Role-based access and database row-level policies support the different views.
The work after launch
Resend handles email integration. Loading the right records, handling authentication and improving the booking flow are ongoing engineering concerns in a service people actively use.
Visit Vault Barbershop
Power X Tanning
A digital home with personality
A website for a tanning studio in Mexborough, built around its black and neon-pink identity. It connects the creative side of presenting a business with the practical information visitors need.
What I care about here
The design should feel like the business while making it easy to work out where to go, when it is open and what to expect.
Plan a visit
Find the opening hours, studio location and parking information without having to piece them together from different places.
Get a feel for the studio
The imagery, typography and colour give the site its character across desktop and mobile layouts.
Keep information useful
The project includes a content editor for the owner so the business information can be maintained through a focused editing experience.
A focused web application
The local project is built with Next.js and uses a database-free content approach, with a separate single-owner editor.
Editing and access
The editor uses authenticated sessions and checks changes on the server. The visitor-facing site stays focused on studio information.
Discovery and presentation
The implementation includes metadata, structured business information, a sitemap and social previews alongside the responsive page design.
Visit Power X Tanning
Police Detective Game
A world you investigate through software
A police detective game built around a fictional British workstation called POLARIS. I’m using it to explore agentic development, creating stories and the logic of interconnected systems.
The experiment
The player works through desktop applications, case records, evidence and a fictional web. I’m interested in how a convincing interface can become part of the storytelling.
Building the first complete case
The current project is a POLARIS workstation preview. The earlier starter investigation and simulated checkout have been retired. Versioned case packs, purchases, player accounts and invited shared play are being developed; the preview is not a finished purchasable case.
Enter the workstation
Explore the POLARIS desktop and application launcher, then move between the fictional workstation’s tools. The preview introduces the interface without presenting an active investigation as complete.
Follow information across tools
Use NEXUS for casework and records, inspect evidence, research fictional websites and keep notes. The game connects what you find in one place with what you can investigate elsewhere.
Make the complexity navigable
Windows retain their state, applications have familiar controls, and the fictional web has its own search. The usability challenge is helping players follow a lead without removing the pleasure of discovery.
A browser-based desktop
React, TypeScript and Vinext/Vite support the workstation, window lifecycle, application navigation and game state.
A connected fictional world
The research browser uses an internal site catalogue and local search index. Its destinations belong to the fictional game world; the in-game web is not a wrapper around live external websites.
State today, and the next architecture
The current prototype uses browser-local preferences and notes alongside D1/R2-backed workspace capabilities. The planned release moves to Next.js, Vercel and Supabase, with versioned case packs and purchaser-invited play. Those release connections are still being implemented.
Explore the workstation preview