flatten monorepo, migrate off Vercel

- Remove penfield (split to own repo on Forgejo)
- Move www/ contents to root, rename to wynne.rs
- Swap @astrojs/vercel for @astrojs/node, upgrade to Astro 6
- Remove auth-astro/GitHub OAuth (TinyAuth at proxy layer)
- Remove Vercel deploy webhook
- Switch to local SQLite DB (drop Turso)
- Update generate-stats.js for new build output paths
This commit is contained in:
Lewis Wynne 2026-04-05 01:04:11 +01:00
parent f2acf36784
commit 8a9c56c3d5
52 changed files with 45 additions and 7135 deletions

5
public/changelog.txt Normal file
View file

@ -0,0 +1,5 @@
2026-03-27 - narrower layout (34rem), single-column entries, serif font, smaller muted text
2026-03-26 - inline section labels, compact layout
2026-02-07 - related posts !
2026-01-31 - text files now live at cleaner URLs (/*.txt instead of /txt/*.txt)
2026-01-23 - hello. we've got the skeleton of something here

12
public/config.yaml Normal file
View file

@ -0,0 +1,12 @@
descriptions:
cv.txt: curriculum vitae
now.txt: what i'm doing now
man.txt: manual page
changelog.txt: site changelog
stats.txt: site statistics
dates:
changelog.txt: 2026-01-23
cv.txt: 2026-01-23
man.txt: 2026-03-26
now.txt: 2026-01-23
stats.txt: 2026-01-23

6
public/cv.txt Normal file
View file

@ -0,0 +1,6 @@
lewis@wynne.rs
swe@thecodeguy 2025-now
python@tcz 2024-2025
freelance swe 2020-2024
1st class cyber 2020

64
public/js/params.js Normal file
View file

@ -0,0 +1,64 @@
!function() {
var p = new URLSearchParams(location.search);
var just = p.get('just');
if (just && /^[a-z0-9-]+$/.test(just)) {
document.documentElement.dataset.just = just;
var css = 'section[data-section]:not([data-section="' + just + '"]){display:none}';
document.head.appendChild(Object.assign(document.createElement('style'), { textContent: css }));
}
var act = p.get('do');
var urls = window.__urls;
if (urls && urls.length) {
if (act === 'random') {
var url = urls[Math.floor(Math.random() * urls.length)];
location.replace(url.startsWith('http') ? url : location.origin + url);
}
if (act === 'newest') {
location.replace(urls[0].startsWith('http') ? urls[0] : location.origin + urls[0]);
}
}
if (act === 'admin') {
location.replace('/admin');
}
if (p.has('compact')) document.documentElement.dataset.compact = '';
var has = p.get('has');
if (has) {
document.documentElement.dataset.has = has;
has = has.toLowerCase();
}
document.addEventListener('DOMContentLoaded', function() {
if (has) {
document.querySelectorAll('section[data-section] .entry').forEach(function(entry) {
if (entry.textContent.toLowerCase().indexOf(has) === -1) {
entry.style.display = 'none';
}
});
document.querySelectorAll('.guestbook-entry').forEach(function(entry) {
if (entry.textContent.toLowerCase().indexOf(has) === -1) {
entry.style.display = 'none';
}
});
}
document.querySelectorAll('.section-label').forEach(function(a) {
var link = new URLSearchParams(a.search);
p.forEach(function(v, k) { if (!link.has(k)) link.set(k, v); });
a.href = '?' + link.toString();
});
var find = document.getElementById('find');
if (find) find.addEventListener('click', function(e) {
e.preventDefault();
var term = prompt('find:');
if (!term) return;
var q = new URLSearchParams(location.search);
q.set('has', term);
location.search = q.toString();
});
});
}();

46
public/man.txt Normal file
View file

@ -0,0 +1,46 @@
WYNNE.RS(7) Personal Sites Manual WYNNE.RS(7)
NAME
wynne.rs — personal website of lewis m.w.
SYNOPSIS
wynne.rs [?just=SECTION] [?has=TERM] [?do=ACTION] [?compact]
DESCRIPTION
A personal website limited to some made-up, arbitrary design
principles to keep things minimal. An experiment in doing as
much as possible with as few distinct routes as I can. As it
stands there is an index page with a list of all the content
on the site, and a [slug]. Anything interesting is done with
search parameters. Rather than a search page or an index for
content categories, the queries below can be used. They tend
to all modify data classes to show/hide content on the index.
OPTIONS
?just=SECTION
Display only the named section.
?has=TERM
Filter entries to those containing TERM.
?do=random
Redirect to a random entry.
?do=newest
Redirect to the most recent entry.
?compact
Hide section labels and dates.
PUBLIC FILES
cv.txt Curriculum vitae.
now.txt What I'm doing now.
changelog.txt Site changelog. I forget to update this often.
stats.txt Site statistics. Generated at build-time.
man.txt This man page.
SEE ALSO
source https://github.com/llywelwyn/wynne.rs
AUTHOR
lewis m.w. <lewis@wynne.rs>

12
public/now.txt Normal file
View file

@ -0,0 +1,12 @@
26/03/26
still moving house. this one is mostly
empty at this point; anything we don't
need got thrown away, and things i can
live without for a while got taken and
put in storage closer to the new house
seven months and counting+
cheers,
lew

12
public/stats.txt Normal file
View file

@ -0,0 +1,12 @@
this site consists of [WORDS] words across [PAGES] pages
there are [POSTS] blog posts
[TXT] txt files
and [BOOKMARKS] bookmarks
[GUESTBOOK] people have signed the guestbook
this file was generated automatically on deploy
cheers,
lewis