Reuses Oasis's own private-message invite pattern (like the industry module:
pmModel.sendMessage([feed], 'KARVAN_INVITE', '... -> /karvan/<id>')), so the invite
lands in the contact's inbox with a link — no new SSB code, no touching the SSB
startup. Joining a room by link adopts a local mirror (karvanModel.adoptRoom, the
id is the capability). Real-time cross-device signaling (media/text sync between
the two mirrors) is the remaining Fase 2 piece (muxrpc ephemeral), deferred.
Verified single-node: invite publishes to the inbox, validation, adopt, form; 13/13
model tests (added adoptRoom).
Adds a call panel to the Karvan room (local video + remote gallery + call/mic/cam/hang-up
buttons) and grafts getUserMedia + addTrack + ontrack onto the peer connections we already
use for the text data-channel (perfect negotiation handles the renegotiation). No backend,
no new !important. Verified: getUserMedia path attaches audio+video tracks to the local
video and activates the panel (chromium fake device). getUserMedia will fail gracefully on
the current wrapper (no camera/mic permission) with a clear message — the chat keeps working.
Fases 2 (SSB cross-device signaling) and 3 (wrapper permissions) pending.
Per feedback (avoid !important, substitute the CSS). Verified with computed-style
diffs on the real forum/chat DOM — layout is byte-identical.
- OasisMobile.css: 45 -> 23 !important. Removed the ones that only fought epsylon's
NARROW rules; win by load-order/specificity instead (e.g. .forum-score-box
.forum-score-form, .main-column .new-message-form). Kept the truly load-bearing
ones (inline-style overrides [style*=...], round buttons vs the broad
button{min-height:44px!important}, and comment-body-row vs mobile.css:164).
- mobile.css (FORK ONLY, user-authorized): removed !important from 7 narrow
forum/chat rules (.forum-comment margin/padding, .comment-body-row flex-dir,
.comment-vote/text-col width, .forum-score-* flex, .comment-textarea width) so
our theme wins without !important. Not touched on UX_OASIS.
Per feedback: bring the bottom bar back to the design that was liked several
versions ago — user-pinned modules, an edit pencil to /settings/bottombar, and a
fixed Peers/Invites pair on the right. The central + FAB is removed. The hive
returns to the header (top) so Personal/Community filter the visible hexagons; the
Explore bottom-sheet is retired. Karvan module kept.
Navigation fixes:
- The bottom "Explore" sheet no longer blocks the top bar: closed state is
visibility:hidden (out of hit-testing), so the top identity buttons and page
content always receive taps (fixes "top buttons don't work").
- Top bar is now identity only (logo, avatar). The Personal/Community filter
moved into the Explore sheet, next to the hive, as a segmented control.
New module "Karvan" (self-contained; inspired by karvan-protocol ephemeral rooms):
- Ephemeral/temporary chat rooms held only in RAM, self-destructing on idle
(30 min) / absolute (2 h) TTL — nothing is written to disk.
- Server relay chat (RAM + polling) as the reliable path, plus a WebRTC
data-channel layer (perfect negotiation, HTTP signaling mailbox) for instant
P2P delivery; degrades to the relay if WebRTC is unavailable. Data-channel
only (no camera/mic) so no wrapper permission changes are needed.
- Files: models/karvan_model.js, views/karvan_view.js, client/public/js/karvan.js;
routes /karvan* + karvanMod config + nav entry (network) + karvanTitle i18n (11 langs).
Additive and gated by OASIS_MOBILE / karvanMod; Linux and the UX_OASIS branch untouched.
Mobile-usability experiment grounded in real studies (Hoober 2013,
Bergstrom-Lehtovirta CHI 2011, Parhi 2006 target size, NN/g 2016 visible nav):
- The hive (categories + modules) opens from the bottom bar as a thumb-reachable
bottom-sheet (checkbox-hack, no JS), freeing the top for content.
- Bottom bar reordered: Explore, PM, (+) publish FAB, Search, Inbox; the central
FAB is the distinct, elevated primary action.
- Network/status quick row (Peers, Graphos, Inbox, Settings) inside the sheet.
- Tap targets >=48px. Additive and gated by OASIS_MOBILE (Linux untouched).
- Topbar: single fixed line [logo][Personal][Community][avatar] in one dark
tone (#121212) with gold accents only; the hive hexagons scroll below it.
- Hive: Personal/Community filter the home hive from any page; opening a
category shows its modules as a 2x2 grid of square buttons (a lone odd
button is centered instead of left-aligned).
- Chats: per-message reply (?replyTo=), chat switcher strip and quote banner;
the message rate limit is lifted on mobile.
- Forums: optional subtopics (?topic=) with threaded rendering.
- Bottombar: fixed Inbox - PM - Write - Search - Graphos - Peers.
- Chats/PM: message bubbles (own messages right with accent, others left),
compact meta, all via the existing .chat-message-self hooks — no view changes.
- Forums: shrink the oversized vote widget to a small horizontal bar, flatten
the nested boxes into one clean comment block, indent replies by depth so
threads read as threads, tone down the highlighted-reply frame.
- Reply/compose: Signal-style row — a growing text box plus a round send
button with a ↩ / ➤ glyph (CSS ::before), instead of the full-width bar.
- All in the OasisMobile theme (loads after mobile.css so it wins by cascade);
where epsylon forces !important on the forum layout we match it, scoped to
the forum/chat widgets. No client JS, no changes to any feature view.
- Turn the header Personal/Community tabs into links to
/activity?hive=personal|community, so they work on every page (they take
you to the home and filter the hexagons), not only while already on
/activity — no more dead buttons off the home.
- Drop the "All" tab: entering shows all 10 categories; clicking a filter
that is already active toggles it off and shows all again.
- Filter the hive server-side (renderHiveNav reads the request filter set
by the middleware) instead of the CSS radio-hack, and drop the now-dead
half-filter CSS. Active tab is highlighted via the .active class.
Fixes the previous commit, which only added the new UI keys (menuCommunity,
menuAll, filter, bb*) to English and thus broke the per-language consistency
check. Add them (plus peerLastChange) to all 11 language files — Spanish
translated, the rest English placeholders to be localized — so every
language has the same key set. i18n test back to green (12/12).
- Personal/Community/All header tabs now filter the home hexagon nav (default
All shows the 10; Personal/Community show their 5) via the CSS radio-hack.
Removed the square-accordion sidebars (.sidebar-left/.sidebar-right) they
replaced.
- Wrap the dense activity filter strip (RECENT/ALL/MINE/…) in a collapsible
FILTER dropdown, hidden by default, keeping the hexagons visible above.
- Add the missing English i18n keys (menuCommunity, menuAll, filter, bb*).
Move the theme content into epsylon's existing OasisMobile.css and drop
the separate OasisMobileUX.css, so there is no new theme file: his mobile
theme just carries the UX styles now. Set themes.current back to
OasisMobile. Same visual result; on mobile builds the theme still loads
after mobile.css so it wins by cascade without !important.
- Link the theme after mobile.css on mobile builds (OASIS_MOBILE=1) so
it wins by cascade; removed ~420 !important, keeping only the few that
override epsylon's inline styles.
- Reveal the quick bar without !important: the inline display:none is
emitted only on desktop.
- Remove unused oasis-mobile-nav.js (it was never linked and would be
blocked by CSP script-src 'none' on clearnet).
- epsylon's mobile.css and OasisMobile.css left untouched.
Rebase onto upstream 0.9.0. Mobile topbar (logo->home, avatar->profile),
hexagon category nav (hive) and bottom bar; remove the six top-bar
buttons (inbox/pm/publish/search/graphos/peers) that cluttered the header.
Theme OasisMobileUX carries topbar/hexagon/bottombar styles.
- Selectable Oasis-Mobile-UX theme; mobile.css kept intact
- Hexagon category launcher on home (10 categories with expandable modules)
- Customizable bottom bar (up to 4 shortcuts, Peers/Invites fixed)
- Empty states and collapsible activity filters