<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Tim Siggins</title>
    <subtitle>Software engineer in Ann Arbor, MI — backend architecture, DevSecOps, and security compliance for DoD and healthcare projects.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://timsiggins.com/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://timsiggins.com"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-04-22T00:00:00+00:00</updated>
    <id>https://timsiggins.com/atom.xml</id>
    <entry xml:lang="en">
        <title>basalt</title>
        <published>2026-04-22T00:00:00+00:00</published>
        <updated>2026-04-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://timsiggins.com/projects/basalt/"/>
        <id>https://timsiggins.com/projects/basalt/</id>
        
        <content type="html" xml:base="https://timsiggins.com/projects/basalt/">&lt;p&gt;The Zola theme behind this site and behind &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;auxdev.net&quot;&gt;auxdev.net&lt;&#x2F;a&gt;.
Editorial or monospace-accented depending on the persona, keyboard-friendly,
light and dark, small enough to serve from a potato. No framework. With
JavaScript off, everything still works except the command palette and the
comment embeds.&lt;&#x2F;p&gt;
&lt;p&gt;Live demo at &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ttsigg.codeberg.page&#x2F;basalt&#x2F;&quot;&gt;ttsigg.codeberg.page&#x2F;basalt&lt;&#x2F;a&gt; — screenshots, asciinema, KaTeX, and the comment embeds all run there.&lt;&#x2F;p&gt;

&lt;div class=&quot;card&quot;&gt;
  &lt;h3&gt;&lt;a href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;ttsigg&#x2F;basalt&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;basalt&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
  &lt;div class=&quot;mono card-meta&quot;&gt;
    
    
  &lt;&#x2F;div&gt;
  
  
&lt;&#x2F;div&gt;

