Commit graph

162 commits

Author SHA1 Message Date
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
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
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
7b4b6feb51 refactor(helcim): use centralized helper in 5 simple endpoints 2026-04-08 21:44:18 +01:00
07e005ebfc refactor(helcim): make helcimFetch body check consistent 2026-04-08 21:40:53 +01:00
783459106f refactor(helcim): introduce centralized helcim helper 2026-04-08 21:37:11 +01:00
92e7dae74c feat(admin): add restore dismissed alerts flow
Some checks failed
Test / vitest (push) Successful in 11m48s
Test / playwright (push) Failing after 9m50s
Test / visual (push) Failing after 9m19s
Test / Notify on failure (push) Successful in 2s
Admins can now surface dismissed alert types without waiting for the
underlying data to change. Adds a collapsible "Restore dismissed"
section below the active alerts with per-type checkboxes.

- ALERT_METADATA map in adminAlerts.js as the single source of truth
  for slug → title/severity; detectors refactored to reference it
- GET /api/admin/alerts/dismissed returns this admin's dismissals
  joined with metadata (title, severity, dismissedAt)
- POST /api/admin/alerts/restore deletes dismissals by alertType[],
  returns the deleted count
- AdminAlertsPanel fetches both active + dismissed; stays visible
  when either is non-empty; checkboxes + "Restore selected" button
- adminAlertRestoreSchema validates the POST body against the enum
- Auth guards test covers both new routes
2026-04-08 12:22:35 +01:00
21cf8d79b3 feat(admin): add POST /api/admin/alerts/dismiss endpoint 2026-04-08 11:20:10 +01:00
f0284c60b4 feat(admin): add GET /api/admin/alerts endpoint 2026-04-08 11:17:50 +01:00
4f7a11bcf3 feat(admin): add alert aggregator with dismissal filtering 2026-04-08 11:14:54 +01:00
0dc1b6ddbc feat(admin): add pending tag suggestions detector 2026-04-08 11:12:52 +01:00
ab3f0a8b39 feat(admin): add event alert detectors 2026-04-08 11:11:32 +01:00
4bae4b0ec3 feat(admin): add pre-registrant alert detectors 2026-04-08 11:09:39 +01:00
824364d526 feat(admin): add member onboarding alert detectors 2026-04-08 11:08:09 +01:00
d3a961f765 feat(admin): add adminAlerts module shell with thresholds and signature helper 2026-04-08 11:06:02 +01:00
7544424484 feat(admin): add adminAlertDismissSchema 2026-04-08 11:04:27 +01:00
0c3bfc3030 feat(admin): add AdminAlertDismissal model 2026-04-08 11:00:31 +01:00
fb25e72215 Huge bunch of UI/UX improvements and tweaks!
Some checks failed
Test / vitest (push) Successful in 10m36s
Test / playwright (push) Failing after 9m23s
Test / visual (push) Failing after 9m13s
Test / Notify on failure (push) Successful in 2s
2026-04-06 16:17:12 +01:00
501be10bfe feat: pre-registrant management and invitation system
Admin interface to review, filter, and batch-invite the 95 pre-registrants
from Baby Ghosts. Accept-invitation page pre-fills their data and collects
circle, pronouns, motivation, contribution tier, and agreement before
creating their member record.
2026-04-06 14:46:11 +01:00
bab53cec9e merge: worktree-a11y-fixes into main
Some checks failed
Test / vitest (push) Successful in 12m45s
Test / playwright (push) Failing after 10m5s
Test / visual (push) Failing after 9m16s
Accessibility fixes (aria-labels, color contrast, html lang, inline link
underlines), atomic dev login endpoints, and E2E test hardening.
2026-04-05 22:05:00 +01:00
c40f2c7c63 fix: accessibility improvements and test infrastructure hardening
Add aria-labels to form controls (selects, checkboxes, switches), set
html lang attribute and page title, fix color contrast for --candle-dim
and --text-faint tokens, underline inline links, remove opacity hack.
Harden dev login endpoints with atomic findOneAndUpdate and tokenVersion
in JWT. Update Playwright timeouts and E2E test helpers.
2026-04-05 21:59:02 +01:00
dae983734a Accessibility fixes. 2026-04-05 19:27:25 +01:00
6573e30d31 fix: wire showHidden param through suggestions API, remove dead code 2026-04-05 17:00:06 +01:00
dcb80e6006 feat: add connection API endpoints
Suggestions, create/confirm/hide/withdraw actions, my connections list,
and pending count for nav badge.
2026-04-05 16:48:10 +01:00
896de2e7fd feat: add craft tags and community connections to directory and profiles
Update member directory and public profile APIs to include craftTags
and communityConnections with privacy-aware filtering. Directory now
uses predefined tags from the Tag model for filter bars and supports
craftTag/connectionTag query filters. Frontend shows craft tag pills
and cooperative topics with state labels, falling back to old
offering/lookingFor fields. Add Connections nav item.
2026-04-05 16:40:10 +01:00
bd07172093 fix: add connectionRequests to notification schema, remove dead notifyPeerRequests 2026-04-05 16:31:49 +01:00
3faa1f8e85 feat: add community-connections API endpoint and update profile handler
New PATCH /api/members/me/community-connections endpoint following peer-support.patch.js pattern (requireAuth, validateBody, dot-notation $set, Slack user lookup when offerPeerSupport+slackHandle set, logActivity).

