Commit graph

370 commits

Author SHA1 Message Date
fc7ec52574 restrict members page to authenticated users only, remove public access 2026-04-13 22:26:14 +01:00
1d469c3617 fix: use CircleBadge consistently, load directory on 401 revert, skip redundant API call in ecology mode 2026-04-13 21:13:50 +01:00
d4c1664e5c fix: mobile filter layout + ecology count reflects filtered set 2026-04-13 21:11:09 +01:00
a3bd7d4e50 feat: rewrite /members as unified directory + ecology page
Merge the directory and ecology views into a single page with a
segmented toggle. Directory mode is public; ecology mode requires auth.
URL-driven view state (?view=ecology), collapsible tags drawer,
filter-state reset on mode switch, onboarding tracking, and responsive
breakpoints at 1024/768/375px.
2026-04-13 21:08:27 +01:00
a448ea809d refactor: merge ecology into /members, redirect old routes
- ecology.vue replaced with redirect to /members?view=ecology
- connections.vue updated to skip the /ecology hop, redirects directly
- Remove Ecology nav entry; Members covers it
2026-04-13 21:03:21 +01:00
4fff0bf4cd content: fix hero copy, drop "business" from cooperative models 2026-04-13 12:47:11 +01:00
7b9448ffd5 style(coming-soon): align with design system tokens
Some checks failed
Test / vitest (push) Successful in 11m46s
Test / playwright (push) Failing after 9m34s
Test / visual (push) Failing after 9m19s
Test / Notify on failure (push) Successful in 2s
Replace Tailwind utility color classes with CSS custom properties,
remove rounded corners, use dashed borders and parch button style.
2026-04-12 11:16:53 +01:00
c6b970a621 Design token updates.
Some checks failed
Test / vitest (push) Successful in 10m47s
Test / playwright (push) Failing after 9m11s
Test / visual (push) Failing after 9m11s
Test / Notify on failure (push) Successful in 2s
2026-04-11 23:24:38 +01:00
de3bcc479a fix(auth): rewire OIDC logout/error flow through Nuxt pages
Some checks failed
Test / playwright (push) Blocked by required conditions
Test / Notify on failure (push) Blocked by required conditions
Test / visual (push) Blocked by required conditions
Test / vitest (push) Has been cancelled
Migrate three render callbacks in oidc-provider (logoutSource,
postLogoutSuccessSource, renderError) from the baked guildPageShell
helper to Nuxt pages under app/pages/auth/, so they go through the
font module and design system instead of a shadow copy.

- Delete guildPageShell (~103 lines of shadow design system).
- Add /auth/logout-success, /auth/oidc-error, /auth/logout-confirm
  pages built on dashed-box + btn + main.css tokens.
- renderError now allow-lists error + error_description into query
  params and lets Vue default interpolation escape them, closing an
  XSS where OIDC error fields were concatenated into raw HTML.
- logoutSource extracts the xsrf from oidc-provider's stable form
  output, sets it as an httpOnly 2-minute cookie, and redirects to
  /auth/logout-confirm. The confirm page reads the cookie during SSR,
  persists the value to useState, and clears the cookie so it's
  strictly one-time use. Defensive fallback keeps the raw auto-submit
  form if oidc-provider ever changes its form format.
- Fix form actions emitting http:// in production at the root cause:
  oidc-provider extends Koa but calls super() with no args, so
  app.proxy defaults to false and ctx.protocol ignores
  X-Forwarded-Proto. Set _provider.proxy = true after construction;
  remove the bogus proxy:true config key (silently ignored) and the
  form.replace('http://', 'https://') symptom patch. Make the
  x-forwarded-proto override in the catchall conditional on
  production + missing header (was unconditional + dead code).
- Add site-wide .btn:focus-visible rule in main.css for WCAG 2.4.7.

