ffilm.org / fieldnotes Field Notes

ffilm.org / fieldnotes

A living log of builds, rooms, evidence, experiments and weather from the workbench.

Art build diary music

24 Jul 2026

ListenUp.to: One Page for Your Band

Musicians don't need a website. They need one good link.

...read more

Music gets scattered across Bandcamp, SoundCloud, Spotify, YouTube, and a dozen other platforms. Every band has the same problem: there's no single place to send someone that has everything. ListenUp.to solves that with a form, not a website builder.

How it works

A musician answers an intuitive series of format-agnostic questions: what's your name, where's your music, have you got gigs coming up, where's your merch? The questions glean and gather output from across platforms into one well-formatted page at a memorable URL: listenup.to/yourband.

No drag-and-drop. No fifty layouts. No templates to agonise over. Fill in a form, hit publish. Most bands have a live page in under ten minutes.

What's on the page

Music embeds — Bandcamp, SoundCloud, Spotify. Type your handle, ListenUp builds the embed.

Videos — drop a YouTube link, it plays in place.

Gig dates — date, venue, city, ticket link. No event-platform integration needed.

Merch links — point to your store, your Bandcamp merch page, wherever.

Booking and contact — one booking email, no public inbox. Press get an EPK; fans get the music.

A proper URL — listenup.to/yourband. Short enough to read out loud at a gig.

Why it's free

I built this because I needed it. As Procrastinatrix (444+ tracks, 13 albums, BBC Radio Wales airplay), I know how fragmented a musician's output gets across platforms. The tool I wanted didn't exist, so I made it and offered it free to other musicians. Paid tiers from £5/month cover hosting and development.

Live examples

The platform is live with artists across genres and geographies: Crow Nation (Apocalyptic Grime, London), Hedgetooth (Ritual Hauntology, Wales), Sad Cypress (arty folk-pop, Cardiff), Warrior Bones (raw and gritty, Audenge), T00TH (Experimental DnB, Swansea), and Tardigrade (Organic Techno, Hereford/Brecon — a collaboration between Omar Majeed and myself).

Technical

Full-stack build: form-driven CMS, dynamic page rendering, automatic embed generation from platform handles, OG image generation per band, and mobile-first design optimised for fast loading on phones at venues.

Originally posted on Contra: https://contra.com/p/6M2kMrsF-listen-upto-one-page-for-your-band

24 Jul 2026

Faetime: A Human-Scale Social Network

Faetime is an invite-only social network capped at 100 members. No algorithms, no performance metrics, no infinite scroll. The feed is chronological. The community is small enough that names become familiar and quiet posts matter.

...read more

Each member receives three invitations to pass on carefully until the hundred places are filled. The constraint is the point: at human scale, a social platform doesn't need engagement mechanics to stay alive. People just talk to each other.

What it does

Members post fragments of life (thoughts, images, weather, passing moments) and respond using moon-phase symbols rather than conventional reactions. The interface changes through the day: blue sky and moving clouds in daylight, violet at dusk, stars at night. The moon overhead reflects the current real-world phase and sign.

Live chat runs alongside the feed for real-time conversation.

Synastry and lunar timing

Each member's birth details feed a synastry system that maps relationships between participants. Daily reflections draw on lunar timing and personal chart data. This isn't horoscope content: it's computed from ephemeris data and presented as one way of noticing time differently, together.

The synastry integration means the platform understands the relational space between its members, not just individual profiles.

Why it's built this way

Most social platforms optimise for scale. Faetime optimises for presence. A chronological feed means nobody has to perform for an algorithm. A hard cap of 100 means the community can self-regulate without moderation infrastructure. Invite-only distribution means growth is deliberate, not viral.

The result is a social space shaped by time, atmosphere, and attention rather than engagement metrics.

Technical

Built on the ffilm.org infrastructure stack. Features include image posts, YouTube embeds, nested replies, friendship synastry, live chat, real-time atmospheric rendering, and lunar phase tracking. Launched March 2026.

Originally posted on Contra: https://contra.com/p/R6MQs7BA-faetime-a-human-scale-social-network