&lt;h2 id=&quot;what-you-get&quot;&gt;
&lt;a class=&quot;post-anchor&quot; href=&quot;#what-you-get&quot; aria-label=&quot;Permalink to what-you-get&quot;&gt;&lt;&#x2F;a&gt;
What you get&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;btop-inspired homepage panes&lt;&#x2F;strong&gt; with a live uptime clock and a &lt;code&gt;&#x2F;now&lt;&#x2F;code&gt; page driven by a single &lt;code&gt;data&#x2F;now.json&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Command palette&lt;&#x2F;strong&gt; on &lt;code&gt;&#x2F;&lt;&#x2F;code&gt;, backed by Zola&#x27;s built-in search index. ~3 KB, lazy-loaded on first keypress. &lt;kbd&gt;Ctrl+K&lt;&#x2F;kbd&gt; works.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Light and dark&lt;&#x2F;strong&gt; with no flash of wrong theme. Press &lt;kbd&gt;t&lt;&#x2F;kbd&gt; to toggle.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Eleven shortcodes&lt;&#x2F;strong&gt; with full no-JS fallbacks: alert, collapsible, em, toc, image (float + lightbox), carousel, asciinema, katex, mermaid, project, pullquote, epigraph.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Asciinema, KaTeX, and comment embeds&lt;&#x2F;strong&gt; lazy-load only on pages that use them.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Mastodon and Bluesky comments&lt;&#x2F;strong&gt;, opt-in per post.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Responsive images&lt;&#x2F;strong&gt; via Zola&#x27;s &lt;code&gt;resize_image()&lt;&#x2F;code&gt; with WebP &lt;code&gt;srcset&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;MPA View Transitions&lt;&#x2F;strong&gt; in browsers that support them, gated on &lt;code&gt;prefers-reduced-motion&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Under 40 KB per page&lt;&#x2F;strong&gt; on almost every route, fonts included.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;two-personas-one-engine&quot;&gt;
&lt;a class=&quot;post-anchor&quot; href=&quot;#two-personas-one-engine&quot; aria-label=&quot;Permalink to two-personas-one-engine&quot;&gt;&lt;&#x2F;a&gt;
Two personas, one engine&lt;&#x2F;h2&gt;
&lt;p&gt;The thing that took six rewrites is the persona system. Both consumer sites import basalt&#x27;s SCSS aggregator once, then layer their own token table:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Token&lt;&#x2F;th&gt;&lt;th&gt;auxdev&lt;&#x2F;th&gt;&lt;th&gt;timsiggins.com (this site)&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;--font-text&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Inter&lt;&#x2F;td&gt;&lt;td&gt;Public Sans&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;--font-display&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Space Grotesk&lt;&#x2F;td&gt;&lt;td&gt;Newsreader&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;--ornament&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;▍   ▍   ▍&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;⁂&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;--anchor-glyph&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;❯&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;§&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Accent&lt;&#x2F;td&gt;&lt;td&gt;terminal green&lt;&#x2F;td&gt;&lt;td&gt;editorial indigo&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Pullquote chrome&lt;&#x2F;td&gt;&lt;td&gt;mono italic, centered&lt;&#x2F;td&gt;&lt;td&gt;serif italic, large&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Same templates, same bundle, two identities. Adding a third consumer site is a &lt;code&gt;config.toml&lt;&#x2F;code&gt; away.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tech&quot;&gt;
&lt;a class=&quot;post-anchor&quot; href=&quot;#tech&quot; aria-label=&quot;Permalink to tech&quot;&gt;&lt;&#x2F;a&gt;
Tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Zola 0.22.1&lt;&#x2F;strong&gt; for the static generator and built-in Sass.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Tera&lt;&#x2F;strong&gt; for templates, because Zola ships Tera.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Sass&lt;&#x2F;strong&gt; with CSS custom properties for theming.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Vite + Rollup&lt;&#x2F;strong&gt; for the JS bundle. Output ships as a committed artifact so consumer sites do not need npm.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Playwright&lt;&#x2F;strong&gt; for the cross-site visual-consistency suite.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;using-it&quot;&gt;
&lt;a class=&quot;post-anchor&quot; href=&quot;#using-it&quot; aria-label=&quot;Permalink to using-it&quot;&gt;&lt;&#x2F;a&gt;
Using it&lt;&#x2F;h2&gt;
&lt;p&gt;Clone the repo, drop content into &lt;code&gt;content&#x2F;&lt;&#x2F;code&gt;, point &lt;code&gt;config.toml&lt;&#x2F;code&gt; at yourself, run &lt;code&gt;just setup&lt;&#x2F;code&gt; then &lt;code&gt;just serve&lt;&#x2F;code&gt;. Production builds go to &lt;code&gt;public&#x2F;&lt;&#x2F;code&gt; via &lt;code&gt;just build&lt;&#x2F;code&gt;. File a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;ttsigg&#x2F;basalt&#x2F;issues&quot;&gt;Codeberg issue&lt;&#x2F;a&gt; if you hit something weird.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>The site is back, again</title>
        <published>2026-03-25T00:00:00+00:00</published>
        <updated>2026-03-25T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://timsiggins.com/blog/site-restored/"/>
        <id>https://timsiggins.com/blog/site-restored/</id>
        
        <content type="html" xml:base="https://timsiggins.com/blog/site-restored/">&lt;p&gt;This site was down for a while. I let the domain lapse, the old Jekyll
build was technically fine but very out of date, and I didn&#x27;t care enough
to fix it. That changed last week, so I started rewriting the whole thing
in Zola.&lt;&#x2F;p&gt;
&lt;p&gt;First I wrote the theme, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;ttsigg&#x2F;basalt&quot;&gt;basalt&lt;&#x2F;a&gt;. That
was also my chance to try Claude Design (it didn&#x27;t get close to a final
look, but it got me started). I tried to keep the theme customizable, since
my old Hydejack setup wasn&#x27;t, and I didn&#x27;t have a lot of luck pushing it
where I wanted it to go.&lt;&#x2F;p&gt;
&lt;p&gt;The site is now split into two halves. The &lt;a href=&quot;&#x2F;work&#x2F;&quot;&gt;work&lt;&#x2F;a&gt; side has the
resume, projects, and the technical writing I would link from a job
application. The &lt;a href=&quot;&#x2F;about&#x2F;&quot;&gt;personal&lt;&#x2F;a&gt; side is where I write about
woodworking, biking, birding, self-hosting, and whatever else has my
attention on a given weekend.&lt;&#x2F;p&gt;
&lt;p&gt;I don&#x27;t know how often I&#x27;ll post. Not trying to build an audience or a
brand, just want a place to write things down that isn&#x27;t a social media
platform. If something here is useful, great.&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re reading this, the DNS propagated and the deploy worked. Good
enough for now.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>VidaTalk</title>
        <published>2018-04-15T00:00:00+00:00</published>
        <updated>2018-04-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://timsiggins.com/projects/vidatalk/"/>
        <id>https://timsiggins.com/projects/vidatalk/</id>
        
        <content type="html" xml:base="https://timsiggins.com/projects/vidatalk/">&lt;p&gt;I led the team that built the VidaTalk Android app at Eloquence
