From affbd0dc2074dbe922cec869edd78cd4c84554f6 Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Mon, 15 Jun 2026 17:02:29 -0400 Subject: [PATCH] feat: use email as identity anchor for presenters without Person records For events like LCI where ~75% of presenters are not in iMIS and have no Person record, person_id on the presenter is null. Email (from the spreadsheet import) is now the fallback identity throughout the sign-in flow: - expand_auth_for_person: detects email via '@', routes Dexie and API lookups to presenter.email field instead of person_id. Keys auth__kv.presenter by BOTH event_presenter_id and email so any sibling presenter record with the same email auto-unlocks without per-ID lookups. - Copy Access Link button: now visible for any presenter with person_id OR email. URL uses person_id ?? email and person_passcode ?? passcode as fallbacks. - Email Access Link button: now visible for person_primary_email OR email. Sends to the best available address; passes email as person_id when no Person record. - presenter_agree_enabled: checks auth__kv.presenter[email] as a second key so the Agreed button unlocks across all sessions for the same email identity. Co-Authored-By: Claude Sonnet 4.6 --- .../presenter/[presenter_id]/+page.svelte | 47 ++++++++----------- .../[presenter_id]/presenter_page_menu.svelte | 10 ++-- .../events/[event_id]/sign_in_out.svelte | 27 +++++++++-- 3 files changed, 47 insertions(+), 37 deletions(-) diff --git a/src/routes/events/[event_id]/(pres_mgmt)/presenter/[presenter_id]/+page.svelte b/src/routes/events/[event_id]/(pres_mgmt)/presenter/[presenter_id]/+page.svelte index 1473a72b..9189ffa5 100644 --- a/src/routes/events/[event_id]/(pres_mgmt)/presenter/[presenter_id]/+page.svelte +++ b/src/routes/events/[event_id]/(pres_mgmt)/presenter/[presenter_id]/+page.svelte @@ -244,8 +244,9 @@ let presenter_is_authed = $derived( - {#if $lq__event_presenter_obj.person_id && $ae_loc.trusted_access} + {#if ($lq__event_presenter_obj.person_id || $lq__event_presenter_obj.email) && $ae_loc.trusted_access} + {/if} - {#if pres_mgmt_loc.current.show__email_access_link && $lq__event_presenter_obj?.person_primary_email} + {#if pres_mgmt_loc.current.show__email_access_link && ($lq__event_presenter_obj?.person_primary_email || $lq__event_presenter_obj?.email)}