Commit Graph
28 Commits
Author SHA1 Message Date
Protocolbot d3d832e740 fix: logo bigger (32px), site name and path aligned to right of logo
- Logo 32px to fill more of the header height
- Logo on left, text + crumb path stacked to its right (not below)
- .crumb-text wrapper keeps $ protocol-droid and path together
- Path aligns with the $ sign, not underneath the logo
2026-07-08 22:47:14 -06:00
Protocolbot 762b050132 fix: logo to left of site name, visible size, two-line header
- Logo (24px) sits to the LEFT of $ protocol-droid on the first line
- Crumb path wraps to second line below
- Both in a column layout via .crumb-main wrapper
- Logo is clearly visible at 24x24px
2026-07-08 22:44:55 -06:00
Protocolbot 059ebd68e5 fix: smaller cuter logo, no mouth, snug in header bar
- Smaller head, removed mouth grill, bigger cuter eyes with green centers
- Compact viewBox (100x100) with no empty space below shoulders
- Logo sized 18x22px in header — fits within the bar without resizing it
- Regenerated all PWA icons (192, 512) and favicon
2026-07-08 22:42:18 -06:00
Protocolbot 98ab983f38 fix: constrain source text width on mobile so it doesn't extend off screen
- Desktop: .meta max-width 140px, source wraps within that
- Mobile: .meta max-width 100%, source truncates with ellipsis
- Removed white-space:nowrap from .meta (only .steps stays nowrap)
2026-07-08 21:39:16 -06:00
Protocolbot e9ccb7d3b1 feat: add logo, PWA manifest, favicon
- Geometric Companion logo: rounded head, blue outline, green eyes,
  green antenna tip. SVG for crisp rendering at any size.
- Logo appears in header next to site name
- PWA manifest (manifest.json) with 192px and 512px PNG icons
- Favicon (favicon.ico) for browser tab
- Apple touch icon for iOS home screen
- README: logo replacement instructions for whitelabeling

To replace the logo for whitelabeling, just swap frontend/logo.svg
and the icon PNGs. Update <link> tags in index.html if filename changes.
2026-07-08 18:41:53 -06:00
Protocolbot 31492d55d3 fix: back button navigation — isRouting guard on all hash setting
The isRouting flag prevents showDetail, showCollectionDetail,
showUser, and navigate from setting location.hash when called
from route() (triggered by back button hashchange). This was
creating duplicate history entries that trapped the user.

Also fixed: init() re-route check now uses #protocols not #library,
and removed duplicate location.hash = 'about' in navigate().
2026-07-08 14:23:13 -06:00
Protocolbot a4f52fa07c fix: let source text wrap instead of truncating with ellipsis
- Removed white-space:nowrap from .meta so source text wraps
- Kept max-width:140px so description still gets the majority of space
- Steps count stays on one line (nowrap only on .steps)
2026-07-08 14:18:48 -06:00
Protocolbot 7956ca5306 fix: constrain meta width in protocol pills so description gets space
- .info now uses flex: 1 1 auto (grows to fill available space)
- .meta constrained to max-width: 120px with ellipsis truncation
- Long source text no longer squeezes the description — description
  takes the majority of the width, source is truncated if too long
2026-07-08 14:17:23 -06:00
Protocolbot d7385734e1 feat: move seed loading to admin profile page, add password change
- 'Load Seed Protocols' button now appears on the admin's own profile
  page instead of the About page. Can be repeated to re-import seeds.
- After loading, the profile refreshes to show updated protocol list.
- 'Change Password' button also appears on own profile page for all
  users (not just admin), opening a modal with current/new/confirm fields.
- Password modal added to HTML.
- README updated: seed loading instructions point to profile page,
  mentions 100 protocols, notes repeat seeding is supported.
2026-07-08 14:04:29 -06:00
Protocolbot 59506db7a9 fix: back button navigation — guard hash setting during route()
When the back button triggers hashchange -> route(), the isRouting
flag prevents navigate() and showDetail() from re-setting location.hash,
which was creating duplicate history entries and trapping the user.
Now the back button properly traverses history.
2026-07-08 13:59:55 -06:00
Protocolbot 2278dae455 fix: remove underline on protocol links, fix back button navigation
- Add text-decoration:none and color:inherit to .protocol-pill so
  <a> tags don't show underlines or link colors
