summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authort <t@tjp.lol>2026-07-11 14:06:25 -0600
committert <t@tjp.lol>2026-07-11 19:59:46 -0600
commit6636567f9c4395e830f280e1cd0008a726c04286 (patch)
treeb844e1201de82f54f6b19065bae8e4b783f37642
parent48352c770a932bd628cc5eb22ea3b899b041c485 (diff)
Refresh site structure and copy
Simplify navigation and section copy, update feed presentation, and remove the obsolete plain-HTML note.
-rw-r--r--about/index.html.tmpl37
-rw-r--r--feed.xml.tmpl3
-rw-r--r--index.html.tmpl34
-rw-r--r--notes/_plain-html.md28
-rw-r--r--notes/index.html.tmpl12
-rw-r--r--projects/index.html.tmpl29
-rw-r--r--site.tmpl20
-rw-r--r--style.css3
-rw-r--r--weblog/index.html.tmpl3
9 files changed, 83 insertions, 86 deletions
diff --git a/about/index.html.tmpl b/about/index.html.tmpl
index 065fdc3..b0c8e3c 100644
--- a/about/index.html.tmpl
+++ b/about/index.html.tmpl
@@ -13,33 +13,32 @@
{{template "header" .}}
<main>
<article class="post">
- <div class="post-head">
- <h1>About</h1>
- </div>
<div class="note-body">
- <p>I'm tjp &mdash; an elder-millennial software engineer living in Salt Lake City, Utah. I write mostly Python, spend too long in the terminal, and care about software that's small, legible, and built to last.</p>
- <p>This site is where I keep my <a href="../weblog/index.html">writing</a>. If you want to reach me, <a href="mailto:t@tjp.lol">t@tjp.lol</a> is the best way.</p>
-
- <h2>Elsewhere</h2>
- <ul>
- <li><span class="mono">email</span> &mdash; <a href="mailto:t@tjp.lol">t@tjp.lol</a></li>
- <li><span class="mono">code</span> &nbsp;&mdash; <a href="https://github.com/teepark">github.com/teepark</a></li>
- <li><span class="mono">fedi</span> &nbsp;&mdash; <a href="https://tilde.zone/@tjpcc" rel="me">@tjpcc@tilde.zone</a></li>
- <li><span class="mono">gemini</span> &mdash; <code>gemini://gemini.ctrl-c.club/~tjp/</code></li>
- </ul>
+ <p>I'm tjp, a software engineer living in Salt Lake City, Utah. I write mostly code, supervise coding AIs, generally spend too long in the terminal, and care about software that's small, legible, and built to last.</p>
+ <p>This site is where I keep my <a href="{{rel .OutputPath "/weblog/"}}">writing</a>. If you want to reach me, <a href="mailto:t@tjp.lol">t@tjp.lol</a> is the best way.</p>
</div>
+ <section>
+ <h2 class="sec">elsewhere</h2>
+ <ul class="links">
+ <li><span class="k">email</span><a href="mailto:t@tjp.lol">t@tjp.lol</a></li>
+ <li><span class="k">code</span><a href="https://code.tjp.lol/">self-hosted cgit</a></li>
+ <li><span class="k">fedi</span><a href="https://tilde.zone/@tjpcc" rel="me">@tjpcc@tilde.zone</a></li>
+ <li><span class="k">gemini</span><a href="gemini://tjp.lol/">gemini://tjp.lol/</a></li>
+ </ul>
+ </section>
+
<div class="backlinks">
<h2>Colophon</h2>
<div class="note-body">
- <p>This site is generated from Markdown and Go templates by Weft, with a single <a href="../style.css">stylesheet</a>. There is no JavaScript anywhere &mdash; not deferred, not optional, none. It renders identically with scripts disabled because there is nothing to disable.</p>
+ <p>This site is generated from Markdown and Go templates by <a href="https://code.tjp.lol/weft.git">Weft</a>, with a single <a href="../style.css">stylesheet</a>.</p>
<ul>
- <li><strong>Type:</strong> your system's UI font for prose, your system's monospace for headings and code. No web fonts, no network requests for type.</li>
- <li><strong>Colour:</strong> light and dark themes via <code>prefers-color-scheme</code> &mdash; it follows your OS setting, in pure CSS.</li>
+ <li><strong>Type:</strong> system UI font for prose, system monospace for headings and code. No web fonts or network requests for type.</li>
+ <li><strong>Colour:</strong> light and dark themes via <code>prefers-color-scheme</code>. It follows your OS setting in CSS.</li>
<li><strong>Weblog:</strong> published from Markdown as static HTML.</li>
- <li><strong>Notes:</strong> authored in Obsidian, synced across my devices with Syncthing, published as static pages.</li>
- <li><strong>Build:</strong> Weft recursively renders Markdown and Go templates. AI may assist with coding and batch refactoring, but not with published post prose.</li>
- <li><strong>Hosting:</strong> static files. Nothing to run, nothing to patch.</li>
+ <li><strong>Notes:</strong> authored in Obsidian and neovim, synced across my devices with Syncthing, published <a href="{{rel .OutputPath "/notes/"}}">here</a> as static pages.</li>
+ <li><strong>Build:</strong> Weft recursively renders Markdown and Go templates. AI may assist with coding and batch refactoring, but never with any published post content.</li>
+ <li><strong>Hosting:</strong> static files self-hosted on a VPS.</li>
<li><strong>Licence:</strong> content is <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a> unless a page says otherwise. Take it, remix it, just credit me.</li>
</ul>
</div>
diff --git a/feed.xml.tmpl b/feed.xml.tmpl
index 961ee41..c95aa53 100644
--- a/feed.xml.tmpl
+++ b/feed.xml.tmpl
@@ -15,6 +15,7 @@
<id>{{.CanonicalURL}}</id>
<published>{{rfc3339 (index .Meta "post_date")}}</published>
<updated>{{if index .Meta "updated"}}{{rfc3339 (index .Meta "updated")}}{{else}}{{rfc3339 (index .Meta "post_date")}}{{end}}</updated>
- <content type="html">{{xml (joinSections .Sections)}}</content>
+ {{with .Sections}}<content type="html">{{xml (index . 0)}}</content>
+ {{end}}
</entry>{{end}}
</feed>
diff --git a/index.html.tmpl b/index.html.tmpl
index 83a9a4f..59a87e3 100644
--- a/index.html.tmpl
+++ b/index.html.tmpl
@@ -4,7 +4,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>tjp.lol</title>
-<meta name="description" content="Personal site of tjp — software engineer in Salt Lake City. Weblog, notes, projects.">
+<meta name="description" content="tjp — software and stuff">
<link rel="stylesheet" href="style.css">
<link rel="alternate" type="application/atom+xml" title="tjp.lol" href="feed.xml">
</head>
@@ -14,8 +14,13 @@
{{template "header" .}}
<main>
<section class="intro">
- <p>Welcome in. This site is my writing desk: weblog posts moving over from my <span class="mono">gemini://</span> capsule, plus a public cut of the notes I keep in Obsidian and sync across my machines with Syncthing.</p>
- <p>Plain HTML and CSS. No JavaScript, no tracking &mdash; it reads exactly the same with scripts turned off. That's the point.</p>
+ <p>Welcome to my web space. This site is my writing desk: some random pages, weblog posts, and a public cut of the notes I keep synced across my machines.</p>
+ <p>Plain HTML and CSS. No Javascript, no tracking.</p>
+ <p>My interests are a bit all over the place, but around this site you can also find:</p>
+ <ul>
+ <li><a href="https://code.tjp.lol">open source code repos</a></li>
+ <li><a href="https://film.tjp.lol">a gallery of film photography</a></li>
+ </ul>
</section>
<section>
@@ -23,23 +28,16 @@
{{$posts := sortPages (index .Pages "weblog") "post_date"}}{{with $posts}}<ul class="posts">
{{range slicePages . 0 5}}<li><time datetime="{{date (index .Meta "post_date") "2006-01-02"}}">{{date (index .Meta "post_date") "2006-01-02"}}</time><a href="{{rel "index.html" .OutputPath}}">{{.Title}}</a></li>{{end}}
</ul>
- {{end}}<p style="margin-top:.9rem;font-size:.9rem;"><a href="weblog/index.html">all posts &rarr;</a></p>
+ {{end}}<p style="margin-top:.9rem;font-size:.9rem;"><a href="/weblog/">all posts &rarr;</a></p>
</section>
- <div class="cols">
- <section>
- <h2 class="sec">elsewhere</h2>
- <ul class="links">
- <li><span class="k">email</span><a href="mailto:t@tjp.lol">t@tjp.lol</a></li>
- <li><span class="k">code</span><a href="https://github.com/teepark">github.com/teepark</a></li>
- <li><span class="k">fedi</span><a href="https://tilde.zone/@tjpcc" rel="me">@tjpcc@tilde.zone</a></li>
- <li><span class="k">gemini</span><a href="about/index.html">gemini://…/~tjp</a></li>
- </ul>
- </section>
- <!-- <section>
- <h2 class="sec">from the notes</h2>
- </section> -->
- </div>
+ <section>
+ <h2 class="sec">recently changed notes</h2>
+ {{$notes := sortPages (index .Pages "notes") "ModTime"}}{{with $notes}}<ul>
+ {{range slicePages . 0 5}}<li><a href="{{rel "index.html" .OutputPath}}">{{.Title}}</a></li>{{end}}
+ </ul>
+ {{end}}<p style="margin-top:.9rem;font-size:.9rem;"><a href="/notes/">notes &rarr;</a></p>
+ </section>
</main>
{{template "footer" .}}
diff --git a/notes/_plain-html.md b/notes/_plain-html.md
deleted file mode 100644
index 6d6e078..0000000
--- a/notes/_plain-html.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-description: A note on writing plain, durable HTML.
-planted: 2024-08-11
-tended: 2026-05-30
----
-# The case for plain HTML
-
-*A note, not an essay — expect it to change. This page shows how a wiki note reads: internal wiki links render as underlined-dotted links, and a backlinks panel sits at the bottom.*
-
-A hand-written HTML page is the most durable document format I know of that still looks like a document. It has no runtime, no dependencies, and no version that can go out of date. A file I wrote in 2004 opens today, pixel-for-pixel, in a browser that didn't exist then.
-
-This connects to [Gemtext & the small web](index.html) — both are bets that *constraint outlives capability*. See also [How I take notes](index.html) for why I keep the source in plain text.
-
-## Things I no longer do
-
-- Reach for a framework before there's a second page.
-- Add a build step to save five keystrokes.
-- Load a web font when the reader already owns a good one.
-
-## The test
-
-Turn JavaScript off. If the page is worse, I've added fragility I have to maintain forever. If it's identical, I'm done. This whole site passes that test — see the [colophon](../about/index.html).
-
-## Linked from
-
-- [Gemtext & the small web](index.html)
-- [Home-lab & self-hosting](index.html)
-- [Moving my weblog off Gemini (without leaving it)](../weblog/moving-off-gemini.html)
diff --git a/notes/index.html.tmpl b/notes/index.html.tmpl
index 468a466..848a087 100644
--- a/notes/index.html.tmpl
+++ b/notes/index.html.tmpl
@@ -4,7 +4,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Notes — tjp.lol</title>
-<meta name="description" content="A public cut of my Obsidian notes — a small digital garden.">
+<meta name="description" content="A public cut of my synced notes — a small digital garden.">
<link rel="stylesheet" href="../style.css">
</head>
<body>
@@ -13,19 +13,23 @@
{{template "header" .}}
<main>
<section class="intro">
- <p>This is a digital garden &mdash; a public slice of the notes I keep in Obsidian. Unlike the <a href="../weblog/index.html">weblog</a>, these aren't essays. They're living pages: some are a paragraph, some are years old, most link to each other. Start anywhere and follow the threads.</p>
+ <p>This is a digital garden; a public slice of the persistent notes I keep synced across my devices.</p>
</section>
<section>
<h2 class="sec">start here</h2>
+ <ul>
+ <li><a href="/notes/sync/recipes/">My Recipes</a></li>
+ <li><a href="/notes/sync/recipes/cocktails/">Cocktail Recipes</a></li>
+ </ul>
</section>
- <section>
+ <!--<section>
<h2 class="sec">all notes</h2>
{{$notes := sortPages (index .Pages "notes") "mod_time"}}{{with $notes}}<div class="note-index">
{{range .}}<a href="{{rel "notes/index.html" .OutputPath}}">{{.Title}}</a>{{end}}
</div>{{end}}
- </section>
+ </section>-->
</main>
{{template "footer" .}}
diff --git a/projects/index.html.tmpl b/projects/index.html.tmpl
index a99a10b..a6708c2 100644
--- a/projects/index.html.tmpl
+++ b/projects/index.html.tmpl
@@ -4,7 +4,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Projects — tjp.lol</title>
-<meta name="description" content="Things tjp has built.">
+<meta name="description" content="Projects I've built.">
<link rel="stylesheet" href="../style.css">
</head>
<body>
@@ -13,15 +13,36 @@
{{template "header" .}}
<main>
<section class="intro">
- <p>Small things I've built and still maintain. Most live on <a href="https://github.com/teepark">GitHub</a>.</p>
+ <p>Things I've built. Some I even maintain!</p>
+ <p>Spread across a messy history of code forges.</p>
</section>
<section>
- <h2 class="sec">maintained</h2>
+ <h2 class="sec">current</h2>
+
+ <h3 class="sec">pantograph</h3>
+ <ul>
+ <li><a href="https://code.tjp.lol/pantograph.git"><span class="k">pantograph</span></a> - a minimal AI TUI agent in zig with extensions in lua (<a href="/pantograph">project page</a>)</li>
+ <li><a href="https://code.tjp.lol/libpantograph.git"><span class="k">libpantograph</span></a> - the zig agent SDK behind pantograph, with several other language bindings</li>
+ <li><a href="https://code.tjp.lol/panto-agent.git"><span class="k">panto-agent</span></a> - collection of baseline extensions bringing pantograph up to snuff as a coding agent</li>
+ </ul>
+
+ <h3 class="sec">this site</h3>
+ <ul>
+ <li><a href="https://code.tjp.lol/weft.git"><span class="k">weft</span></a> - a small static site generator</li>
+ <li><a href="https://code.tjp.lol/tjp_lol.git"><span class="k">tjp.lol</span></a> - repo tracking the markdown and other sources; builds with weft</li>
+ </ul>
+
+ <h3 class="sec">small web protocols</h3>
+ <ul>
+ <li><a href="https://code.tjp.lol/sliderule.git"><span class="k">sliderule</span></a> - Go tools for building for small web protocols</li>
+ <li><a href="https://code.tjp.lol/syw.git"><span class="k">show-your-work</span></a> - git repo browser built on sliderule</li>
+ <li><a href="https://code.tjp.lol/sr-71.git"><span class="k">sr-71</span></a> - fast, high flying server for small web protocols</li>
+ </ul>
</section>
<section>
- <h2 class="sec">archived / for fun</h2>
+ <h2 class="sec">archived</h2>
</section>
</main>
diff --git a/site.tmpl b/site.tmpl
index 6c60443..b7c137a 100644
--- a/site.tmpl
+++ b/site.tmpl
@@ -13,14 +13,14 @@
{{end}}
{{define "header"}} <header class="site">
- <h1 class="brand"><a href="{{rel .OutputPath "index.html"}}">~tjp<span class="cur"> $_</span></a></h1>
- {{if eq .OutputPath "index.html"}}<p class="tag">Elder-millennial software engineer in Salt Lake City, Utah. Writing about code, tools, and the small web.</p>
+ <h1 class="brand"><a href="{{rel .OutputPath "/"}}">~tjp<span class="cur"> $_</span></a></h1>
+ {{if eq .OutputPath "index.html"}}<p class="tag">Elder millennial in Salt Lake City, Utah.</p>
{{end}}<nav class="main">
- <a href="{{rel .OutputPath "weblog/index.html"}}"{{if eq .OutputPath "weblog/index.html"}} aria-current="page"{{end}}>weblog</a>
- <!-- <a href="{{rel .OutputPath "notes/index.html"}}"{{if eq .OutputPath "notes/index.html"}} aria-current="page"{{end}}>notes</a> -->
- <a href="{{rel .OutputPath "projects/index.html"}}"{{if eq .OutputPath "projects/index.html"}} aria-current="page"{{end}}>projects</a>
- <a href="{{rel .OutputPath "about/index.html"}}"{{if eq .OutputPath "about/index.html"}} aria-current="page"{{end}}>about</a>
- <a href="{{rel .OutputPath "feed.xml"}}">feed</a>
+ <a href="{{rel .OutputPath "/about/"}}"{{if eq .OutputPath "about/index.html"}} aria-current="page"{{end}}>about</a>
+ <a href="{{rel .OutputPath "/weblog/"}}"{{if eq .OutputPath "weblog/index.html"}} aria-current="page"{{end}}>weblog</a>
+ <a href="{{rel .OutputPath "/notes/"}}"{{if eq .OutputPath "notes/index.html"}} aria-current="page"{{end}}>notes</a>
+ <a href="{{rel .OutputPath "/projects/"}}"{{if eq .OutputPath "projects/index.html"}} aria-current="page"{{end}}>projects</a>
+ <a href="{{rel .OutputPath "/feed.xml"}}">feed</a>
</nav>
</header>
{{end}}
@@ -60,8 +60,8 @@
<h1>{{.Title}}</h1>
</div>
- {{with index .Sections 0}}<div style="font-size:1.2em">{{.}}</div>{{end}}
- {{joinSections (slice .Sections 1)}}
+ {{with .Sections}}{{with index . 0}}<div style="font-size:1.2em">{{.}}</div>{{end}}
+ {{joinSections (slice . 1)}}{{end}}
</article>
<nav class="post-nav">
@@ -73,7 +73,7 @@
{{template "footer" .}}{{end}}
-{{define "note"}}{{template "head" .}}{{template "header" .}}
+{{define "notes"}}{{template "head" .}}{{template "header" .}}
<main>
<article class="post">
<div class="post-head">
diff --git a/style.css b/style.css
index 03c224c..8dbb40e 100644
--- a/style.css
+++ b/style.css
@@ -46,8 +46,9 @@ nav.main a[aria-current="page"]{color:var(--accent);}
main{padding:1.4rem 0 1rem;}
section{margin:2.2rem 0;}
-h2.sec{font-size:.8rem; letter-spacing:.02em; color:var(--muted); font-weight:400; margin:0 0 .9rem;}
+.sec{letter-spacing:.02em; color:var(--muted); font-weight:400; margin:0 0 .9rem;}
h2.sec::before{content:"## "; color:var(--accent);}
+h3.sec::before{content:"### "; color:var(--accent);}
.intro p{margin:0 0 .9rem; font-size:1.06rem;}
diff --git a/weblog/index.html.tmpl b/weblog/index.html.tmpl
index 9d97024..9548c44 100644
--- a/weblog/index.html.tmpl
+++ b/weblog/index.html.tmpl
@@ -14,7 +14,8 @@
{{template "header" .}}
<main>
<section class="intro">
- <p>Longer-form writing. Most of these are migrating over from my Gemini capsule, so dates reflect the original posting. <a href="../feed.xml">Subscribe via RSS</a>.</p>
+ <p>Longer-form writing. The oldest posts originated on my Gemini capsule, so dates reflect the original posting.</p>
+ <p><a href="{{rel .OutputPath "/feed.xml"}}">Atom feed</a></p>
</section>
{{$posts := sortPages (index .Pages "weblog") "post_date"}}{{with $posts}}<section>