New RSS_TYPES category with a /rss-bots page, sidebar entry, homepage tile, and an
explanation that RSS bots post a feed to a channel — share the channel link, not
the user. Remove rss from the Bots page (types table + create dropdown); the RSS
Bots page has a '+ New RSS Bot' button that only creates rss bots, with feed URL +
per hour/day/week fields shown directly (no bot-type select).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replace the seconds number input with Per hour / Per day / Per week radios
(3600/86400/604800s), default per hour.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Reusable link box (Jinja macro in _macros.html + shared JS/CSS/QR lib in
base.html): a 'Link' button toggles the URL (with copy) and a 'QR' button toggles
a lazily-rendered QR of the same link — both hidden by default. Applied to the
profile address, profile groups & channels, and the profile cards on the list
pages. Centralize robustCopy in base.html; drop the per-page duplicates and the
old async group-link fetch (groups now use their known link).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
New crypto bot type: creates a broadcast channel and posts a price snapshot of the
selected coins/currencies (CoinGecko simple/price JSON) every interval — same
channel-streaming model as RSS. Create form has checkbox grids for popular coins
and currencies plus a poll interval. Generalize the channel helper and feed-poll
state (channel_gid/poll_next) shared by rss + crypto. Adds crypto_test.py (mock
CoinGecko) — passes; rss_test updated for the renamed field.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Previously the bot seeded all existing feed items on startup WITHOUT posting, so a
freshly-created channel stayed empty and new subscribers saw nothing (only items
appearing after start were posted). Now on first run it posts the latest items
(max 5) to fill the channel — recent history then shows them to joiners — and sets
an rss_populated flag so restarts don't replay. Existing (empty) bots get filled
once on next start. Update rss_test.py.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
navigator.clipboard only works in a secure context, so copy silently failed when
served over a LAN IP on http. Add a robustCopy() with a textarea+execCommand
fallback (used by group-link, address and channel-link copy). The group/channel
'Link' button now toggles a visible, selectable URL row beneath the group with a
working copy button.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Remove the /new command, the on-connect latest-items send, the _rss_send_latest
helper and the now-unused rss_items cache. The bot only watches the feed and
broadcasts new posts to its channel. Update welcome + UI copy to drop /new.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
New rss bot type: on start it creates a broadcast channel (observer group with
recent history on) and polls a configured feed URL; new posts are broadcast to
the channel. Subscribers join the channel link (seen on the bot's profile);
direct contacts get a welcome + the latest items and can send /new for the
latest. Stdlib-only feed parsing (urllib + ElementTree), seeds existing items on
startup so it doesn't replay the whole feed. Config: feed_url, poll_seconds.
Adds rss_test.py (mock feed) — passes.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Small clock in the sidebar footer: HH:MM (24h) with weekday+date below; collapsed
sidebar shows just the time.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Collapsed sidebar now hides the network text (running/servers/operators) and
keeps just the centered status dot. Rename the user-facing 'Businesses' label to
'Business Groups' (sidebar, homepage tile, list title/heading/empty state, create
button, profile back-link); route/tab id stay 'businesses'.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Swap all emoji icons for Font Awesome (sidebar, homepage tiles, profile/chat/
list/settings/relay actions); add Roboto font + card elevation hover for a
Material feel. Replace the bottom 'Collapse' pill with a 3-line (fa-bars) toggle
in the sidebar header; remove the old collapse pill CSS/JS. Copy buttons toggle
FA check/copy via innerHTML. Plain text status (✓/✗) and back arrows kept.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
pollNotifications now updates every .notif-badge (sidebar nav + homepage card)
from the same /api/notifications source, so the card bubble shows the unread
count and clears in lockstep with the sidebar. Add a badge to the card; scope
the collapsed-only badge positioning to the sidebar.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Both the sidebar and the homepage now share the same logical groups:
accounts (Users/Businesses/Bots/File Upload), relays (Chat/File/Message Relay),
system (Network/Notifications/Settings), external (Get App). Relays is now its
own flat divider-separated section in the sidebar instead of a collapsible
dropdown; remove the dropdown CSS/JS. Move Notifications into the system group
on the homepage cards.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add a Network entry to the sidebar nav (grouped with Notifications/Settings under
one divider). Remove the 'Network ›' title above the bottom status rows — the
running/servers/operators info is self-explanatory; drop its now-unused CSS.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
New 'llm' bot type that takes a startup context (system prompt) and replies to
each message via an OpenAI-compatible endpoint — works with a local Ollama
(ollama serve, http://localhost:11434/v1), OpenAI, Grok, etc. Generalize the
support LLM handler into _handle_llm_message (shared by support + llm) with a
per-bot default prompt. Create form reuses the LLM fields (URL/key/model/context)
for both support and llm. Adds llm_test.py (mock OpenAI backend) — passes.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Tiles now lay icon + title on one row (more compact); the SimpleX Manager title
is centered over the cards; add a closing faded bar at the bottom. File Relay
icon changed to an out-arrow tray (closest emoji to a folder-with-arrow).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Remove the t-desc lines from the homepage tiles (icon + title only). Change File
Relay icon from the folder (same as File Upload) to a card-dividers icon, in both
the homepage card and the sidebar.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Capitalize Relay and Upload in the relay titles and the File Upload entry
(sidebar, homepage cards, relay page title via RELAY_KINDS).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
New collapsible 'Relays' group in the sidebar (chat/file/message relay) that
expands to show its items and persists open state. Homepage gets a matching
Relays card group, and areas are now split by faded separator bars like the
sidebar. Relay pages are placeholder 'coming soon' stubs (/relays/{kind}).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Top area now holds Users/Businesses/Bots/Notifications/File upload; manage area is
Network/Settings; external area is Get SimpleX App. Add a padded Get App link
(nav-sep) below Settings in the sidebar.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
It still appears as a homepage card; keep the footer link too (removing it
earlier was not requested).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Split the home tiles into three areas with vertical spacing: accounts
(Users/Businesses/Bots), manage (Network/Notifications/Settings), and external
SimpleX (File upload + a new Get SimpleX App card). Move the Get SimpleX App link
out of the global footer into its own homepage card.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Remove the homepage tagline. Make the collapse control a proper inset pill with
a 'Collapse' label + chevron (label left, chevron right) instead of a bare
full-width row with a lone arrow; centers to just the icon when collapsed.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Home page (home.html) at / shows the sidebar sections as tiles; reachable by
clicking the 'SimpleX Manager' brand in the sidebar (was redirecting to /users).
- Rename the category to 'Businesses' (route /businesses, tab/nav/_category),
keeping the per-account bot_type 'business'. Fix profile back-link label.
- Footer: link 'Bournemouth Technology Ltd' -> bournemouthtechnology.co.uk and
'SimpleX Network' -> simplex.chat.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The sidebar was height:100vh with no overflow, so on mobile the bottom-pinned
footer (network status + Logout) fell below the visible area (browser toolbar)
with no way to reach it. Add overflow-y:auto and use 100dvh on mobile so the
sidebar matches the visible viewport; 100vh kept as fallback.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Business accounts are cli profiles with businessAddress=True, so each connecting
customer gets their own group chat (handled via the existing chat UI) with an
optional welcome auto-reply. New BUSINESS_TYPES, a /business page + sidebar entry,
and a business variant of the create form. profile/chat pages route via a
_category helper. Adds business_test.py (customer connects -> lands in a business
group, not a direct contact) — passes.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Relay publishers' text/links to all contacts via the native /feed command
(reports 'Forwarded to N contact(s), M errors'); reply to non-publishers with
the prohibited message and internally delete their message (CIDMInternal, as
upstream does). Filter content to text/links. Publishers accept 'Name' or
'ID:Name'; welcome/prohibited defaults list the publishers. Add publishers +
prohibited-reply fields to the create form. Adds broadcast_test.py (3 in-process
controllers: bot + publisher + subscriber) — passes.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Backend (profiles.py / main.py):
- Fix bot startup crash: create active user before start_chat
- Fix address-clobbering bug on restart (UserContactLink vs CreatedConnLink)
- Add user profile type alongside bots
- Channels: create groups with observer links, classify via acceptMemberRole
- Chat rooms: get_chat_history + send_to_chat, history/messages/send routes
UI:
- Chat room view with message bubbles and live polling
- Convert top nav to collapsible left sidebar (mobile-friendly off-canvas)
- Three-way Users/Bots split; clickable cards; copy-address buttons + links
- Add Matrix theme alongside Original Light/Dark
- File upload sidebar link; site footer on all pages incl. login
- Bot-type descriptions on the Bots page; QR caption on profiles
Remove orphaned index.html (superseded by list.html).
Ignore downloaded libs/, exploration DBs, and local ai.sh.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- TemplateResponse now uses (request, name, context) signature for Starlette 0.36+
- Replace per-button hx-headers with global htmx:configRequest token injection in base.html
- Fix JS cookie regex to handle leading semicolons correctly
Tested: login, auth redirect, profile create/view/delete all return correct status codes.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- simplex-deadmans-bot: Dead Man's Switch Haskell bot
- simplexxx-directory: private SimpleXXX directory bot (fork of simplex-directory-service)
- simplex-support-bot: support triage bot with configurable AI backend
- --ai-url and --ai-model flags for any OpenAI-compatible provider
- works with Grok, Ollama, OpenAI, LM Studio, etc.
- AI_API_KEY env var (GROK_API_KEY still accepted as alias)
- web: SimpleXXX directory frontend (Groups/Channels tabs, matches simplex.chat/directory style)
- manager/: placeholder for Python profile manager (coming soon)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>