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 9cb69a6d..b5b4589f 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
@@ -126,16 +126,6 @@ let lq__event_presentation_obj = $derived(
return results;
})
);
-let lq__auth__event_presenter_obj = $derived(
- liveQuery(async () => {
- let results = await db_events.presenter.get(
- events_auth_loc.current.auth__person?.presenter_id ?? null
- );
-
- return results;
- })
-);
-
// True if this person is authed as the presenter for this specific record.
// Checks four signals in priority order:
// 1. Trusted staff — always authed.
@@ -167,12 +157,26 @@ let presenter_is_authed = $derived(
let presenter_agree_ok = $derived(
$ae_loc.trusted_access ||
!pres_mgmt_loc.current.require__presenter_agree ||
- !!$lq__auth__event_presenter_obj?.agree
+ !!$lq__event_presenter_obj?.agree
);
// The actual gate for showing/using the upload UI — signed in AND (if required) agreed.
let presenter_can_upload = $derived(presenter_is_authed && presenter_agree_ok);
+// Build the presenter sign-in URL. person_id is included only when there's a real Person
+// record — for email-only presenters (no Person record, person_id is null) the sign-in
+// handler derives identity from presenter_id via Dexie lookup.
+let presenter_sign_in_url = $derived((() => {
+ if (!$lq__event_presenter_obj) return '';
+ const base = `${$ae_loc.url_origin}/events/${$lq__event_presenter_obj.event_id}/session/${$lq__event_presenter_obj.event_session_id}`;
+ const parts: string[] = [];
+ if ($lq__event_presenter_obj.person_id) parts.push(`person_id=${encodeURIComponent($lq__event_presenter_obj.person_id)}`);
+ parts.push(`person_pass=${encodeURIComponent($lq__event_presenter_obj.person_passcode ?? $lq__event_presenter_obj.passcode ?? '')}`);
+ parts.push(`presentation_id=${encodeURIComponent($lq__event_presenter_obj.event_presentation_id ?? '')}`);
+ parts.push(`presenter_id=${encodeURIComponent($lq__event_presenter_obj.event_presenter_id ?? '')}`);
+ return `${base}?${parts.join('&')}`;
+})());
+
// if (browser && $lq__event_presenter_obj) {
// console.log('Pres Mgmt [page]: +presenter.svelte');
// $events_slct.event_presenter_obj = $lq__event_presenter_obj;
@@ -290,14 +294,10 @@ let presenter_can_upload = $derived(presenter_is_authed && presenter_agree_ok);
class="flex flex-row flex-wrap items-center justify-center gap-0.25">
{#if ($lq__event_presenter_obj.person_id || $lq__event_presenter_obj.email) && $ae_loc.trusted_access}
-
-
+