<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>miki, branch HEAD</title>
<subtitle>Miki: personal wiki with the fmd markup format
</subtitle>
<entry>
<id>782f00a25ec3a0b0800c4a905907ee574350aa76</id>
<published>2026-09-22T23:52:50Z</published>
<updated>2026-09-22T23:52:50Z</updated>
<title>Drop the PWA layer and finish the editor&#39;s error panel</title>
<link rel="alternate" type="text/html" href="commit/782f00a25ec3a0b0800c4a905907ee574350aa76.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 782f00a25ec3a0b0800c4a905907ee574350aa76
parent 0b74c71aa7b7decfd699a6d451f9a3be31eb94d6
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Tue, 22 Sep 2026 23:52:50 +0000

Drop the PWA layer and finish the editor&#39;s error panel

The service worker never did anything useful offline and its cached
responses made testing confusing, so remove sw.js, the manifest, its
&lt;link&gt; in tmpl.meta.html, the registration block in global/script.js,
and the ten icon PNGs it needed.

Also populate the editor&#39;s error-output panel from getFMDErrors(1) when
it opens, clear the placeholder text out of both editor panels, restyle
#subcard as a bordered card, and point the homepage subcard at the
editor preview and the Codeberg repo.

</content>
</entry>
<entry>
<id>0b74c71aa7b7decfd699a6d451f9a3be31eb94d6</id>
<published>2025-04-25T17:36:24Z</published>
<updated>2025-04-25T17:36:24Z</updated>
<title>Update fmd.wasm and reformat editor content</title>
<link rel="alternate" type="text/html" href="commit/0b74c71aa7b7decfd699a6d451f9a3be31eb94d6.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 0b74c71aa7b7decfd699a6d451f9a3be31eb94d6
parent 6e945c35e16dd20048abb51137ca30aff2f36ff1
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Fri, 25 Apr 2025 17:36:24 +0000

Update fmd.wasm and reformat editor content

Rebuild fmd.wasm and spread the editor&#39;s default and legend fmd over
multiple lines. Apply the saved theme without waiting for onload,
default to dark, and give the manifest an id.

</content>
</entry>
<entry>
<id>6e945c35e16dd20048abb51137ca30aff2f36ff1</id>
<published>2025-04-15T23:01:56Z</published>
<updated>2025-04-15T23:01:56Z</updated>
<title>Fix subject lookup when a query string is present</title>
<link rel="alternate" type="text/html" href="commit/6e945c35e16dd20048abb51137ca30aff2f36ff1.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 6e945c35e16dd20048abb51137ca30aff2f36ff1
parent 1975cb4f9188c482aa1ea5f362181bfb81e641df
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Tue, 15 Apr 2025 23:01:56 +0000

Fix subject lookup when a query string is present

handleView built the template path from r.URL.String(), which includes
?s=..., so /subject?s=foo never found its directory. Use r.URL.Path
instead. The subject script now waits for the fmd load and only sets
the title if it succeeded.

</content>
</entry>
<entry>
<id>1975cb4f9188c482aa1ea5f362181bfb81e641df</id>
<published>2025-04-15T22:04:14Z</published>
<updated>2025-04-15T22:04:14Z</updated>
<title>Keep fmd pages next to their views</title>
<link rel="alternate" type="text/html" href="commit/1975cb4f9188c482aa1ea5f362181bfb81e641df.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 1975cb4f9188c482aa1ea5f362181bfb81e641df
parent b1ab631f06a65218fe491e32db0ace97c278871b
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Tue, 15 Apr 2025 22:04:14 +0000

Keep fmd pages next to their views

