Table of Contents

Syncing status.lol to twtxt

Automatically publish twtxt entries from status.lol updates at build time, via the omg.lol API.

The Flow

  1. Post once on status.lol
  2. Eleventy fetches the omg.lol API at build time (cached 1 hour)
  3. Transforms JSON statuses → twtxt format (ISO 8601 timestamp + content)
  4. Generates /twtxt.txt as a static file on the site

Result: the update appears simultaneously on status.lol, social.lol (Mastodon), and the twtxt feed. No cross-posting required.

Eleventy Data Fetch

In .eleventy.js, register a global data source:

eleventyConfig.addGlobalData("statuslog", async () => {
  let json = await EleventyFetch(
    "https://api.omg.lol/address/brennan/statuses/",
    { duration: "1h", type: "json" }
  );
 
  return json.response.statuses.map(status => ({
    timestamp: new Date(parseInt(status.created) * 1000)
      .toISOString().replace(/\.\d{3}Z$/, '-07:00'),
    content: `${status.emoji || ''} ${status.content}`.trim(),
    created: status.created
  })).sort((a, b) => b.created - a.created);
});

twtxt.txt Template

A Nunjucks template in the Eleventy project with permalink: /twtxt.txt:

---
permalink: /twtxt.txt
eleventyExcludeFromCollections: true
---
# nick = brennan
# url = https://brennan.day/twtxt.txt
# avatar = https://brennan.day/assets/images/brennan.jpg
# description = Queer Métis author and FOSS web developer from Treaty 7 territory

{%- for status in statuslog %}
{{ status.timestamp }}	{{ status.content }}
{%- endfor %}

Important: The separator between status.timestamp and status.content must be a literal TAB character, not spaces.

Output

2026-01-21T10:30:00-07:00	🚧 Testing twtxt setup
2026-01-20T09:15:00-07:00	☕ Morning coffee and code

Why

Status updates live on your own domain, in a format readable by any HTTP client. People can follow from Mastodon, twtxt clients, or a plain browser. The content is not trapped in a single ecosystem.

See Also