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>
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>