Communications from 2017 to 2018. It&#x27;s a touchscreen communication tool
for patients who can&#x27;t speak — usually because they&#x27;re mechanically
ventilated in an ICU, or recovering from a procedure that left them
temporarily non-verbal. Patients tap through menus to tell clinicians and
family what they need. The UI ships in 40+ languages, with live remote
interpreter call-back where the hospital has the integration set up.&lt;&#x2F;p&gt;
&lt;p&gt;I sold my shares and moved on from Eloquence in 2018. The app is still
deployed, helping people communicate during some of the worst moments of
their lives.&lt;&#x2F;p&gt;
&lt;p&gt;It also showed up on &lt;em&gt;The Pitt&lt;&#x2F;em&gt;, Season 2, Episode 8, used exactly the
way we designed it. That was a surprise. I hadn&#x27;t kept up with the
company much, and a friend texted me a photo from their TV. The show&#x27;s
medical advisors picked it as the realistic choice for an ICU
communication device. Best review I&#x27;m going to get.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-it-does&quot;&gt;
&lt;a class=&quot;post-anchor&quot; href=&quot;#what-it-does&quot; aria-label=&quot;Permalink to what-it-does&quot;&gt;&lt;&#x2F;a&gt;
What it does&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Touch menu of common patient needs (pain, water, comfort, family).&lt;&#x2F;li&gt;
&lt;li&gt;Free-text input via on-screen keyboard for anything not in the menu.&lt;&#x2F;li&gt;
&lt;li&gt;Direct-to-nurse messaging with priority routing for urgent items.&lt;&#x2F;li&gt;
&lt;li&gt;Multilingual UI in 40+ languages, switchable on demand.&lt;&#x2F;li&gt;
&lt;li&gt;Live remote interpreter call-back when the hospital has the integration configured.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;my-role&quot;&gt;
&lt;a class=&quot;post-anchor&quot; href=&quot;#my-role&quot; aria-label=&quot;Permalink to my-role&quot;&gt;&lt;&#x2F;a&gt;
My role&lt;&#x2F;h2&gt;
&lt;p&gt;Project Manager and lead developer for the Android side. Coordinated with
the dev team (two developers, one tester), worked directly with sales on
customer commitments, and shipped on the customer-set launch date.&lt;&#x2F;p&gt;
&lt;p&gt;The interesting part was the offline-first design. ICU networks aren&#x27;t
always reliable, and the device has to keep working when wifi drops. The
app caches every menu, language pack, and message template locally. Sync
happens when network returns. The patient never sees the network state.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Eloquence</title>
        <published>2017-08-05T00:00:00+00:00</published>
        <updated>2017-08-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://timsiggins.com/projects/eloquence/"/>
        <id>https://timsiggins.com/projects/eloquence/</id>
        
        <content type="html" xml:base="https://timsiggins.com/projects/eloquence/">&lt;p&gt;The Eloquence Advanced Communication Solution (ACS) was a re-think of the
