Pillar 03 — Triskelle 3D

3D Printing, Micro-Electronics & Smart Home

The making side of the practice — printed parts, wired microcontrollers, and home automation that actually holds together.

3D Printing

3D print — replace with photo

Functional and decorative prints — enclosures, brackets, wearable mounts, and prototypes. Designed to fit real builds, not just shelf pieces.

Micro-Electronics

Micro-electronics — replace with photo

Microcontrollers, sensors, relays, and LED drivers wired into interactive pieces and practical devices. Firmware, soldering, and systems integration.

Smart Home / Home Assistant

Smart home — replace with photo

Home Assistant installs and automations — sensors, relays, and dashboards tying a space together so it responds to how you live in it.

Prototyping for Art

Prototyping — replace with photo

Much of the maker work feeds the art side: quick prototypes for festival pieces, wizard staff electronics, and projection rigs before they go on site.

Sauna Temperature Monitoring

Sauna temperature probe — replace with photo

A retrofittable temperature monitoring system for wood-fired saunas. An ESP32 with waterproof probes and a high-quality humidity and temperature sensor, paired with a web app and a 3D-printed QR code for installation. Built for sauna owners who want real readings from a stove that currently runs on feel.

Instagram

Build progress, studio work, and tech experiments from Triskelle 3D.

GitHub

Open builds, code, and project notes — Triskelle 3D on GitHub.

// ===================================================================== // Theme toggle — persist light/dark preference across pages // ===================================================================== (function() { const btn = document.getElementById('theme-toggle'); const root = document.documentElement; const key = 'roadhouse.theme'; function get() { try { return localStorage.getItem(key) || 'system'; } catch { return 'system'; } } function set(m) { try { localStorage.setItem(key, m); } catch {} } function apply(mode) { mode === 'light' || mode === 'dark' ? root.setAttribute('data-theme', mode) : root.removeAttribute('data-theme'); } function cur() { return root.getAttribute('data-theme') || (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'); } function updateLabel() { const m = cur(); btn.setAttribute('aria-label', m==='dark' ? 'Switch to light theme' : 'Switch to dark theme'); btn.setAttribute('aria-pressed', String(m==='dark')); } btn.addEventListener('click', () => { const n = cur()==='dark' ? 'light' : 'dark'; apply(n); set(n); updateLabel(); }); const init = get(); if (init==='light'||init==='dark') apply(init); updateLabel(); })(); // ===================================================================== // Stream / page-specific scripts // =====================================================================