Verified in browser: Brygada 1918 loads on all three pages, contrast
ratios pass AA in dark + light, XSS payload escapes to text nodes
only, Set-Cookie: Max-Age=0 enforces one-time xsrf use, no
horizontal overflow at 500px, no console errors.
2026-04-11 23:21:46 +01:00
98d3610a08 fix(auth): rewrite wiki-login page against real design system
Some checks failed
Test / vitest (push) Successful in 11m48s
Test / playwright (push) Failing after 9m42s
Test / visual (push) Failing after 9m25s
Test / Notify on failure (push) Successful in 2s
The page referenced phantom tokens (--color-guild-*, --color-candlelight-*,
--color-ember-400) that don't exist, leaving the card, input, and button
transparent with no borders. Rewrote the template and styles using the
real design system utilities (.dashed-box, .field, .btn-primary,
.section-label, .section-divider) and tokens (--candle, --ember, --bg,
--border, --text-*), plus semantic landmarks and aria-live status roles.
2026-04-11 15:40:36 +01:00
e791a0d480 fix(onboarding): fix widget links, isComplete logic, and event slugs
Some checks failed
Test / vitest (push) Successful in 10m44s
Test / playwright (push) Failing after 9m15s
Test / visual (push) Failing after 9m7s
Test / Notify on failure (push) Successful in 2s
Use dynamic href for external links, check completedAt for graduation,
link events by slug instead of _id, and remove stale click handler.
2026-04-09 23:52:04 +01:00
50a358b294 feat(wiki): add batch tag remove mode to admin wiki page
Add add/remove toggle to batch tag picker. Clean up unused requireAdmin
import from wiki sync route.
2026-04-09 23:52:00 +01:00
a516f172fb refactor: extract escapeRegex and validateTagSlugs server utils
Deduplicate tag validation and regex escaping into shared auto-imported
utils. Add tag validation to wiki patch/batch-tag routes. Remove
duplicate tags field from event schema.
2026-04-09 23:51:56 +01:00
f585fabf21 Merge branch 'worktree-agent-a975576d' 2026-04-09 22:46:52 +01:00
2cab40aa65 Merge branch 'worktree-agent-a0328c91' 2026-04-09 22:46:52 +01:00
7c3a10232d feat(onboarding): add tracking calls to event, ecology, and wiki pages 2026-04-09 22:46:41 +01:00
3ce559a24c feat(onboarding): integrate widget into dashboard and sidebar indicator 2026-04-09 22:46:39 +01:00
8a673ae158 Merge branch 'worktree-agent-afb1f376' 2026-04-09 22:44:55 +01:00
3ff7cd4e0b feat(onboarding): add OnboardingWidget component 2026-04-09 22:44:41 +01:00
dbf1f44dce Merge branch 'worktree-agent-a244f119' 2026-04-09 22:43:01 +01:00
e27718f450 Merge branch 'worktree-agent-ad42524c' 2026-04-09 22:43:01 +01:00
795b856d56 feat(wiki): add admin wiki management page 2026-04-09 22:42:43 +01:00
5d3b04af48 feat(onboarding): add useOnboarding composable 2026-04-09 22:41:30 +01:00
22530ac1e3 Merge branch 'worktree-agent-a2b84f8b' 2026-04-09 22:38:36 +01:00
20c961113d Merge branch 'worktree-agent-ac00ecc9' 2026-04-09 22:38:36 +01:00
8b2f6d5240 Merge branch 'worktree-agent-abf17134' 2026-04-09 22:38:36 +01:00
337664790f feat(events): add tag selector to admin event form 2026-04-09 22:38:20 +01:00
e4f2efd6d0 feat(wiki): add admin wiki management API routes 2026-04-09 22:36:44 +01:00
d3a5c1a3a7 feat(wiki): add tag-based wiki recommendations API 2026-04-09 22:36:19 +01:00
b54b57cd90 Merge branch 'worktree-agent-aff832dd' 2026-04-09 22:34:09 +01:00
3a22a327fe Merge branch 'worktree-agent-a0ee41bb' 2026-04-09 22:34:09 +01:00
4a475ca5ba Merge branch 'worktree-agent-a54bb856'
# Conflicts:
#	server/models/wikiArticle.js
2026-04-09 22:34:09 +01:00
bda0fe6eb7 Merge branch 'worktree-agent-acfdfab5'
# Conflicts:
#	server/models/event.js
2026-04-09 22:33:54 +01:00
abca0fb7d6 Merge branch 'worktree-agent-a5a0c7d9' 2026-04-09 22:33:41 +01:00
b93c735442 Merge branch 'worktree-agent-a53b58a7' 2026-04-09 22:33:41 +01:00
905b5155e2 feat(wiki): add Outline utility and wiki sync API 2026-04-09 22:33:06 +01:00
327f504df9 feat(slack): add background job to detect Slack workspace joins 2026-04-09 22:32:48 +01:00
2166ee32ca feat(events): add tag validation to admin event create/edit routes 2026-04-09 22:32:32 +01:00
fcbad24f3e feat(events): add tag-based event recommendations API 2026-04-09 22:32:11 +01:00
56376d1995 feat(onboarding): add onboarding status and track API routes with tests 2026-04-09 22:31:57 +01:00
340b739bf2 feat(onboarding): show onboarding progress on admin member detail 2026-04-09 22:31:30 +01:00
3144cbe213 feat(onboarding): redirect /welcome to /member/dashboard 2026-04-09 22:28:57 +01:00
9fe8d99808 feat(onboarding): add Member onboarding subdocument, Event tags, and WikiArticle model 2026-04-09 22:28:51 +01:00
3797ff7925 refactor(peer-support): clean up stale references (Phase 5)
Some checks failed
Test / vitest (push) Successful in 10m33s
Test / playwright (push) Failing after 9m11s
Test / visual (push) Failing after 9m13s
Test / Notify on failure (push) Successful in 2s
Update CSS comment from "Community Connections" to "Community
Ecology" in member detail page. Docs, CLAUDE.md, and activity log
spec also updated (gitignored, local only).
2026-04-09 09:31:37 +01:00
b234b8483f refactor(peer-support): update remaining UI references (Phase 2)
Dashboard: replace "Peer Support" card and "Book a peer session"
quick action with community ecology links.

