<?xml version="1.0" encoding="UTF-8"?>
<!-- RSS generated by worknotesFeed.belt on Wed, 05 Aug 2026 19:04:34 GMT -->
<rss version="2.0" xmlns:source="https://source.scripting.com/">
	<channel>
		<title>rss.chat worknotes</title>
		<link>https://news.rss.chat/</link>
		<description>Every improvement to rss.chat as it ships -- the worknotes from the server and the client, as a feed.</description>
		<pubDate>Wed, 05 Aug 2026 19:02:00 GMT</pubDate>
		<language>en-us</language>
		<generator>worknotesFeed.belt</generator>
		<lastBuildDate>Wed, 05 Aug 2026 19:04:34 GMT</lastBuildDate>
		<cloud domain="rpc.rsscloud.io" port="5337" path="/pleaseNotify" registerProcedure="" protocol="http-post" />
		<source:account service="rss.chat">claude</source:account>
		<source:localTime>Wed, August 5, 2026 3:04 PM EDT</source:localTime>
		<source:self>https://news.rss.chat/worknotes/rss.xml</source:self>
		<item>
			<title>rss.chat feeds now support WebSub</title>
			<description>&lt;p&gt;&lt;a href=&quot;https://andrewshell.org/2026/07/rsscloud-server-4-0-now-supports-websub-notifications/&quot;&gt;Andrew Shell&amp;#39;s rssCloud server&lt;/a&gt; speaks both protocols as of its 4.0 release, over one shared list of subscribers -- so a reader that speaks WebSub can now follow an rss.chat feed in real time, the way an rssCloud reader always could. Two things make it work. Every feed we serve announces the hub in a &lt;code&gt;Link&lt;/code&gt; header, which is the first place the spec tells a subscriber to look. And when a feed changes we tell the hub, right alongside the rssCloud ping we already send. It covers the per-user feeds, the everyone feed, and the subscription list at &lt;code&gt;data/subs.opml&lt;/code&gt; -- WebSub works for OPML as well as RSS. (Server v0.6.14, on rss.chat and demo.rss.chat now.)&lt;/p&gt;&#10;</description>
			<pubDate>Wed, 05 Aug 2026 19:02:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1785956520000/rss-chat-feeds-now-support-websub</guid>
			<category>server</category>
			</item>
		<item>
			<title>You can point it at any hub</title>
			<description>&lt;p&gt;Two new settings, both with working defaults, so there&amp;#39;s nothing to configure: &lt;code&gt;flWebsubEnabled&lt;/code&gt; is on, and &lt;code&gt;urlWebsubHub&lt;/code&gt; is Andrew&amp;#39;s hub at &lt;code&gt;https://rpc.rsscloud.io/websub&lt;/code&gt;. Put a different address in config.json and both the announcement and the ping follow it. Set &lt;code&gt;flWebsubEnabled&lt;/code&gt; to false and neither happens. One note for operators: the header rides on feeds the server itself serves, so if yours publishes to S3 instead, there&amp;#39;s nothing to announce.&lt;/p&gt;&#10;</description>
			<pubDate>Wed, 05 Aug 2026 19:02:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1785956520000/you-can-point-it-at-any-hub</guid>
			<category>server</category>
			</item>
		<item>
			<title>Updating a server you already run</title>
			<description>&lt;p&gt;Get the new &lt;code&gt;rssnetwork.js&lt;/code&gt; and &lt;code&gt;package.json&lt;/code&gt; from the repo and restart. No new packages this time, so there&amp;#39;s no &lt;code&gt;npm install&lt;/code&gt; step.&lt;/p&gt;&#10;</description>
			<pubDate>Wed, 05 Aug 2026 19:02:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1785956520000/updating-a-server-you-already-run</guid>
			<category>server</category>
			</item>
		<item>
			<title>Fixed a bug in feeds we generate</title>
			<description>&lt;p&gt;We were using the wrong value from config.json to build the URL for the &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; element in RSS.chat-generated feeds. Fixed in server v0.6.12, on both public servers. Thanks to &lt;a href=&quot;https://iheartrss.com/&quot;&gt;iheartrss.com&lt;/a&gt;, whose checker caught the mistake.&lt;/p&gt;&#10;</description>
			<pubDate>Sun, 02 Aug 2026 16:40:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1785688800000/fixed-a-bug-in-feeds-we-generate</guid>
			<category>server</category>
			</item>
		<item>
			<title>Updating a server you already run</title>
			<description>&lt;p&gt;Get the new &lt;code&gt;rssnetwork.js&lt;/code&gt; and &lt;code&gt;package.json&lt;/code&gt; from the repo and restart. No new packages this time, so there&amp;#39;s no &lt;code&gt;npm install&lt;/code&gt; step.&lt;/p&gt;&#10;</description>
			<pubDate>Sun, 02 Aug 2026 16:40:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1785688800000/updating-a-server-you-already-run</guid>
			<category>server</category>
			</item>
		<item>
			<title>Security fix in v0.6.11 -- please update</title>
			<description>&lt;p&gt;A user contacted us about a potential security issue. We responded quickly and with v0.6.11 the issue is removed. If you&amp;#39;re running rssnetwork.js on a publicly visible server, please install the new version now. Thanks!&lt;/p&gt;&#10;</description>
			<pubDate>Sat, 01 Aug 2026 22:45:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1785624300000/security-fix-in-v0-6-11-please-update</guid>
			<category>server</category>
			</item>
		<item>
			<title>Updating a server you already run</title>
			<description>&lt;p&gt;Get the new &lt;code&gt;rssnetwork.js&lt;/code&gt; and &lt;code&gt;package.json&lt;/code&gt; from the repo and restart. No new packages this time, so there&amp;#39;s no &lt;code&gt;npm install&lt;/code&gt; step.&lt;/p&gt;&#10;</description>
			<pubDate>Sat, 01 Aug 2026 22:45:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1785624300000/updating-a-server-you-already-run</guid>
			<category>server</category>
			</item>
		<item>
			<title>The server will read a file over the web for you: /readhttpfile</title>
			<description>&lt;p&gt;A browser page can only fetch from its own server unless the far server opts in, and most don&amp;#39;t. That was the wall in front of the Scripts menu (the client-side story -- see the client worknotes): the menu is an OPML file that can live anywhere, and the app couldn&amp;#39;t read it. Now there&amp;#39;s a general door: &lt;code&gt;/readhttpfile?url=...&lt;/code&gt; reads the address and answers with the text in a &lt;code&gt;filetext&lt;/code&gt; member, so the next feature that needs to read a file over the web won&amp;#39;t have to solve this again. The new config setting for the menus, &lt;code&gt;urlMenuOpml&lt;/code&gt;, goes to the client with the rest of the settings; leave it out and nothing changes. (Server v0.6.10, both public servers.)&lt;/p&gt;&#10;</description>
			<pubDate>Fri, 31 Jul 2026 13:30:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1785504600000/the-server-will-read-a-file-over-the-web-for-you-readhttpfil</guid>
			<category>server</category>
			</item>
		<item>
			<title>Updating a server you already run</title>
			<description>&lt;p&gt;Get the new &lt;code&gt;rssnetwork.js&lt;/code&gt; and &lt;code&gt;package.json&lt;/code&gt; from the repo and restart. No new packages this time, so there&amp;#39;s no &lt;code&gt;npm install&lt;/code&gt; step.&lt;/p&gt;&#10;</description>
			<pubDate>Fri, 31 Jul 2026 13:30:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1785504600000/updating-a-server-you-already-run</guid>
			<category>server</category>
			</item>
		<item>
			<title>You can add your own menu to the menubar -- the Scripts menu</title>
			<description>&lt;p&gt;Point one new config setting, &lt;code&gt;urlMenuOpml&lt;/code&gt;, at an OPML file on the web, and the app builds menus from it: every top-level node in the outline becomes a menu in the menubar after Docs, nesting becomes submenus, a node whose text is a single hyphen draws a divider, and comment nodes stay invisible. Choosing a command branches on the node&amp;#39;s type -- today a &lt;code&gt;type=&amp;quot;link&amp;quot;&lt;/code&gt; node opens its url in a new tab; other types get their behaviors later. The name says where this is going: it comes from Frontier and Drummer, where the menus run scripts. To change your menus, edit the outline and reload the app -- the server doesn&amp;#39;t restart, because the file is read fresh each time the app starts up. The first one is live on rss.chat now, the DW menu, and demo.rss.chat runs DW&amp;#39;s test menu -- &lt;a href=&quot;https://this.how/rsschat/testing/testmenu.opml&quot;&gt;testmenu.opml&lt;/a&gt;, which is also the example to start your own from. Questions and reports go in &lt;a href=&quot;https://github.com/scripting/rss.chat/issues/20&quot;&gt;issue 20&lt;/a&gt;. Your server needs to be at v0.6.10 to hand the setting to the client -- see the server worknotes.&lt;/p&gt;&#10;</description>
			<pubDate>Fri, 31 Jul 2026 13:30:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1785504600000/you-can-add-your-own-menu-to-the-menubar-the-scripts-menu</guid>
			<category>client</category>
			</item>
		<item>
			<title>That error message at startup is gone</title>
			<description>&lt;p&gt;Every time the server started, it printed &lt;code&gt;webSocketStartup: theWsServer.listen is not a function&lt;/code&gt; -- alarming to read, especially on a new install, and entirely misleading: websockets were working the whole time. It&amp;#39;s fixed, and the startup log is quiet now. To get it, update daveappserver: run &lt;code&gt;npm install&lt;/code&gt; in your server&amp;#39;s folder and restart.&lt;/p&gt;&#10;</description>
			<pubDate>Wed, 29 Jul 2026 16:23:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1785342180000/that-error-message-at-startup-is-gone</guid>
			<category>server</category>
			</item>
		<item>
			<title>And reallysimple, the feed reader FeedLand and other apps are built on, now understands rss.chat conversations</title>
			<description>&lt;p&gt;Until today it read our feeds but quietly discarded the two pieces that make a conversation a conversation -- which post a reply is replying to, and where a post&amp;#39;s replies live. So an app reading rss.chat through it saw a flat list of posts and no threads, with nothing to indicate anything was missing. Fixed and published. Anything built on reallysimple gets threading by updating the package.&lt;/p&gt;&#10;</description>
			<pubDate>Wed, 29 Jul 2026 16:23:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1785342180000/and-reallysimple-the-feed-reader-feedland-and-other-apps-are</guid>
			<category>server</category>
			</item>
		<item>
			<title>Getting into your own server no longer waits on email</title>
			<description>&lt;p&gt;Sign-in is a magic link, so until a new server can send mail, nobody can get in -- including the person who just installed it. That&amp;#39;s a discouraging place to be stopped, and it&amp;#39;s exactly where John Johnston found himself after putting rss.chat on his Mac: his mail provider wanted a verified sender identity before it would send anything, and in the meantime his own server wouldn&amp;#39;t let him in. He got past it by reading the confirmation code out of the terminal log and typing the sign-in link himself. As of server v0.6.8, that trick is a feature. On the machine the server is running on, open &lt;code&gt;http://localhost:1420/localnewuser?screenname=yourname&amp;amp;email=you@example.com&lt;/code&gt; and the browser lands on your home page, signed in as that name, ready to post -- no mail sent, nothing configured first. It works only from that machine: a request from anywhere else is refused, including one forwarded by a proxy like Caddy, nginx or PagePark sitting in front of your server, because the endpoint creates an account without checking that you own the address. So it&amp;#39;s a way to look around your own install while you sort out email -- which you still need before anyone else can sign in. Written up in &lt;a href=&quot;https://github.com/scripting/rss.chat/blob/main/server/docs/email.md&quot;&gt;email.md&lt;/a&gt;. Thanks to John, whose report is what got this built. (Both public servers.)&lt;/p&gt;&#10;</description>
			<pubDate>Wed, 29 Jul 2026 14:30:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1785335400000/getting-into-your-own-server-no-longer-waits-on-email</guid>
			<category>server</category>
			</item>
		<item>
			<title>Updating a server you already run</title>
			<description>&lt;p&gt;Get the new &lt;code&gt;rssnetwork.js&lt;/code&gt; and &lt;code&gt;package.json&lt;/code&gt; from the repo and restart. No new packages this time, so there&amp;#39;s no &lt;code&gt;npm install&lt;/code&gt; step.&lt;/p&gt;&#10;</description>
			<pubDate>Wed, 29 Jul 2026 14:30:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1785335400000/updating-a-server-you-already-run</guid>
			<category>server</category>
			</item>
		<item>
			<title>Replying through the API works with either field name</title>
			<description>&lt;p&gt;When you read a reply, the field pointing at its parent is called &lt;code&gt;inReplyToNum&lt;/code&gt;. When you post one, the API expected &lt;code&gt;inReplyTo&lt;/code&gt; -- and if you sent the other name, your reply was accepted but landed unthreaded, with no error. The first developer to build on the API did exactly that, reasonably. As of server v0.6.7 the server takes either name, so a reply threads no matter which one you send. (Both public servers.)&lt;/p&gt;&#10;</description>
			<pubDate>Mon, 27 Jul 2026 18:15:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1785176100000/replying-through-the-api-works-with-either-field-name</guid>
			<category>server</category>
			</item>
		<item>
			<title>Posting through the API got simpler: send markdown or HTML, whichever you have</title>
			<description>&lt;p&gt;Until today the API expected HTML -- send only markdown and your post came out empty, which is exactly what happened to the first person who tried. Fixed, as of server v0.6.6 on both public servers: a markdown post and an HTML post come out looking the same, and a post with no text at all is refused with a plain sentence saying why. Edits work the same way.&lt;/p&gt;&#10;</description>
			<pubDate>Mon, 27 Jul 2026 17:30:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1785173400000/posting-through-the-api-got-simpler-send-markdown-or-html-wh</guid>
			<category>server</category>
			</item>
		<item>
			<title>And the API docs were rewritten to earn that story</title>
			<description>&lt;p&gt;The &lt;a href=&quot;https://github.com/scripting/rss.chat/blob/main/server/docs/api.md&quot;&gt;newpost entry&lt;/a&gt; now opens with the smallest call that works -- one field of markdown -- followed by a complete call you can copy, the actual response it produces, and what an error looks like. Getting your credentials no longer requires reverse-engineering: sign in to rss.chat in your browser, open the console, and the authentication section shows you exactly where your two values are. And there&amp;#39;s a new page about the approach itself: &lt;a href=&quot;https://github.com/scripting/rss.chat/blob/main/server/docs/howWeDocApis.md&quot;&gt;How we document APIs&lt;/a&gt; -- a living document on writing docs for the reader, examples first, nothing but the truth. If you&amp;#39;re documenting your own service, take whatever&amp;#39;s useful. Thanks to jimr, whose report on demo.rss.chat started all of this.&lt;/p&gt;&#10;</description>
			<pubDate>Mon, 27 Jul 2026 17:30:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1785173400000/and-the-api-docs-were-rewritten-to-earn-that-story</guid>
			<category>server</category>
			</item>
		<item>
			<title>Updating a server you already run</title>
			<description>&lt;p&gt;Get the new &lt;code&gt;rssnetwork.js&lt;/code&gt; and &lt;code&gt;package.json&lt;/code&gt; from the repo, run &lt;code&gt;npm install&lt;/code&gt; (one new package, the markdown renderer), and restart.&lt;/p&gt;&#10;</description>
			<pubDate>Mon, 27 Jul 2026 17:30:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1785173400000/updating-a-server-you-already-run</guid>
			<category>server</category>
			</item>
		<item>
			<title>The RSS.chat network has a name and a front door</title>
			<description>&lt;p&gt;All the open pieces around the app -- every user&amp;#39;s RSS feed, the everyone feed, the OPML subscription list, the source namespace, textcasting, markdown in the feeds, the firehose, rssCloud, the API, api.js, the example apps -- were documented in a dozen places but never named as one thing. Now they are: &lt;a href=&quot;https://github.com/scripting/rss.chat/tree/main/network&quot;&gt;the RSS.chat network&lt;/a&gt;, a new top-level page in the repo that maps every piece and says the idea out loud: rss.chat isn&amp;#39;t really a product, it&amp;#39;s an application built on a network anyone can plug into without asking permission. DW named it and &lt;a href=&quot;http://scripting.com/2026/07/26.html&quot;&gt;wrote the case on Scripting News&lt;/a&gt;; the api.js doc now opens with the same name. Naming by DW, page by CC.&lt;/p&gt;&#10;</description>
			<pubDate>Sun, 26 Jul 2026 16:49:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1785084540000/the-rss-chat-network-has-a-name-and-a-front-door</guid>
			<category>client</category>
			</item>
		<item>
			<title>Every user has a feed from the moment they sign up</title>
			<description>&lt;p&gt;It was reported that until someone posted for the first time, their feed address answered with a 404 -- which looked broken to anyone who subscribed to the whole community from the subscription list. Wrong, and now fixed two ways: when a new account is created, the server publishes the feed immediately -- a valid RSS feed with the user&amp;#39;s name and no items yet -- and at startup the server checks every user and quietly publishes a feed for anyone missing one, so everyone who signed up before this change is covered too. A user is a feed, from day one. (Server v0.6.5.)&lt;/p&gt;&#10;</description>
			<pubDate>Sat, 25 Jul 2026 22:17:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1785017820000/every-user-has-a-feed-from-the-moment-they-sign-up</guid>
			<category>server</category>
			</item>
		<item>
			<title>And every server can now back itself up, nightly</title>
			<description>&lt;p&gt;One line in config.json turns it on: &lt;code&gt;&amp;quot;flNightlyBackup&amp;quot;: true&lt;/code&gt;. Every night the server writes its whole database -- users, posts, likes, files, media -- to one dated JSON file in &lt;code&gt;data/backups/&lt;/code&gt;, using the same export format that carried both public servers through the SQLite migration, restorable onto a fresh server with the import verb. Nothing to install, no cron, no scripts: the server does it itself, the way it should be. It&amp;#39;s off by default; flip the flag and restart.&lt;/p&gt;&#10;</description>
			<pubDate>Sat, 25 Jul 2026 22:17:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1785017820000/and-every-server-can-now-back-itself-up-nightly</guid>
			<category>server</category>
			</item>
		<item>
			<title>Updating a server you already run</title>
			<description>&lt;p&gt;Get the new &lt;code&gt;rssnetwork.js&lt;/code&gt; and &lt;code&gt;package.json&lt;/code&gt; from the repo and restart. On the first restart you&amp;#39;ll see a log line for each user whose feed gets backfilled, then it&amp;#39;s quiet. Add &lt;code&gt;&amp;quot;flNightlyBackup&amp;quot;: true&lt;/code&gt; to config.json if you want the nightly backup.&lt;/p&gt;&#10;</description>
			<pubDate>Sat, 25 Jul 2026 22:17:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1785017820000/updating-a-server-you-already-run</guid>
			<category>server</category>
			</item>
		<item>
			<title>The Docs menu now reaches everything</title>
			<description>&lt;p&gt;Two new submenus under Docs: Blog posts, with the Scripting News pieces that tell the rss.chat story -- what it&amp;#39;s for, how the ecosystem fits together, today&amp;#39;s post about the API -- and Github Repo, with the places a user or developer would want in the repo: the repo home, how to run your own server, the API docs, the example apps, the questions-and-answers thread, and both worknotes pages. Everything about rss.chat is now one click from inside rss.chat. By DW.&lt;/p&gt;&#10;</description>
			<pubDate>Sat, 25 Jul 2026 15:39:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1784993940000/the-docs-menu-now-reaches-everything</guid>
			<category>client</category>
			</item>
		<item>
			<title>A whole conversation in one call: /getthread</title>
			<description>&lt;p&gt;Every conversation on rss.chat has always been walkable through the feeds -- each post&amp;#39;s item points at a comments feed, each reply can point at its own, and the &lt;a href=&quot;https://github.com/scripting/rss.chat/tree/main/examples/threadwalker&quot;&gt;threadwalker&lt;/a&gt; example assembles a thread that way, one fetch per post, no API needed. Now there&amp;#39;s a second door: call &lt;code&gt;/getthread&lt;/code&gt; with a post&amp;#39;s guid (or id) and the server answers with the post&amp;#39;s item record plus a &lt;code&gt;replies&lt;/code&gt; array -- each reply the same shape, nested all the way down. You get the post you ask about and everything under it; ask about the root and you get the whole thread. It&amp;#39;s one call instead of many, it&amp;#39;s less work for the server than serving the walk, and it&amp;#39;s the same tree either way. No authentication -- it&amp;#39;s an open read, like all the reads. Documented in &lt;a href=&quot;https://github.com/scripting/rss.chat/blob/main/server/docs/api.md&quot;&gt;api.md&lt;/a&gt;, with a new example app, &lt;a href=&quot;https://github.com/scripting/rss.chat/tree/main/examples/getthread&quot;&gt;getthread&lt;/a&gt;, that prints a conversation as an indented outline in one call. (Server v0.6.4, running on rss.chat and demo.rss.chat now.)&lt;/p&gt;&#10;</description>
			<pubDate>Sat, 25 Jul 2026 15:15:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1784992500000/a-whole-conversation-in-one-call-getthread</guid>
			<category>server</category>
			</item>
		<item>
			<title>The hit counter now counts only rss.chat</title>
			<description>&lt;p&gt;When the app starts up it registers a hit, so there&amp;#39;s a running count of how much rss.chat is used. But everyone running their own server uses this same client -- and their visitors were being counted too, hits arriving from servers that aren&amp;#39;t ours. Now the client checks which server it&amp;#39;s serving and only counts when it&amp;#39;s on an rss.chat domain. If you run your own install, your traffic is yours alone. Fixed by DW. (Client v0.6.12.)&lt;/p&gt;&#10;</description>
			<pubDate>Sat, 25 Jul 2026 14:56:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1784991360000/the-hit-counter-now-counts-only-rss-chat</guid>
			<category>client</category>
			</item>
		<item>
			<title>These worknotes are a feed now</title>
			<description>&lt;p&gt;Subscribe to &lt;a href=&quot;https://news.rss.chat/worknotes/rss.xml&quot;&gt;https://news.rss.chat/worknotes/rss.xml&lt;/a&gt; and every improvement to rss.chat arrives as it ships -- the worknotes from the server and the client, together in one feed, newest first. Each item carries a category element saying which side it came from, so a reader that filters by category can follow just one. The feed announces updates over rssCloud, so subscribers who speak it hear within seconds. And in the spirit of a product built on RSS: the feed is generated by a script you can read, published right next to the feed itself -- &lt;a href=&quot;https://news.rss.chat/worknotes/worknotesFeed.belt&quot;&gt;worknotesFeed.belt&lt;/a&gt;. If you run an rss.chat server, this feed is the way to hear about updates like the security fix of 7/23 the moment they&amp;#39;re posted. You&amp;#39;re reading the first item that was born in the feed.&lt;/p&gt;&#10;</description>
			<pubDate>Fri, 24 Jul 2026 16:45:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1784911500000/these-worknotes-are-a-feed-now</guid>
			<category>server</category>
			</item>
		<item>
			<title>The Return key stopped breaking paragraphs at the wrong spot</title>
			<description>&lt;p&gt;A bug DW reported earlier but couldn&amp;#39;t reproduce finally showed itself: paste a chunk of text that includes a link, put the cursor somewhere later in the text, press Return -- and the break landed at the link instead of the cursor, tearing the link out onto its own line. The trick to reproducing it: it only ever happened on the &lt;em&gt;first&lt;/em&gt; Return after that kind of paste, never again in the same post -- which is exactly what made it so slippery. Now the break lands where the cursor is, and links stay in their sentences. (Theme v0.5.339.)&lt;/p&gt;&#10;</description>
			<pubDate>Thu, 23 Jul 2026 23:30:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1784849400000/the-return-key-stopped-breaking-paragraphs-at-the-wrong-spot</guid>
			<category>client</category>
			</item>
		<item>
			<title>A security fix -- posts are now cleaned as they're saved -- and the first update note of a new kind: how to bring a server you already run up to date</title>
			<description>&lt;p&gt;A post&amp;#39;s text is written by its author and then shown to everyone who reads the timeline, which means anything hidden inside it runs in every reader&amp;#39;s browser. Until today the server stored a post&amp;#39;s text exactly as it arrived, so a post could carry markup that did more than format words. As of server v0.6.3, every post passes through a cleaner on its way into the database. Ordinary writing comes through untouched -- links, bold and italic, quotes, lists, and pasted images are all kept -- but anything that could run code is removed before the post is ever stored. Because the cleaning happens as the post is written, it protects every reader of every feed and timeline at once, and no old or unusual browser can slip past it. Both public servers, rss.chat and demo.rss.chat, are already running it. Thanks to the reader who reported this privately.&lt;/p&gt;&#10;</description>
			<pubDate>Thu, 23 Jul 2026 14:06:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1784815560000/a-security-fix-posts-are-now-cleaned-as-they-re-saved-and-th</guid>
			<category>server</category>
			</item>
		<item>
			<title>Updating a server you already run</title>
			<description>&lt;p&gt;This is the first of a kind of note you&amp;#39;ll see here from now on: when a change matters to people running their own installs, the steps to update will live right here in worknotes. For this one:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;p&gt;Get the new &lt;code&gt;rssnetwork.js&lt;/code&gt; and &lt;code&gt;package.json&lt;/code&gt; from the repo.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;In your server&amp;#39;s folder, run &lt;code&gt;npm install&lt;/code&gt;. The updated &lt;code&gt;package.json&lt;/code&gt; adds one package -- the cleaner -- and this brings it in.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;Restart the server.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;That is the whole update. Nothing in your config or your database changes, and the cleaner applies to new and edited posts the moment you restart.&lt;/p&gt;&#10;</description>
			<pubDate>Thu, 23 Jul 2026 14:06:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1784815560000/updating-a-server-you-already-run</guid>
			<category>server</category>
			</item>
		<item>
			<title>Posts can carry images now, and the server stores and serves them itself</title>
			<description>&lt;p&gt;A new endpoint, &lt;code&gt;/uploadmedia&lt;/code&gt;, accepts an image from a signed-in user -- up to 2MB, sent base64-encoded in the request body with the content type as a parameter -- stores it in a new &lt;code&gt;media&lt;/code&gt; table in the database, and answers with the address it will be served from: &lt;code&gt;/media/1&lt;/code&gt;, &lt;code&gt;/media/2&lt;/code&gt;, and so on, permanent ids just like posts. Request that address and the image comes back byte-for-byte with the right content type. No filenames, no image processing, no separate file storage -- the picture lives in the same database as everything else, which means the same one-file simplicity on SQLite servers, and the same backup story: the export and import verbs carry the media table along (the bytes travel as text inside the JSON), so a migrated server keeps its images with their addresses intact. The table is called media rather than images on purpose -- one binary table can someday hold audio and video too, and the type column already tells them apart. MySQL servers get the table definition in &lt;a href=&quot;https://github.com/scripting/rss.chat/blob/main/server/docs/installMysql.md&quot;&gt;installMysql.md&lt;/a&gt;. The upload limit is a config setting, &lt;code&gt;maxMediaUploadBytes&lt;/code&gt;, 2MB by default. Under the hood, davesql (v0.7.1) learned to write binary values on both engines -- the last piece the feature needed. (Server v0.6.1.)&lt;/p&gt;&#10;</description>
			<pubDate>Wed, 22 Jul 2026 22:15:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1784758500000/posts-can-carry-images-now-and-the-server-stores-and-serves-</guid>
			<category>server</category>
			</item>
		<item>
			<title>Paste an image into a post -- that is the whole feature</title>
			<description>&lt;p&gt;Copy a screenshot or an image file to the clipboard, click into the composer, paste: a small &amp;quot;Uploading image...&amp;quot; note appears at the cursor and a moment later the picture takes its place, sized to fit the column. Publish it and the image is part of the post, served from your server like everything else you write. It works like Slack and GitHub -- no Upload command, no dialog, nothing to learn. The limit is 2MB per image; paste something bigger and a dialog says so. The Publish button waits politely until every pasted image has finished uploading, so a post can never go out with a half-arrived picture. Rich-text mode only for now -- markdown mode will get the same feature, inserting the image reference as text, over the same plumbing. First image posts in the wild: &lt;a href=&quot;https://demo.rss.chat/?id=228&quot;&gt;demo 227 and 228&lt;/a&gt; (&amp;quot;We have images.&amp;quot;) and &lt;a href=&quot;https://rss.chat/?id=378&quot;&gt;rss.chat 378&lt;/a&gt;. (Theme v0.5.338, with a new uploadMedia call in api.js by DW.)&lt;/p&gt;&#10;</description>
			<pubDate>Wed, 22 Jul 2026 22:15:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1784758500000/paste-an-image-into-a-post-that-is-the-whole-feature</guid>
			<category>client</category>
			</item>
		<item>
			<title>SQLite is now the default, everywhere</title>
			<description>&lt;p&gt;demo.rss.chat migrated this morning -- 58 users, 210 posts, 153 likes, 138 served files, five minutes -- so both public servers now run on one-file databases. davesql 0.7.0, the package carrying the engine, is published on npm. And the repo caught up with the reality: the example config.json ships with &lt;code&gt;&amp;quot;flUseSqlite&amp;quot;: true&lt;/code&gt;, &lt;a href=&quot;https://github.com/scripting/rss.chat/blob/main/server/docs/install.md&quot;&gt;install.md&lt;/a&gt; is now the SQLite install -- no database server, no schema to paste, a Backups section, and the six-step migration for existing MySQL servers -- while the whole MySQL story (config, schema, upgrade notes) moved to its own page, &lt;a href=&quot;https://github.com/scripting/rss.chat/blob/main/server/docs/installMysql.md&quot;&gt;installMysql.md&lt;/a&gt;. Dave announced it on &lt;a href=&quot;http://scripting.com/&quot;&gt;Scripting News&lt;/a&gt;. One lesson from the demo migration made it into the doc: if the import stops on a UNIQUE constraint error, the server touched the new empty database before the import ran -- delete the file and re-run.&lt;/p&gt;&#10;</description>
			<pubDate>Wed, 22 Jul 2026 15:30:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1784734200000/sqlite-is-now-the-default-everywhere</guid>
			<category>server</category>
			</item>
		<item>
			<title>The install docs also gained the piece that was missing: email</title>
			<description>&lt;p&gt;Sign-in is a magic link, so a new server can&amp;#39;t sign anyone in until it can send mail -- and nothing documented how. New page: &lt;a href=&quot;https://github.com/scripting/rss.chat/blob/main/server/docs/email.md&quot;&gt;email.md&lt;/a&gt; -- the four SMTP settings for sending through a provider you already use, or Amazon SES with a link to Scott Hanson&amp;#39;s setup walkthrough. It&amp;#39;s a step in the install checklist now, along with a link to &lt;a href=&quot;https://github.com/scripting/rss.chat/issues/17&quot;&gt;the questions thread&lt;/a&gt; -- if something in the install isn&amp;#39;t working or isn&amp;#39;t explained, that&amp;#39;s where to say so.&lt;/p&gt;&#10;</description>
			<pubDate>Wed, 22 Jul 2026 15:30:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1784734200000/the-install-docs-also-gained-the-piece-that-was-missing-emai</guid>
			<category>server</category>
			</item>
		<item>
			<title>rss.chat itself now runs on SQLite</title>
			<description>&lt;p&gt;This morning&amp;#39;s note said an rss.chat server &lt;em&gt;can&lt;/em&gt; run on SQLite; by this evening the flagship server &lt;em&gt;does&lt;/em&gt;. Both production servers were upgraded to the new software (v0.6.0) during the afternoon, running on MySQL exactly as before -- proof that the change disturbs nothing for existing installs. Then the migration itself: export the whole database to one JSON file, set &lt;code&gt;&amp;quot;flUseSqlite&amp;quot;: true&lt;/code&gt; in config.json, import, restart. All 752 rows -- 12 users, 361 posts, 217 likes, 162 served files -- came across with their ids intact, so every permalink still works, and the Software versions dialog now reads &amp;quot;SQLite version: v3.49.2.&amp;quot; The MySQL database was never written to during the switch, so rolling back would have been one config line -- it wasn&amp;#39;t needed. Total elapsed time, including a wrong turn when an unsaved config file sent the import to the wrong engine (it stopped harmlessly on the first duplicate row): about twenty minutes. demo.rss.chat follows tomorrow.&lt;/p&gt;&#10;</description>
			<pubDate>Wed, 22 Jul 2026 15:30:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1784734200000/rss-chat-itself-now-runs-on-sqlite</guid>
			<category>server</category>
			</item>
		<item>
			<title>A startup crash that wore two disguises</title>
			<description>&lt;p&gt;If you left the editor open with a draft when you last used the app, the next startup could crash quietly: the app tried to restore your draft before one of its writing tools -- the piece that turns rich text into markdown -- was ready. Everything after the crash never ran, and the damage showed up as two seemingly unrelated bugs: your name missing from the menu bar, and the Publish button refusing to enable while you typed in the body of a post (typing in the title, which takes a different path, still worked -- which is why the bug seemed to be about titles). It surfaced during the demo.rss.chat database migration this morning, was reproducible one minute and gone the next, and the last piece of the puzzle was browser caching: the fix was live but browsers kept running the old code until the cache-buster on the script address changed. Fixed by DW: the converter now starts first thing, and the script address was bumped so every browser picks up the cure. (Client v0.6.11.)&lt;/p&gt;&#10;</description>
			<pubDate>Wed, 22 Jul 2026 14:45:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1784731500000/a-startup-crash-that-wore-two-disguises</guid>
			<category>client</category>
			</item>
		<item>
			<title>The Software versions dialog now tells you which database engine the server runs on</title>
			<description>&lt;p&gt;Servers can now run on SQLite as well as MySQL (that&amp;#39;s the day&amp;#39;s big server-side story -- see the server worknotes), and the dialog&amp;#39;s last line follows along: it says &amp;quot;SQLite version&amp;quot; or &amp;quot;MySQL version&amp;quot; to match the actual engine, with the real version number either way. The server sends the engine name in a new &lt;code&gt;databaseEngine&lt;/code&gt; member of the user-data record, and the client reads it as of v0.6.10. First seen live on scratchpad.rss.chat, the first server running on SQLite.&lt;/p&gt;&#10;</description>
			<pubDate>Wed, 22 Jul 2026 14:45:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1784731500000/the-software-versions-dialog-now-tells-you-which-database-en</guid>
			<category>client</category>
			</item>
		<item>
			<title>An rss.chat server can now run on SQLite -- no MySQL, no database setup of any kind</title>
			<description>&lt;p&gt;One new member in config.json chooses the engine: &lt;code&gt;&amp;quot;database&amp;quot;: {&amp;quot;flUseSqlite&amp;quot;: true, &amp;quot;databaseFilePath&amp;quot;: &amp;quot;data/myserver.db&amp;quot;}&lt;/code&gt;. The database is a single file that creates itself, tables and all, the first time the server runs -- the install becomes download, npm install, run. Everything else is identical: same features, same feeds, same API, and a server that says nothing stays on MySQL exactly as before. The engine itself went into davesql (v0.7.0), where all the SQL expertise lives, so the same switch is available to every app built on it. The first server running this way is live at scratchpad.rss.chat -- sign-up, posting, replies, likes, and feeds, all served out of one file on a fresh droplet that has never heard of MySQL.&lt;/p&gt;&#10;</description>
			<pubDate>Tue, 21 Jul 2026 15:45:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1784648700000/an-rss-chat-server-can-now-run-on-sqlite-no-mysql-no-databas</guid>
			<category>server</category>
			</item>
		<item>
			<title>And every server now has a backup story: export and import</title>
			<description>&lt;p&gt;&lt;code&gt;node rssnetwork.js export backup.json&lt;/code&gt; writes the whole database -- users, posts, likes, feeds -- into one JSON file and exits without starting the web server; &lt;code&gt;node rssnetwork.js import backup.json&lt;/code&gt; loads that file into an empty server. Both work on either engine, which makes the pair the door between them: export from a MySQL server, import into a SQLite one, and the server&amp;#39;s whole history comes along -- posts keep their ids, so every permalink survives. The Software versions dialog now names the engine too, so a glance tells you what a server is running on.&lt;/p&gt;&#10;</description>
			<pubDate>Tue, 21 Jul 2026 15:45:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1784648700000/and-every-server-now-has-a-backup-story-export-and-import</guid>
			<category>server</category>
			</item>
		<item>
			<title>Three small courtesies for writers, all shipped today</title>
			<description>&lt;p&gt;Posts no longer carry blank lines at the end -- if your post trails off with empty paragraphs or stray Returns, the server trims them when it saves, so nothing renders as mysterious empty space below your last line (a new config setting, &lt;code&gt;flRemoveBlanksAtEnd&lt;/code&gt;, is on by default; set it false to keep trailing blanks). The autolinker learned that &lt;code&gt;install.md&lt;/code&gt; is a document&amp;#39;s name, not a web address -- bare names ending in a file extension that happens to be a real internet domain ending (.md, .zip, .sh, .py) stay plain text, while real addresses, including bare domains like rss.chat, still become links. And the server&amp;#39;s subscription list can now carry a title of your choosing: set &lt;code&gt;titleForSublist&lt;/code&gt; in config.json; leave it out and the title is unchanged.&lt;/p&gt;&#10;</description>
			<pubDate>Mon, 20 Jul 2026 21:45:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1784583900000/three-small-courtesies-for-writers-all-shipped-today</guid>
			<category>server</category>
			</item>
		<item>
			<title>The reply editor got out of your way</title>
			<description>&lt;p&gt;When you reply to a post, the editor used to lead with the post itself — the first few lines, taking up room, an eyesore you&amp;#39;d already read. Now it shows the author&amp;#39;s avatar and name, and under the name one quiet line: a wedge and &amp;quot;46 words.&amp;quot; Click the wedge and the whole post unfolds, click again and it tucks back away. It starts folded every time, because when you&amp;#39;re writing a reply, that&amp;#39;s really all you need — who you&amp;#39;re answering and how much they said, one click from the full text. (Theme v0.5.331–0.5.337.)&lt;/p&gt;&#10;</description>
			<pubDate>Mon, 20 Jul 2026 21:15:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1784582100000/the-reply-editor-got-out-of-your-way</guid>
			<category>client</category>
			</item>
		<item>
			<title>Software versions, in one place</title>
			<description>&lt;p&gt;Don Park asked for the version number in a tooltip, for telling a stale cached client from a current one. It went in a different door: the first command in the system menu, formerly About RSS.chat, is now &lt;strong&gt;Software versions&lt;/strong&gt; — one dialog with the server address and the versions of everything: server, client, theme, and MySQL. The theme version number that used to sit in the menu bar during rapid UI development is gone — it had one job, confirming you were running the latest theme, and the dialog now covers all of it. Work by DW; his reply to Don is &lt;a href=&quot;https://rss.chat/?id=353&quot;&gt;353&lt;/a&gt;.&lt;/p&gt;&#10;</description>
			<pubDate>Sun, 19 Jul 2026 17:00:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1784480400000/software-versions-in-one-place</guid>
			<category>client</category>
			</item>
		<item>
			<title>The goodnight dialog no longer leaves a dead app behind</title>
			<description>&lt;p&gt;When a fresh copy of the app signs on, the older copy puts up a dialog and stops listening — that&amp;#39;s the goodnight kiss, from two days ago. But if you dismissed that dialog by clicking outside it instead of clicking OK, the dialog went away and the app just sat there, disconnected. Now the page reloads no matter how the dialog is dismissed — OK, a click outside, or the Escape key all land you in the same place: a fresh copy of the app. (Client v0.6.8.)&lt;/p&gt;&#10;</description>
			<pubDate>Sun, 19 Jul 2026 14:15:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1784470500000/the-goodnight-dialog-no-longer-leaves-a-dead-app-behind</guid>
			<category>client</category>
			</item>
		<item>
			<title>The browser tab now shows your server's name</title>
			<description>&lt;p&gt;The home page&amp;#39;s title was hard-coded to &amp;quot;rss.chat&amp;quot; — every instance, whatever its name, said rss.chat in the tab. Now the title comes from the server&amp;#39;s &lt;code&gt;productNameForDisplay&lt;/code&gt; setting, so demo.rss.chat says demo.rss.chat, and your instance says whatever you named it. Work by DW.&lt;/p&gt;&#10;</description>
			<pubDate>Sat, 18 Jul 2026 18:30:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1784399400000/the-browser-tab-now-shows-your-server-s-name</guid>
			<category>client</category>
			</item>
		<item>
			<title>The `/feed` endpoint can now return the feed as JSON</title>
			<description>&lt;p&gt;As of server v0.5.32, &lt;code&gt;/feed&lt;/code&gt; takes a &lt;code&gt;format&lt;/code&gt; parameter: &lt;a href=&quot;https://rss.chat/feed?screenname=dave&quot;&gt;format=xml&lt;/a&gt; (the default) returns the RSS document as always, and &lt;a href=&quot;https://rss.chat/feed?screenname=dave&amp;amp;format=json&quot;&gt;format=json&lt;/a&gt; returns the same feed translated into JSON. The structure is &lt;code&gt;rss.channel.item&lt;/code&gt;, the names are RSS 2.0&amp;#39;s own names, every element -- &lt;code&gt;source:markdown&lt;/code&gt;, &lt;code&gt;source:inReplyTo&lt;/code&gt;, &lt;code&gt;source:comments&lt;/code&gt;, all of it -- exactly where the XML puts it. An unsupported format name gets an error naming the two real ones.&lt;/p&gt;&#10;</description>
			<pubDate>Sat, 18 Jul 2026 17:20:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1784395200000/the-feed-endpoint-can-now-return-the-feed-as-json</guid>
			<category>server</category>
			</item>
		<item>
			<title>threadwalker caught up with yesterday's feed change</title>
			<description>&lt;p&gt;Ricardo reported on &lt;a href=&quot;https://github.com/scripting/rss.chat/issues/14&quot;&gt;issue #14&lt;/a&gt; that the walker printed &lt;code&gt;?&lt;/code&gt; for every author -- it was still reading the item-level &lt;code&gt;source:account&lt;/code&gt; element that came out of the feeds yesterday. Now it reads what the feeds actually say: replies carry a core RSS &lt;code&gt;&amp;lt;source&amp;gt;&lt;/code&gt; element naming the author, and in a user&amp;#39;s own feed the channel says whose feed it is. Also fixed while in there: the walker&amp;#39;s starting feed still pointed at the old &lt;code&gt;users.rss.network&lt;/code&gt; address, which now answers with a redirect that Node&amp;#39;s bare &lt;code&gt;https.get&lt;/code&gt; won&amp;#39;t follow -- it points at &lt;code&gt;https://rss.chat/users/manton/rss.xml&lt;/code&gt; directly. Verified against the live thread: the whole conversation prints, every author named. A few doc examples still showing old feed addresses were updated to match.&lt;/p&gt;&#10;</description>
			<pubDate>Sat, 18 Jul 2026 16:45:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1784393100000/threadwalker-caught-up-with-yesterday-s-feed-change</guid>
			<category>server</category>
			</item>
		<item>
			<title>The firehose is now documented, with two working demo apps</title>
			<description>&lt;p&gt;Every rss.chat server broadcasts every new post, edit, and like over a websocket the moment it happens -- the same stream the shipped client uses to keep timelines current. As of today there&amp;#39;s a doc that tells you how to drink from it -- &lt;a href=&quot;https://github.com/scripting/rss.chat/blob/main/server/docs/firehose.md&quot;&gt;firehose.md&lt;/a&gt;: the address, the wire format, the two verbs, and the three things a well-behaved listener does -- and two demo apps in &lt;a href=&quot;https://github.com/scripting/rss.chat/blob/main/examples/firehose/&quot;&gt;examples/firehose&lt;/a&gt; that prove it: a Node command-line app that logs each post as it arrives, and a browser page that shows the JSON flowing through. Each is about a page of code, adapted from the &lt;a href=&quot;https://github.com/scripting/feedlandSocket&quot;&gt;feedlandSocket&lt;/a&gt; demos -- it&amp;#39;s the same protocol FeedLand uses, so a listener written for one can listen to the other. No account, no key: connect and the posts come to you.&lt;/p&gt;&#10;</description>
			<pubDate>Sat, 18 Jul 2026 15:30:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1784388600000/the-firehose-is-now-documented-with-two-working-demo-apps</guid>
			<category>server</category>
			</item>
		<item>
			<title>`source:account` moved to where the spec says it goes</title>
			<description>&lt;p&gt;Our feeds had been putting a &lt;code&gt;source:account&lt;/code&gt; element inside every item. The &lt;a href=&quot;https://source.scripting.com/&quot;&gt;source namespace&lt;/a&gt; defines it as a channel-level element — it says whose feed this is, not who wrote an item — and at the item level it was redundant anyway: in the mixed feeds, every item already carries a &lt;code&gt;&amp;lt;source&amp;gt;&lt;/code&gt; element with the author&amp;#39;s feed URL and name. As of today, each user&amp;#39;s own feed says it once, in the channel: &lt;code&gt;&amp;lt;source:account service=&amp;quot;rss.chat&amp;quot;&amp;gt;dave&amp;lt;/source:account&amp;gt;&lt;/code&gt;. The items carry it no more. The everyone feed and the comments feeds have no channel account — they have many authors, and their items keep &lt;code&gt;&amp;lt;source&amp;gt;&lt;/code&gt; for per-item attribution. If you&amp;#39;ve been reading the item-level element, read the channel-level one (single-author feeds) or &lt;code&gt;&amp;lt;source&amp;gt;&lt;/code&gt; (mixed feeds) instead. Already-published feeds keep the old shape until they next rebuild. The report that got this fixed is &lt;a href=&quot;https://github.com/scripting/rss.chat/issues/9&quot;&gt;issue #9&lt;/a&gt;. The channel-level support went into &lt;a href=&quot;https://www.npmjs.com/package/daverss&quot;&gt;daverss&lt;/a&gt;, the shared RSS-building package, as a new optional setting.&lt;/p&gt;&#10;</description>
			<pubDate>Fri, 17 Jul 2026 20:05:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1784318700000/-source-account-moved-to-where-the-spec-says-it-goes</guid>
			<category>server</category>
			</item>
		<item>
			<title>Only one copy of the app runs at a time now — the goodnight kiss</title>
			<description>&lt;p&gt;If you&amp;#39;re signed in and open the app in a second tab, or another browser, or another machine, the older copy puts up a friendly dialog: the app is running in another tab, click OK to reload this one, or close it, no work lost. This fixes a bug that bit quietly and repeatedly: a change you made in one place — say, the URL of your icon in settings — could be silently wiped when an older copy, still running with the old settings, saved over it. Now a stale copy stands down the moment a fresh one signs on, so your latest settings always win. When the app connects, it identifies you to the server, and the server sends a &amp;quot;goodnight&amp;quot; message to every other connection you have open — the name comes from that message. (Client v0.6.7.)&lt;/p&gt;&#10;</description>
			<pubDate>Fri, 17 Jul 2026 16:15:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1784304900000/only-one-copy-of-the-app-runs-at-a-time-now-the-goodnight-ki</guid>
			<category>client</category>
			</item>
		<item>
			<title>The home page now announces its own feed</title>
			<description>&lt;p&gt;Every server&amp;#39;s home page carries a feed auto-discovery link — the standard &lt;code&gt;&amp;lt;link rel=&amp;quot;alternate&amp;quot;&amp;gt;&lt;/code&gt; in the page head, pointing at that server&amp;#39;s everyone feed. Point a feed reader at the home page of rss.chat, or demo.rss.chat, or your own install, and it finds the feed by itself, no hunting for the URL. The address is filled in per-instance by a new home-page macro, &lt;code&gt;[%feedUrlEveryone%]&lt;/code&gt;, so the same template serves every server correctly. Work by DW.&lt;/p&gt;&#10;</description>
			<pubDate>Fri, 17 Jul 2026 14:15:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1784297700000/the-home-page-now-announces-its-own-feed</guid>
			<category>server</category>
			</item>
		<item>
			<title>The install doc learned from two real installs today</title>
			<description>&lt;p&gt;Scott Hanson tested the new database-mode instructions by having an AI agent do a fresh install on a throwaway server — it worked, and the one thing it had to hunt for became &lt;a href=&quot;https://github.com/scripting/rss.chat/issues/8&quot;&gt;issue #8&lt;/a&gt;: the doc never said what port to point a reverse proxy at. Fixed the same hour: step 8 of &lt;a href=&quot;https://github.com/scripting/rss.chat/blob/main/server/docs/install.md&quot;&gt;install.md&lt;/a&gt; now says the server listens on port 1420 (configurable via &lt;code&gt;port&lt;/code&gt; in config.json or the PORT environment variable) and websockets have their own port, 1422 (&lt;code&gt;websocketPort&lt;/code&gt;). Separately, for anyone upgrading an existing S3 server to database mode, the upgrade section gained the step we ourselves missed: a one-line SQL update that rewrites the old feed addresses stored with each post — without it, every rebuilt feed comes up empty. If you run a server from before today, that section is worth a read.&lt;/p&gt;&#10;</description>
			<pubDate>Thu, 16 Jul 2026 22:00:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1784239200000/the-install-doc-learned-from-two-real-installs-today</guid>
			<category>server</category>
			</item>
		<item>
			<title>A person's name now takes you to their posts</title>
			<description>&lt;p&gt;Clicking a name anywhere in the timeline used to open that person&amp;#39;s website in a new tab — surprising when what you wanted was to see what they&amp;#39;ve been posting. Now the name does what the avatar does: it shows their timeline, right in the app. Their website isn&amp;#39;t lost — it&amp;#39;s linked from their profile page. This came out of real use: Dave clicked a name expecting the person&amp;#39;s posts and landed on their homepage instead. (Theme v0.5.330.)&lt;/p&gt;&#10;</description>
			<pubDate>Thu, 16 Jul 2026 22:00:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1784239200000/a-person-s-name-now-takes-you-to-their-posts</guid>
			<category>client</category>
			</item>
		<item>
			<title>A feed icon on every post</title>
			<description>&lt;p&gt;Each post&amp;#39;s header now ends with a small feed symbol, right after the time: name · time · feed. Click it and the author&amp;#39;s feed opens — a real RSS 2.0 feed you can hand to any feed reader, no account needed, nothing to wait for. Hover it and the tooltip says whose feed it is, using the server&amp;#39;s own display name — on rss.chat, &amp;quot;Dave Winer&amp;#39;s rss.chat feed.&amp;quot; The icon is deliberately quiet: the same gray as the time next to it, not the traditional orange, because it belongs on every post without shouting from every post. Now each post is visibly connected to the author&amp;#39;s feed — which is the whole idea of the product, worn on its sleeve. Dave wrote it up on Scripting News: &lt;a href=&quot;http://scripting.com/2026/07/16/134247.html&quot;&gt;A feed icon on every post&lt;/a&gt;. (Theme v0.5.323–0.5.328.)&lt;/p&gt;&#10;</description>
			<pubDate>Thu, 16 Jul 2026 15:30:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1784215800000/a-feed-icon-on-every-post</guid>
			<category>client</category>
			</item>
		<item>
			<title>The Docs menu keeps growing</title>
			<description>&lt;p&gt;A new sub-menu links the docs for RSS and OPML — the two formats the product is built on, now a click away from the timeline. Later the same day: a Blog posts sub-menu, collecting the story so far — from &amp;quot;Can RSS be a social network?&amp;quot; through today&amp;#39;s feed icon.&lt;/p&gt;&#10;</description>
			<pubDate>Thu, 16 Jul 2026 15:30:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1784215800000/the-docs-menu-keeps-growing</guid>
			<category>client</category>
			</item>
		<item>
			<title>Tooltips moved home too</title>
			<description>&lt;p&gt;The hover tips on the left-panel icons — Home, New post, Feed, Data — used to appear off to the right, floating over the timeline, pointing at nothing in particular. They now appear directly below the icon and its word. (Theme v0.5.329.)&lt;/p&gt;&#10;</description>
			<pubDate>Thu, 16 Jul 2026 15:30:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1784215800000/tooltips-moved-home-too</guid>
			<category>client</category>
			</item>
		<item>
			<title>The biggest install hurdle is gone. Feeds can now live in the database, served by the server itself — no S3, no AWS account</title>
			<description>&lt;p&gt;A new config setting, &lt;code&gt;flFeedsInDatabase&lt;/code&gt;, turns it on. When it&amp;#39;s true, the server stores its RSS feeds and its subscription list in a new &lt;code&gt;files&lt;/code&gt; table and serves them from its own domain — your feed is at &lt;code&gt;https://yourserver/users/yourname/rss.xml&lt;/code&gt;, the subscription list at &lt;code&gt;https://yourserver/data/subs.opml&lt;/code&gt;, and the four feed-location settings from Monday&amp;#39;s note aren&amp;#39;t needed at all. When it&amp;#39;s false (the built-in default), nothing changes — S3 publishing works exactly as before.&lt;/p&gt;&#10;&lt;p&gt;Turning it on for an existing server is one restart: at startup the server backfills — rebuilds every user&amp;#39;s feed, every comments feed, and the everyone feed from the database, so the files are all there before the first request. Both of our servers, rss.chat and demo.rss.chat, made the switch today.&lt;/p&gt;&#10;&lt;p&gt;One thing the flag can&amp;#39;t do for you: subscribers still point at your old S3 addresses. The fix is a redirect where the old feed domain is served. Ours is one rule in the Caddyfile — every request to the old domain answers with a permanent redirect to the same path under rss.chat — and well-behaved feed readers update their stored addresses when they see a 301. Details in &lt;a href=&quot;https://github.com/scripting/rss.chat/blob/main/server/docs/install.md&quot;&gt;install.md&lt;/a&gt;, which now describes the database-mode install; S3 remains documented in &lt;a href=&quot;https://github.com/scripting/rss.chat/blob/main/server/docs/config.md&quot;&gt;config.md&lt;/a&gt; for those who want it.&lt;/p&gt;&#10;</description>
			<pubDate>Wed, 15 Jul 2026 21:15:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1784150100000/the-biggest-install-hurdle-is-gone-feeds-can-now-live-in-the</guid>
			<category>server</category>
			</item>
		<item>
			<title>You can select text in the timeline now</title>
			<description>&lt;p&gt;Until today the text of a post couldn&amp;#39;t be selected — to copy a phrase from your own post you had to open the editor, and for someone else&amp;#39;s post there was no way at all. Now post text selects like any text on any page: drag across it, copy it, quote it. The one wrinkle worth solving: clicking a long post is how you expand and collapse it, and a drag-select ends with a click — so the click that finishes a selection is ignored, and plain clicks still open and close the post the way they always have. (Theme v0.5.322.)&lt;/p&gt;&#10;</description>
			<pubDate>Wed, 15 Jul 2026 00:30:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1784075400000/you-can-select-text-in-the-timeline-now</guid>
			<category>client</category>
			</item>
		<item>
			<title>Server v0.5.27. The feed-location settings have no built-in defaults anymore</title>
			<description>&lt;p&gt;Yesterday&amp;#39;s note told how a new server that didn&amp;#39;t set its own S3 locations inherited defaults pointing at rss.chat&amp;#39;s folders. As of this version those defaults are gone: &lt;code&gt;rssS3Path&lt;/code&gt;, &lt;code&gt;rssFeedUrl&lt;/code&gt;, &lt;code&gt;opmlS3Path&lt;/code&gt;, and &lt;code&gt;opmlListUrl&lt;/code&gt; start as undefined, and your config.json supplies the real values — see &lt;a href=&quot;https://github.com/scripting/rss.chat/blob/main/server/docs/config.md#feeds-on-s3&quot;&gt;Feeds on S3&lt;/a&gt; in config.md. rss.chat&amp;#39;s own config now sets its four values explicitly, the same as every other install. (&lt;code&gt;rssFilename&lt;/code&gt; keeps its default, &lt;code&gt;rss.xml&lt;/code&gt; — that one is right for every server.)&lt;/p&gt;&#10;&lt;p&gt;A detail that made this easy to verify: the server rebuilds its subscription list, subs.opml, on startup. Restart with the new settings and the file appears at its new address right away — no waiting for a post to trigger a rebuild.&lt;/p&gt;&#10;</description>
			<pubDate>Tue, 14 Jul 2026 13:45:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1784036700000/server-v0-5-27-the-feed-location-settings-have-no-built-in-d</guid>
			<category>server</category>
			</item>
		<item>
			<title>There's a second server now — demo.rss.chat — and standing it up taught the docs some things</title>
			<description>&lt;p&gt;Dave installed it on a different machine, following &lt;a href=&quot;https://github.com/scripting/rss.chat/blob/main/server/docs/install.md&quot;&gt;install.md&lt;/a&gt; for real, start to finish. It&amp;#39;s open — no whitelist, anyone can join. Two lessons from the exercise, both now in the docs:&lt;/p&gt;&#10;&lt;p&gt;First, every server needs its own S3 locations for feeds. The install initially inherited the defaults, which point at rss.chat&amp;#39;s own folders — so the new server was overwriting the original&amp;#39;s feeds. config.md now has a &lt;a href=&quot;https://github.com/scripting/rss.chat/blob/main/server/docs/config.md#feeds-on-s3&quot;&gt;Feeds on S3&lt;/a&gt; section covering the four settings, and they&amp;#39;re in the example config.json so they&amp;#39;re on every installer&amp;#39;s list.&lt;/p&gt;&#10;&lt;p&gt;Second, websockets need a route in your reverse proxy. Live updates run over a websocket on their own port (&lt;code&gt;websocketPort&lt;/code&gt;), and the proxy in front of the server has to send upgrade requests there — with Caddy, that&amp;#39;s a matcher on your domain plus the Connection/Upgrade headers, proxying to that port. And if more than one of these apps runs behind the same proxy, each needs its own port. Until the route existed, the site worked fine and only live updates were missing — if new posts don&amp;#39;t appear without a reload, this is the first place to look.&lt;/p&gt;&#10;&lt;p&gt;Also new today: server v0.5.26 adds &lt;code&gt;blockedUsersList&lt;/code&gt; to config.json — an array of email addresses that can&amp;#39;t sign up, sign in, or post. It&amp;#39;s checked fresh from the file on every use, so adding an address takes effect immediately, no restart. Case doesn&amp;#39;t matter.&lt;/p&gt;&#10;</description>
			<pubDate>Mon, 13 Jul 2026 23:20:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1783984800000/there-s-a-second-server-now-demo-rss-chat-and-standing-it-up</guid>
			<category>server</category>
			</item>
		<item>
			<title>Links show up the moment you save them</title>
			<description>&lt;p&gt;The server now turns bare URLs into links when a post saves (the story is in the &lt;a href=&quot;https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md&quot;&gt;server worknotes&lt;/a&gt;), and the client keeps up: when you update a post, the copy in the timeline repaints from what the server actually saved, so the new links are clickable immediately — no reload needed. (Theme v0.5.321.)&lt;/p&gt;&#10;</description>
			<pubDate>Mon, 13 Jul 2026 14:15:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783952100000/links-show-up-the-moment-you-save-them</guid>
			<category>client</category>
			</item>
		<item>
			<title>Server v0.5.25. Bare URLs become links, automatically, when a post saves</title>
			<description>&lt;p&gt;Type or paste a web address into a post and it&amp;#39;s clickable when it publishes — no more selecting the text and reaching for the link button. The idea came from a user, &lt;a href=&quot;https://rss.chat/?id=248&quot;&gt;Don Park&lt;/a&gt;, the day before it shipped.&lt;/p&gt;&#10;&lt;p&gt;The work happens on the server, in &lt;code&gt;newPost&lt;/code&gt; and &lt;code&gt;updatePost&lt;/code&gt;, so every client gets it for free. The post&amp;#39;s text passes through the &lt;a href=&quot;https://www.npmjs.com/package/autolinker&quot;&gt;Autolinker&lt;/a&gt; package on its way to the database — it understands HTML, so it only touches plain text: a URL that&amp;#39;s already part of a link, or sitting inside an image tag, is left alone, and the link text is exactly what the writer typed. The stored markdown is untouched — the source stays as written; only the rendered text gets the links.&lt;/p&gt;&#10;</description>
			<pubDate>Mon, 13 Jul 2026 13:30:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1783949400000/server-v0-5-25-bare-urls-become-links-automatically-when-a-p</guid>
			<category>server</category>
			</item>
		<item>
			<title>The API has a doc now</title>
			<description>&lt;p&gt;&lt;a href=&quot;https://github.com/scripting/rss.chat/blob/main/server/docs/api.md&quot;&gt;api.md&lt;/a&gt;, new in server/docs, documents the HTTP interface between the rss.chat client and its server — every read and write call, the no-passwords email flow, the item record field by field, and the websocket verbs. The client that ships with the product is just one user of this API; the doc is for whoever wants to build the next one.&lt;/p&gt;&#10;&lt;p&gt;Also in server/docs: install.md&amp;#39;s &amp;quot;An AI can do this install&amp;quot; section moved to the end of the doc — it&amp;#39;s a good trick, but not the first thing a new host-runner needs to read.&lt;/p&gt;&#10;</description>
			<pubDate>Mon, 13 Jul 2026 03:55:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1783914900000/the-api-has-a-doc-now</guid>
			<category>server</category>
			</item>
		<item>
			<title>A deleted post can't crash its own comments feed anymore</title>
			<description>&lt;p&gt;There was a sequence that could bring down a feed rebuild: someone replies to a post, the author deletes the post, then the reply gets edited. Rebuilding the comments feed found the parent gone — deleted posts are filtered out of every query — and crashed trying to read it. Now the build answers the way this server always answers: &amp;quot;Can&amp;#39;t build the comments feed for post N because the post has been deleted.&amp;quot;&lt;/p&gt;&#10;&lt;p&gt;Also: this file moved from server/docs to server/code. Worknotes live with the code, because you need the worknotes to read the code.&lt;/p&gt;&#10;</description>
			<pubDate>Sun, 12 Jul 2026 15:50:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1783871400000/a-deleted-post-can-t-crash-its-own-comments-feed-anymore</guid>
			<category>server</category>
			</item>
		<item>
			<title>Sign-up and sign-in emails were going to spam. Fixed — no code change</title>
			<description>&lt;p&gt;The cause: &lt;code&gt;mailSender&lt;/code&gt; was a gmail.com address, but the mail actually goes out through Amazon SES, and Gmail sends mail to spam when the sending server isn&amp;#39;t authorized to send for the address&amp;#39;s domain — as policy, since 2024. The fix, useful to anyone deploying this server: verify your domain as an identity in the SES console (it hands you three DKIM CNAME records to add to your DNS), then set &lt;code&gt;mailSender&lt;/code&gt; in config.json to an address on that domain. It doesn&amp;#39;t need a real mailbox behind it — rss.chat now sends as &lt;a href=&quot;mailto:&amp;#104;&amp;#101;&amp;#x6c;&amp;#x6c;&amp;#111;&amp;#x40;&amp;#x72;&amp;#115;&amp;#115;&amp;#x2e;&amp;#99;&amp;#104;&amp;#x61;&amp;#116;&quot;&gt;&amp;#104;&amp;#101;&amp;#x6c;&amp;#x6c;&amp;#111;&amp;#x40;&amp;#x72;&amp;#115;&amp;#115;&amp;#x2e;&amp;#99;&amp;#104;&amp;#x61;&amp;#116;&lt;/a&gt;. Verification took minutes, and the first email after the change landed in the inbox.&lt;/p&gt;&#10;</description>
			<pubDate>Sat, 11 Jul 2026 23:45:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1783813500000/sign-up-and-sign-in-emails-were-going-to-spam-fixed-no-code-</guid>
			<category>server</category>
			</item>
		<item>
			<title>Home does it all now, and Surface is retired</title>
			<description>&lt;p&gt;Surface — the icon that pulled you out of a deep conversation back to your place in the timeline — lived less than two days, but it proved the idea. Now that lifeline is Home&amp;#39;s first stage: when you&amp;#39;re buried in a story, a profile, a flipped view, or an open conversation, clicking Home brings you back to the timeline with the cursor still on the post you were reading. Click it again and you&amp;#39;re at the top, everything reset, cursor on the newest post. It&amp;#39;s the same rhythm as the Home tab in the Twitter and Instagram apps — tap once to come back, tap again for the top — with one icon fewer to remember. (Theme v0.5.318–0.5.320, including a fix for a sneaky side effect: the icon panel used to shift a hair when the page scrolled, which could put a different icon under your mouse between the first click and the second.)&lt;/p&gt;&#10;</description>
			<pubDate>Sat, 11 Jul 2026 23:45:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783813500000/home-does-it-all-now-and-surface-is-retired</guid>
			<category>client</category>
			</item>
		<item>
			<title>Sign-in emails reach the inbox now</title>
			<description>&lt;p&gt;rss.chat&amp;#39;s confirmation emails had been landing in spam. The app now sends from &lt;a href=&quot;mailto:&amp;#104;&amp;#101;&amp;#108;&amp;#108;&amp;#x6f;&amp;#64;&amp;#114;&amp;#x73;&amp;#x73;&amp;#46;&amp;#99;&amp;#x68;&amp;#x61;&amp;#x74;&quot;&gt;&amp;#104;&amp;#101;&amp;#108;&amp;#108;&amp;#x6f;&amp;#64;&amp;#114;&amp;#x73;&amp;#x73;&amp;#46;&amp;#99;&amp;#x68;&amp;#x61;&amp;#x74;&lt;/a&gt;, and the domain is verified with Amazon SES, so Gmail and the rest can see the mail is really from us. The full story is in the &lt;a href=&quot;https://github.com/scripting/rss.chat/blob/main/server/docs/worknotes.md&quot;&gt;server worknotes&lt;/a&gt;.&lt;/p&gt;&#10;</description>
			<pubDate>Sat, 11 Jul 2026 23:45:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783813500000/sign-in-emails-reach-the-inbox-now</guid>
			<category>client</category>
			</item>
		<item>
			<description>&lt;p&gt;The server moved into the &lt;a href=&quot;https://github.com/scripting/rss.chat&quot;&gt;rss.chat repo&lt;/a&gt;. One repo for the whole product now, organized by part: the server&amp;#39;s code is at server/code, and these docs — install, config, and this file — are at server/docs. The software is unchanged; only the address is new.&lt;/p&gt;&#10;</description>
			<pubDate>Sat, 11 Jul 2026 16:50:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1783788600000/the-server-moved-into-the-rss-chat-repo-https-github-com-scr</guid>
			<category>server</category>
			</item>
		<item>
			<title>The repo has its real shape now</title>
			<description>&lt;p&gt;&lt;a href=&quot;https://github.com/scripting/rss.chat&quot;&gt;github.com/scripting/rss.chat&lt;/a&gt; is organized the way the product is: a client folder and a server folder, each with its own code and docs, and a new top-level &lt;a href=&quot;https://github.com/scripting/rss.chat/tree/main/examples&quot;&gt;examples&lt;/a&gt; folder for complete apps built on the APIs. The first example is &lt;em&gt;threadwalker&lt;/em&gt;, a small Node app that walks a whole conversation using nothing but the RSS feeds — no API calls, no account — and prints it as an indented outline.&lt;/p&gt;&#10;&lt;p&gt;These docs moved too. The basics doc is now the readme of &lt;a href=&quot;https://github.com/scripting/rss.chat/tree/main/client/docs&quot;&gt;client/docs&lt;/a&gt;, so it&amp;#39;s the first thing you see when you browse the folder, and the firehose documentation is a section inside it — one document, because the whole site is for developers.&lt;/p&gt;&#10;</description>
			<pubDate>Sat, 11 Jul 2026 16:50:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783788600000/the-repo-has-its-real-shape-now</guid>
			<category>client</category>
			</item>
		<item>
			<title>A post never shows twice</title>
			<description>&lt;p&gt;Opening a conversation with the wedge had a flaw: a reply might already be sitting in the timeline as its own post, so expanding its parent put the same words on screen twice. Now, when replies open under a post, any of them that were standing in the timeline fold into the conversation — every post appears exactly once. Close the wedge and they return to their places. If your cursor was on one of those posts, it follows it into the conversation. (Theme v0.5.316.)&lt;/p&gt;&#10;</description>
			<pubDate>Fri, 10 Jul 2026 21:07:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783717620000/a-post-never-shows-twice</guid>
			<category>client</category>
			</item>
		<item>
			<title>Home is the way out</title>
			<description>&lt;p&gt;Dave opened a conversation, read it, and then couldn&amp;#39;t see how to get back — the wedge that opens a thread goes light once it&amp;#39;s open, and light means &amp;quot;nothing to see here.&amp;quot; His instinct was the Home button, and it was disabled. That instinct is now the design: whenever a conversation is open in the timeline, Home lights up, and clicking it closes everything and returns you to the top — the same fresh timeline Home has always meant. (Theme v0.5.317.)&lt;/p&gt;&#10;</description>
			<pubDate>Fri, 10 Jul 2026 21:07:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783717620000/home-is-the-way-out</guid>
			<category>client</category>
			</item>
		<item>
			<title>The signup help text tells the truth</title>
			<description>&lt;p&gt;Don Park signed up — welcome! — and reported that the account-name help text said &amp;quot;Name must be 4 chars.&amp;quot; when longer names clearly work. The check was always a minimum; the words now say so: &amp;quot;Name must be at least 4 chars.&amp;quot; Dave applied the fix. The report also surfaced something the help text was covering for: nothing actually stops a too-short name from going through. That enforcement is on the todo list.&lt;/p&gt;&#10;</description>
			<pubDate>Fri, 10 Jul 2026 21:07:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783717620000/the-signup-help-text-tells-the-truth</guid>
			<category>client</category>
			</item>
		<item>
			<title>The left-panel labels are real now</title>
			<description>&lt;p&gt;The icon labels added yesterday were the theme&amp;#39;s guesses, mapped from icon names. Dave gave each icon a title of its own in the app&amp;#39;s data, and the theme now displays exactly those — theme designers get the app&amp;#39;s words, not their own inventions. Also new since this morning: the Home button knows when you&amp;#39;re already home, and disables itself. (Theme v0.5.315.)&lt;/p&gt;&#10;</description>
			<pubDate>Fri, 10 Jul 2026 21:07:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783717620000/the-left-panel-labels-are-real-now</guid>
			<category>client</category>
			</item>
		<item>
			<title>Surface</title>
			<description>&lt;p&gt;A new icon in the left panel, and the missing half of yesterday&amp;#39;s wedge. The wedge takes you down into a conversation; Surface brings you back up. Wherever you&amp;#39;ve gotten to — a story page, a profile, the flipped view — one click returns you to the timeline with the cursor on the post you were just reading, scrolled into view. It&amp;#39;s not Home: Home takes you to the top and starts fresh, Surface puts you back exactly where you left off. Dave&amp;#39;s reaction on first click: it&amp;#39;s a lifeline, for when you&amp;#39;re buried in something and just want out. Announced on rss.chat in &lt;a href=&quot;https://rss.chat/?id=216&quot;&gt;post 216&lt;/a&gt; — written by Claude, reviewed word for word by Dave before it posted, which is the standing rule for anything published from the claude account. (Theme v0.5.312.)&lt;/p&gt;&#10;</description>
			<pubDate>Fri, 10 Jul 2026 16:48:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783702080000/surface</guid>
			<category>client</category>
			</item>
		<item>
			<title>A link to a reply now shows the reply</title>
			<description>&lt;p&gt;Clicking a post&amp;#39;s timestamp used to do something surprising when the post was a reply: instead of the post you asked for, you got its parent&amp;#39;s page with your post nested inside it. Now every post&amp;#39;s link shows that post as its own page, with its replies below — and &amp;quot;Replying to&amp;quot; at the top is the way up to the parent, one step at a time. This came directly out of real use: Dave wanted to link to a particular reply from a blog post, clicked its timestamp, and landed somewhere confusing. With the wedge to go down and Surface to come back up, the post itself is the right place to land. (Theme v0.5.313–314.)&lt;/p&gt;&#10;</description>
			<pubDate>Fri, 10 Jul 2026 16:48:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783702080000/a-link-to-a-reply-now-shows-the-reply</guid>
			<category>client</category>
			</item>
		<item>
			<title>Tooltips came home</title>
			<description>&lt;p&gt;The hover tips on the left-panel icons were appearing far off to the right, floating in empty space. The panel was much wider than its labels needed, and the tips hang off the panel&amp;#39;s far edge. The panel now fits its contents: the tips appear right beside the icons, and the whole icon column sits closer to the timeline.&lt;/p&gt;&#10;</description>
			<pubDate>Fri, 10 Jul 2026 16:48:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783702080000/tooltips-came-home</guid>
			<category>client</category>
			</item>
		<item>
			<description>&lt;p&gt;&lt;code&gt;/getiteminfo&lt;/code&gt; joined &lt;code&gt;/getitembyguid&lt;/code&gt; in robots.txt&amp;#39;s Disallow list — both calls serve individual posts on demand, and we&amp;#39;d rather aggressive crawlers not treat them as an invitation to walk the whole database one post at a time. Feeds remain the front door, and they&amp;#39;re static files on S3.&lt;/p&gt;&#10;</description>
			<pubDate>Thu, 09 Jul 2026 22:16:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1783635360000/-getiteminfo-joined-getitembyguid-in-robots-txt-s-disallow-l</guid>
			<category>server</category>
			</item>
		<item>
			<title>The wedge</title>
			<description>&lt;p&gt;Every post now carries a small wedge just left of its comment icon, and it answers a question the timeline never could: is there more underneath? A dark wedge means the post has replies you aren&amp;#39;t seeing — click it and they open right there, nested under the post, with everything else on screen staying put. Click again and they fold away. Each opened reply has its own wedge, so a deep conversation unfolds level by level, as far down as you care to go. A light wedge means don&amp;#39;t bother clicking — nothing hidden. No spinning, no pointing down when open: the shade is the whole signal, an idea borrowed from outliners going back to Frontier, where it&amp;#39;s worked without complaint for decades. If you&amp;#39;ve used Drummer, or the blogroll on scripting.com, your eye already knows how to read it.&lt;/p&gt;&#10;</description>
			<pubDate>Thu, 09 Jul 2026 22:16:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783635360000/the-wedge</guid>
			<category>client</category>
			</item>
		<item>
			<title>The left column grew up</title>
			<description>&lt;p&gt;The icons on the left — Home, New post, Feed, Flip, Data — now show their names next to them, in the style of the sidebars in Claude and ChatGPT. Same icons, same behavior, much easier to learn. (Theme v0.5.311.)&lt;/p&gt;&#10;</description>
			<pubDate>Thu, 09 Jul 2026 22:16:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783635360000/the-left-column-grew-up</guid>
			<category>client</category>
			</item>
		<item>
			<title>The like count that said -1</title>
			<description>&lt;p&gt;A heart under a post briefly showed a like count of minus one — the server always had the right number, but the copy on screen was doing arithmetic on stale information. The cause: a post can be on screen in more than one place at once (the timeline, its own story page), and when likes changed, only one of those copies got the news. Now every visible copy of a post updates together, and the count on screen can never go below zero. (Theme v0.5.307.)&lt;/p&gt;&#10;</description>
			<pubDate>Thu, 09 Jul 2026 22:16:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783635360000/the-like-count-that-said-1</guid>
			<category>client</category>
			</item>
		<item>
			<description>&lt;p&gt;Server v0.5.23. There&amp;#39;s a new call, &lt;code&gt;/getiteminfo&lt;/code&gt; — it answers the question a feed can&amp;#39;t: what&amp;#39;s at the other end of a &lt;code&gt;source:inReplyTo&lt;/code&gt; link. Give it the address of any post and it returns the post as JSON.&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;&#10;curl &amp;quot;https://rss.chat/getiteminfo?guid=https://rss.chat/?id=204&amp;quot;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;You can pass &lt;code&gt;id=204&lt;/code&gt; instead of the guid if you have the post number. There are two formats, chosen with the &lt;code&gt;format&lt;/code&gt; param:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;p&gt;&lt;code&gt;rss&lt;/code&gt;, the default — the item in feed vocabulary: description, guid, account, inReplyTo, comments and source, the same names and structures you see in our feeds. If you can read the feeds, you already know how to read this.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;&lt;code&gt;feedland&lt;/code&gt; — the internal record, the same structure our firehose broadcasts, compatible with FeedLand. Flatter, with ids and counts you can use directly.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Asking for a format that doesn&amp;#39;t exist gets an error saying so, and asking for a deleted post gets the standard &lt;em&gt;Can&amp;#39;t view the post because it has been deleted.&lt;/em&gt; — errors are always an object with a &lt;code&gt;message&lt;/code&gt; property.&lt;/p&gt;&#10;&lt;p&gt;There&amp;#39;s also a new place to start reading about all of this: &lt;a href=&quot;https://source.scripting.com/social.opml&quot;&gt;RSS as a social network&lt;/a&gt;, a walkthrough that tells the story of one real conversation — a post, its replies, and the feeds that connect them — one element at a time.&lt;/p&gt;&#10;</description>
			<pubDate>Thu, 09 Jul 2026 17:10:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1783617000000/server-v0-5-23-there-s-a-new-call-getiteminfo-it-answers-the</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;Server v0.5.21. Comments feeds are live — the feature previewed in the last entry shipped today, and its first real thread was Manton Reece saying hello.&lt;/p&gt;&#10;&lt;p&gt;Here&amp;#39;s how it works. Any post that has replies now carries a new element in its feed item:&lt;/p&gt;&#10;&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&#10;&amp;lt;source:comments count=&amp;quot;1&amp;quot; feedUrl=&amp;quot;https://users.rss.network/manton/comments/204.xml&amp;quot;/&amp;gt;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;The &lt;code&gt;count&lt;/code&gt; says how many direct replies the post has; the &lt;code&gt;feedUrl&lt;/code&gt; points at a small RSS feed containing them. That comments feed is a static file on S3, published alongside the user feeds, and its items are ordinary items — description, pubDate, guid, &lt;code&gt;source:markdown&lt;/code&gt;, &lt;code&gt;source:inReplyTo&lt;/code&gt; pointing back up at the parent. When a reply has replies of its own, its item carries its own &lt;code&gt;source:comments&lt;/code&gt;, so an entire conversation is traversable from the feeds alone, one level at a time, every level the same shape.&lt;/p&gt;&#10;&lt;p&gt;Because a comments feed mixes authors, each of its items also carries RSS core&amp;#39;s &lt;code&gt;&amp;lt;source&amp;gt;&lt;/code&gt; element for attribution:&lt;/p&gt;&#10;&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&#10;&amp;lt;source url=&amp;quot;https://users.rss.network/dave/rss.xml&amp;quot;&amp;gt;Dave Winer&amp;lt;/source&amp;gt;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;— the author&amp;#39;s display name and the address of their home feed. The everyone feed, which mixes authors the same way, now carries &lt;code&gt;&amp;lt;source&amp;gt;&lt;/code&gt; on its items too.&lt;/p&gt;&#10;&lt;p&gt;The feeds rebuild automatically: adding, editing, or deleting a reply republishes the parent post&amp;#39;s comments feed, and also the parent author&amp;#39;s own feed, since the count on their post just changed. Live example, the first thread: &lt;a href=&quot;https://users.rss.network/manton/rss.xml&quot;&gt;manton&amp;#39;s feed&lt;/a&gt; → &lt;a href=&quot;https://users.rss.network/manton/comments/204.xml&quot;&gt;the comments feed for post 204&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Later the same day, two finishing touches. A backfill published comments feeds for all 74 existing conversations, so every feedUrl the feeds advertise now resolves — including the threads that predate the feature. And a subtle case is covered: when you reply to a reply, the middle post&amp;#39;s comment count now updates in its parent&amp;#39;s comments feed too, so a program walking the tree never hits a level that doesn&amp;#39;t know about the one below it. (That one was found by writing a demo app against the feeds — the tree is now walkable all the way down, and we&amp;#39;ve done it.) &lt;code&gt;source:comments&lt;/code&gt; is documented in the &lt;a href=&quot;https://source.scripting.com/&quot;&gt;source namespace&lt;/a&gt;.&lt;/p&gt;&#10;</description>
			<pubDate>Wed, 08 Jul 2026 14:50:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1783522200000/server-v0-5-21-comments-feeds-are-live-the-feature-previewed</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;Server v0.5.19. Deleted posts are no longer served. Requesting a deleted post by its permalink now returns an error object with a plain-English message — &lt;em&gt;Can&amp;#39;t view the post because it has been deleted.&lt;/em&gt; — instead of the post&amp;#39;s content. If you&amp;#39;re building on the API, this is the shape all our errors take: an object with a &lt;code&gt;message&lt;/code&gt; property.&lt;/p&gt;&#10;&lt;p&gt;Server v0.5.20. Every feed the server generates now carries &lt;code&gt;&amp;lt;source:self&amp;gt;&lt;/code&gt; — the feed&amp;#39;s own address, so a feed that&amp;#39;s been copied or re-served can always say where it canonically lives. It&amp;#39;s part of the &lt;a href=&quot;https://source.scripting.com/&quot;&gt;source namespace&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Coming next: comments feeds. Any post with replies will point, from its item in the feed, to a small RSS feed containing those replies — and replies with replies point onward the same way, so a whole conversation will be traversable from the feeds alone. The design is settled; the code is next.&lt;/p&gt;&#10;</description>
			<pubDate>Tue, 07 Jul 2026 17:55:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1783446900000/server-v0-5-19-deleted-posts-are-no-longer-served-requesting</guid>
			<category>server</category>
			</item>
		<item>
			<title>Posts that wouldn't open, fixed</title>
			<description>&lt;p&gt;Sometimes clicking a long post to expand it did nothing — most often on posts with images. The app was deciding whether a post needed a &amp;quot;click to expand&amp;quot; before its images had finished loading, and once it decided no, the decision was permanent. Now it decides at the moment you click, so a clipped post always opens.&lt;/p&gt;&#10;</description>
			<pubDate>Tue, 07 Jul 2026 17:55:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783446900000/posts-that-wouldn-t-open-fixed</guid>
			<category>client</category>
			</item>
		<item>
			<title>Deleted posts now say so</title>
			<description>&lt;p&gt;Following a link to a deleted post used to show the post as if nothing had happened — deleted things shouldn&amp;#39;t linger. Now the page says plainly: &lt;em&gt;Can&amp;#39;t view the post because it has been deleted.&lt;/em&gt; You&amp;#39;ll also land there if you click &amp;quot;Replying to&amp;quot; under a reply whose parent was deleted — an honest answer instead of a dead end.&lt;/p&gt;&#10;</description>
			<pubDate>Tue, 07 Jul 2026 17:55:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783446900000/deleted-posts-now-say-so</guid>
			<category>client</category>
			</item>
		<item>
			<title>The theme's name and version now live in the upper right</title>
			<description>&lt;p&gt;— currently &amp;quot;Classic v0.5.306&amp;quot; — and clicking it opens the About dialog with all the version numbers. Also, theme updates now reach your browser as soon as they ship; previously your browser could quietly hold onto an old copy for a while.&lt;/p&gt;&#10;</description>
			<pubDate>Tue, 07 Jul 2026 17:55:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783446900000/the-theme-s-name-and-version-now-live-in-the-upper-right</guid>
			<category>client</category>
			</item>
		<item>
			<title>Headings and code get the same care quotes got</title>
			<description>&lt;p&gt;After the quote work landed, we audited every kind of HTML a post can contain, looking for others still wearing framework defaults. Two more needed attention. Headings now have real hierarchy — a big heading is bigger than a small one, and both stand apart from bolded body text; until now h1 through h4 all rendered identically. And code finally reads as code: inline code and code blocks render in a small monospaced face, borrowed directly from WordLand&amp;#39;s stylesheet — which, it turns out, has quietly held the answer to most of this week&amp;#39;s questions. To see everything in one place, there&amp;#39;s a demo post: &lt;a href=&quot;https://rss.chat/?id=197&quot;&gt;The full palette&lt;/a&gt;.&lt;/p&gt;&#10;</description>
			<pubDate>Tue, 07 Jul 2026 17:55:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783446900000/headings-and-code-get-the-same-care-quotes-got</guid>
			<category>client</category>
			</item>
		<item>
			<title>Quoted text finally looks right</title>
			<description>&lt;p&gt;Blockquotes used to render in Bootstrap&amp;#39;s default dress — oversized, oddly spaced, a thick gray bar. Now a quote reads in exactly the same type as the rest of the post, set off by a thin rule with real breathing room, the text slightly muted to say &amp;quot;these are someone else&amp;#39;s words.&amp;quot; We tried three looks live before landing on this one, and the final recipe came out of a collaboration: Dave took the question to a second Claude conversation for an independent opinion, brought back its design, and we shipped it verbatim. It also fixed something subtle we&amp;#39;d missed — Bootstrap styles the paragraphs &lt;em&gt;inside&lt;/em&gt; a quote separately, in a lighter weight, which is why quotes never quite matched no matter what the quote block itself was told to do.&lt;/p&gt;&#10;</description>
			<pubDate>Mon, 06 Jul 2026 16:28:33 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783355313000/quoted-text-finally-looks-right</guid>
			<category>client</category>
			</item>
		<item>
			<title>Replies with titles, and long markdown posts, verified</title>
			<description>&lt;p&gt;The two fixes from this morning&amp;#39;s notes were tested in the live app — a reply&amp;#39;s title arrives intact, and a long post in Markdown mode scrolls inside its box with the buttons in view.&lt;/p&gt;&#10;</description>
			<pubDate>Mon, 06 Jul 2026 16:28:33 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783355313000/replies-with-titles-and-long-markdown-posts-verified</guid>
			<category>client</category>
			</item>
		<item>
			<description>&lt;p&gt;A big day for writers — the editor was rebuilt underneath, and a batch of everyday annoyances got fixed.&lt;/p&gt;&#10;</description>
			<pubDate>Mon, 06 Jul 2026 14:03:07 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783346587000/a-big-day-for-writers-the-editor-was-rebuilt-underneath-and-</guid>
			<category>client</category>
			</item>
		<item>
			<title>The editor now keeps your text as Markdown, permanently</title>
			<description>&lt;p&gt;Until now the editor had one writing surface that converted its contents in place every time you switched between the wizzy view and Markdown mode — and every conversion was a chance to lose something. Text inside angle brackets could vanish, adjacent lists could tangle together, and each additional flip made things worse. Now it works the way WordLand&amp;#39;s editor always has: your Markdown text is the real document, Markdown mode is a plain text box editing exactly that text, and the wizzy view is a rendering of it. Flip between them as much as you like — flipping alone never changes a character. Dave wrote about the change &lt;a href=&quot;https://rss.chat/?id=190&quot;&gt;here&lt;/a&gt;. Two things you&amp;#39;ll notice: in Markdown mode, Enter types a plain line break now, like any text box, and a long post scrolls inside the box instead of pushing the buttons off the screen. And the power move that used to fail — dropping into Markdown mode to add something special, like an &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; tag — works now.&lt;/p&gt;&#10;</description>
			<pubDate>Mon, 06 Jul 2026 14:03:07 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783346587000/the-editor-now-keeps-your-text-as-markdown-permanently</guid>
			<category>client</category>
			</item>
		<item>
			<title>Replies can carry titles</title>
			<description>&lt;p&gt;Adding a title to a reply used to look like it worked, but the title was silently dropped when you published. Now it goes through, same as on a regular post.&lt;/p&gt;&#10;</description>
			<pubDate>Mon, 06 Jul 2026 14:03:07 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783346587000/replies-can-carry-titles</guid>
			<category>client</category>
			</item>
		<item>
			<title>Titles show bold while you write them</title>
			<description>&lt;p&gt;That&amp;#39;s how titles look.&lt;/p&gt;&#10;</description>
			<pubDate>Mon, 06 Jul 2026 14:03:07 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783346587000/titles-show-bold-while-you-write-them</guid>
			<category>client</category>
			</item>
		<item>
			<title>Deleting a post takes you home</title>
			<description>&lt;p&gt;Deleting from a post&amp;#39;s own page used to leave the dead post on your screen. Now you land back on the home timeline and it&amp;#39;s gone.&lt;/p&gt;&#10;</description>
			<pubDate>Mon, 06 Jul 2026 14:03:07 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783346587000/deleting-a-post-takes-you-home</guid>
			<category>client</category>
			</item>
		<item>
			<title>The editor stays put while you select text</title>
			<description>&lt;p&gt;Selecting with a swipe that drifted past the editor&amp;#39;s edge used to make the whole editor vanish — very jarring. It doesn&amp;#39;t anymore; only a deliberate click outside dismisses it.&lt;/p&gt;&#10;</description>
			<pubDate>Mon, 06 Jul 2026 14:03:07 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783346587000/the-editor-stays-put-while-you-select-text</guid>
			<category>client</category>
			</item>
		<item>
			<title>Long posts don't jump when you like them</title>
			<description>&lt;p&gt;Clicking the heart (or finishing an edit) on a long, collapsed post used to snap it fully open, throwing the icons far down the screen. A post now keeps its collapsed state when it updates.&lt;/p&gt;&#10;</description>
			<pubDate>Mon, 06 Jul 2026 14:03:07 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783346587000/long-posts-don-t-jump-when-you-like-them</guid>
			<category>client</category>
			</item>
		<item>
			<title>Delete is only offered on your own posts</title>
			<description>&lt;p&gt;The Delete command in a post&amp;#39;s popup menu is now disabled on everyone else&amp;#39;s.&lt;/p&gt;&#10;</description>
			<pubDate>Mon, 06 Jul 2026 14:03:07 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783346587000/delete-is-only-offered-on-your-own-posts</guid>
			<category>client</category>
			</item>
		<item>
			<description>&lt;p&gt;In the RSS feeds the server generates, a reply&amp;#39;s &lt;code&gt;&amp;lt;source:inReplyTo&amp;gt;&lt;/code&gt; element now carries the parent post&amp;#39;s actual permalink, for example &lt;code&gt;https://rss.chat/?id=163&lt;/code&gt;. Follow the link and you&amp;#39;re looking at the post being replied to. Before this, the element pointed at a &lt;code&gt;/parent&lt;/code&gt; URL that was never implemented, so the link led nowhere. If you&amp;#39;re building on the feeds, this means reply threads are now traversable from the feed alone. (Server v0.5.18.)&lt;/p&gt;&#10;</description>
			<pubDate>Sun, 05 Jul 2026 04:00:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1783224000000/in-the-rss-feeds-the-server-generates-a-reply-s-source-inrep</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;First entry in these worknotes. From here on, when something changes in rss.chat, this is where we tell you about it — what changed, and how to use it. Newest notes at the top.&lt;/p&gt;&#10;&lt;p&gt;The &lt;a href=&quot;https://github.com/scripting/rss.chat&quot;&gt;rss.chat repo&lt;/a&gt; went public today. It contains the full source of the client — how it calls the API, its side of the firehose socket, and the themes. Questions are welcome in the &lt;a href=&quot;https://github.com/scripting/rss.chat/issues&quot;&gt;Issues section&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;If you&amp;#39;re signed out, the icons that need an account — compose, your feed, your data — are now disabled instead of silently doing nothing or leading you somewhere broken. The flip between timeline views still works signed out, because reading doesn&amp;#39;t require an account. (App version 0.6.4.)&lt;/p&gt;&#10;&lt;p&gt;In the RSS feeds we generate, a reply now points at its parent post&amp;#39;s real permalink. See the rss.network worknotes for the story.&lt;/p&gt;&#10;</description>
			<pubDate>Sun, 05 Jul 2026 04:00:00 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/client/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/client/1783224000000/first-entry-in-these-worknotes-from-here-on-when-something-c</guid>
			<category>client</category>
			</item>
		<item>
			<description>&lt;p&gt;Switching to just maintaining the server, the client is managed in rss.chat repo.&lt;/p&gt;&#10;&lt;p&gt;Changes&lt;/p&gt;&#10;&lt;p&gt;took the &amp;quot;testing/&amp;quot; out of the path for this project. &lt;/p&gt;&#10;&lt;p&gt;/scripting.com/code/testing/rssnetwork/ becomes /scripting.com/code/rssnetwork/&lt;/p&gt;&#10;&lt;p&gt;all the work was in the build script&lt;/p&gt;&#10;&lt;p&gt;nodeEditorSuite.utilities.buildRssNetwork&lt;/p&gt;&#10;&lt;p&gt;How to save a copy for Claude to read.&lt;/p&gt;&#10;&lt;p&gt;file.writewholefile (user.prefs.claudeFolder + &amp;quot;rssNetwork:misc:buildRssNetwork.opml&amp;quot;, op.outlinetoxml (@config.nodeEditor.projects.rssNetwork.scripts))&lt;/p&gt;&#10;</description>
			<pubDate>Fri, 03 Jul 2026 13:04:53 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1783083893000/switching-to-just-maintaining-the-server-the-client-is-manag</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;new columns in the users table&lt;/p&gt;&#10;&lt;p&gt;ctHits, ctHitsToday, whenLastHit&lt;/p&gt;&#10;&lt;p&gt;when the user calls savePrefs, we &lt;/p&gt;&#10;&lt;p&gt;if now not in the same day as whenLastHit  &lt;/p&gt;&#10;&lt;p&gt;ctHitsToday++&lt;/p&gt;&#10;&lt;p&gt;ctHits++&lt;/p&gt;&#10;&lt;p&gt;set whenLastHit to now&lt;/p&gt;&#10;&lt;p&gt;this will give us a way to see who&amp;#39;s using the system most &lt;/p&gt;&#10;&lt;p&gt;really important in startup mode&lt;/p&gt;&#10;</description>
			<pubDate>Wed, 01 Jul 2026 14:19:38 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1782915578000/new-columns-in-the-users-table-cthits-cthitstoday-whenlasthi</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;In myAboutDialog we were referencing the version for daveAppserver, changed it so it&amp;#39;s now referring to the correct version for rssnetwork.js.&lt;/p&gt;&#10;</description>
			<pubDate>Wed, 01 Jul 2026 13:06:54 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1782911214000/in-myaboutdialog-we-were-referencing-the-version-for-daveapp</guid>
			<category>server</category>
			</item>
		</channel>
	</rss>
