Changelog
What's shipped, when. Latest at top.
v0.1 — public preview 2026-04-19
Initial public preview. The reference implementation (austinspring.com) is publicly browseable and accepts new accounts + new posts. Soft launch ahead of the official May 1, 2026 launch.
Reconstruction milestones
- addWayback Machine deep-fetch of 4,029 (conf, thread) pairs across spring.com + spring.net
- add96 conferences discovered via CDX scan (88 with content, 77 wired into the live site)
- add3,711 archived thread pages rendered as static HTML
- add262,791 historical responses parsed from yapp HTML and re-rendered with modern CSS
- addSpan: 1996 → 2013 (Wayback's last meaningful capture; spring.net domain transition Sept 6, 2014)
Live BBS features
- addFlask app at
/bbs/live/: signup, login, welcome page, post, reply, settings, search, members, recent feed
- addComment-on-archived-thread (the big modern unlock yapp couldn't do)
- add"+ NEW TOPIC" CTA on every conference page
- add"LIVE TOPICS (POSTED 2026+)" auto-injected block on static conference pages — Flask hook regenerates on every new topic + reply
- addWelcome page after signup with handle reveal + 4 next-step CTAs
- addReply notifications via Resend HTTPS API (DigitalOcean blocks SMTP) with per-user opt-out + one-click unsubscribe
- addPassword reset flow (forgot → email token → reset → auto-login)
- add"Remember me" 30-day persistent session option
- addPer-conference RSS feeds + global firehose RSS at
/bbs/live/rss/<conf|all>.xml
- addMerged activity feed at
/bbs/live/recent — new topics + replies + archive comments, newest first
- add"Last 50 / 100 / 333 / 500" pulse view via
/recent?n=N (yapp's signature view convention)
- add
/bbs/classics/ — top 20 most-discussed threads, newcomer doorway
- addPin Porch #1 ("let's introduce ourselves") on /bbs/porch/ + /about/
- addStats endpoint
/bbs/live/stats.json — homepage live strip pulls from this
Discovery & SEO
- addOG / Twitter cards on 3,110 thread pages (preview image, title, snippet)
- addSchema.org
DiscussionForumPosting JSON-LD on all 3,110 pages
- add71 per-conference sitemaps + bbs-sitemap.xml index + top-level sitemap.xml = 3,180+ URLs
- add
robots.txt with explicit allows + auth-route disallows + sitemap pointers
Cross-network
- addBidirectional cross-links: /bbs/drool/ ↔ firth.com network (5 sites — firth.com, colinfirth.com, colinfirth.org, firthfan.com, austenfirth.com)
- addBidirectional cross-links: /bbs/austen/ ↔ austen.com
Security
- secCSRF tokens (hand-rolled HMAC of session seed) on all 9 form templates
- secPer-IP sliding-window rate limiting on signup, login, post, reply, forgot, reset, settings
- secSoft-delete admin queue at
/bbs/live/admin — moderate posts/comments/threads with reasons + undo
- secSECURE + HTTPONLY + SAMESITE=Lax cookies in production
Operations / resilience
- addSTATE.yaml manifest auto-regenerated nightly with live counts + critical-file MD5s + cron jobs
- addRECOVERY.md disaster-recovery guide (mirrored to droplet + B2 + local)
- addDaily integrity check cron — emails sysop via Resend if drift detected
- addNightly dated B2 snapshots at
walhuswholetech-snapshots/, 30-day retention
- addHomepage rollback guard — locked .GOOD copy + cron sentinel restores within 2 min if live drops below locked size
- addterry@austinspring.com email (Resend send + ForwardEmail.net catch-all forward to inbox)
UI polish
- chgHomepage: top login bar + GET STARTED CTA + "Already a member" + "Browse all conferences" + Drool/Firth hero card + live stats strip
- chgLogout button — was dim gray, now bold amber-bordered
- chgPost-date color brightened across all 1,856+ thread pages (was dim olive, now phosphor green bold)
- chgYapp epigrams quoted on /about/, signup, welcome pages
- chg/about/ page rewritten with BBS story + takedown policy + member ownership
Outreach (this session)
- add26 batched outreach Gmail drafts: 13 main list (242 recipients) + 6 Drool list (109) + 7 Austen-active (~130)
- addSubject prefixes
[B##/13] / [D##/06] / [A##/07] for ordered slow-release
Bugs fixed
- fix/bbs/porch/ thread links pointed at Wayback instead of local — patched build-conference-pages.py to prefer local rendered page when present (LOCAL_FIRST_PATCH)
- fixConference render gap: cache had threads but build script only used Oct 2000 index. Now synthesizes fresh index from cache when needed (austen 8→92, austenarchive 0→204, austentest 9→152, bronte 76→79)
- fixDate readability:
.post-date color was dim olive; brightened to phosphor green bold across all 1,856+ thread pages
- fixCloudflare blocked default Python User-Agent on Resend API; added explicit Mozilla UA
- fixConference index regex was non-greedy and matched 0 conferences after a porch-page accidental overwrite — replaced with per-block iteration
- fixOutdated "30 of 85+" copy on /bbs/ replaced with accurate "All 77 Conferences (1996-2014)"
v0.0 — pre-history ~2026-03-15 → 2026-04-18
Built quietly across several sessions. Core reconstruction pipeline established. Wayback discovery + parse + render. Initial Flask app. Single-conference (porch) proof of concept. Then expansion to 33 conferences. Daily refinement.
This is when ATXbbs went from "wouldn't it be cool" to actually working.