# .__ __ .__ .___ .___ # |__|_/ |_ ______ ____ _______ |__| ____ __ _ __ ____ ____ __| _/__ _ _______ _______ __| _/ # | |\ __\/ ___/_/ __ \\_ __ \| |_/ ___\\ \/ \/ // _ \ / _ \ / __ | \ \/ \/ /\__ \ \_ __ \ / __ | # | | | | \___ \ \ ___/ | | \/| |\ \___ \ /( <_> )( <_> )/ /_/ | \ / / __ \_| | \// /_/ | # |__| |__| /____ > \___ >|__| |__| \___ > \/\_/ \____/ \____/ \____ | \/\_/ (____ /|__| \____ | # \/ \/ \/ \/ \/ \/ # # 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 = My Site https://www.itsericcwoodward.com # link = My 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...