Home and subject content now loads from web/home/info.fmd and
web/subject/*.fmd instead of /data/fmd. Rename the templates to
tmpl.*.html, fix the fmd.wasm path in the editor, and give the editor
its own FMD state.

</content>
</entry>
<entry>
<id>b1ab631f06a65218fe491e32db0ace97c278871b</id>
<published>2025-04-15T21:44:52Z</published>
<updated>2025-04-15T21:44:52Z</updated>
<title>Merge page handlers into a single handleView</title>
<link rel="alternate" type="text/html" href="commit/b1ab631f06a65218fe491e32db0ace97c278871b.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit b1ab631f06a65218fe491e32db0ace97c278871b
parent 0c15acee707fc373831f635e081d472737d271be
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Tue, 15 Apr 2025 21:44:52 +0000

Merge page handlers into a single handleView

/home, /subject and /edit all just render their template now. Drop the
/data/ route and data directory config, serve /sw.js from the web root,
and move the favicon to web/icons.

</content>
</entry>
<entry>
<id>0c15acee707fc373831f635e081d472737d271be</id>
<published>2025-04-15T21:28:55Z</published>
<updated>2025-04-15T21:28:55Z</updated>
<title>Start PWA support</title>
<link rel="alternate" type="text/html" href="commit/0c15acee707fc373831f635e081d472737d271be.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 0c15acee707fc373831f635e081d472737d271be
parent 36f24a1800b6000eaf6f1634c0e4048d604e718b
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Tue, 15 Apr 2025 21:28:55 +0000

Start PWA support

Add a web manifest, icons and service worker registration. Also add
home.fmd and a test subject page.

</content>
</entry>
<entry>
<id>36f24a1800b6000eaf6f1634c0e4048d604e718b</id>
<published>2025-04-11T23:39:55Z</published>
<updated>2025-04-11T23:39:55Z</updated>
<title>Flatten web/global and remember theme choice</title>
<link rel="alternate" type="text/html" href="commit/36f24a1800b6000eaf6f1634c0e4048d604e718b.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 36f24a1800b6000eaf6f1634c0e4048d604e718b
parent 861009e8f6898a4dc5ae125e717351a0ff19e9d3
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Fri, 11 Apr 2025 23:39:55 +0000

Flatten web/global and remember theme choice

Move templates, scripts, styles, the favicon and fmd.wasm back to the
top of web/global. The theme toggle is saved in sessionStorage, and
links point at test.wtenison.com for now.

</content>
</entry>
<entry>
<id>861009e8f6898a4dc5ae125e717351a0ff19e9d3</id>
<published>2025-04-09T01:26:08Z</published>
<updated>2025-04-09T01:26:08Z</updated>
<title>Cleaned up header UI components</title>
<link rel="alternate" type="text/html" href="commit/861009e8f6898a4dc5ae125e717351a0ff19e9d3.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 861009e8f6898a4dc5ae125e717351a0ff19e9d3
parent 9882dee6c3413d794994f0e09ce454f21140cf7b
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Wed,  9 Apr 2025 01:26:08 +0000

Cleaned up header UI components

</content>
</entry>
<entry>
<id>9882dee6c3413d794994f0e09ce454f21140cf7b</id>
<published>2025-04-06T17:40:10Z</published>
<updated>2025-04-06T17:40:10Z</updated>
<title>Move fmd rendering to the client</title>
<link rel="alternate" type="text/html" href="commit/9882dee6c3413d794994f0e09ce454f21140cf7b.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 9882dee6c3413d794994f0e09ce454f21140cf7b
parent a52fdddf680aeaa4fc21180a749db10aedc85d7b
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Sun,  6 Apr 2025 17:40:10 +0000

Move fmd rendering to the client

The server no longer renders fmd. It serves the data directory at
/data/, and the home and subject pages fetch their .fmd files and run
them through the WASM interpreter. Drops the fmd Go dependency.

</content>
</entry>
<entry>
<id>a52fdddf680aeaa4fc21180a749db10aedc85d7b</id>
<published>2025-04-06T15:39:05Z</published>
<updated>2025-04-06T15:39:05Z</updated>
<title>Share editor header and scripts across all pages</title>
<link rel="alternate" type="text/html" href="commit/a52fdddf680aeaa4fc21180a749db10aedc85d7b.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit a52fdddf680aeaa4fc21180a749db10aedc85d7b
parent 1ee1f7f01c8e02af9d0fee31176df1008644b2f0
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Sun,  6 Apr 2025 15:39:05 +0000

Share editor header and scripts across all pages

Move the editor&#39;s header into header.tmpl.html and its collapsible and
theme toggle code into the global script. Fold the per-page stylesheets
into the global one and remove the duplicate wasm_exec.js.

</content>
</entry>
<entry>
<id>1ee1f7f01c8e02af9d0fee31176df1008644b2f0</id>
<published>2025-04-06T14:37:52Z</published>
<updated>2025-04-06T14:37:52Z</updated>
<title>Build FMD editor page on the WASM interpreter</title>
<link rel="alternate" type="text/html" href="commit/1ee1f7f01c8e02af9d0fee31176df1008644b2f0.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 1ee1f7f01c8e02af9d0fee31176df1008644b2f0
parent f3a954e65c996d1b647fd534bec2e20f1a6e8cf6
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Sun,  6 Apr 2025 14:37:52 +0000

Build FMD editor page on the WASM interpreter

The editor runs fmd in the browser through fmd.wasm, with text pad,
output and guide panels loaded from default.fmd and legend.fmd.

Also split web/global into images/, scripts/, styles/ and templates/,
scan it recursively for templates, and drop the old preview page.

</content>
</entry>
<entry>
<id>f3a954e65c996d1b647fd534bec2e20f1a6e8cf6</id>
<published>2025-03-05T18:21:50Z</published>
<updated>2025-03-05T18:21:50Z</updated>
<title>Removed &#39;preview&#39; route handle</title>
<link rel="alternate" type="text/html" href="commit/f3a954e65c996d1b647fd534bec2e20f1a6e8cf6.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit f3a954e65c996d1b647fd534bec2e20f1a6e8cf6
parent a888c2c329c6d199c2c4dab7336dfcba58859deb
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Wed,  5 Mar 2025 18:21:50 +0000

Removed &#39;preview&#39; route handle

</content>
</entry>
<entry>
<id>a888c2c329c6d199c2c4dab7336dfcba58859deb</id>
<published>2025-03-04T03:42:46Z</published>
<updated>2025-03-04T03:42:46Z</updated>
<title>Updated the module path to reflect repo URL</title>
<link rel="alternate" type="text/html" href="commit/a888c2c329c6d199c2c4dab7336dfcba58859deb.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit a888c2c329c6d199c2c4dab7336dfcba58859deb
parent d41c0636df6d84c0c520b505986233840e172e25
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Tue,  4 Mar 2025 03:42:46 +0000

Updated the module path to reflect repo URL

</content>
</entry>
<entry>
<id>d41c0636df6d84c0c520b505986233840e172e25</id>
<published>2025-03-03T18:34:41Z</published>
<updated>2025-03-03T18:34:41Z</updated>
<title>Linked &#39;fmd&#39; repo to project</title>
<link rel="alternate" type="text/html" href="commit/d41c0636df6d84c0c520b505986233840e172e25.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit d41c0636df6d84c0c520b505986233840e172e25
parent c7dd8655b9e6a17c63ba4f49867d47ff6c034129
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Mon,  3 Mar 2025 18:34:41 +0000

Linked &#39;fmd&#39; repo to project

</content>
</entry>
<entry>
<id>c7dd8655b9e6a17c63ba4f49867d47ff6c034129</id>
<published>2025-03-03T17:59:13Z</published>
<updated>2025-03-03T17:59:13Z</updated>
<title>Moved &#39;fmd&#39; to own project/repo.</title>
<link rel="alternate" type="text/html" href="commit/c7dd8655b9e6a17c63ba4f49867d47ff6c034129.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit c7dd8655b9e6a17c63ba4f49867d47ff6c034129
parent d7a479f32ada12f0aa1a61bb6e4e94b3dc6d59de
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Mon,  3 Mar 2025 17:59:13 +0000

Moved &#39;fmd&#39; to own project/repo.

</content>
</entry>
<entry>
<id>d7a479f32ada12f0aa1a61bb6e4e94b3dc6d59de</id>
<published>2025-03-03T17:37:12Z</published>
<updated>2025-03-03T17:37:12Z</updated>
<title>Added &#39;code&#39; operator for HTML code blocks.</title>
<link rel="alternate" type="text/html" href="commit/d7a479f32ada12f0aa1a61bb6e4e94b3dc6d59de.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit d7a479f32ada12f0aa1a61bb6e4e94b3dc6d59de
parent f3251c218f13961bf386c10feffee09ab1be4fa5
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Mon,  3 Mar 2025 17:37:12 +0000

Added &#39;code&#39; operator for HTML code blocks.

</content>
</entry>
<entry>
<id>f3251c218f13961bf386c10feffee09ab1be4fa5</id>
<published>2025-03-02T02:19:25Z</published>
<updated>2025-03-02T02:19:25Z</updated>
<title>Fix out-of-range token peek at start of input</title>
<link rel="alternate" type="text/html" href="commit/f3251c218f13961bf386c10feffee09ab1be4fa5.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit f3251c218f13961bf386c10feffee09ab1be4fa5
parent 36c4e8526d73e6cab4acf78ec6457c9c178592f3
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Sun,  2 Mar 2025 02:19:25 +0000

Fix out-of-range token peek at start of input

Guard the escape lookback when pos is 0, and restore the start-of-input
check the previous commit inverted.

</content>
</entry>
<entry>
<id>36c4e8526d73e6cab4acf78ec6457c9c178592f3</id>
<published>2025-03-02T02:13:46Z</published>
<updated>2025-03-02T02:13:46Z</updated>
<title>Keep the colon when a command is escaped</title>
<link rel="alternate" type="text/html" href="commit/36c4e8526d73e6cab4acf78ec6457c9c178592f3.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 36c4e8526d73e6cab4acf78ec6457c9c178592f3
parent 46cb98c0bbecb439ad744f61b53eed9c70455e33
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Sun,  2 Mar 2025 02:13:46 +0000

Keep the colon when a command is escaped

Keywords only count as commands when followed by a colon. The peek
helpers now panic on out-of-range access instead of logging.

</content>
</entry>
<entry>
<id>46cb98c0bbecb439ad744f61b53eed9c70455e33</id>
<published>2025-03-02T01:25:51Z</published>
<updated>2025-03-02T01:25:51Z</updated>
<title>Support escaping commands and backslashes in fmd</title>
<link rel="alternate" type="text/html" href="commit/46cb98c0bbecb439ad744f61b53eed9c70455e33.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 46cb98c0bbecb439ad744f61b53eed9c70455e33
parent c25ceb5bdd7937504c28ba68e24090b38efdbd51
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Sun,  2 Mar 2025 01:25:51 +0000

Support escaping commands and backslashes in fmd

</content>
</entry>
<entry>
<id>c25ceb5bdd7937504c28ba68e24090b38efdbd51</id>
<published>2025-03-01T20:01:42Z</published>
<updated>2025-03-01T20:01:42Z</updated>
<title>Regenerate README.md when running the fmd test</title>
<link rel="alternate" type="text/html" href="commit/c25ceb5bdd7937504c28ba68e24090b38efdbd51.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit c25ceb5bdd7937504c28ba68e24090b38efdbd51
parent f11f4afcf413cf6ea1d6a7857f68da70c919fe07
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Sat,  1 Mar 2025 20:01:42 +0000

Regenerate README.md when running the fmd test

</content>
</entry>
<entry>
<id>f11f4afcf413cf6ea1d6a7857f68da70c919fe07</id>
<published>2025-03-01T20:00:32Z</published>
<updated>2025-03-01T20:00:32Z</updated>
<title>Update README</title>
<link rel="alternate" type="text/html" href="commit/f11f4afcf413cf6ea1d6a7857f68da70c919fe07.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit f11f4afcf413cf6ea1d6a7857f68da70c919fe07
parent ebf601d0429409d0a53f75801afc26ca92f4fc23
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Sat,  1 Mar 2025 20:00:32 +0000

Update README

</content>
</entry>
<entry>
<id>ebf601d0429409d0a53f75801afc26ca92f4fc23</id>
<published>2025-03-01T19:54:51Z</published>
<updated>2025-03-01T19:54:51Z</updated>
<title>Fix double line breaks and generate README from fmd</title>
<link rel="alternate" type="text/html" href="commit/ebf601d0429409d0a53f75801afc26ca92f4fc23.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit ebf601d0429409d0a53f75801afc26ca92f4fc23
parent 02c91ecfff01f2b61607b2968460a5e72fe22e3e
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Sat,  1 Mar 2025 19:54:51 +0000

Fix double line breaks and generate README from fmd

Skip the &lt;br&gt; when the previous node was also a newline. README.md is
now generated from data/README.fmd.

</content>
</entry>
<entry>
<id>02c91ecfff01f2b61607b2968460a5e72fe22e3e</id>
<published>2025-03-01T19:30:46Z</published>
<updated>2025-03-01T19:30:46Z</updated>
<title>Update header links and add test div to README</title>
<link rel="alternate" type="text/html" href="commit/02c91ecfff01f2b61607b2968460a5e72fe22e3e.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 02c91ecfff01f2b61607b2968460a5e72fe22e3e
parent 1ed68340553763ddf6da850c89fa18e6602bf664
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Sat,  1 Mar 2025 19:30:46 +0000

Update header links and add test div to README

Point the header menu at the portal and /home, and bump the header
height to 5rem.

</content>
</entry>
<entry>
<id>1ed68340553763ddf6da850c89fa18e6602bf664</id>
<published>2025-03-01T07:07:22Z</published>
<updated>2025-03-01T07:07:22Z</updated>
<title>Rework fmd grammar and shorten token names</title>
<link rel="alternate" type="text/html" href="commit/1ed68340553763ddf6da850c89fa18e6602bf664.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 1ed68340553763ddf6da850c89fa18e6602bf664
parent d01d3ae2675406feaead139d3e77b1310827ca83
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Sat,  1 Mar 2025 07:07:22 +0000

Rework fmd grammar and shorten token names

Commands now take either a word or a {block}, with block bodies split
out as their own rule. Token types are renamed to tWord, tKeyword and
so on, and the parser is updated to match.

</content>
</entry>
<entry>
<id>d01d3ae2675406feaead139d3e77b1310827ca83</id>
<published>2025-02-28T19:22:43Z</published>
<updated>2025-02-28T19:22:43Z</updated>
<title>Track previous node in the fmd parser</title>
<link rel="alternate" type="text/html" href="commit/d01d3ae2675406feaead139d3e77b1310827ca83.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit d01d3ae2675406feaead139d3e77b1310827ca83
parent c2a06cf2427eeadb1914c8128f82a0b361492cc3
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Fri, 28 Feb 2025 19:22:43 +0000

Track previous node in the fmd parser

Nodes now keep a pointer to the node before them. Space and newline
nodes are merged into a single spacing type, and the lexer emits tokens
for ( and ).

</content>
</entry>
<entry>
<id>c2a06cf2427eeadb1914c8128f82a0b361492cc3</id>
<published>2025-02-28T18:41:13Z</published>
<updated>2025-02-28T18:41:13Z</updated>
<title>Separated &#39;symbols&#39; into arrays based on type</title>
<link rel="alternate" type="text/html" href="commit/c2a06cf2427eeadb1914c8128f82a0b361492cc3.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit c2a06cf2427eeadb1914c8128f82a0b361492cc3
parent e0ab93a77f243af664423974da884ec30a4876c5
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Fri, 28 Feb 2025 18:41:13 +0000

Separated &#39;symbols&#39; into arrays based on type

</content>
</entry>
<entry>
<id>e0ab93a77f243af664423974da884ec30a4876c5</id>
<published>2025-02-28T18:25:28Z</published>
<updated>2025-02-28T18:25:28Z</updated>
<title>Add EBNF grammar for fmd</title>
<link rel="alternate" type="text/html" href="commit/e0ab93a77f243af664423974da884ec30a4876c5.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit e0ab93a77f243af664423974da884ec30a4876c5
parent acf3ea53f035cf711f77cc403fe9c24391e152cb
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Fri, 28 Feb 2025 18:25:28 +0000

Add EBNF grammar for fmd

Also rename tokenLiteral to tokenWord, add ( and ) to the lexer symbols,
and comment what each keyword does.

</content>
</entry>
<entry>
<id>acf3ea53f035cf711f77cc403fe9c24391e152cb</id>
<published>2025-02-28T00:13:39Z</published>
<updated>2025-02-28T00:13:39Z</updated>
<title>Emit &lt;br&gt; for newlines in the interpreter</title>
<link rel="alternate" type="text/html" href="commit/acf3ea53f035cf711f77cc403fe9c24391e152cb.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit acf3ea53f035cf711f77cc403fe9c24391e152cb
parent e2d4abf77068b55125ae7ad3e4066577afaf12c6
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Fri, 28 Feb 2025 00:13:39 +0000

Emit &lt;br&gt; for newlines in the interpreter

</content>
</entry>
<entry>
<id>e2d4abf77068b55125ae7ad3e4066577afaf12c6</id>
<published>2025-02-28T00:01:31Z</published>
<updated>2025-02-28T00:01:31Z</updated>
<title>Filter a few more HTML tags in the interpreter</title>
<link rel="alternate" type="text/html" href="commit/e2d4abf77068b55125ae7ad3e4066577afaf12c6.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit e2d4abf77068b55125ae7ad3e4066577afaf12c6
parent 89870243554569fb99fa0cdf59ed8d923214217a
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Fri, 28 Feb 2025 00:01:31 +0000

Filter a few more HTML tags in the interpreter

Replace the &lt;script&gt; substring check with an exact match against a
small list (script, object, embed, link). Still crude.

</content>
</entry>
<entry>
<id>89870243554569fb99fa0cdf59ed8d923214217a</id>
<published>2025-02-27T23:51:01Z</published>
<updated>2025-02-27T23:51:01Z</updated>
<title>Add preview page for rendering editor input</title>
<link rel="alternate" type="text/html" href="commit/89870243554569fb99fa0cdf59ed8d923214217a.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 89870243554569fb99fa0cdf59ed8d923214217a
parent 921013e4a47a87afebb7a9af7e85a88d5fbfa056
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Thu, 27 Feb 2025 23:51:01 +0000

Add preview page for rendering editor input

The edit form posts to /preview, which renders the submitted fmd. The
interpreter also drops any word containing a &lt;script&gt; tag.

</content>
</entry>
<entry>
<id>921013e4a47a87afebb7a9af7e85a88d5fbfa056</id>
<published>2025-02-27T22:17:16Z</published>
<updated>2025-02-27T22:17:16Z</updated>
<title>Load fmd source into the editor textarea</title>
<link rel="alternate" type="text/html" href="commit/921013e4a47a87afebb7a9af7e85a88d5fbfa056.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 921013e4a47a87afebb7a9af7e85a88d5fbfa056
parent c85271fa741bf9c683f013d4eb3f64da37bb5c11
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Thu, 27 Feb 2025 22:17:16 +0000

Load fmd source into the editor textarea

Add ReadFileFMD and check the extension before reading .fmd or .json
files.

</content>
</entry>
<entry>
<id>c85271fa741bf9c683f013d4eb3f64da37bb5c11</id>
<published>2025-02-27T20:02:48Z</published>
<updated>2025-02-27T20:02:48Z</updated>
<title>Strip directories from the subject file name</title>
<link rel="alternate" type="text/html" href="commit/c85271fa741bf9c683f013d4eb3f64da37bb5c11.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit c85271fa741bf9c683f013d4eb3f64da37bb5c11
parent e26f5c8c2be83593545b3fe7752c0f79d1124ade
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Thu, 27 Feb 2025 20:02:48 +0000

Strip directories from the subject file name

Run the ?s= parameter through filepath.Base so it can&#39;t be used to read
files outside the fmd data directory. Also switch the default
color-scheme to light.

</content>
</entry>
<entry>
<id>e26f5c8c2be83593545b3fe7752c0f79d1124ade</id>
<published>2025-02-27T19:04:48Z</published>
<updated>2025-02-27T19:04:48Z</updated>
<title>Remove TLS handling and serve plain HTTP</title>
<link rel="alternate" type="text/html" href="commit/e26f5c8c2be83593545b3fe7752c0f79d1124ade.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit e26f5c8c2be83593545b3fe7752c0f79d1124ade
parent 7c85b2d5cd8538429cf9c3e788be8371ca7b22a5
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Thu, 27 Feb 2025 19:04:48 +0000

Remove TLS handling and serve plain HTTP

nginx terminates TLS in front of the app now, so drop the cert and key
config and use ListenAndServe. Also comment out the card section on the
subject page.

</content>
</entry>
<entry>
<id>7c85b2d5cd8538429cf9c3e788be8371ca7b22a5</id>
<published>2025-02-27T14:56:06Z</published>
<updated>2025-02-27T14:56:06Z</updated>
<title>Show &quot;No File Found&quot; for empty subject pages</title>
<link rel="alternate" type="text/html" href="commit/7c85b2d5cd8538429cf9c3e788be8371ca7b22a5.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 7c85b2d5cd8538429cf9c3e788be8371ca7b22a5
parent 2c088ebdbb839b2633792a5d364168ff1641c226
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Thu, 27 Feb 2025 14:56:06 +0000

Show &quot;No File Found&quot; for empty subject pages

</content>
</entry>
<entry>
<id>2c088ebdbb839b2633792a5d364168ff1641c226</id>
<published>2025-02-27T14:45:20Z</published>
<updated>2025-02-27T14:45:20Z</updated>
<title>Split page handler into home, subject and edit</title>
<link rel="alternate" type="text/html" href="commit/2c088ebdbb839b2633792a5d364168ff1641c226.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 2c088ebdbb839b2633792a5d364168ff1641c226
parent 80f3de4bba87deb3abb8e994af85cd994aa6baf8
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Thu, 27 Feb 2025 14:45:20 +0000

Split page handler into home, subject and edit

The subject handler takes a file name from the ?s= query parameter and
renders the matching .fmd from the data directory.

</content>
</entry>
<entry>
<id>80f3de4bba87deb3abb8e994af85cd994aa6baf8</id>
<published>2025-02-27T13:46:00Z</published>
<updated>2025-02-27T13:46:00Z</updated>
<title>Added &#39;subject&#39; page.</title>
<link rel="alternate" type="text/html" href="commit/80f3de4bba87deb3abb8e994af85cd994aa6baf8.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 80f3de4bba87deb3abb8e994af85cd994aa6baf8
parent c8fab1bf4306efa366ff120e0c3f0cc737234a50
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Thu, 27 Feb 2025 13:46:00 +0000

Added &#39;subject&#39; page.

</content>
</entry>
<entry>
<id>c8fab1bf4306efa366ff120e0c3f0cc737234a50</id>
<published>2025-02-27T13:42:29Z</published>
<updated>2025-02-27T13:42:29Z</updated>
<title>Drop unused lexer name and dead lookup code</title>
<link rel="alternate" type="text/html" href="commit/c8fab1bf4306efa366ff120e0c3f0cc737234a50.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit c8fab1bf4306efa366ff120e0c3f0cc737234a50
parent 6899ca04e284877554b91f3f448367eaa141515b
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Thu, 27 Feb 2025 13:42:29 +0000

Drop unused lexer name and dead lookup code

Remove the name field from the fmd lexer and the commented-out data file
lookup in directories.go.

</content>
</entry>
<entry>
<id>6899ca04e284877554b91f3f448367eaa141515b</id>
<published>2025-02-27T05:29:12Z</published>
<updated>2025-02-27T05:29:12Z</updated>
<title>Fold DirectorySignature into MakeDirectoryPkg</title>
<link rel="alternate" type="text/html" href="commit/6899ca04e284877554b91f3f448367eaa141515b.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 6899ca04e284877554b91f3f448367eaa141515b
parent eda9cccce7704e65905f26fa0bfc94f055e498e2
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Thu, 27 Feb 2025 05:29:12 +0000

Fold DirectorySignature into MakeDirectoryPkg

MakeDirectoryPkg now takes the path, depth and a filepath.Match glob
directly instead of a signature struct holding a regexp. The fmd data
lookup is commented out for now.

</content>
</entry>
<entry>
<id>eda9cccce7704e65905f26fa0bfc94f055e498e2</id>
<published>2025-02-26T22:48:57Z</published>
<updated>2025-02-26T22:48:57Z</updated>
<title>Move route setup into makeServerRoutes()</title>
<link rel="alternate" type="text/html" href="commit/eda9cccce7704e65905f26fa0bfc94f055e498e2.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit eda9cccce7704e65905f26fa0bfc94f055e498e2
parent 27038bbf56cd938d58a8e52da8dec6a65c91f569
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Wed, 26 Feb 2025 22:48:57 +0000

Move route setup into makeServerRoutes()

</content>
</entry>
<entry>
<id>27038bbf56cd938d58a8e52da8dec6a65c91f569</id>
<published>2025-02-26T22:42:35Z</published>
<updated>2025-02-26T22:42:35Z</updated>
<title>Move page handler into network/routes.go</title>
<link rel="alternate" type="text/html" href="commit/27038bbf56cd938d58a8e52da8dec6a65c91f569.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 27038bbf56cd938d58a8e52da8dec6a65c91f569
parent 021807273e420bb67352d6ad2841b11eaca42d8a
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Wed, 26 Feb 2025 22:42:35 +0000

Move page handler into network/routes.go

Server init now reads its config through mfs.ReadFileJSON.

</content>
</entry>
<entry>
<id>021807273e420bb67352d6ad2841b11eaca42d8a</id>
<published>2025-02-26T22:27:43Z</published>
<updated>2025-02-26T22:27:43Z</updated>
<title>Fix ReadFileJSON ignoring its path argument</title>
<link rel="alternate" type="text/html" href="commit/021807273e420bb67352d6ad2841b11eaca42d8a.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 021807273e420bb67352d6ad2841b11eaca42d8a
parent 08b14328180c44c1ac786074dd833fad921a7523
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Wed, 26 Feb 2025 22:27:43 +0000

Fix ReadFileJSON ignoring its path argument

It always read sys/config.json no matter what file was passed in.

</content>
</entry>
<entry>
<id>08b14328180c44c1ac786074dd833fad921a7523</id>
<published>2025-02-26T22:25:55Z</published>
<updated>2025-02-26T22:25:55Z</updated>
<title>Cleaned printf and errorf messages (again).</title>
<link rel="alternate" type="text/html" href="commit/08b14328180c44c1ac786074dd833fad921a7523.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 08b14328180c44c1ac786074dd833fad921a7523
parent fe630405277c63b0be494a89cda68f0e2d168be3
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Wed, 26 Feb 2025 22:25:55 +0000

Cleaned printf and errorf messages (again).

</content>
</entry>
<entry>
<id>fe630405277c63b0be494a89cda68f0e2d168be3</id>
<published>2025-02-26T22:18:40Z</published>
<updated>2025-02-26T22:18:40Z</updated>
<title>Split filesystem.go into directories.go and files.go</title>
<link rel="alternate" type="text/html" href="commit/fe630405277c63b0be494a89cda68f0e2d168be3.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit fe630405277c63b0be494a89cda68f0e2d168be3
parent 070bf5debe4a9bfc0bc63d90ccad03ca2476d695
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Wed, 26 Feb 2025 22:18:40 +0000

Split filesystem.go into directories.go and files.go

Also unexport the fmd token types.

</content>
</entry>
<entry>
<id>070bf5debe4a9bfc0bc63d90ccad03ca2476d695</id>
<published>2025-02-26T19:22:00Z</published>
<updated>2025-02-26T19:22:00Z</updated>
<title>Clean up comments and log statements</title>
<link rel="alternate" type="text/html" href="commit/070bf5debe4a9bfc0bc63d90ccad03ca2476d695.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 070bf5debe4a9bfc0bc63d90ccad03ca2476d695
parent 83dfe3d818c4d92a62ea24e0a26482c2ab71da9f
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Wed, 26 Feb 2025 19:22:00 +0000

Clean up comments and log statements

Also delete the temp.html test output.

</content>
</entry>
<entry>
<id>83dfe3d818c4d92a62ea24e0a26482c2ab71da9f</id>
<published>2025-02-26T19:01:00Z</published>
<updated>2025-02-26T19:01:00Z</updated>
<title>Render fmd to HTML and show it on the home page</title>
<link rel="alternate" type="text/html" href="commit/83dfe3d818c4d92a62ea24e0a26482c2ab71da9f.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 83dfe3d818c4d92a62ea24e0a26482c2ab71da9f
parent 0a45c4708fa283f94989fe6324f148cfd16ce173
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Wed, 26 Feb 2025 19:01:00 +0000

Render fmd to HTML and show it on the home page

Add an interpreter that walks the AST and emits HTML. MakeDirectoryPkg
looks for a .fmd file in the data directory matching the page name and
passes the rendered HTML to the template.

</content>
</entry>
<entry>
<id>0a45c4708fa283f94989fe6324f148cfd16ce173</id>
<published>2025-02-25T23:50:35Z</published>
<updated>2025-02-25T23:50:35Z</updated>
<title>Finish first pass of the fmd parser</title>
<link rel="alternate" type="text/html" href="commit/0a45c4708fa283f94989fe6324f148cfd16ce173.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 0a45c4708fa283f94989fe6324f148cfd16ce173
parent 7de8b91547a216dffde3a17898b377d8002214c8
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Tue, 25 Feb 2025 23:50:35 +0000

Finish first pass of the fmd parser

Implement literal parsing, skip whitespace tokens inside blocks and move
the command lookahead into isNextCommand(). The lexer now ends words at
newlines, and the test builds the AST as well.

</content>
</entry>
<entry>
<id>7de8b91547a216dffde3a17898b377d8002214c8</id>
<published>2025-02-25T22:38:13Z</published>
<updated>2025-02-25T22:38:13Z</updated>
<title>Start recursive descent parser for fmd</title>
<link rel="alternate" type="text/html" href="commit/7de8b91547a216dffde3a17898b377d8002214c8.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 7de8b91547a216dffde3a17898b377d8002214c8
parent 406889154e7971cfc6e9beefa382e8389ac542f5
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Tue, 25 Feb 2025 22:38:13 +0000

Start recursive descent parser for fmd

Parse keyword:literal and keyword:{block} commands and plain blocks into
a node tree. Literal parsing is still a stub.

</content>
</entry>
<entry>
<id>406889154e7971cfc6e9beefa382e8389ac542f5</id>
<published>2025-02-25T19:36:48Z</published>
<updated>2025-02-25T19:36:48Z</updated>
<title>Added &#39;\t&#39; to lexer symbols check.</title>
<link rel="alternate" type="text/html" href="commit/406889154e7971cfc6e9beefa382e8389ac542f5.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 406889154e7971cfc6e9beefa382e8389ac542f5
parent 4cfb7f07f8cb88ca0a00bfd6d5a3c1e196a4b873
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Tue, 25 Feb 2025 19:36:48 +0000

Added &#39;\t&#39; to lexer symbols check.

</content>
</entry>
<entry>
<id>4cfb7f07f8cb88ca0a00bfd6d5a3c1e196a4b873</id>
<published>2025-02-25T19:33:14Z</published>
<updated>2025-02-25T19:33:14Z</updated>
<title>Finished first pass at &#39;fmd&#39; lexer</title>
<link rel="alternate" type="text/html" href="commit/4cfb7f07f8cb88ca0a00bfd6d5a3c1e196a4b873.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 4cfb7f07f8cb88ca0a00bfd6d5a3c1e196a4b873
parent 06aaeebd50ef5350a6b45e367c8501c502c6b000
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Tue, 25 Feb 2025 19:33:14 +0000

Finished first pass at &#39;fmd&#39; lexer

</content>
</entry>
<entry>
<id>06aaeebd50ef5350a6b45e367c8501c502c6b000</id>
<published>2025-02-24T18:22:37Z</published>
<updated>2025-02-24T18:22:37Z</updated>
<title>Cleaned error logging format and messages.</title>
<link rel="alternate" type="text/html" href="commit/06aaeebd50ef5350a6b45e367c8501c502c6b000.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 06aaeebd50ef5350a6b45e367c8501c502c6b000
parent e5ecb47816ac841865a277164bd001330329c84e
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Mon, 24 Feb 2025 18:22:37 +0000

Cleaned error logging format and messages.

</content>
</entry>
<entry>
<id>e5ecb47816ac841865a277164bd001330329c84e</id>
<published>2025-02-24T17:56:11Z</published>
<updated>2025-02-24T17:56:11Z</updated>
<title>Switch config from YAML to sys/config.json</title>
<link rel="alternate" type="text/html" href="commit/e5ecb47816ac841865a277164bd001330329c84e.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit e5ecb47816ac841865a277164bd001330329c84e
parent 6e70eb2a5289e0e2d1a6b7e4bc7ad30d7c1279fe
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Mon, 24 Feb 2025 17:56:11 +0000

Switch config from YAML to sys/config.json

Both packages now read their settings from a JSON file, so the go-yaml
dependency is gone.

</content>
</entry>
<entry>
<id>6e70eb2a5289e0e2d1a6b7e4bc7ad30d7c1279fe</id>
<published>2025-02-24T04:08:14Z</published>
<updated>2025-02-24T04:08:14Z</updated>
<title>Add edit page with a shared page handler</title>
<link rel="alternate" type="text/html" href="commit/6e70eb2a5289e0e2d1a6b7e4bc7ad30d7c1279fe.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 6e70eb2a5289e0e2d1a6b7e4bc7ad30d7c1279fe
parent bf7340b4ea4a2d445f20bc7ab568fb283fa48b5c
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Mon, 24 Feb 2025 04:08:14 +0000

Add edit page with a shared page handler

Pull the /home handler out into pageHandler and register it for /edit
as well.

</content>
</entry>
<entry>
<id>bf7340b4ea4a2d445f20bc7ab568fb283fa48b5c</id>
<published>2025-02-24T03:47:13Z</published>
<updated>2025-02-24T03:47:13Z</updated>
<title>Moved header to template file.</title>
<link rel="alternate" type="text/html" href="commit/bf7340b4ea4a2d445f20bc7ab568fb283fa48b5c.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit bf7340b4ea4a2d445f20bc7ab568fb283fa48b5c
parent bc2ecc91dbb07b24e462232e42b64c748e6ae0a0
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Mon, 24 Feb 2025 03:47:13 +0000

Moved header to template file.

</content>
</entry>
<entry>
<id>bc2ecc91dbb07b24e462232e42b64c748e6ae0a0</id>
<published>2025-02-24T03:18:16Z</published>
<updated>2025-02-24T03:18:16Z</updated>
<title>Fixed &#39;script.js&#39; path error in &#39;home/index.html&#39;</title>
<link rel="alternate" type="text/html" href="commit/bc2ecc91dbb07b24e462232e42b64c748e6ae0a0.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit bc2ecc91dbb07b24e462232e42b64c748e6ae0a0
parent 26ff2bb7237b5abbc0978cf0b269ddbd20467f9d
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Mon, 24 Feb 2025 03:18:16 +0000

Fixed &#39;script.js&#39; path error in &#39;home/index.html&#39;

</content>
</entry>
<entry>
<id>26ff2bb7237b5abbc0978cf0b269ddbd20467f9d</id>
<published>2025-02-24T03:13:12Z</published>
<updated>2025-02-24T03:13:12Z</updated>
<title>Split main into filesystem and network packages</title>
<link rel="alternate" type="text/html" href="commit/26ff2bb7237b5abbc0978cf0b269ddbd20467f9d.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 26ff2bb7237b5abbc0978cf0b269ddbd20467f9d
parent 601ea12d68287e7674e71da71370037c73ab4e55
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Mon, 24 Feb 2025 03:13:12 +0000

Split main into filesystem and network packages

Also move script.js and styles.css into web/global so other pages can
share them.

</content>
</entry>
<entry>
<id>601ea12d68287e7674e71da71370037c73ab4e55</id>
<published>2025-02-23T21:27:28Z</published>
<updated>2025-02-23T21:27:28Z</updated>
<title>Drop MongoDB and add favicon and 404 routes</title>
<link rel="alternate" type="text/html" href="commit/601ea12d68287e7674e71da71370037c73ab4e55.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 601ea12d68287e7674e71da71370037c73ab4e55
parent 98c8a4169eb29606ae480fc68b9ae4435f35eb7c
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Sun, 23 Feb 2025 21:27:28 +0000

Drop MongoDB and add favicon and 404 routes

Remove the MongoDB connection and driver again. Serve /favicon.ico from
web/global, and only redirect the exact / path to /home so anything
else returns a 404.

</content>
</entry>
<entry>
<id>98c8a4169eb29606ae480fc68b9ae4435f35eb7c</id>
<published>2025-02-22T19:25:57Z</published>
<updated>2025-02-22T19:25:57Z</updated>
<title>Move home page to web/home and redirect / there</title>
<link rel="alternate" type="text/html" href="commit/98c8a4169eb29606ae480fc68b9ae4435f35eb7c.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 98c8a4169eb29606ae480fc68b9ae4435f35eb7c
parent d1e841318bf3a6e0a6cd3fbf71bfca33152204d1
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Sat, 22 Feb 2025 19:25:57 +0000

Move home page to web/home and redirect / there

Add a /home handler that renders web/home and make / redirect to it.
Handler errors now go through log instead of fmt.

</content>
</entry>
<entry>
<id>d1e841318bf3a6e0a6cd3fbf71bfca33152204d1</id>
<published>2025-02-22T18:57:38Z</published>
<updated>2025-02-22T18:57:38Z</updated>
<title>Add GetYamlContent helper and MongoDB connection</title>
<link rel="alternate" type="text/html" href="commit/d1e841318bf3a6e0a6cd3fbf71bfca33152204d1.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit d1e841318bf3a6e0a6cd3fbf71bfca33152204d1
parent d15147885cd59a7d75f8517f08b5bf450e1986a8
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Sat, 22 Feb 2025 18:57:38 +0000

Add GetYamlContent helper and MongoDB connection

Pull the repeated YAML decoding into GetYamlContent() and rename the
Resource* types to Directory*. Also connect to a local MongoDB instance
on startup using mongo-driver v2.

</content>
</entry>
<entry>
<id>d15147885cd59a7d75f8517f08b5bf450e1986a8</id>
<published>2025-02-19T02:37:51Z</published>
<updated>2025-02-19T02:37:51Z</updated>
<title>Remove Postgres connection</title>
<link rel="alternate" type="text/html" href="commit/d15147885cd59a7d75f8517f08b5bf450e1986a8.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit d15147885cd59a7d75f8517f08b5bf450e1986a8
parent 0f2f93afa3448e300dca3cb33df5f96c78e1da83
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Wed, 19 Feb 2025 02:37:51 +0000

Remove Postgres connection

Going to try a NoSQL store instead, so drop pgx for now.

</content>
</entry>
<entry>
<id>0f2f93afa3448e300dca3cb33df5f96c78e1da83</id>
<published>2025-02-13T22:05:33Z</published>
<updated>2025-02-13T22:05:33Z</updated>
<title>Connect to Postgres on startup</title>
<link rel="alternate" type="text/html" href="commit/0f2f93afa3448e300dca3cb33df5f96c78e1da83.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 0f2f93afa3448e300dca3cb33df5f96c78e1da83
parent 11dbb6d694f722698655443187bb622133909563
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Thu, 13 Feb 2025 22:05:33 +0000

Connect to Postgres on startup

Read database settings from the YAML config and open a pgx connection
in main.

</content>
</entry>
<entry>
<id>11dbb6d694f722698655443187bb622133909563</id>
<published>2025-02-13T18:50:46Z</published>
<updated>2025-02-13T18:50:46Z</updated>
<title>Added collapsible buttons to header layout.</title>
<link rel="alternate" type="text/html" href="commit/11dbb6d694f722698655443187bb622133909563.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 11dbb6d694f722698655443187bb622133909563
parent 48c426693e94096a827371155befde2b5fcc4727
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Thu, 13 Feb 2025 18:50:46 +0000

Added collapsible buttons to header layout.

</content>
</entry>
<entry>
<id>48c426693e94096a827371155befde2b5fcc4727</id>
<published>2025-02-13T18:29:15Z</published>
<updated>2025-02-13T18:29:15Z</updated>
<title>Structured header content flow.</title>
<link rel="alternate" type="text/html" href="commit/48c426693e94096a827371155befde2b5fcc4727.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 48c426693e94096a827371155befde2b5fcc4727
parent af396c28024bc1345812a47cbe0512b13de76e41
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Thu, 13 Feb 2025 18:29:15 +0000

Structured header content flow.

</content>
</entry>
<entry>
<id>af396c28024bc1345812a47cbe0512b13de76e41</id>
<published>2025-02-13T17:17:10Z</published>
<updated>2025-02-13T17:17:10Z</updated>
<title>Sketch out header and subject page layout</title>
<link rel="alternate" type="text/html" href="commit/af396c28024bc1345812a47cbe0512b13de76e41.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit af396c28024bc1345812a47cbe0512b13de76e41
parent e449002350b051e7d04bb6602232802f456d3ee6
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Thu, 13 Feb 2025 17:17:10 +0000

Sketch out header and subject page layout

Add a header and left/subject/right sections to index.html with styles
for them. Comment out the debug prints in main.

</content>
</entry>
<entry>
<id>e449002350b051e7d04bb6602232802f456d3ee6</id>
<published>2025-02-13T16:48:47Z</published>
<updated>2025-02-13T16:48:47Z</updated>
<title>Rework styles.css and home page layout</title>
<link rel="alternate" type="text/html" href="commit/e449002350b051e7d04bb6602232802f456d3ee6.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit e449002350b051e7d04bb6602232802f456d3ee6
parent 41532287948caf3d5a49d9d7a858d052bc44311b
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Thu, 13 Feb 2025 16:48:47 +0000

Rework styles.css and home page layout

Replace the left/center/right sections in index.html with a single
._content container and reformat the markup to match.

</content>
</entry>
<entry>
<id>41532287948caf3d5a49d9d7a858d052bc44311b</id>
<published>2025-02-12T22:20:59Z</published>
<updated>2025-02-12T22:20:59Z</updated>
<title>Updated home page message.</title>
<link rel="alternate" type="text/html" href="commit/41532287948caf3d5a49d9d7a858d052bc44311b.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 41532287948caf3d5a49d9d7a858d052bc44311b
parent e2a6bf9f94bc55594d7fc4b91a651025aa81046e
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Wed, 12 Feb 2025 22:20:59 +0000

Updated home page message.

</content>
</entry>
<entry>
<id>e2a6bf9f94bc55594d7fc4b91a651025aa81046e</id>
<published>2025-02-12T22:09:22Z</published>
<updated>2025-02-12T22:09:22Z</updated>
<title>Serve /web/ from WebDir instead of a hardcoded path</title>
<link rel="alternate" type="text/html" href="commit/e2a6bf9f94bc55594d7fc4b91a651025aa81046e.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit e2a6bf9f94bc55594d7fc4b91a651025aa81046e
parent e5a60b05c92f1d7e69944f7a03dd1b743deb49dd
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Wed, 12 Feb 2025 22:09:22 +0000

Serve /web/ from WebDir instead of a hardcoded path

The file server was pointed at /home/miki/. Also link styles.css from
index.html and drop the placeholder heading.

</content>
</entry>
<entry>
<id>e5a60b05c92f1d7e69944f7a03dd1b743deb49dd</id>
<published>2025-02-12T21:52:40Z</published>
<updated>2025-02-12T21:52:40Z</updated>
<title>Imported my global styles.</title>
<link rel="alternate" type="text/html" href="commit/e5a60b05c92f1d7e69944f7a03dd1b743deb49dd.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit e5a60b05c92f1d7e69944f7a03dd1b743deb49dd
parent 25842bcb1893cd21092fb5f37bfca2209e3ae7e8
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Wed, 12 Feb 2025 21:52:40 +0000

Imported my global styles.

</content>
</entry>
<entry>
<id>25842bcb1893cd21092fb5f37bfca2209e3ae7e8</id>
<published>2025-02-12T21:48:51Z</published>
<updated>2025-02-12T21:48:51Z</updated>
<title>Load templates from a separate WebDir setting</title>
<link rel="alternate" type="text/html" href="commit/25842bcb1893cd21092fb5f37bfca2209e3ae7e8.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit 25842bcb1893cd21092fb5f37bfca2209e3ae7e8
parent c79f191be541a29dfafc0dd0b9799641918c79f1
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Wed, 12 Feb 2025 21:48:51 +0000

Load templates from a separate WebDir setting

Add WebDir to the filesystem config and scan it for templates instead of
RootDir. The server info YAML is now looked up under RootDir/sys rather
than relative to the working directory.

</content>
</entry>
<entry>
<id>c79f191be541a29dfafc0dd0b9799641918c79f1</id>
<published>2025-02-12T20:50:31Z</published>
<updated>2025-02-12T20:50:31Z</updated>
<title>Add HTTPS server with YAML config and templates</title>
<link rel="alternate" type="text/html" href="commit/c79f191be541a29dfafc0dd0b9799641918c79f1.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit c79f191be541a29dfafc0dd0b9799641918c79f1
parent cf473e898b4b52c2e21f840ef20f891b8b115878
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Wed, 12 Feb 2025 20:50:31 +0000

Add HTTPS server with YAML config and templates

Read filesystem and server settings from the YAML files in sys/, check
that the TLS cert and key exist, and serve /web/ as static files. The /
handler collects the .html files under the web root and renders
index.html from them.

The run target now uses sudo so the server can bind a privileged port.

</content>
</entry>
<entry>
<id>cf473e898b4b52c2e21f840ef20f891b8b115878</id>
<published>2025-02-05T20:27:45Z</published>
<updated>2025-02-05T20:27:45Z</updated>
<title>Init commit.</title>
<link rel="alternate" type="text/html" href="commit/cf473e898b4b52c2e21f840ef20f891b8b115878.html" />
<author>
<name>weetat</name>
<email>wtenison@protonmail.com</email>
</author>
<content>commit cf473e898b4b52c2e21f840ef20f891b8b115878
Author: weetat &lt;wtenison@protonmail.com&gt;
Date:   Wed,  5 Feb 2025 20:27:45 +0000

Init commit.

</content>
</entry>
</feed>
