<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Phosphor BBS</title><link>https://phosphorbbs.net/</link><description>Recent content on Phosphor BBS</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 02 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://phosphorbbs.net/index.xml" rel="self" type="application/rss+xml"/><item><title>How to Build a Digital Third Place That's Actually Yours</title><link>https://phosphorbbs.net/blog/how-to-build-a-digital-third-place/</link><pubDate>Sun, 02 Aug 2026 00:00:00 +0000</pubDate><guid>https://phosphorbbs.net/blog/how-to-build-a-digital-third-place/</guid><description>&lt;p&gt;You&amp;rsquo;ve read about digital third places. You understand the problem — Discord isn&amp;rsquo;t yours, Slack is for work, X is a firehose, Reddit sold your API access. You want a community space you actually own.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s how to build one.&lt;/p&gt;
&lt;h2 id="what-a-real-third-place-needs"&gt;What a real third place needs&lt;/h2&gt;
&lt;p&gt;Before the how, the what. A digital third place needs five things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Persistence.&lt;/strong&gt; The space exists whether you&amp;rsquo;re there or not. Messages stay. History builds. The community has memory.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ownership.&lt;/strong&gt; You control the server, the data, the rules. No platform can change the deal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Low friction.&lt;/strong&gt; People can join without downloading an app, verifying a phone number, or accepting a 47-page terms of service.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Regulars.&lt;/strong&gt; People who come back, know each other, and notice when someone&amp;rsquo;s missing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conversation first.&lt;/strong&gt; The main activity is talking to people — not scrolling a feed, not playing an algorithm.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If your community platform fails any of these, it&amp;rsquo;s not a third place. It&amp;rsquo;s a product you&amp;rsquo;re using until the company that owns it decides otherwise.&lt;/p&gt;</description></item><item><title>One Platform for Three Things You're Doing in Three Places</title><link>https://phosphorbbs.net/blog/one-platform-three-things/</link><pubDate>Sun, 02 Aug 2026 00:00:00 +0000</pubDate><guid>https://phosphorbbs.net/blog/one-platform-three-things/</guid><description>&lt;p&gt;You use three different tools for three different kinds of communication. You probably don&amp;rsquo;t think about it this way, but you do.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Slack or Discord for chat.&lt;/strong&gt; Real-time, instant, conversational. You&amp;rsquo;re talking &lt;em&gt;with&lt;/em&gt; people right now. Messages flow, responses come in seconds, the conversation moves fast. It&amp;rsquo;s great for &amp;ldquo;what are we doing right now&amp;rdquo; and terrible for &amp;ldquo;what did we decide last month.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;X or Mastodon for broadcasting.&lt;/strong&gt; One-to-many, short-form, public. You&amp;rsquo;re talking &lt;em&gt;at&lt;/em&gt; people. A post goes out, it reaches followers, replies trickle in. It&amp;rsquo;s great for &amp;ldquo;look at this&amp;rdquo; and terrible for &amp;ldquo;let&amp;rsquo;s discuss this in depth.&amp;rdquo;&lt;/p&gt;</description></item><item><title>The Internet You Visit on Purpose</title><link>https://phosphorbbs.net/blog/the-internet-you-visit-on-purpose/</link><pubDate>Sun, 02 Aug 2026 00:00:00 +0000</pubDate><guid>https://phosphorbbs.net/blog/the-internet-you-visit-on-purpose/</guid><description>&lt;p&gt;There&amp;rsquo;s a feeling people have about the old internet that they can&amp;rsquo;t quite name. They remember it — or feel like they should remember it — as a place you &lt;em&gt;went&lt;/em&gt;. You connected to something. You arrived somewhere. You were there on purpose, and when you were done, you left.&lt;/p&gt;
&lt;p&gt;The modern internet doesn&amp;rsquo;t work like that. It comes to you. It&amp;rsquo;s in your pocket, on your wrist, in your glasses. It pushes notifications, feeds, stories, reels, alerts. You don&amp;rsquo;t visit it. It visits you — constantly, relentlessly, whether you asked it to or not.&lt;/p&gt;</description></item><item><title>The Third Place Problem With Discord</title><link>https://phosphorbbs.net/blog/the-third-place-problem-with-discord/</link><pubDate>Sun, 02 Aug 2026 00:00:00 +0000</pubDate><guid>https://phosphorbbs.net/blog/the-third-place-problem-with-discord/</guid><description>&lt;p&gt;Discord is the most successful digital third place ever built. 200 million people use it every month. Millions of communities live there — gaming groups, study circles, maker spaces, open source projects, friend groups, neighborhoods. It&amp;rsquo;s where people go to hang out.&lt;/p&gt;
&lt;p&gt;And it&amp;rsquo;s being sold out from under them.&lt;/p&gt;
&lt;h2 id="the-pattern"&gt;The pattern&lt;/h2&gt;
&lt;p&gt;Every platform that becomes a third place goes through the same cycle:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Launch.&lt;/strong&gt; Free, open, no ads, no friction. &amp;ldquo;We&amp;rsquo;ll never sell out.&amp;rdquo; The community grows because it feels safe.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Growth.&lt;/strong&gt; Investment pours in. The platform scales. Features ship. The community deepens. People invest years building their space.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monetization pressure.&lt;/strong&gt; Investors want returns. The platform needs revenue. Ads appear. Premium tiers launch. Data gets harvested.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enshittification.&lt;/strong&gt; The community becomes ad inventory. The experience degrades. The rules change. The third place you built is now a storefront, and you&amp;rsquo;re the product.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This isn&amp;rsquo;t hypothetical. It&amp;rsquo;s a documented pattern.&lt;/p&gt;</description></item><item><title>What Is a Digital Third Place?</title><link>https://phosphorbbs.net/blog/what-is-a-digital-third-place/</link><pubDate>Sun, 02 Aug 2026 00:00:00 +0000</pubDate><guid>https://phosphorbbs.net/blog/what-is-a-digital-third-place/</guid><description>&lt;p&gt;In 1989, sociologist Ray Oldenburg wrote &lt;em&gt;The Great Good Place&lt;/em&gt; and gave a name to something everyone already knew: we need three places. The first place is home. The second place is work. And the third place is the somewhere-else — the pub, the café, the barbershop, the park bench — where you go not to live or to produce, but to &lt;em&gt;be&lt;/em&gt;. To be around people. To belong to something that isn&amp;rsquo;t your family and isn&amp;rsquo;t your employer.&lt;/p&gt;</description></item><item><title>Federated BBS: How Phosphor Makes Multi-Node Sync Declarative</title><link>https://phosphorbbs.net/blog/federated-bbs-how-phosphor-makes-multi-node-sync-declarative/</link><pubDate>Fri, 31 Jul 2026 00:00:00 +0000</pubDate><guid>https://phosphorbbs.net/blog/federated-bbs-how-phosphor-makes-multi-node-sync-declarative/</guid><description>&lt;p&gt;Every BBS in the 80s and 90s was an island. Your callers dialed your node. Your boards lived on your machine. If you wanted to share content with another sysop, you mailed a floppy.&lt;/p&gt;
&lt;p&gt;Phosphor changes that. Federation is now declarative — you write 10 lines of Phosphor instead of 200 lines of custom Java protocol code.&lt;/p&gt;
&lt;h3 id="the-problem"&gt;The Problem&lt;/h3&gt;
&lt;p&gt;Today, adding a new syncable resource to a BBS means writing custom Java serialization, a custom message type, a custom deserializer on the receiving end, and custom conflict resolution. This is why most BBS systems only sync boards and chat messages — everything else is too much work.&lt;/p&gt;</description></item><item><title>Phosphor Progress — From Parser to Federation</title><link>https://phosphorbbs.net/blog/phosphor-progress-from-parser-to-federation/</link><pubDate>Fri, 31 Jul 2026 00:00:00 +0000</pubDate><guid>https://phosphorbbs.net/blog/phosphor-progress-from-parser-to-federation/</guid><description>&lt;p&gt;Twenty-nine commits. Six phases. One language. Here&amp;rsquo;s where Phosphor stands after the most intense development sprint yet.&lt;/p&gt;
&lt;h3 id="the-journey-so-far"&gt;The Journey So Far&lt;/h3&gt;
&lt;p&gt;When I wrote about &lt;a href="https://phosphorbbs.net/blog/building-the-phosphor-parser/"&gt;building the Phosphor parser&lt;/a&gt;, the language was a lexer and a dream. Phase 1 was five tasks — tokenizer, parser, declarative processor, hot-reload, BBS wiring. It felt like a lot at the time.&lt;/p&gt;
&lt;p&gt;It wasn&amp;rsquo;t.&lt;/p&gt;
&lt;h3 id="phases-1-2-foundation"&gt;Phases 1-2: Foundation&lt;/h3&gt;
&lt;p&gt;The declarative layer came first. Define your BBS structure — menus, boards, channels, file areas, themes — in a readable syntax. Save the file. The BBS syncs to the database automatically. No restart, no recompile.&lt;/p&gt;</description></item><item><title>Building a Lexer and Parser for a BBS Programming Language</title><link>https://phosphorbbs.net/blog/building-a-lexer-and-parser-for-a-bbs-language/</link><pubDate>Thu, 30 Jul 2026 00:00:00 +0000</pubDate><guid>https://phosphorbbs.net/blog/building-a-lexer-and-parser-for-a-bbs-language/</guid><description>&lt;p&gt;How do you build a programming language for a BBS? You start with the same tools every language uses: a lexer to break source code into tokens, and a parser to turn tokens into a tree. This is the story of how Phosphor&amp;rsquo;s lexer and parser work, with real code from the implementation.&lt;/p&gt;
&lt;h3 id="the-design"&gt;The Design&lt;/h3&gt;
&lt;p&gt;Phosphor is a domain-specific language for BBS configuration and behavior. It has two layers:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Declarative&lt;/strong&gt; — describe the BBS structure: menus, boards, channels, file areas, themes.
&lt;strong&gt;Imperative&lt;/strong&gt; — define behavior with event handlers, expressions, and control flow.&lt;/p&gt;</description></item><item><title>Declarative UI: Building Terminal Screens with Widgets in Phosphor</title><link>https://phosphorbbs.net/blog/declarative-ui-building-terminal-screens-with-widgets/</link><pubDate>Thu, 30 Jul 2026 00:00:00 +0000</pubDate><guid>https://phosphorbbs.net/blog/declarative-ui-building-terminal-screens-with-widgets/</guid><description>&lt;p&gt;Most BBS systems render screens the hard way: imperative code that clears the terminal, prints line by line, and redraws on every update. It works, but it&amp;rsquo;s verbose and fragile. One missed redraw and the screen is stale.&lt;/p&gt;
&lt;p&gt;Phosphor takes a different approach. You describe the screen as a tree of widgets. The runtime handles rendering, re-rendering on data change, and input routing. You only write callbacks for interactive behavior.&lt;/p&gt;</description></item><item><title>Building the Phosphor Parser — Week 1 Dev Log</title><link>https://phosphorbbs.net/blog/building-the-phosphor-parser/</link><pubDate>Wed, 29 Jul 2026 00:00:00 +0000</pubDate><guid>https://phosphorbbs.net/blog/building-the-phosphor-parser/</guid><description>&lt;p&gt;The first phase of Phosphor implementation is underway. Here&amp;rsquo;s what&amp;rsquo;s happening and why it matters.&lt;/p&gt;
&lt;h3 id="the-problem"&gt;The Problem&lt;/h3&gt;
&lt;p&gt;Every BBS system has the same issue: configuration is either too rigid (hardcoded in the application) or too generic (a config file that can&amp;rsquo;t express behavior). You want to add a new menu item? Edit Java, recompile, restart. You want a custom login handler? Write a plugin, package it, deploy it. You want to send mail to new users automatically? More Java, more compilation, more restarts.&lt;/p&gt;</description></item><item><title>ANSI Sprites: Animation in a Terminal UI Toolkit</title><link>https://phosphorbbs.net/blog/ansi-sprites-animation-in-a-terminal-ui-toolkit/</link><pubDate>Tue, 28 Jul 2026 00:00:00 +0000</pubDate><guid>https://phosphorbbs.net/blog/ansi-sprites-animation-in-a-terminal-ui-toolkit/</guid><description>&lt;p&gt;A terminal is a grid of characters. Each cell holds one glyph, one foreground color, one background color. That&amp;rsquo;s it. There are no pixels, no sprites, no animation frames. At least, that&amp;rsquo;s what you&amp;rsquo;d think.&lt;/p&gt;
&lt;p&gt;jterm&amp;rsquo;s sprite library takes that grid and turns it into a animation engine. ANSI art frames become sprite frames. A sprite sheet — a single ANSI file with a grid of cells — becomes a flipbook. Virtual threads drive the animation loop. And the terminal becomes a screen.&lt;/p&gt;</description></item><item><title>Terminal Animations: Starfields, Warps, and Living Backgrounds</title><link>https://phosphorbbs.net/blog/terminal-animations-starfields-warps-and-living-backgrounds/</link><pubDate>Sun, 21 Jun 2026 00:00:00 +0000</pubDate><guid>https://phosphorbbs.net/blog/terminal-animations-starfields-warps-and-living-backgrounds/</guid><description>&lt;p&gt;A BBS login screen used to be a static ASCII banner. You&amp;rsquo;d connect, see a logo made of text characters, type your username and password, and that was it. No motion, no life, no atmosphere.&lt;/p&gt;
&lt;p&gt;jterm changes that. The login screen in Phosphor BBS has a living, animated background — stars twinkling, plasma flowing, cells dividing. Every time a user connects, the system randomly selects one of six animated backgrounds and renders it behind the login form. The terminal isn&amp;rsquo;t a static page anymore. It&amp;rsquo;s a window into a small, alive world.&lt;/p&gt;</description></item><item><title>Message Boards and Mail: Persistent Communication in Phosphor BBS</title><link>https://phosphorbbs.net/blog/message-boards-and-mail-persistent-communication-in-phosphor-bbs/</link><pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate><guid>https://phosphorbbs.net/blog/message-boards-and-mail-persistent-communication-in-phosphor-bbs/</guid><description>&lt;p&gt;A BBS without message boards is just a chat room. Boards are where the community lives — threaded discussions that persist over days, weeks, months. You log in, catch up on what you missed, reply to threads, and start new ones. It&amp;rsquo;s asynchronous communication at its best.&lt;/p&gt;
&lt;p&gt;Mail is the private counterpart — user-to-user messages that nobody else can read. Together, boards and mail form the communication backbone of the BBS.&lt;/p&gt;</description></item><item><title>Real-Time Chat on a BBS: Pub/Sub, Channels, and Wall Messages</title><link>https://phosphorbbs.net/blog/real-time-chat-on-a-bbs-pubsub-channels-and-wall-messages/</link><pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate><guid>https://phosphorbbs.net/blog/real-time-chat-on-a-bbs-pubsub-channels-and-wall-messages/</guid><description>&lt;p&gt;Chat is the heartbeat of a BBS. In the 90s, you&amp;rsquo;d log in, see who was online, and jump into a channel. Messages appeared character by character as the other person typed. It felt alive.&lt;/p&gt;
&lt;p&gt;Phosphor BBS brings that feeling back — but with a modern architecture. Instead of a single shared screen, every session runs independently, connected through a pub/sub message bus. Messages route by channel. Sessions subscribe to the channels they&amp;rsquo;re in. The bus handles delivery.&lt;/p&gt;</description></item><item><title>The SysOp Experience: Building Admin Tools for a Modern BBS</title><link>https://phosphorbbs.net/blog/the-sysop-experience-building-admin-tools-for-a-modern-bbs/</link><pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate><guid>https://phosphorbbs.net/blog/the-sysop-experience-building-admin-tools-for-a-modern-bbs/</guid><description>&lt;p&gt;Every BBS needs a sysop. The system operator — the person who manages users, moderates boards, configures channels, and keeps the system running. In the 90s, the sysop sat at the physical machine, running tools from a dedicated admin menu. Today, the sysop connects remotely, just like any other user — but with more power.&lt;/p&gt;
&lt;p&gt;Phosphor BBS gives the sysop a full terminal-based admin panel. You connect over Telnet or SSH, log in as a sysop-level user, and get access to tools that regular users never see. Everything runs in the terminal — no web dashboard required.&lt;/p&gt;</description></item><item><title>From Modem to SSH: Building a Telnet/SSH Server in Java</title><link>https://phosphorbbs.net/blog/from-modem-to-ssh-building-a-telnet-ssh-server-in-java/</link><pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate><guid>https://phosphorbbs.net/blog/from-modem-to-ssh-building-a-telnet-ssh-server-in-java/</guid><description>&lt;p&gt;In the 90s, a BBS was a modem bank and a phone number. Callers dialed in at 2400 baud, negotiated a connection, and got a text interface. The protocol was Telnet — a standard from 1969 that&amp;rsquo;s still surprisingly useful today.&lt;/p&gt;
&lt;p&gt;But nobody uses modems anymore. Today&amp;rsquo;s BBS callers connect over the internet, either through raw Telnet (port 2323, a nod to the original) or SSH. Building both into a Java BBS means dealing with two completely different networking stacks, terminal negotiation quirks, and a class of bugs that only appear when real clients connect.&lt;/p&gt;</description></item><item><title>jterm: Building a Terminal UI Toolkit in Pure Java</title><link>https://phosphorbbs.net/blog/jterm-building-a-terminal-ui-toolkit-in-pure-java/</link><pubDate>Wed, 17 Jun 2026 00:00:00 +0000</pubDate><guid>https://phosphorbbs.net/blog/jterm-building-a-terminal-ui-toolkit-in-pure-java/</guid><description>&lt;p&gt;Every BBS needs a terminal. But not just any terminal — a fast one, with per-character styling, double-buffered rendering, and a widget library that makes building full-screen applications bearable. That&amp;rsquo;s what jterm is: a pure-Java terminal UI toolkit with zero native dependencies.&lt;/p&gt;
&lt;h3 id="the-three-layer-architecture"&gt;The Three-Layer Architecture&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Terminal (raw ANSI/VT100) → Screen (double buffer + diff) → GUI (widgets + layout)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Each layer has one job:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Terminal&lt;/strong&gt; — raw I/O. Reads keystrokes, writes ANSI escape sequences, handles raw mode and terminal resize events.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Screen&lt;/strong&gt; — double-buffered rendering. Maintains a front buffer (what&amp;rsquo;s on screen) and a back buffer (what&amp;rsquo;s being drawn). On refresh, diffs the two and only sends the changed cells.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GUI&lt;/strong&gt; — widgets and layout managers. Labels, tables, text boxes, panels, menus. The stuff you actually want to use.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This separation matters. You can use jterm at any layer — raw terminal access for a door game, screen buffering for a custom renderer, or the full widget library for a typical BBS screen.&lt;/p&gt;</description></item><item><title>Why I'm Building a BBS in 2026</title><link>https://phosphorbbs.net/blog/why-im-building-a-bbs-in-2026/</link><pubDate>Sun, 14 Jun 2026 00:00:00 +0000</pubDate><guid>https://phosphorbbs.net/blog/why-im-building-a-bbs-in-2026/</guid><description>&lt;p&gt;I ran a BBS when I was younger. This was before the web — you&amp;rsquo;d dial in on a modem, read messages, play games, chat with people in your town. It was a community. Then the internet happened, and BBSes faded.&lt;/p&gt;
&lt;p&gt;But here&amp;rsquo;s the thing: what BBSes did well — community, conversation, shared space — the modern internet does badly. Social media is a firehose of noise. Discord is a walled garden. Slack is for work. Nothing feels like &lt;em&gt;a place&lt;/em&gt; the way a BBS did.&lt;/p&gt;</description></item></channel></rss>