24 Jul 2026

Personal Sky: Data-Driven Astrology App

Personal Sky is a data-driven astrology browser app that lets you search your chart and talk with your sky. It uses an accurate ephemeris, a deterministic PHP data interpretation layer, and only then does the AI do its interpretation pass, keeping the conversation grounded in the calculated facts of the chart.

...read more

The Problem

Most astrology apps either oversimplify (daily horoscope generators) or let an LLM freestyle with no grounding in actual astronomical data. I wanted to build something where every claim the AI makes is backed by a real, calculated chart position, and where the app works perfectly well without AI at all.

What I Built

Ephemeris-Driven Chart Engine

Birth place and time are resolved into coordinates and timezone data. PHP builds and validates the natal chart, current transits, houses, aspects and geometric patterns from ephemeris data. Unknown birth times automatically disable houses and angles, so the app never shows data it can't verify.

Interactive SVG Chart

The natal and present-day transit charts are overlaid in a fully interactive SVG wheel. You can explore planets, aspects, houses and patterns directly.

AI Grounded in Calculated Facts

The verified chart context is selectively passed to Claude, so the model explains calculated facts rather than inventing them. A deterministic fallback works without AI for users who prefer it.

Sky Passport subscriptions

Personal Sky is live in beta. Visitors can explore their chart and ask up to 5 free questions; Sky Passport costs £3/month and adds unlimited follow-up questions, saved charts, and access across devices.

Collaboration

Built in collaboration with astrologer Kelfin Oberon, who designed the astrological structure and interpretation framework that the deterministic layer implements.

The Stack

PHP, JavaScript, SVG, Claude API, Stripe. Originally launched through Ffilm.org, now live at PersonalSky.net.

Visit at personalsky.net

Originally posted on Contra: https://contra.com/p/B2OlkMBX-personal-sky-data-driven-astrology-app

24 Jul 2026

LiveRoom: Browser-Based Private Video Conversations

LiveRoom is a browser-based platform for private video conversations, built as part of Ffilm.org. Hosts create a room and share a link; guests join without installing anything. Live video, chat, screen sharing and consent-based recording, all running in the browser.

...read more

The Problem

Video calling tools are either bloated with features nobody asked for or locked behind app installs and accounts. I wanted something stripped back: create a room, share a link, talk. No downloads, no sign-ups for guests, no ambiguity about whether you're being recorded.

What I Built

Signalling and Real-Time Infrastructure The React/Vite frontend uses WebSockets for signalling, role management, admission control, presence tracking and ephemeral chat. Browser-native WebRTC handles all media streams, with TURN support for reliable connections behind restrictive networks.

Consent-Based Recording Recording is off by default and clearly indicated in the UI at all times. With participants' explicit agreement, the host can make a local desktop recording that composites the stage video, a chat ticker and mixed room audio using the MediaRecorder API. Nothing is uploaded automatically.

Room Access and Roles Hosts control admission, so uninvited visitors can't join. The room model supports distinct host and guest roles with appropriate permissions for each.

Cloudflare Durable Objects Room state is managed through Cloudflare Durable Objects, keeping signalling fast and co-located with the WebSocket connections.

The Stack

React, Vite, WebRTC, WebSockets, Cloudflare Durable Objects, MediaRecorder API, TURN.

LiveRoom Interface

Visit at ffilm.org/liveroom

Originally posted on Contra: https://contra.com/p/32cEROkm-live-room-browser-based-private-video-conversations

24 Jul 2026

Zoneout: Shared Rooms for Real-Time Listening

Zoneout.net is a shared room for real-time listening. Choose tracks from the SoundCloud library, chat, and ponder the WebGL orb in a room with others. Built for musicians and listeners who want to share the experience of hearing something at the same time.

...read more

Why This Exists

Sending someone a music link is a weak way to share music. Half the time it disappears into a tab, or gets saved for later and never heard. Being in a room with someone while a track actually plays is different: you feel the reaction as it happens, even if nobody says much.

