<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Derek.net.au</title>
	<atom:link href="https://www.derek.net.au/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.derek.net.au</link>
	<description></description>
	<lastBuildDate>Mon, 17 Aug 2026 09:58:24 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>Building a Sci-Fi Web Experience in Babylon.js + WordPress</title>
		<link>https://www.derek.net.au/logs/building-a-sci-fi-web-experience-in-babylon-js-wordpress/</link>
					<comments>https://www.derek.net.au/logs/building-a-sci-fi-web-experience-in-babylon-js-wordpress/#respond</comments>
		
		<dc:creator><![CDATA[derek]]></dc:creator>
		<pubDate>Mon, 30 Jun 2025 12:28:15 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://dereknet.local/?p=57</guid>

					<description><![CDATA[Role: UX Designer / Frontend DevTech Stack: Babylon.js, WordPress (AJAX), Custom Theme (CSS + JS)Goal: Create a seamless, immersive sci-fi themed site where page navigation feels like moving through space, not loading a new page. 📐 Concept &#38; UX Goals From the outset, the experience had to feel like operating a sci-fi viewscreen. Every interaction,...  <a class="excerpt-read-more" href="https://www.derek.net.au/logs/building-a-sci-fi-web-experience-in-babylon-js-wordpress/" title="Read Building a Sci-Fi Web Experience in Babylon.js + WordPress">Read more &#187;</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>Role:</strong> UX Designer / Frontend Dev<br><strong>Tech Stack:</strong> Babylon.js, WordPress (AJAX), Custom Theme (CSS + JS)<br><strong>Goal:</strong> Create a seamless, immersive sci-fi themed site where page navigation feels like moving through space, not loading a new page.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">📐 Concept &amp; UX Goals</h3>



<p class="wp-block-paragraph">From the outset, the experience had to feel like operating a <strong>sci-fi viewscreen</strong>. Every interaction, click, scroll and transition, should feel spatial and connected. We weren’t building a site, we were building a starship UI.</p>



<p class="wp-block-paragraph">Our core UX goals:</p>



<ul class="wp-block-list">
<li><strong>Pages = Places</strong>: navigating to a new page would &#8220;move&#8221; the camera to a new area of the space scene</li>



<li><strong>Minimal UI</strong>: reduce visual clutter to improve immersion</li>



<li><strong>Asynchronous Loading</strong>: no full reloads, just transitions</li>



<li><strong>Scene-Integrated Navigation</strong>: content and environment exist in the same universe</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">🌌 Babylon.js Scene</h3>



<p class="wp-block-paragraph">I started by crafting a <strong>Babylon.js space environment</strong>:</p>



<ul class="wp-block-list">
<li>A static camera at <code>(0,0,0)</code></li>



<li>Distant stars, planets, nebulae</li>



<li>A configurable <code>offset</code> vector allowed us to simulate movement through the universe by shifting the <em>rendered positions</em> of celestial bodies</li>
</ul>



<p class="wp-block-paragraph">Rather than move the camera itself (which could break large-scale visual fidelity), I updated each object&#8217;s render position based on the current offset, simulating “traveling” to content.</p>



<pre class="wp-block-preformatted">jsCopyEdit<code>let renderPosition = originPosition.subtract(offset);
mesh.position.copyFrom(renderPosition);
</code></pre>



<h3 class="wp-block-heading">🚀 Navigating with Offset</h3>



<p class="wp-block-paragraph">Each WordPress page was mapped to a <strong>specific position in space</strong>. Navigating to <code>/about</code> might move the scene’s offset to <code>(5000, 0, -10000)</code>. I added smooth interpolation with easing so it felt like flying:</p>



<pre class="wp-block-preformatted">jsCopyEdit<code>offset = BABYLON.Vector3.Lerp(offset, targetOffset, speed);
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">🔁 Asynchronous Content Loading</h3>



<p class="wp-block-paragraph">Using AJAX (<code>wp_ajax</code> in PHP), I loaded pages dynamically without reloading the scene:</p>



<ul class="wp-block-list">
<li>All links intercepted via JavaScript</li>



<li>Pages loaded via <code>jQuery.ajax</code></li>



<li>The HTML content (usually <code>.entry-content</code>) was swapped into the DOM</li>



<li>Babylon&#8217;s update loop persisted across transitions</li>
</ul>



<p class="wp-block-paragraph">Each request returned HTML fragments from WordPress templates (<code>get_template_part()</code>), not full pages.</p>



<pre class="wp-block-preformatted"><code>if ($query-&gt;have_posts()) {<br>  while ($query-&gt;have_posts()) {<br>    $query-&gt;the_post();<br>    get_template_part('template-parts/content', 'page');<br>  }<br>}<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">🧠 UX Considerations</h3>



<ul class="wp-block-list">
<li><strong>Minimal layout</strong>: No bulky header or footer. Just a soft HUD-styled logo and a subtle menu tucked in the corner.</li>



<li><strong>Focus on content</strong>: Each page block hovered in the scene like a projected panel, with thin neon borders and glowing text.</li>



<li><strong>Consistent frame</strong>: Scene stayed loaded at all times, which made transitions feel native, not like switching pages.</li>
</ul>



<h3 class="wp-block-heading">💫 Design System</h3>



<p class="wp-block-paragraph">I defined reusable styles that mirrored <strong>Star Trek</strong> and <strong>Mass Effect</strong> interfaces:</p>



<ul class="wp-block-list">
<li><strong>Typography</strong>: <code>Orbitron</code>, <code>VT323</code>, and glowing letter shadows</li>



<li><strong>Menu</strong>: A semi-transparent, floating “command stack” with expanding tree-like submenus</li>



<li><strong>Page container</strong>: 3D-transformed <code>&lt;article&gt;</code> blocks that could rotate slightly with scroll to simulate perspective</li>



<li><strong>Animations</strong>: Fade-ins, pulse highlights on hover, glint effects on logos</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">🔧 Challenges</h3>



<ul class="wp-block-list">
<li><strong>Camera vs. Offset</strong>: Avoiding actual camera movement helped prevent precision issues at astronomical scales.</li>



<li><strong>Dynamic Element Bindings</strong>: We had to re-bind event listeners and re-init transitions after each AJAX load.</li>



<li><strong>Performance</strong>: Particle systems (like nebulae) required LOD toggling and distance culling to keep the experience smooth.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">🧩 Tying It All Together</h3>



<p class="wp-block-paragraph">Every piece, navigation, animation, styling, and spatial layout feeds into one consistent UX metaphor:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>You’re not browsing a website. You’re navigating a ship’s digital log interface.</em></p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">✅ What’s Next</h3>



<ul class="wp-block-list">
<li>Saving scene position in URL hashes or browser state</li>



<li>Adding audio feedback and voice logs</li>



<li>Possibly: AI-powered ambient chatter using LLM output (see <a href="/logs/building-my-first-ai-wordpress-agent-a-developers-first-experiment-with-local-llms/">/logs/building-my-first-ai-wordpress-agent-a-developers-first-experiment-with-local-llms/</a>)</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.derek.net.au/logs/building-a-sci-fi-web-experience-in-babylon-js-wordpress/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Building My First AI WordPress Agent: A Developer’s First Experiment with Local LLMs</title>
		<link>https://www.derek.net.au/logs/building-my-first-ai-wordpress-agent-a-developers-first-experiment-with-local-llms/</link>
					<comments>https://www.derek.net.au/logs/building-my-first-ai-wordpress-agent-a-developers-first-experiment-with-local-llms/#respond</comments>
		
		<dc:creator><![CDATA[derek]]></dc:creator>
		<pubDate>Sun, 29 Jun 2025 12:44:15 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://dereknet.local/?p=40</guid>

					<description><![CDATA[Tired of the same repetitive tasks? Could AI actually automate the boring stuff, or is it just another overhyped tool? I decided to build an AI-powered agent that could help manage my WordPress sites. Something that could understand context, take actions, and automate tedious dev/admin tasks I’d normally do by hand. I want it to:...  <a class="excerpt-read-more" href="https://www.derek.net.au/logs/building-my-first-ai-wordpress-agent-a-developers-first-experiment-with-local-llms/" title="Read Building My First AI WordPress Agent: A Developer’s First Experiment with Local LLMs">Read more &#187;</a>]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="wp-block-paragraph">Tired of the same repetitive tasks? Could AI actually automate the boring stuff, or is it just another overhyped tool?</p>



<p class="wp-block-paragraph">I decided to build an AI-powered agent that could help manage my WordPress sites. Something that could understand context, take actions, and automate tedious dev/admin tasks I’d normally do by hand.</p>



<p class="wp-block-paragraph">I want it to:</p>



<ul class="wp-block-list">
<li>Receive natural language instructions (e.g. “clear all caches” or “create a blog post with these specs”)</li>



<li>Interpret what I meant, not just what I said</li>



<li>Trigger real-world actions via WordPress CLI or REST API</li>



<li>Run locally (no cloud dependencies, no vendor lock-in)</li>
</ul>



<p class="wp-block-paragraph">Basically: <em>an intelligent shell script with a brain</em>.</p>
</div>
</div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<h3 class="wp-block-heading">🧰 Tools I Used</h3>



<ul class="wp-block-list">
<li>🧠 <strong><a>DeepSeek Coder 6.7b</a></strong> – A locally hosted language model running through <a class="" href="https://ollama.com">Ollama</a>, fast and responsive</li>



<li>🧩 <strong>Node.js backend</strong> – Simple REST interface for prompt sending and response parsing</li>



<li>⚙️ <strong>WordPress CLI / REST API</strong> – Execution layer for real actions</li>



<li>🛠️ <strong>Custom instruction layer</strong> – Wrapped the LLM output with a JSON validator/parser to ensure structured commands and retry if the model was off</li>
</ul>
</div>
</div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<h3 class="wp-block-heading">🧪 The Architecture</h3>



<ol class="wp-block-list">
<li><strong>Input</strong>: I send a prompt like <code>“Can you list the 10 latest draft posts and convert them to published?”</code></li>



<li><strong>LLM Response</strong>: DeepSeek parses that into a structured JSON plan: jsonCopy<code>{ "action": "update_posts", "params": { "status": "publish", "filter": "draft", "limit": 10 } }</code></li>



<li><strong>Validator</strong>: My wrapper checks it, retries if needed, or rejects unsafe commands</li>



<li><strong>Executor</strong>: Runs <code>wp post update</code> or REST equivalent and returns success/failure</li>
</ol>



<p class="wp-block-paragraph">It’s modular, secure-ish (I’m still locking it down), and after a lot of trial and effort, it is beginning to <strong>feel like magic</strong>.</p>
</div>
</div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<h3 class="wp-block-heading">🧠 What Surprised Me</h3>



<ul class="wp-block-list">
<li><strong>Local LLMs can be a useful tool </strong>: With the right prompting, even a local 6.7b model is <em>incredibly capable</em>, however, getting the prompt format and composition right by filtering the input is most of the battle.</li>



<li><strong>They’re also fragile</strong>: Without strong validation, they’ll give you confident nonsense. Guardrails are critical.</li>



<li><strong>JSON output wrapping is your best friend</strong>: Teach the model to respond <em>as a tool, not a poet</em>, and you’ll eventually get consistent responses.</li>
</ul>
</div>
</div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">🧱 What’s Next</h3>



<ul class="wp-block-list">
<li>Expand it to use the REST API, to increase capabilities</li>



<li>Integrate with <strong>server-side shell tasks</strong> (upgrades, backups, etc.)</li>



<li>Maybe even let it run <strong>scheduled audits</strong> and suggest updates before I need them</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<h3 class="wp-block-heading">🚀 Final Thoughts</h3>



<p class="wp-block-paragraph">This project was my first dive into applying AI in a <strong>practical way</strong> right now, and learning how to develop LLM wrappers from the ground up, without relying on cloud services. Running an intelligent local agent that speaks <em>my</em> language and interfaces with <em>my</em> tools feels like the start of a new wave of devops automation.</p>



<p class="wp-block-paragraph">If you&#8217;re a developer and haven’t played with local LLMs + CLI/API integration yet&#8230; it might be time to start.</p>



<p class="wp-block-paragraph">Got questions or want to build something similar? <a class="" href="https://www.linkedin.com/in/vicwebsites">Reach out on LinkedIn</a> or check out the repo at <a class="" href="https://github.com/doctarock">github.com/doctarock</a>.</p>
</div>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.derek.net.au/logs/building-my-first-ai-wordpress-agent-a-developers-first-experiment-with-local-llms/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Hey, I&#8217;m Derek – I Build Stuff</title>
		<link>https://www.derek.net.au/logs/hey-im-derek-i-build-stuff-that-works/</link>
					<comments>https://www.derek.net.au/logs/hey-im-derek-i-build-stuff-that-works/#respond</comments>
		
		<dc:creator><![CDATA[derek]]></dc:creator>
		<pubDate>Sat, 28 Jun 2025 13:23:33 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://dereknet.local/?p=14</guid>

					<description><![CDATA[Welcome to my corner of the internet. I’m Derek Robertson—developer, systems guy, occasional designer-wrangler, and all-around problem solver. I’ve been in the game for over 25 years, turning clunky, chaotic systems into smooth, scalable digital solutions. What I Actually Do My background spans full-stack development, content platforms, e-commerce, CMS architecture, integrations, UX optimization, DevOps, and...  <a class="excerpt-read-more" href="https://www.derek.net.au/logs/hey-im-derek-i-build-stuff-that-works/" title="Read Hey, I&#8217;m Derek – I Build Stuff">Read more &#187;</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Welcome to my corner of the internet.</p>



<p class="wp-block-paragraph">I’m Derek Robertson—developer, systems guy, occasional designer-wrangler, and all-around problem solver. I’ve been in the game for over 25 years, turning clunky, chaotic systems into smooth, scalable digital solutions. </p>



<h3 class="wp-block-heading">What I Actually Do</h3>



<p class="wp-block-paragraph">My background spans full-stack development, content platforms, e-commerce, CMS architecture, integrations, UX optimization, DevOps, and a healthy dose of &#8220;how do we make this thing talk to that thing?&#8221; I’ve worked on cross-platform apps, internal tools, customer portals, and websites that handle millions of requests a day.</p>



<p class="wp-block-paragraph">I’ve worn many hats: developer, team lead, systems designer, tech translator, bug hunter, and mentor. If you need someone who can build it, fix it, streamline it, or make sense of it — I’m your guy.</p>



<h3 class="wp-block-heading">Tools of the Trade</h3>



<p class="wp-block-paragraph">Tech-wise, I work mostly with:</p>



<ul class="wp-block-list">
<li><strong>PHP, C#</strong>, <strong>Rust</strong></li>



<li><strong>JavaScript / Node.js (React)</strong></li>



<li><strong>SQL, GraphQL, REST APIs</strong></li>



<li><strong>Blender, Godot</strong></li>



<li><strong>Photoshop, Krita, GIMP</strong></li>



<li><strong>Virtualmin, CPanel</strong></li>
</ul>



<p class="wp-block-paragraph">But honestly? I care more about <strong>why we’re building it</strong> than what stack it’s on.</p>



<h3 class="wp-block-heading">Why It Matters</h3>



<p class="wp-block-paragraph">I like working on things that help real people do real work. Whether it&#8217;s helping builders quote jobs faster, making internal systems suck less, or improving onboarding flows that reduce support calls—I’m all about meaningful improvements. If we can cut steps, reduce errors, and give users more confidence in their tools, that’s a win.</p>



<h3 class="wp-block-heading">What You’ll Find Here</h3>



<p class="wp-block-paragraph">This blog is a place for the stuff I wish more people talked about:</p>



<ul class="wp-block-list">
<li>Building smarter, not bigger</li>



<li>Lessons from the field (and the dev trenches)</li>



<li>Dev workflows that actually save time</li>



<li>UX decisions from a dev’s point of view</li>



<li>And probably a few war stories along the way</li>
</ul>



<p class="wp-block-paragraph">Thanks for stopping by—feel free to reach out if you want to chat code, ideas, or the weird bugs that keep you up at night.</p>



<p class="wp-block-paragraph">Catch you in the next post.<br><strong>– Derek</strong></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.derek.net.au/logs/hey-im-derek-i-build-stuff-that-works/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
