Invite links for existing users with profile pre-population #30

Closed
opened 2026-06-24 14:39:26 +00:00 by casper-stevens · 1 comment
Member

Generate invite links for existing/known users that pre-populate their profile from data we already have.

Privacy: the profile stays private until the user themselves opts in to make it public — pre-population must not auto-publish.


Filed from the conference-organiser action items (2026-06-24).

Generate invite links for existing/known users that **pre-populate** their profile from data we already have. **Privacy:** the profile stays private until the user themselves opts in to make it public — pre-population must not auto-publish. --- _Filed from the conference-organiser action items (2026-06-24)._
Author
Member

Implemented + merged to development (commit f46945c, merged via ed7b961).

The importer engine for #36. Admin pastes a CSV → participant profiles are pre-populated, kept private until the user opts in to publish.

  • participants_import_csv (admin-gated): header-based, case/space-insensitive, email = dedup key, unknown columns ignored, list columns split on ;. Recognized: email, name, title, country, org, sector, bio, linkedin, website, here_to, ask_me_about, can_help_with, love_to_meet, priority_topics.
  • New rows created private (profile_published=false, role=participant, blank/unknown sector → new Unspecified). Existing rows merged fill-empty-only — never clobbers a user's own edits, role, or publish state.
  • Optional email a sign-in link per row (off by default — staged accounts, no surprise mass-mail; ties to #42).
  • Privacy enforced server-side: the directory read only returns a profile if it's published, it's your own, or you're an admin — unpublished pre-filled profiles never reach other members. A one-time migration backfills existing accounts to published so the directory doesn't empty.
  • UI: admin Import participants (CSV) card (paste + per-row results + opt-in email checkbox) and a profile Publish my profile toggle.
  • Covered by a hermetic test (import create/update/merge + unpublished hidden from members, visible to self/admin).

Verified at build + test level (clean server/wasm builds, passing test). #36 is now just running this with the real CSV.

Implemented + merged to `development` (commit `f46945c`, merged via `ed7b961`). **The importer engine for #36.** Admin pastes a CSV → participant profiles are pre-populated, kept **private until the user opts in to publish**. - `participants_import_csv` (admin-gated): header-based, case/space-insensitive, `email` = dedup key, unknown columns ignored, list columns split on `;`. Recognized: email, name, title, country, org, sector, bio, linkedin, website, here_to, ask_me_about, can_help_with, love_to_meet, priority_topics. - **New rows** created private (`profile_published=false`, role=participant, blank/unknown sector → new `Unspecified`). **Existing rows** merged *fill-empty-only* — never clobbers a user's own edits, role, or publish state. - Optional **email a sign-in link per row** (off by default — staged accounts, no surprise mass-mail; ties to #42). - **Privacy enforced server-side:** the directory read only returns a profile if it's published, it's your own, or you're an admin — unpublished pre-filled profiles never reach other members. A one-time migration backfills existing accounts to published so the directory doesn't empty. - UI: admin **Import participants (CSV)** card (paste + per-row results + opt-in email checkbox) and a profile **Publish my profile** toggle. - Covered by a hermetic test (import create/update/merge + unpublished hidden from members, visible to self/admin). Verified at build + test level (clean server/wasm builds, passing test). #36 is now just running this with the real CSV.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
coopcloud_code/cm50_app#30
No description provided.