hospital nurse-call system. Patients press a button on the bedside device
and the platform tracks the request through to fulfillment, with status
updates back to the patient (&quot;your call has been sent,&quot; &quot;help is on the
way&quot;) that the original beep-and-light systems did not provide.&lt;&#x2F;p&gt;
&lt;p&gt;Requests routed by need: pain calls went to the assigned nurse, hospitality
calls were batched to a tech. Patients could ask for specific items
directly (&quot;water,&quot; &quot;blanket,&quot; &quot;pain&quot;) instead of paging the whole floor.
The system also integrated with bedside language interpretation for
non-English-speaking patients, which on its own justified the device for
several of our hospital customers.&lt;&#x2F;p&gt;
&lt;p&gt;I worked on Eloquence from 2013 to 2018, first as Lead Developer, then as
Project Manager from 2016. I built or co-built most of the system: the
Java backend services for call routing, escalation, and reporting; the
Android tablet and phone apps; the bedside hardware integration; and a
chunk of the JavaFX desktop admin tools. The office was on the top floor
of an old foundry building in Ann Arbor with original ironworking
machinery still bolted to one wall.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-technical-work-i-m-most-proud-of&quot;&gt;
&lt;a class=&quot;post-anchor&quot; href=&quot;#the-technical-work-i-m-most-proud-of&quot; aria-label=&quot;Permalink to the-technical-work-i-m-most-proud-of&quot;&gt;&lt;&#x2F;a&gt;
The technical work I&#x27;m most proud of&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;The call-routing engine.&lt;&#x2F;strong&gt; Patient requests flow through a rule chain
(bed assignment, nurse availability, request priority, escalation timer)
and arrive at the correct device within seconds. The protocol is UDP,
custom-framed, with our own packet headers. We built on UDP because the
hospital networks we deployed onto weren&#x27;t always TCP-friendly, and
urgent calls needed deterministic latency. The protocol was validated by
FDA and UL as sufficient for a certified nurse-call system.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;An N+1 nested-subquery fix in MySQL.&lt;&#x2F;strong&gt; Reporting was running a
separate query per row. Refactored the schema and rewrote the queries;
latency dropped about 90%.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;The AWS migration.&lt;&#x2F;strong&gt; When I joined, the platform was on-prem only. By
2017 we had a parallel AWS backend for demos and non-clinical workflows.
Clinical nurse-call flow stayed on-prem because of regulatory constraints
we couldn&#x27;t cleanly resolve in the cloud at the time.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;FDA Class 2 certification.&lt;&#x2F;strong&gt; Design controls, traceable requirements,
documented patch and post-market reporting. New to me when I started,
second nature by the time I left. I worked with the FDA directly on the
certification pipeline. The product was a durable medical device with a
defined patch cadence, which is a very different software-delivery rhythm
from &quot;merge on green.&quot;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;UL bedside-hardware testing.&lt;&#x2F;strong&gt; Two trips to Chicago to coordinate with
Underwriters Laboratories on the nurse-call tablet certification. The
hardware had to survive worst-case conditions: fall, fluid spill, EMI,
redundant failover, plus the standard 5-pound steel ball dropped from 8
feet onto the center of the screen. I learned more about durable-
electronics design in two weeks of UL testing than in the previous five
years of writing Java.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-honest-framing&quot;&gt;
&lt;a class=&quot;post-anchor&quot; href=&quot;#the-honest-framing&quot; aria-label=&quot;Permalink to the-honest-framing&quot;&gt;&lt;&#x2F;a&gt;
The honest framing&lt;&#x2F;h2&gt;
&lt;p&gt;ACS never reached broad deployment. The largest installation was a
single-floor pilot: 60 beds, 2 nurse stations, 10-15 active nurses. The
studies and customer satisfaction were strong. The hospital systems were
reluctant to swap out their existing nurse-call infrastructure, and the
sales cycle for a durable medical device into a hospital is, on a good
day, two years.&lt;&#x2F;p&gt;
&lt;p&gt;The company eventually pivoted toward &lt;a href=&quot;&#x2F;projects&#x2F;vidatalk&#x2F;&quot;&gt;VidaTalk&lt;&#x2F;a&gt;, an
Android-app-only product for nonverbal patients with a shorter sales cycle
and a simpler regulatory path. That ended up being the commercial success.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m still in touch with most of the Eloquence team. We go climbing or
biking. We built something we were proud of.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