- Guard hash setting in showDetail/showCollectionDetail/showUser:
  only set location.hash if it's not already the target, preventing
  the redundant hashchange that was breaking the back button
2026-07-08 13:55:10 -06:00
Protocolbot e514e8aca3 feat: ctrl+click for new tabs, delete redirect, password change
- Protocol and collection pills now use <a href> instead of <div onclick>,
  so ctrl+click (or cmd+click) opens in a new tab, and middle-click works
- Applied consistently: library, collection detail, user profile
- After deleting a protocol or collection, currentRoute is reset so
  navigation back to the list actually works
- Password change: when viewing your own profile, a 'Change Password'
  button appears. Opens a modal requiring current password + new password
  + confirmation. New API endpoint POST /api/auth/password validates
  the current password and updates the hash.
2026-07-08 13:50:11 -06:00
Protocolbot 6e7c03b373 fix: address all audit issues across seed library
CRITICAL (3 files replaced):
- Removed pipe-ceremony (sacred Anishinaabe ceremony)
- Removed condolence-ceremony (restricted Haudenosaunee ritual)
- Removed land-back-rematriation-gathering (named living Ohlone individuals)
- Added: indigenous-council-circle, grief-tending-council,
  land-stewardship-council (non-sacred governance protocols)
- Added: truth-and-reconciliation-circle (to replace removed duplicate)

HIGH (6 fixes):
- Palaver Tree: removed 'West African' from title
- Cabildo Council: renamed from generic 'Community Council'
- Brotherhood Reasoning: removed exoticizing 'ganja-assisted' framing
- Talking Stick Circle: broadened from Ohlone-specific to pan-Indigenous
- Buddhist Debate: replaced controversial NKT source with Sera Monastery
- Oxford Citizens' Assembly: corrected attribution to Oxford City Council

MEDIUM (11 fixes):
- Nyabinghi: noted East African roots of the term
- Shellmound Walk: reframed as contemporary practice
- Jmaa/Imbizo/Ronda: noted gender evolution toward inclusion
- Utari: clarified as kin network term, not practice name
- Samata Melan: clarified as Ambedkarite-inspired contemporary practice
- Ancestor Reverence: removed defensive 'not superstition' framing
- Bod Kyi Gtam: improved source specificity
- Restorative Conference: named specific Indigenous traditions
- Open Space: specified Liberia context for Owen's inspiration

LOW (14 fixes):
- Added macrons to Māori words in pōwhiri
- Contextualized coca leaf in ayni/minga
- Added specific tags (fijian, tongan, samoan) to talanoa
- Improved source URLs for yangban, xeer, indaba, meidung
- Removed duplicate appreciative-apology (kept the better version)
- Clarified council-practice as contemporary synthesis

99 files changed, net 100 protocols in library.
2026-07-08 13:37:27 -06:00
Protocolbot d19a75ace4 fix: rename seed files and IDs to match cleaned titles
All 100 seed YAML files now have:
- Filenames that match their id field
- IDs that are slugs of their titles
- No cultural identifiers in titles or IDs

70 files renamed. e.g. quaker-meeting-for-worship.yaml -> meeting-for-worship.yaml,
moroccan-jmaa-village.yaml -> jmaa-village-assembly.yaml,
japanese-hansei.yaml -> hansei-reflection.yaml
2026-07-08 13:25:35 -06:00
Protocolbot 5c4c6f4874 fix: remove cultural identifiers from protocol titles for consistency
Cultural context remains in descriptions. Titles now uniformly use the
practice name without prefixing the culture, country, religion, or people.
e.g. 'Quaker Meeting for Worship' -> 'Meeting for Worship',
'Moroccan Jmaa Village Assembly' -> 'Jmaa Village Assembly',
'Aboriginal Yarning Circle' -> 'Yarning Circle'.

43 titles updated across the seed library.
2026-07-08 13:22:21 -06:00
Protocolbot 3522c2ec5c feat: expand seed library from 6 to 100 protocols
Added 94 new protocol YAML seed files covering diverse global cultures
and practices:

Indigenous & traditional: Maori powhiri, Aboriginal yarning, Somali xeer,
Moroccan jmaa, Tswana kgotla, Zulu imbizo, Peruvian ronda campesina,
Ohlone land-back, Inuit IQ consensus, Haudenosaunee condolence,
Navajo peacemaking, Ojibwe pipe ceremony, Polynesian talanoa,
Rwandan gacaca, West African palaver tree, Mexican tequio,
Javanese musyawarah-mufakat, Tibetan story council, Korean yangban,
Filipino utari, Ainu practices

Religious communities: Quaker meeting for business, clearness committee,
Amish shunning (Meidung), Mennonite discernment, Jewish hevruta,
Rastafari nyabinghi reasoning

Facilitation: World Cafe, Open Space, Future Search, Six Thinking Hats,
Dynamic Facilitation, Socratic Seminar, Delphi method, Copenhagen
Consensus, Lean Coffee, Hackathon sprint, Agile retrospective,
Stand-up meeting, Pair programming, Roadmap planning

Governance: Sociocratic consent selection, Dynamic self-governance,
Cooperative consensus, Hackerspace consensus, Mastodon governance,
Climate assemblies (x2), Basque asamblearismo

Conflict & repair: Restorative conference, circle sentencing,
Nonviolent Communication (3 protocols), Active listening mirror,
Appreciative apology repair

Community & care: Community kitchen, Gratefulness circle, Passing circle,
Paired walking, Deep listening dyad, Mutual aid, Permaculture charrette

Education: Barefoot College night school, Socratic seminar

Everyday: Various greeting, transition, and gratitude protocols

All protocols credit original sources. Cultural context noted in
descriptions. All YAML files validated.
2026-07-07 22:12:28 -06:00
Protocolbot fec0fa63b0 docs: add whitelabeling instructions to README
Covers: site name/tagline (config.yaml), About page editing,
Terms of Service editing, footer customization, CSS theme variables,
and navigation links.
2026-07-07 21:51:55 -06:00
Protocolbot fac9a140eb fix: suppress empty source, rename 'authored by' to 'contributor:'
- When source is empty or matches @author, only show 'contributor:'
- Renamed 'authored by' to 'contributor:' on protocol and collection detail pages
2026-07-07 21:39:30 -06:00
Protocolbot 7e00656feb fix: rename 'date added' to 'most recent', simplify date label on detail pages
- Sort toggle now says 'most recent' instead of 'date added'
- Sort logic uses index position instead of text matching
- Detail pages show just the date without 'added' prefix
2026-07-07 10:39:23 -06:00
Protocolbot 1148c19fd6 feat: shared rendering, footer, terms of service, git deployment, consistency fixes
Rendering consistency:
- Create shared renderProtocolPill() and renderCollectionPill() functions
  used everywhere: library, collection detail, user profile, picker
- All protocol/collection modules now look identical across all contexts
- Profile page collections and protocols use the same shared renderers
- Protocol grids wrapped in .protocol-grid for consistent spacing

New features:
- Footer with CC-BY 4.0 license link and Terms of Service link
- Terms of Service page stating admin reserves right to remove content
- CC-BY 4.0 default license for submitted content

Deployment:
- README now recommends git clone for initial deployment
- README documents git pull for updates without data loss
- All nav links use #protocols instead of #library

Bug fixes (from previous commits, re-applied to current codebase):
- Delete redirect: reset currentRoute guard so navigate works after delete
- #protocols routing instead of #library
- forked_from: null no longer shows as clickable link
- Source field suppressed when it duplicates author
- Collections say 'curated by' instead of 'authored by'
- Breadcrumb home click works from detail pages
- Search debounce and double-navigation guard
2026-07-06 22:40:34 -06:00
Protocolbot d3077c78b0 fix: suppress source field when it duplicates author, fix leading separator
- When source equals @username (same as the author), don't show SOURCE line
- When source is empty, don't show a leading · separator before 'authored by'
- Collections say 'curated by' instead of 'authored by'
2026-07-06 22:16:16 -06:00
Protocolbot 4c05c1067e fix: YAML folded scalar parser, delete redirect, #protocols routing, forked_from null
- Fix YAML fallback parser to properly handle folded scalars (>-) at
  both top-level (description, outcome, practice) and step-level
  (step descriptions). Previously stored '>-' as the literal value
  instead of the folded text.

