<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>blog.mikejw.co.uk</title>
		<link>http://blog.mikejw.co.uk</link>
		<description>Mike's Blog</description>
		<language>en-us</language>
	<item><title>OnlineVibes.net Being Online Should Feel Alive</title><link>http://blog.mikejw.co.uk/2026/jun/25/onlinevibes</link><pubDate>Thu, 25 Jun 2026 07:16:06 +0100</pubDate><description><![CDATA[<article>
<p><img class=" img-fluid" src="http://blog.mikejw.co.uk/uploads/public_html_img_ov_big2.jpg" alt="Online Vibes" data-payload="eyJpZCI6MTI2LCJibG9nX2lkIjo3MywiZmlsZW5hbWUiOiJwdWJsaWNfaHRtbF9pbWdfb3ZfYmlnMi5qcGciLCJpbWFnZV93aWR0aCI6IjkyOCIsImltYWdlX2hlaWdodCI6IjEwNyIsInNpemUiOiIiLCJmbHVpZCI6ImltZy1mbHVpZCIsImNlbnRlcmVkIjoiIiwiY2FwdGlvbiI6Ik9ubGluZSBWaWJlcyJ9" data-title="Online Vibes" /></p>
<p>I’ve been thinking a lot about the direction of <a href="https://www.onlinevibes.net" target="_blank" rel="noopener"><strong>OnlineVibes</strong></a>.</p>
<p>The roots of this project go back much further than the current codebase.</p>
<p>In the mid-to-late 90s, I remember using ICQ and being genuinely amazed by the idea of real-time online presence. Not just messaging, but knowing who was online, who was available, and being able to instantly connect.</p>
<p>Then, in the early 2000s, I discovered Jabber/XMPP — and free Jabber clients — and it completely changed how I thought about communication software. Open protocols. Federated identity. Real-time messaging. Presence as a first-class concept.</p>
<p>There was another influence too.</p>
<p>In my early twenties, my friends and I used to do a kind of “YouTube DJing” at parties in the London underground music scene. Someone would put on a track, someone else would jump in with a related one, then someone would take it somewhere completely unexpected. It was collaborative, chaotic, social, and very human.</p>
<p>That experience has stayed with me.</p>
<p>Part of the drive behind OnlineVibes has always been to bring some of that feeling online: shared rooms, presence, music, conversation, discovery, and a more peer-to-peer sense of participation.</p>
<p>There was also an earlier version of the OnlineVibes idea around 2011: an online marketplace for DIY musicians, bands, and independent labels. At the time, I was interested in how small music communities could use the web not just to promote themselves, but to connect more directly — sharing music, building scenes, finding collaborators, and creating lightweight alternatives to the increasingly centralised platforms that were starting to dominate online culture.</p>
<p>That idea never fully became the thing I imagined, but it left an important trace. OnlineVibes has always had this tension inside it: part communication tool, part community space, part music discovery platform, part experiment in giving people more direct ways to gather online.</p>
<p>Around 2016, I started properly experimenting with <strong>ejabberd</strong>. Since then, OnlineVibes has gone through many iterations: different deployment approaches, different ideas about user experience, different levels of complexity, and plenty of false starts.</p>
<p>The biggest change recently has been simplification.</p>
<p>Now that the stack is Docker-based, the project is much easier to run, reason about, deploy, and evolve. What once felt like a fairly niche personal experiment is starting to look like something much more practical.</p>
<p>That creates an interesting fork in the road.</p>
<p>On one hand, OnlineVibes feels like an ideal candidate for a new <strong>Empathy / elib-base / bdcli quickstart template</strong> — alongside projects like <code>elib-blog</code>, <code>elib-cms</code>, <code>elib-acl</code>, and others. A ready-made foundation for building real-time chat, presence, and community applications.</p>
<p>On the other hand, there may also be commercial potential here.</p>
<p>Could OnlineVibes become a closed-source platform?</p>
<p>Could it become a licensable piece of infrastructure for building AI-enabled chat room and presence software?</p>
<p>Could it sit somewhere between those two worlds — with an open developer template at the base, and commercial products or services built on top?</p>
<p>That’s the part I’m still working through.</p>
<p>The hardest challenge right now is not really technical. It is getting people to actually use it early enough to help shape it. Some close friends and family have been enthusiastic, but turning that enthusiasm into regular usage and useful feedback is difficult.</p>
<p>That puts the project in a strange place: technically much more mature than before, but still looking for the right initial user loop.</p>
<p>Still, I think that is a good problem to have.</p>
<p>After years of experimenting with XMPP, ejabberd, Docker, Empathy, deployment automation, and the social mechanics of online presence, OnlineVibes is becoming less of a vague idea and more of a reusable foundation.</p>
<p>Maybe it becomes a community template.</p>
<p>Maybe it becomes a commercial platform.</p>
<p>Maybe it becomes a licensable technology layer for AI-enabled chat and presence software.</p>
<p>Or maybe it becomes some combination of all three.</p>
<p>Either way, it still comes back to the same idea that first grabbed me years ago: <strong>being online should feel alive.<br><br><br></strong></p>
</article>]]></description></item><item><title>Garage Sale Stars Fall 2</title><link>http://blog.mikejw.co.uk/2026/may/20/garagesale</link><pubDate>Wed, 20 May 2026 11:28:00 +0100</pubDate><description><![CDATA[<p><iframe title="YouTube video player" src="https://www.youtube.com/embed/videoseries?si=g1GwM2kuvOPdlNWX&list=OLAK5uy_kokfotAdNkgb4Mt9IhH-cOMnT2h1siHXU" width="100%" height="400" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" referrerpolicy="strict-origin-when-cross-origin"></iframe></p>
<p>I've pretty much only been listening to this EP from 2024 by Australians, Garage Sale for the past six weeks.  Check it!</p>]]></description></item><item><title>Empathy Platform Architecture V1</title><link>http://blog.mikejw.co.uk/2026/jan/11/platform-v1</link><pubDate>Sun, 11 Jan 2026 06:19:53 +0000</pubDate><description><![CDATA[<p><img class=" img-fluid" src="http://blog.mikejw.co.uk/uploads/diagram2.jpeg" alt="Empathy Platform Architecture V1" data-payload="eyJpZCI6MTI1LCJibG9nX2lkIjo3MSwiZmlsZW5hbWUiOiJkaWFncmFtMi5qcGVnIiwiaW1hZ2Vfd2lkdGgiOiIyMDAwIiwiaW1hZ2VfaGVpZ2h0IjoiOTU2Iiwic2l6ZSI6IiIsImZsdWlkIjoiaW1nLWZsdWlkIiwiY2VudGVyZWQiOiIiLCJjYXB0aW9uIjoiRW1wYXRoeSBQbGF0Zm9ybSBBcmNoaXRlY3R1cmUgVjEifQ==" data-title="Empathy Platform Architecture V1" /></p>
<p>Coming soon in the form of new <a href="https://empathy.sh">Empathy</a> releases for <a href="https://github.com/mikejw/bdcli">bdcli </a>and <a href="https://github.com/mikejw/base-docker">base-docker.</a> The platform features are using the same philosohy as my orginal Empathy MVC - fun, light, simple.  (KISS, DRY).  It's taken a long time to get to this point but the webiste you are viewing right now is running and deployed in this fashion (the same for my other sites) and some of the platform code is yet to be published on github.  It will probably be under "elib-platform".  I still want to do a slight documentation overhaul for bdcli/base-docker to run a new user through the entire deployment of this setup end-to-end in time for these releases. More info coming soon.</p>
<h3>Overview:</h3>
<p>This architecture is split into four main concerns: build/test, source control and artifacts, edge routing, and production runtime.</p>
<h3>Build / Test Environment</h3>
<p>A <strong>Test/Build server</strong> (currently a Raspberry Pi) runs <strong>Docker</strong>. Inside Docker:</p>
<ul>
<li><strong>Jenkins</strong> is used for CI/CD orchestration.</li>
<li><strong>Web app 1</strong> runs as a test or staging instance.</li>
</ul>
<p>Jenkins is responsible for building, testing, and coordinating deployments, but it does not serve public traffic.</p>
<h3>Source Control</h3>
<p>A <strong>private Git server</strong> hosts the application source code.</p>
<ul>
<li>The Test/Build server accesses the Git server over <strong>SSH</strong>.</li>
<li>No VPN or overlay network is used for Git access.</li>
</ul>
<h3>Container Images and Artifacts</h3>
<p><strong>GitLab</strong> is used as a central artifact store, specifically for Docker images.</p>
<ul>
<li>GitLab hosts a <strong>Docker Container Registry</strong>.</li>
<li>Application images are <strong>built and maintained using Packer</strong>.</li>
<li>Both the Test/Build environment and the Production environment <strong>pull Docker images</strong> from this registry.</li>
<li>The registry acts as the <strong>single source of truth</strong> for deployable artifacts.</li>
</ul>
<h3>Edge and Routing</h3>
<p><strong>Cloudflare</strong> is the public-facing entry point for all external traffic. It owns and manages the following hostnames:</p>
<ul>
<li><code>*.tublr.com</code></li>
<li><code>www.tublr.com</code></li>
<li><code>www.mysite.com</code></li>
</ul>
<p>Depending on the hostname, Cloudflare routes traffic to different backends:</p>
<ul>
<li>Some traffic is routed <strong>directly to the Production server</strong>.</li>
<li>Some traffic is routed to an <strong>AWS EC2 Proxy server</strong>.</li>
</ul>
<p>The Proxy server runs <strong>Caddy</strong> directly on the host (not in Docker). Within Caddy:</p>
<ul>
<li><code>www.tublr.com</code> is explicitly handled.</li>
<li>Requests for that hostname are <strong>reverse-proxied to the Test/Build server</strong>.</li>
</ul>
<p>The reverse proxy connection between the Proxy server and the Test/Build server runs over <strong>Tailscale</strong>. This is the only place Tailscale is currently used in the system.</p>
<h3>Production Environment</h3>
<p>The <strong>Production server</strong> runs on <strong>AWS EC2</strong> and hosts <strong>Docker</strong>.</p>
<ul>
<li>Docker runs <strong>Web app 1</strong> as the production instance.</li>
<li>Production receives:
<ul>
<li><strong>Public HTTP(S) traffic directly from Cloudflare</strong></li>
<li><strong>Deployment actions from the Test/Build server</strong></li>
</ul>
</li>
</ul>
<p>Production does not receive traffic via the Proxy server.</p>
<h3>Deployment Flow</h3>
<p>Deployments are initiated from the Test/Build server:</p>
<ul>
<li>Jenkins coordinates deployments.</li>
<li>Production pulls the required Docker image from the GitLab container registry.</li>
</ul>
<p>Capistrano-style deployments (atomic release switching and fast rollback) are planned, but are not yet implemented.</p>
<h3>Design Principles Reflected</h3>
<ul>
<li><strong>Build, deploy, and runtime concerns are separated</strong>.</li>
<li><strong>Only real network paths are described</strong>.</li>
<li><strong>No aspirational infrastructure is included</strong>.</li>
<li><strong>Artifacts are immutable and centrally managed</strong>.</li>
<li><strong>Public traffic and control traffic are distinct</strong>.</li>
<li>The system is intentionally <strong>v1-focused</strong>, with broader orchestration (e.g., ECS) reserved for a future iteration.</li>
</ul>]]></description></item><item><title>Djrum Meanings Edge</title><link>http://blog.mikejw.co.uk/2026/jan/06/djrum</link><pubDate>Tue, 06 Jan 2026 07:06:45 +0000</pubDate><description><![CDATA[<p><iframe title="YouTube video player" src="https://www.youtube.com/embed/videoseries?si=g1GwM2kuvOPdlNWX&list=PLpGr7x_-mTQdIg-b4MuLXZJxVJKvYgP0f" width="100%" height="400" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" referrerpolicy="strict-origin-when-cross-origin"></iframe><br><br>On the way to Edinburgh and the flight is delayed due to the cold weather.  Happily I am able to geek out in departures to this angular "Aphexey" music I discovered today on Spotify.<br><br>I've just added a <a href="https://github.com/mikejw/dotfiles/commit/cb4d3a69f23c5054ed337193855ff632d772f6de">fix</a> to my dotfiles repo, which hopefully now makes the XDG_CONFIG_HOME environment variable setting much more reliable now.  So that fish always knows where its config lives!  I've been getting some strange behavioiur in fish shell, where fish aliases and things that should be in my PATH keep disappearing.  Mainly on my Macbook. Anyway, as usul, holla.<br><br>  </p>]]></description></item><item><title>Empathy Discord Server</title><link>http://blog.mikejw.co.uk/2026/jan/01/discord</link><pubDate>Thu, 01 Jan 2026 09:41:36 +0000</pubDate><description><![CDATA[<p><img class=" img-fluid" src="http://blog.mikejw.co.uk/uploads/IMG_0506.jpeg" alt="Empathy" data-payload="eyJpZCI6MTI0LCJibG9nX2lkIjo2OSwiZmlsZW5hbWUiOiJJTUdfMDUwNi5qcGVnIiwiaW1hZ2Vfd2lkdGgiOiIxMTY3IiwiaW1hZ2VfaGVpZ2h0IjoiNDEyIiwic2l6ZSI6IiIsImZsdWlkIjoiaW1nLWZsdWlkIiwiY2VudGVyZWQiOiIiLCJjYXB0aW9uIjoiRW1wYXRoeSJ9" data-title="Empathy" /></p>
<p>New Empathy discord server. Come and ask me anything!</p>
<p>Go to <a href="https://empathy.sh">https://empathy.sh</a> and click the community link!</p>]]></description></item></channel>
</rss>