Welcome: replace "Peer Support" resource card with "Community
Ecology" heading and link to /ecology.

Members index: rename active filter tag from "Offering Peer
Support" to "Offering Support". The underlying filter still works
correctly (queries communityEcology.offerPeerSupport).
2026-04-09 09:16:40 +01:00
0b3896d984 refactor(community): rename Community Connections → Community Ecology
Some checks failed
Test / vitest (push) Successful in 11m42s
Test / playwright (push) Failing after 9m27s
Test / visual (push) Failing after 9m53s
Test / Notify on failure (push) Successful in 2s
Simplify the feature to pure discovery (filter by topic, see matching
members, copy Slack handle). Drop the connection request/confirm flow
entirely — Connection model, 7 API endpoints, useConnections composable,
and TagInput component deleted.

- Rename communityConnections → communityEcology in schema, API, pages
- Delete legacy fields: offering, lookingFor, peerSupport
- New /ecology page, /api/ecology/suggestions, community-ecology.patch
- Nav: "Connections" → "Ecology", remove pending-count badge
- Fix auth/member.get.js missing craftTags + communityEcology
- Add community_ecology_updated activity log type
- Expose slackHandle conditionally when offerPeerSupport is true
- Add migration script at scripts/migrate-to-ecology.js (run before deploy)
2026-04-09 09:07:15 +01:00
9577929e0d refactor(peer-support): delete provably dead code (Phase 1)
The Skills Exchange + Peer Support feature was replaced by Community
Connections on 2026-04-05, but several files and code paths were left
in place as backward-compat. None are reachable from the live UI:

- usePeerSupport.js composable: not imported anywhere
- PeerSupportBadge.vue: not imported anywhere
- peer-support.vue: stub redirect with no incoming links
- /api/peer-support.get.js: only consumed by usePeerSupport
- /api/members/me/peer-support.patch.js: same
- profile.patch.js offering/lookingFor write branches: profile form
  no longer sends these fields (only writes communityConnections.*)
- PEER_SUPPORT_ENABLED/DISABLED activity types and renderers: only
  written by the deleted peer-support.patch endpoint. The activityText
  formatter has a fallback for unknown types so existing records
  still display ("peer support enabled" with a generic icon).

Tests updated to drop peerSupportUpdateSchema coverage and the
offering/lookingFor passthrough assertion.

schemas.js cleanup deferred — concurrent communityConnections →
communityEcology rename is in flight in the working tree.
2026-04-08 22:28:35 +01:00
130e5bfa9f refactor(helcim): use helper in unused admin endpoints 2026-04-08 22:11:25 +01:00
0d792c7c70 refactor(members): use helcim helper + fix wrong card-lookup URL 2026-04-08 22:03:42 +01:00
03d6a66b84 refactor(helcim): use helper in subscription endpoint 2026-04-08 21:53:26 +01:00