Profile endpoint updated with craftTags handling, craftTagsPrivacy and communityConnectionsPrivacy in privacy fields, and craftTags in response.
2026-04-05 16:19:49 +01:00
06ee77592f feat: add community connections activity log types
Adds COMMUNITY_CONNECTIONS_UPDATED, CONNECTION_REQUESTED, CONNECTION_CONFIRMED,
and TAG_SUGGESTED to ACTIVITY_TYPES, ACTIVITY_TYPE_DEFAULTS, the Mongoose enum,
and activityText formatters. All four default to member visibility.
2026-04-05 16:17:25 +01:00
79d038c724 feat: add Tags API endpoints and validation schemas
- GET /api/tags — public, filterable by ?pool=craft|cooperative, active only, sorted by label
- POST /api/tags/suggest — auth-required, creates TagSuggestion doc
- Add tagSuggestionSchema and communityConnectionsUpdateSchema to schemas.js
- Extend memberProfileUpdateSchema with craftTags, craftTagsPrivacy, communityConnectionsPrivacy
2026-04-05 16:15:29 +01:00
1cb029a881 feat: add seed-tags and migrate-community-connections scripts
Idempotent seed for 16 craft + 20 cooperative tags by slug. Migration
maps existing offering/lookingFor tags to communityConnections.topics
and copies peerSupport fields without deleting originals.
2026-04-05 16:11:52 +01:00
4b6ff19d5f fix: add state enums to Connection matchingTags, index to TagSuggestion 2026-04-05 16:09:20 +01:00
8112e5ea47 feat: add Tag, TagSuggestion, Connection models and extend Member schema
Adds three new Mongoose models for the community connections feature. Extends
Member with craftTags, communityConnections block, privacy fields for both,
and a connectionRequests notification preference.
2026-04-05 16:06:03 +01:00
0ae18f495e Tests, UX improvements. 2026-04-05 14:25:29 +01:00
4e6f5d36b8 UX/UI improvements. 2026-04-05 13:26:51 +01:00
418d3cc402 UI/UX tweaks and improvements. 2026-04-05 12:28:41 +01:00
036af95e00 fix: replace member.save() in invite.post.js and remove stale NUXT_PUBLIC_HELCIM_TOKEN env check 2026-04-04 14:02:06 +01:00
d31b5b4dac fix: use private helcimApiToken for all server-side Helcim API calls 2026-04-04 13:37:34 +01:00
ccd1d0783a fix: use canonical member email for series registration when authenticated 2026-04-04 13:27:47 +01:00