<?xml version="1.0" encoding="UTF-8"?>
<!-- RSS generated by worknotesFeed.belt on Fri, 24 Jul 2026 17:53:38 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>Fri, 24 Jul 2026 16:45:00 GMT</pubDate>
		<language>en-us</language>
		<generator>worknotesFeed.belt</generator>
		<lastBuildDate>Fri, 24 Jul 2026 17:53:38 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>Fri, July 24, 2026 1:53 PM EDT</source:localTime>
		<source:self>https://news.rss.chat/worknotes/rss.xml</source:self>
		<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;#x68;&amp;#x65;&amp;#108;&amp;#108;&amp;#111;&amp;#64;&amp;#x72;&amp;#115;&amp;#x73;&amp;#x2e;&amp;#x63;&amp;#104;&amp;#x61;&amp;#x74;&quot;&gt;&amp;#x68;&amp;#x65;&amp;#108;&amp;#108;&amp;#111;&amp;#64;&amp;#x72;&amp;#115;&amp;#x73;&amp;#x2e;&amp;#x63;&amp;#104;&amp;#x61;&amp;#x74;&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;#x6c;&amp;#111;&amp;#64;&amp;#x72;&amp;#115;&amp;#x73;&amp;#x2e;&amp;#x63;&amp;#104;&amp;#97;&amp;#116;&quot;&gt;&amp;#104;&amp;#101;&amp;#108;&amp;#x6c;&amp;#111;&amp;#64;&amp;#x72;&amp;#115;&amp;#x73;&amp;#x2e;&amp;#x63;&amp;#104;&amp;#97;&amp;#116;&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>
		<item>
			<description>&lt;p&gt;Changed how permalinks work.&lt;/p&gt;&#10;&lt;p&gt;We no longer store a guid value in the database, instead we compute it when we need it.&lt;/p&gt;&#10;&lt;p&gt;The format of the url changed to: &lt;a href=&quot;https://rss.network/?idstory=1402&quot;&gt;https://rss.network/?idstory=1402&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Commented all the feedland links, we no longer depend on a feedland running behind our server.&lt;/p&gt;&#10;</description>
			<pubDate>Sat, 20 Jun 2026 15:06:05 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1781967965000/changed-how-permalinks-work-we-no-longer-store-a-guid-value-</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;Commented implementation of signupDialog here, and will include the version in FeedLand Home. So that&amp;#39;s the official version.&lt;/p&gt;&#10;</description>
			<pubDate>Thu, 18 Jun 2026 15:13:06 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1781795586000/commented-implementation-of-signupdialog-here-and-will-inclu</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;Fixed various high errors reported by Claude.&lt;/p&gt;&#10;</description>
			<pubDate>Thu, 04 Jun 2026 14:37:09 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1780583829000/fixed-various-high-errors-reported-by-claude-</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;Flattened rssHeadElements in config. If we leave it as a structure, then a config.json file has to change all the values to change on.&lt;/p&gt;&#10;</description>
			<pubDate>Wed, 03 Jun 2026 21:09:28 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1780520968000/flattened-rssheadelements-in-config-if-we-leave-it-as-a-stru</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;Added default font and fontsize in body element in styles.css.&lt;/p&gt;&#10;&lt;p&gt;Added the skeleton of the prefs user interface, we don&amp;#39;t have a way to store them in the database. &lt;/p&gt;&#10;&lt;p&gt;There&amp;#39;s a new menu in the right side of the menu, to support logging in and out, and settings. &lt;/p&gt;&#10;&lt;p&gt;Included Ubuntu font. I like it and use it as my default font everywhere. &lt;/p&gt;&#10;</description>
			<pubDate>Sat, 16 May 2026 17:22:02 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1778952122000/added-default-font-and-fontsize-in-body-element-in-styles-cs</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;working on twitter-like ui&lt;/p&gt;&#10;&lt;p&gt;smoothing out connection between feedland and rssnetwork&lt;/p&gt;&#10;&lt;p&gt;suppose i have a feedurl, how do i determine if it&amp;#39;s one of our feeds, i only want to see log messages if it&amp;#39;s one of ours&lt;/p&gt;&#10;&lt;p&gt;all log messages that stay must have timestamp. &lt;/p&gt;&#10;</description>
			<pubDate>Thu, 14 May 2026 14:30:58 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1778769058000/working-on-twitter-like-ui-smoothing-out-connection-between-</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;In addEmailToUserInDatabase, we can&amp;#39;t generate a new emailSecret each time a user confirms a magic link, because email-link scanners (Gmail and others) pre-fetch the URL before the user clicks it. The pre-fetch and the click each call this function, each generates its own secret, and the database ends up with one while the user&amp;#39;s browser ends up with the other -- so every post afterwards fails authentication. We mint a secret only on first-time user creation; existing users get back the secret that&amp;#39;s already stored. Feedland landed on the same posture in 2022 for the closely-related multi-device version of this problem.&lt;/p&gt;&#10;</description>
			<pubDate>Sun, 10 May 2026 16:51:59 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1778431919000/in-addemailtouserindatabase-we-can-t-generate-a-new-emailsec</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;Added markdowntext support.&lt;/p&gt;&#10;</description>
			<pubDate>Sun, 03 May 2026 15:50:21 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1777823421000/added-markdowntext-support-</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;Added placeholder for author in an item record.&lt;/p&gt;&#10;</description>
			<pubDate>Sat, 02 May 2026 22:17:52 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1777760272000/added-placeholder-for-author-in-an-item-record-</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;Added the themes data structure.&lt;/p&gt;&#10;&lt;p&gt;Commented out inclusion of chat.css and chat.js&lt;/p&gt;&#10;</description>
			<pubDate>Fri, 01 May 2026 21:09:15 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1777669755000/added-the-themes-data-structure-commented-out-inclusion-of-c</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;Added inReplyTo to the items table.&lt;/p&gt;&#10;</description>
			<pubDate>Thu, 30 Apr 2026 15:07:18 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1777561638000/added-inreplyto-to-the-items-table-</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;New database call -- getRecentItems. Interfaces through the rest interface.&lt;/p&gt;&#10;&lt;p&gt;Editing in client/chat.css and chat.js&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;p&gt;removed all blank lines from chat.css, the code was written by claude as if you&amp;#39;d be reading it in a flat text editor. in an outliner the blank lines are an intrusion. now it&amp;#39;s okay to put blank lines in css files, i do it to separate sections from each other. lots of prior art for this. &lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;in chatUserInterface, the first declaration should be the container of everything. i had to fumble around to find it (was divPhone). It should always be at the very top.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;in the css code, the names should be defined not standalone, for example, don&amp;#39;t define .divHead, define .divChat .divHead. we get in trouble very quickly with naked names like divHead which is pretty common. your css starts interfering with each other. i&amp;#39;m still dealing with code written a long time ago that doesn&amp;#39;t make css defs specific enough so as not to interfere.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description>
			<pubDate>Wed, 29 Apr 2026 14:47:40 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1777474060000/new-database-call-getrecentitems-interfaces-through-the-rest</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;Made it so build script only copies files that haven&amp;#39;t changed, should improve performance because writing to Claude is on a remote server and is relatively expensive.&lt;/p&gt;&#10;</description>
			<pubDate>Tue, 28 Apr 2026 13:44:57 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1777383897000/made-it-so-build-script-only-copies-files-that-haven-t-chang</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;Converting from local files to SQL database for user and items info.&lt;/p&gt;&#10;&lt;p&gt;Implemented the /permalink call. &lt;/p&gt;&#10;</description>
			<pubDate>Sun, 26 Apr 2026 15:16:13 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1777216573000/converting-from-local-files-to-sql-database-for-user-and-ite</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;More and more I&amp;#39;m depending on Claude.ai to keep track of what we do here as things move along.&lt;/p&gt;&#10;</description>
			<pubDate>Sat, 25 Apr 2026 15:26:57 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1777130817000/more-and-more-i-m-depending-on-claude-ai-to-keep-track-of-wh</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;appConsts.flPostItemsLocally, up till now when you enter an item interactively we immediately post it to the timeline.&lt;/p&gt;&#10;&lt;p&gt;i added an option to turn this off because i want the items to show up in the timeline after a roundtrip through the feed, rssCloud, feedLand and the sockets and into the timeline. &lt;/p&gt;&#10;&lt;p&gt;in other words, you get it at the same instant all the other users get it. &lt;/p&gt;&#10;</description>
			<pubDate>Fri, 24 Apr 2026 14:24:58 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1777040698000/appconsts-flpostitemslocally-up-till-now-when-you-enter-an-i</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;working on the rss feeds we generate&lt;/p&gt;&#10;</description>
			<pubDate>Wed, 22 Apr 2026 14:26:11 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1776867971000/working-on-the-rss-feeds-we-generate</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;Cribbed code for the feedlandSocket object, created its own source file, and will tweak it up here, and set it down in the feedlandsocket repo.&lt;/p&gt;&#10;&lt;p&gt;It should have an api.js like all the other modules. &lt;/p&gt;&#10;</description>
			<pubDate>Mon, 20 Apr 2026 21:26:32 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1776720392000/cribbed-code-for-the-feedlandsocket-object-created-its-own-s</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;In the morning, continue cleaning up the startup process&lt;/p&gt;&#10;&lt;p&gt;There&amp;#39;s some remaining stuff from the factoring of rssNetworkServer.&lt;/p&gt;&#10;</description>
			<pubDate>Mon, 20 Apr 2026 00:14:42 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1776644082000/in-the-morning-continue-cleaning-up-the-startup-process-ther</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;These were docs included in the code, they belong here in worknotes.&lt;/p&gt;&#10;&lt;p&gt;Each user is stored as data/{screenname}.json:&lt;/p&gt;&#10;&lt;p&gt;{&lt;/p&gt;&#10;&lt;p&gt;email:       &amp;quot;...&amp;quot;,&lt;/p&gt;&#10;&lt;p&gt;emailSecret: &amp;quot;...&amp;quot;,&lt;/p&gt;&#10;&lt;p&gt;screenname:  &amp;quot;...&amp;quot;,&lt;/p&gt;&#10;&lt;p&gt;posts:       [ { text, when, link }, ... ]   // daverss item format&lt;/p&gt;&#10;&lt;p&gt;}&lt;/p&gt;&#10;</description>
			<pubDate>Sat, 18 Apr 2026 15:31:33 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1776526293000/these-were-docs-included-in-the-code-they-belong-here-in-wor</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;Getting info from config.json to the code running in the client app.&lt;/p&gt;&#10;&lt;p&gt;When daveappserver returns the home page for the site, it also does a string replace for macros. &lt;/p&gt;&#10;&lt;p&gt;The values of the macros can be anything chosen from config. So it can be told for example what the URL of the server was that launched it. It doesn&amp;#39;t need to be hard-coded into the client app.&lt;/p&gt;&#10;</description>
			<pubDate>Sat, 18 Apr 2026 14:59:47 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1776524387000/getting-info-from-config-json-to-the-code-running-in-the-cli</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;p&gt;Picked up all the loose bits and organized it into a source.opml file.&lt;/p&gt;&#10;&lt;p&gt;Conforms to the spec. &lt;/p&gt;&#10;</description>
			<pubDate>Wed, 15 Apr 2026 12:32:34 GMT</pubDate>
			<link>https://github.com/scripting/rss.chat/blob/main/server/code/worknotes.md</link>
			<guid isPermaLink="false">https://news.rss.chat/server/1776256354000/picked-up-all-the-loose-bits-and-organized-it-into-a-source-</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;ul&gt;&#10;&lt;li&gt;Full nesting indentation throughout HTML — every level indented so it imports correctly into outliner&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description>
			<pubDate>Tue, 14 Apr 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/1776139200000/-full-nesting-indentation-throughout-html-every-level-indent</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;ul&gt;&#10;&lt;li&gt;Rewrote rssnet.html to conform to indentation style guide (tabs, closing braces at content level, spaces before parens)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description>
			<pubDate>Tue, 14 Apr 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/1776139200000/-rewrote-rssnet-html-to-conform-to-indentation-style-guide-t</guid>
			<category>server</category>
			</item>
		<item>
			<description>&lt;ul&gt;&#10;&lt;li&gt;Version number added to navbar brand so current version is visible on screen&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description>
			<pubDate>Tue, 14 Apr 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/1776139200000/-version-number-added-to-navbar-brand-so-current-version-is-</guid>
			<category>server</category>
			</item>
		</channel>
	</rss>