Listening to music together online usually means someone screen-shares a Spotify window or pastes links in a chat. I wanted a dedicated space where a group of people are genuinely synchronised on the same track, at the same moment, with a shared visual atmosphere. Something collective rather than privately fed through headphones.

The Build

I began in the usual modern way, with a heavier stack in mind: Next, Prisma, all the expected machinery. It quickly became obvious that was the wrong direction for where I wanted this to live. It never properly ran in a way worth keeping.

The real build was the lean version: Express, static pages, polling, signed cookies, one server file, no unnecessary weight. That part was satisfying because everything had to justify itself. Rooms first, then queue logic, then all the little social questions hidden inside queue logic: whose track, whose right to remove it, what happens when nobody adds anything when the current one ends.

Ghost Tracks

That last question was the one I liked solving most. For the Procrastinatrix room, I didn't want anyone arriving into silence, so it now quietly pulls from my own Headphone Candy playlist and drops in ghost tracks when the queue is empty. They arrive without an owner attached and anyone can skip them instantly. It means the room is already doing something before anyone decides what comes next.

Authoritative Server-Side Sync

The Node.js/Express server maintains the authoritative room state: current track, queue, play/pause state and start timestamp. Every browser seeks to the correct playback point on connect and stays synchronised throughout the session. The SoundCloud Widget API handles actual audio playback.

Real-Time Everything

Socket.IO carries chat, presence, reactions, queue changes and skip votes over the same live connection. The room feels immediate because everything is.

Queue and Voting

Anyone in the room can queue tracks from SoundCloud. Skip votes let the room collectively move on from a track without giving any single person veto power.

The Visualiser Rabbit Hole

Then I got dragged sideways into the visualiser and lost hours there. A blob first, then a torus knot, then flame, then another version because the flame looked wrong, then a separate shader page because once you start editing fragment code directly it becomes dangerous to do it inside the live room. Bass, mids, highs, hue, fullscreen, mouse tilt, chat over the top. A WebGL2 orb that became the shared visual atmosphere: the thing you stare at while you listen, a campfire for the room.

Everything Underneath

Scheduled events, admin controls, presence snapshots, skip votes, creator permissions, visitor graphs: all the practical parts that make a room behave properly once people are inside it. Cursor and Claude Code helped with velocity, but only under strict supervision: prompting, rejecting, steering, checking what they wrote, making them strip things back when they got bloated or made bad assumptions. It still feels less like pressing a button and more like conducting a very fast, slightly unruly assistant.

Who It's For

Musicians who want to play their SoundCloud tracks to an audience without the awkwardness of just throwing links around. People who want to hang out remotely and chat while playing bangers. And for the orb ponderers, there are visuals.

After six tracks you unlock creator status, which means you can make your own room, schedule events, and start shaping the place yourself. The whole point is that it grows by being used.

Visit at zoneout.net

Originally posted on Contra: https://contra.com/p/vvgFkMPO-zoneout-shared-rooms-for-real-time-listening

6 Jul 2026

Welcome

Feeling frazzled. It’s been an absolute creative lightening storm of a week.
I built this blog in five minutes on a mobile phone so I’d have a place to type my thoughts without ai involved.
I use it a lot but I think I need to keep practicing the art of writing human to human because it’s starting to atrophy.

...read more

It’s an incredible tool. But it changes you. Neuroplasticity… I feel like I’m rewiring my brain as things speed up. I’ve got a blistering headache.

Shipped a bunch this week. The thing I’m most proud of is Ffilm.org/liveroom . It’s a video podcasting app and it’s already facilitated some very interesting conversations. It was a lot of work, days and nights iterating, engineering. I didn’t write the actual code of course, does anyone these days? But the job is holding the vision in mind and making design decisions while the silicon mind crunches the context.

Another thing to look at: Ffilm.org/chrono - a geostationary model of the solar system in explorable 3D that shows accurate astrological time. this was less work which is ironic because it’s so technically impressive. I guess that’s the way things are going.
What a time to be alive. I’m tired.

Thanks for reading these unmediated human ramblings. Keep in touch. Toby