openvibers/openvibe.design Commits

Six rules from 2026-11-10: the menu, the Dock, the balances pill, the account, choices, change marks (#245)

OP OpenVibers committed 3 days ago · 561ed43552 · 1 file, +19 −0

Changes

ddiff --git a/server/rules/register.js b/server/rules/register.js
iindex 1223d27..dbc6e10 100644
---- a/server/rules/register.js
++++ b/server/rules/register.js
@@@ -63,6 +63,9 @@ const RULES = Object.freeze([
'Where a phone has the bottom bar, a strip above the page does not repeat the bar’s places, and one icon means one thing on a site: the globe is not both "Servers" and "Global chat". A link in a bar goes to a page that exists.',
'2026-11-10', 'Chat showed Vibe at the top and at the bottom, used the globe for two places, and its Activity button opened a page that had never existed.',
[{ label: 'The Frame', href: '/system' }], ['OpenVibe.Chat test: shell']),
++ R('a-change-has-a-mark', 'words', 'A change is New, Improved or Fixed, and says so with a small mark.',
++ 'A star for New, an arrow up for Improved, a tick for Fixed. An improvement shows the mark alone, because most changes are improvements and the word beside every row is noise. Never "Better".',
++ '2026-11-10', 'The owner, of Recent changes: "what is this confusing tag … better next to everything?"'),
R('a-hero-does-not-name-the-site', 'words', 'A hero does not say the site’s name above its title.',
'The bar already says which site this is. A line above a hero’s title is there only when it says something the bar does not: a state ("Live now"), a count, a date. A hero shows what the product does, with something real from it, before it describes it.',
'2026-11-10', 'openvibe.exchange opened with "OPENVIBE.EXCHANGE" over its title, under a bar that reads Exchange.',
@@@ -165,6 +168,18 @@ const RULES = Object.freeze([
'The button signs in and comes straight back to the same place. Never a bare link inside a sentence.',
'2026-11-01', 'Ten sites hid sign-in inside paragraphs.',
[{ label: 'Ask with a button', href: '/patterns/ask-with-a-button' }]),
++ R('menu-opens-here', 'navigation', 'The menu button opens on the site you are on.',
++ 'Its first tab is this site: its pages as tiles under "Pages on <site>", the page you are on marked. No tab is remembered between openings; only the picture asks for another tab (You). The current site is first in its group of sites.',
++ '2026-11-10', 'The owner: "this button should open the first tab so people can switch between pages on the site they\'re on … make it clear that those are pages on the site you\'re on."'),
++ R('menu-and-dock-meet', 'navigation', 'The menu and the Dock lead to each other and wear one head.',
++ 'Under the menu\'s tabs a row opens the Dock on Vibe, Agents, Messages or Activity; the Dock\'s head has "Menu". Both open out of the same button, close with the same cross in the same place, and mark the chosen tab with the theme\'s accent.',
++ '2026-11-10', 'The owner, in the menu: "how are you supposed to get to the other menu from this area?" and, of the Dock\'s head: "buggy and kind of ugly … more consistent, cohesive."'),
++ R('one-pill-for-balances', 'navigation', 'The balances are one pill that shows one balance at a time.',
++ 'Only the balances a person has, the largest first. It turns through them on the first page of a visit and now and then. When one changes, the pill turns to it, counts the number and its pieces fly in or out. Each currency has one drawn icon, used wherever that currency is named.',
++ '2026-11-10', 'The owner: "we just show one, but it can animate between all three … it only needs to show the things you have … nice icons that are animated, designed for the three currencies."'),
++ R('account-in-the-menu', 'navigation', 'The account lives in the menu\'s You tab, not in a dropdown.',
++ 'The picture is the last thing in the bar and opens the menu on You: who you are, your other accounts, add an account, settings, sign out, this site\'s own items and Display.',
++ '2026-11-10', 'The owner: "this user drop down is just redundant … move it into the You tab of the menu … consolidate the two into one menu."'),
// ── Phones first ──
R('works-at-320', 'phone', 'Every page fits a 320 px screen without sideways scrolling.',
@@@ -302,6 +317,10 @@ const RULES = Object.freeze([
R('reserved-prefixes', 'building', 'Never name a site class after a shared one.',
'ovg belongs to the glyphs and ovf to the footer; a site’s own class takes its own prefix.',
'2026-11-09', 'A bare .ovg pinned every icon to a corner; a Feed took the footer’s margins.'),
++ R('choices-in-the-composer', 'building', 'What a tool can do is offered as choices in its composer, each showing what is chosen.',
++ 'A choice is a button in the composer\'s tray with its name and its present value (a theme shows its colours). Its options open under it on a computer and rise from the bottom on a phone; choosing closes them. Nothing the server accepts stays unoffered, and the last choices come back.',
++ '2026-11-10', 'openvibe.design/create took a kind, a theme and four ways to pick the designer, and offered two boxes. The owner: "make it more like modular selection."',
++ [{ label: 'Create', href: '/create' }]),
R('own-tokens', 'building', 'A site styles with its own theme tokens, never invented names with fallbacks.',
'A variable the site does not define falls back silently: cards turned white on the dark theme.',
'2026-11-09', 'A sheet written against names the site never defines drew white cards on dark.'),