# .__ __ .__ .___ .___ # |__|_/ |_ ______ ____ _______ |__| ____ __ _ __ ____ ____ __| _/__ _ _______ _______ __| _/ # | |\ __\/ ___/_/ __ \\_ __ \| |_/ ___\\ \/ \/ // _ \ / _ \ / __ | \ \/ \/ /\__ \ \_ __ \ / __ | # | | | | \___ \ \ ___/ | | \/| |\ \___ \ /( <_> )( <_> )/ /_/ | \ / / __ \_| | \// /_/ | # |__| |__| /____ > \___ >|__| |__| \___ > \/\_/ \____/ \____/ \____ | \/\_/ (____ /|__| \____ | # \/ \/ \/ \/ \/ \/ # # twtxt is an open, decentralized microblogging platform that uses # human-readable text files, common transport protocols, and free software. # # Learn more about twtxt at https://twtxt.readthedocs.io and https://twtxt.dev # # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # # nick = itsericwoodward # alias = eric # description = A geek, coder, gamer, tinkerer, husband, father, server admin, web developer, and American cyborg, though not necessarily in that order. # url = http://itsericwoodward.com/twtxt.txt # url = https://itsericwoodward.com/twtxt.txt # avatar = https://itsericwoodward.com/images/avatar.png # # link = Site https://www.itsericwoodward.com # link = Fediverse Account https://toot.cafe/@itsericwoodward # link = Git Repos https://git.itsericwoodward.com # link = GitHub Profile https://github.com/ItsEricWoodward # link = LinkedIn Profile https://www.linkedin.com/in/itsericwoodward # link = The Planar Vagabond's Guide to the Multiverse https://www.planarvagabond.com/ # link = Mythic Wars: Clash of the Gods https://mythicwarsgame.com/ # # prev = foxi2gq twtxt-archive-initial.txt # # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # follow = 0xe9 https://0xe9.net/twtxt.txt # follow = aelaraji https://aelaraji.com/twtxt.txt # follow = akkartik https://akkartik.name/twtxt.txt # follow = andros https://twtxt.andros.dev/ # follow = arne https://uplegger.eu/twtxt.txt # follow = bbs-algorave-dk http://algorave.dk/bbs.txt # follow = bender https://twtxt.net/user/bender/twtxt.txt # follow = codebuzz https://www.codebuzz.nl/twtxt.txt # follow = codemadness.org https://codemadness.org/twtxt.txt # follow = david https://collantes.us/twtxt.txt # follow = dbucklin https://www.davebucklin.com/twtxt.txt # follow = doesnm https://doesnm.p.psf.lt/twtxt.txt # follow = eapl.me https://eapl.me/tw.txt # follow = eldersnake https://we.loveprivacy.club/user/eldersnake/twtxt.txt # follow = emmanuel https://wald.ovh/~Emmanuel/twtxt.txt # follow = falsifian https://www.falsifian.org/twtxt.txt # follow = fastidious https://tilde.town/~fastidious/twtxt.txt # follow = fredg https://galusik.fr/twtxt.txt # follow = funbreaker https://we.loveprivacy.club/user/funbreaker/twtxt.txt # follow = hecanjog https://hecanjog.com/twtxt.txt # follow = iolfree https://tilde.club/~iolfree/twtxt.txt # follow = ionores https://twtxt.net/user/ionores/twtxt.txt # follow = javivf https://adn.org.es/twtxt.txt # follow = jcolag https://john.colagioia.net/twtxt.txt # follow = johanbove https://johanbove.info/twtxt.txt # follow = jost https://jost.sdfeu.org/twtxt.txt # follow = kat https://yarn.girlonthemoon.xyz/user/kat/twtxt.txt # follow = klaxzy https://klaxzy.net/etc/twtxt.txt # follow = lyse https://lyse.isobeef.org/twtxt.txt # follow = maurice https://maurice-renck.de/twtxt.txt # follow = mckinley-cc https://mckinley.cc/twtxt.txt # follow = melyanna http://tilde.club/~melyanna/twtxt.txt # follow = movq https://www.uninformativ.de/twtxt.txt # follow = nff https://www.noizhardware.com/etc/tw.txt # follow = nilfm https://nilfm.cc/twtxt.txt # follow = notizblog https://notiz.blog/feed/twtxt # follow = nristen https://ctrl-c.club/~nristen/twtxt.txt # follow = prologic https://twtxt.net/user/prologic/twtxt.txt # follow = prx https://si3t.ch/twtxt.txt # follow = quark https://ferengi.one/twtxt.txt # follow = rrraksamam https://twtxt.net/user/rrraksamam/twtxt.txt # follow = seabirdie https://yarn.girlonthemoon.xyz/user/seabirdie/twtxt.txt # follow = skinshafi https://thunix.net/~skinshafi/twtxt.txt # follow = sorenpeter http://darch.dk/twtxt.txt # follow = thecanine https://twtxt.net/user/thecanine/twtxt.txt # follow = thiegui https://twtxt.net/user/thiegui/twtxt.txt # follow = twtxt https://buckket.org/twtxt_news.txt # follow = twtxtory https://twtxtory.adn.org.es/twtxt.txt # follow = xuu https://txt.sour.is/user/xuu/twtxt.txt # follow = dce https://hashnix.club/~dce/twtxt.txt # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2025-09-01T21:53:08-04:00 I finally have my new (top-secret) twtxt client in a working state. Next comes the deployment, which I hope to finish tonight. Release date: TBD. Stay tuned! 2025-09-03T21:45:19-04:00 I had some trouble with my nginx reverse proxy, but after much tweaking and fiddling, I now have the prototype version of my node-based twtxt editor up and running on my site! 😎 #twtgoals 2025-09-04T20:47:00-04:00 👓 "How to Make an Apostrophe in HTML: The Complete 2500 Word Guide" https://thelinuxcode.com/how-can-i-make-an-apostrophe-in-html/ 2025-09-07T18:34:22-04:00 Yesterday, I published my first package on JSR: https://jsr.io/@itsericwoodward/fluent-dom-esm.