- Fix delete protocol/collection: reset currentRoute guard so
  navigate('library') actually works after deletion.

- Change #library hash to #protocols throughout (routing, nav links,
  breadcrumb shows 'protocols/' on the main page).

- Fix breadcrumb home click not working from detail pages (allow
  re-navigation to library even if currentRoute matches).

- Fix forked_from: null showing as a clickable link — now suppressed
  when value is null or the string 'null'.

- README: replace curl seed instructions with About page button,
  add About page customization instructions for whitelabeling.
2026-07-06 20:42:44 -06:00
Protocolbot 524d9b9c95 feat: add 'Load seed protocols' button on About page for admins
No curl needed — admins can now load the 6 example protocols
directly from the About page with a single click.
2026-07-06 15:28:21 -06:00
Protocolbot 385f68a1d7 docs: add data/ directory permissions step to Cloudron instructions 2026-07-06 15:17:26 -06:00
Protocolbot 1d7b4d7abd fix: strip base path in API router for subdirectory deployments
The API router's parse_path() only stripped /api from the URI, but
when deployed in a subdirectory (e.g. /protocol-droid/), the URI is
/protocol-droid/api/auth/register — the /api regex didn't match.
Now detects base path from SCRIPT_NAME and strips it before routing.
2026-07-06 15:05:13 -06:00
Protocolbot 3386ac6542 feat: switch from MySQL to SQLite for zero-dependency deployment
- Rewrite db.php to use SQLite via PDO (no external DB server needed)
- Rewrite schema.sql for SQLite (AUTOINCREMENT, CHECK constraints,
  triggers for updated_at, ON CONFLICT instead of ON DUPLICATE KEY)
- Fix config.php upsert to use ON CONFLICT syntax
- Fix index.php: tag filter via json_each, vote upsert via ON CONFLICT,
  and fix protocol create route (was returning 405 for POST /api/protocols)
- Fix yaml.php seed import: replace invalid false callbacks with fn() => null,
  fix yaml_parse pos argument (-1 -> 0)
- Update Dockerfile: drop pdo_mysql/mysqli (pdo_sqlite is built in)
- Update CloudronManifest.json: remove mysql addon, bump to v0.3.0
- Update README for SQLite deployment
2026-07-06 14:42:45 -06:00
Protocolbot 7379d0c540 fix: rewrite asset and API paths for subdirectory deployments
index.html uses absolute /frontend/ paths for CSS and JS, and app.js
hardcoded const API = '/api'. In subdirectory deployments these resolve
to the wrong URL, causing unstyled HTML and broken API calls.

- index.php: rewrite /frontend/ references in index.html with detected basePath
- app.js: derive BASE_PATH from the script's own URL and prefix API calls
2026-07-06 13:36:08 -06:00
Protocolbot 02794e565e feat: initial release of Protocol Droid v0.2.0
A tool for authoring, sharing, and curating social protocols.

Features:
- Protocol library with search, tag filtering, and sort by date/relevance
- Protocol authoring with structured fields (title, description, steps, outcome, practice, source, tags)
- Protocol forking with provenance tracking
- Collection creation with searchable protocol picker and ordering
- User accounts with roles (admin, member, viewer)
- YAML import/export for portability
- Self-hostable on LAMP/Cloudron, works in subdirectories
- Responsive design with hamburger menu on mobile
- About page

Security:
- CSRF protection via Origin/Referer validation
- Session regeneration on login/register
- Secure session cookie params (HttpOnly, SameSite, Secure)
- Visibility enforcement on private/unlisted items
- YAML object injection hardening
- Login rate limiting
- Path traversal protection
- Input validation and length clamping
- Vote value constraining

Stack: PHP 8.x + MySQL/MariaDB, vanilla JS frontend, no external dependencies.

Hippocratic License (HL3-CORE).
2026-07-06 13:18:08 -06:00