Then today, I pushed an update to my site to show my twts (including a schnazzy little animation to add them): https://itsericwoodward.com/

Overall, a most productive weekend. 2025-09-19T02:00:12-04:00 Apologies if I've been spamming anyone out there in twtxt-land today.

I've been working on a couple of twtxt-related projects, and one of them is a reader (tentatively called `twtstrm`) written in JS. I used dummy data for the first few stages of development, but now I'm at the point where I need some _real_ data, and that meant hitting up my actual following list.

Of course, it didn't help that I had a typo in my `If-Modified-Since` headers, but all that has since been resolved.

Anyways, if I accidentally spammed you with requests today, I am sorry, and it shouldn't happen anymore.

We thank you for your patience, and apologize for the inconvenience. 2025-09-23T22:09:23-04:00 (#uhanb2a) @ Thanks for asking!

So, I've been working on 2 main twtxt-related projects.

The first is small Node / express application that serves up a twtxt file while allowing its owner to add twts to it (or edit it outright), and I've been testing it on my site since the night I made that post. It's still very much an MVP, and I've been intermittently adding features, improving security, and streamlining the code, with an eye to release it after I get an MVP done of project #2 (the reader).

But that's where I've been struggling. The idea _seems_ simple enough - another Node / express app (this one with a Vite-powered front-end) that reads a public twtxt file, parses the "follow" list, grabs (and parses) _those_ twtxt files, and then creates a river of twts out of the result. The pieces work fine in seclusion (and with dummy data), but I keep running into weird issues when reading real-live twtxt files, so some twts come through, while others get lost in the ether. I'll figure it out eventually, but for now, I've been spending far more time than I anticipated just trying to get it to work end-to-end.

On top of it, the 2 projects wound up turning into 4 (so far), as I've been spinning out little libraries to use across both apps (like https://jsr.io/@itsericwoodward/fluent-dom-esm, and a forthcoming twtxt helper library).

In the end, I'm hoping to have project 1 (the editor) into beta by the end of October, and project 2 (the reader) into beta sometime after that, but we'll see.

I hope this has satisfied your curiosity, but if you'd like to know more, please reach out! 2025-09-25T00:02:32-04:00 I _finally_ resolved my issues with hashing twts... with REGEX! 

Dates in JavaScript are truly strange creatures. 2025-09-28T20:27:34-04:00 (#kr77sxq) @ Thanks, I think I fixed it now. Sorry for the spam. 2025-09-28T23:03:17-04:00 (#zs56hga) @ That `zs` looks pretty cool! I love simple static site generators, and look forward to trying it on my next web site project. Kudos! 2025-09-28T23:04:32-04:00 I _finally_ solved the loading issue in my WIP reader, TwtStrm (and apologies again to anyone that got spammed while I was diagnosing the issue).

After another round of coding this weekend, I'm happy to report that it now renders _all_ the twts (with markdown parsing), complete with `localstorage` and server-based file caching. 2025-09-28T23:09:43-04:00 (#tjlazxa) It still needs some cleaning (and some slight UX improvements), but overall, I'm happy with it.

BTW - I promise, I intended it to be pronounced like "TweetStream" (or as written, "TwtStrm"), rather than "TweetStorm". Sorry again. 😊 2025-09-29T23:45:11-04:00 (#7w2liya) @ Yeah, those are my bad.

A couple of weeks ago, I added CORS support, which is the source of the OPTIONS call. What I _didn't_ do was store the result so it stops trying to make further attempts. I'll get that in tomorrow.

As for the "If-Modified-Since" header, the server-based component of TwtStrm should be sending that (along with its user-agent tag and my user info). I wasn't sure if that could be sent with CORS requests, so I'll need to look into that a bit more.

Thanks, I appreciate the feedback! 2025-10-02T22:07:22-04:00 ♫ MTV's Amp: Season One Playlist ♫ https://youtube.com/playlist?list=PLBXO-yEpu7qfeUQoFVHFsZuHdHAxOW6O8&si=m2TxRaKYBwXoKrYx

Shuffle. Jam. Repeat. 2025-10-03T23:58:56-04:00 (#cityvxa) @ Wow, you're good.

It was an edit, within a minute or two of posting. I didn't think anyone would notice.

That's what I call _on it_. 😀 2025-10-15T21:47:46-04:00 After taking most of the year off from role-playing, I've got 3 one-shots coming up in the next month, all of which need some tweaking before I can run them (as do my homebrew rules).

Plus there's a "build a game" code challenge at work, a pair of media boxes I need to rebuild, a pair of dead machines I need to diagnose, and I'd like to (eventually) get my twtxt apps to a "releasable" state.

So many projects, so little (free) time... 2025-11-15T00:36:46-05:00 I wound up running 2 out of 3 of the one-shots, both Halloween games based on Ravenloft / Curse of Strahd, and both rousing successes (for the players, not so much for Strahd).

Since I'm on something of a gaming kick, I think I'm going to try and finish plotting out the rest of the fae adventure I'm running for my kids, while also (hopefully) finishing my super secret astral gaming project.

Can I do it? Stay tuned and find out! 2025-11-15T11:43:01-05:00 I like to read through old RPG books and zines for inspiration for my games, and lately I've been enjoying the Arduin Grimoire (https://en.wikipedia.org/wiki/Arduin), one of the earliest 3rd-party zines (coming out during the initial run of OD&D). It's filled with a bunch of unique ideas (some better than others), entirely too many charts, and is very much a product of its time, but there's something about its "raw"-ness (and its variety) that I still find appealing. 2025-12-03T23:41:46-05:00 Working on day 3 of the Advent of Code 2025: https://adventofcode.com/

My solutions repo: https://git.itsericwoodward.com/eric/aoc-2025 2025-12-06T02:12:22-05:00 Day 6 of AoC, and I'm all caught up. 12 puzzles down, 12 more to go! 2026-01-01T20:34:56-05:00 New post: 2025 - A Year in review (https://www.itsericwoodward.com/journal/2025/12-31-year-in-review.html)

Happy New Year, everyone! 2026-01-05T00:42:22-05:00 Spent most of the long weekend working on a few coding projects... specifically, I pushed some updates for TwtKpr to my test instance before spending some time working on the build process and demo page for my new twtxt-parsing library... which lead me to make some changes to my existing fluent-dom-esm library.

So, nothing actually got _finished_, but the incremental updates continue... 2026-01-05T23:22:38-05:00 What a horrible night to have a curse... 2026-01-19T23:34:19-05:00 Another successful playthrough of Symphony of the Night draws to a close... And Richter's story begins once again... 2026-01-20T23:21:10-05:00 Last night, I beat Castlevania SotN. Tonight, I won the Superbowl in NFL Blitz 2000.

Clearly, my mad PS1 skillz are finally at their _peak_... 2026-02-24T00:05:05-05:00 New library alert => Last night, I published `twtxt-lib`, a new isomorphic TypeScript library for parsing and interacting with `twtxt.txt` files. Check out the demo at https://twtxt-lib.itsericwoodward.com/! 2026-02-24T22:07:15-05:00 (#t77u4lq) @ Correctamundo! In this case, it's available for the browser as a single (optionally-minified) JavaScript file, or for Node via NPM (as JS) and JSR.io (as "native" TypeScript).

I had to do it that way because I wanted a library I could use in both an Express server (for TwtKpr and TwtStrm) _and_ the browser (for my website and... TwtStrm).

Hopefully, I'll have more to share about those other projects soon... 2026-03-18T23:00:20-04:00 I'm happy to report that, earlier today, I published an early version of `express-twtkpr`: an ExpressJS library that enables hosting (and directly posting to) a twtxt.txt file. It works great (otherwise you wouldn't be able to read this), but it's still in alpha and lacks documentation, examples, tests, installation flexibility, or polish, so please use it at your own risk. Enjoy! https://www.npmjs.com/package/express-twtkpr 2026-03-19T22:31:13-04:00 (#u2kyxwq) @ Thanks for the tip-off, fixed!

I hope to have some time this weekend to tease apart my current setup and build a couple of example sites with it (while also writing some docs along the way). But given the rate I've been going, it'll probably be another month. 😢 2026-03-19T22:35:21-04:00 (#b5yu6ja) @ Thanks for that as well, I've removed the extraneous letter and it now (correctly) points to https://www.itsericwoodward.com (I am a developer of webs, so I tend to have many webs in development at any given moment). 2026-03-19T23:19:46-04:00 (#u2kyxwq) @ Thanks! 👍 2026-03-22T20:32:38-04:00 Went 2/3 at Magic today: Prosper dominated game 1, Ash and his Knights came within a single planar die roll of winning game 2, and then Atraxa came up with the win in a fairly tight game 3. All in all, not a bad afternoon of Magic. 2026-03-29T23:55:38-04:00 (#frqzbeq) @ Thanks for the heads-up.

It lead me to publish an updated version of `twtxt-lib` (v0.10.0) which supports the v2 hashing algorithm: https://twtxt-lib.itsericwoodward.com/ 2026-03-30T21:41:05-04:00 For the first time in years, I managed to get out and throw a round of disc golf. Had a good time playing Vietnam Veterans Park in Kannapolis, throwing +10 over 9 holes, with my only par being thanks to a 40' "putt" with my MRV. And the weather was _perfect_.

I hope to play another round soon. 2026-03-31T00:12:04-04:00 (#3g27aca) @ Thanks (again) for the heads-up!. I'm not sure why you were seeing black text, but I just pushed a new version of the library (v0.10.1) with some updated colors in the demo's themes (which should hopefully address the contrast issues).

The dark mode was an aesthetic choice by a designer with a _strong_ preference for dark mode (and who thought the maroon looked better as a background color), but in the interest of being supportive of my audience, I added a localstorage-backed memory to the theme toggle (so when you turn it to light mode, it should remember for future visits). 2026-03-31T23:38:30-04:00 (#nioi2ha) @ Congrats! That's no small feat. 2026-04-01T00:26:20-04:00 (#rswnvqq) @ Thanks, and you are correct: MRV stands for Mid-Range Vector (I think) as it is a stable mid-range driver (it says so on the disc):
https://itsericwoodward.com/images/520b231931b8d8569d400e40e6fcc805b0bbee35e04b2ce5e35df0848852c807.jpg 2026-04-01T00:27:30-04:00 (#rswnvqq) @ For reasons I can't fully explain, we have a bunch of courses in the area, most in public parks (they integrate nicely since they can be built with the existing landscape, only adding some yellow baskets, concrete starting pads, and maybe signs).

In my experience, the main difference between a disc golfer and a frisbee thrower is that the disc golfer will often have a bag full of different shapes of discs (including drivers of varying ranges and/or putters). Even in my small bag, I've got some long range drivers (a Beast, a Cheetah, a Valkyrie, and a Wraith), my aforementioned MRV (Mid-Range Vector), an ultralight Aero (which feels similar to a "standard" frisbee), and 2 "rubber" putters (softer plastic, less "bouncy").

https://itsericwoodward.com/images/da146cde70e843c4edd9012b11d528ad46c42c937f44d4428168be023f926b33.jpg 2026-04-01T22:29:28-04:00 (#3g27aca) @ That's crazy! If you don't mind me asking, what browser are you using when you see this?

@ Glad to hear it, I've neglected a Safari test thus far.

Thank you both for checking. 2026-04-05T22:12:23-04:00 I went 1 for 2 at Magic this week... Temmet made a good showing the first game before being overwhelmed by an infinite number of Wylls (aka Fred Durst, on account of all his "rollin', rollin', rollin'!"). As a result, I unleashed Chatterfang on the group for the second game, and he lead his squirrel army to victory once again. Good times! 2026-04-10T00:07:15-04:00 TIL that SSH _actually_ stands for Secure Snake Home, a massively multiplayer snake game playable via the SSH protocol: `ssh snakes.run`

Of course, no one else was online when I was playing, so...

https://itsericwoodward.com/images/047d28bb8c1ce8970ad2af0276cd3be58915a3cc69eb83c76f4a33954a9b623c.png 2026-04-13T21:48:35-04:00 Message on my watch this morning: "Last week's goals slipped away. No worries, this week is yours!"

Thanks, watch. Where would I be without you? 2026-04-16T23:58:33-04:00 (#fqkshsq) @ You got me there. Mine is mildly passive-aggressive, but ultimately supportive. Yours sounds... less helpful. 😀 2026-04-18T22:39:16-04:00 "There is sauerkraut in my lederhosen." 2026-04-18T22:48:07-04:00 Also, this really speaks to me (or maybe it speaks _for_ me): https://neilzone.co.uk/2026/04/just-let-me-compute-in-peace/ 2026-04-19T22:53:40-04:00 I won our only game of Magic for this week with my (yet-to-be published) "Bolas Triumphant" deck: 5 players over 3 hours, including 4 board wipes (one of which came from my Nicol Bolas, God-Pharaoh), and I even got to cast Omniscience via a Fae of Wishes. I can't speak for everyone, but I know I had a good time. 😁