From 2457d95a896a5233447a1cb19818ecddc2cc0566 Mon Sep 17 00:00:00 2001 From: Tony Nguyen Date: Wed, 14 Oct 2026 15:40:17 -0500 Subject: [PATCH 1/6] TOS and Privacy just place holder waiting for rae to give what tos we should use --- app/pages/auth.vue | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/app/pages/auth.vue b/app/pages/auth.vue index a57c643..02690e6 100644 --- a/app/pages/auth.vue +++ b/app/pages/auth.vue @@ -47,12 +47,16 @@ const loginRole = computed(() => { const isNewUser = ref(false) const checkingEmail = ref(false) +const tosCheck = ref(false) const schema = computed(() => { if (isNewUser.value) { return z.object({ email: z.string().email('Invalid email'), name: z.string().min(1, 'Name is required'), + tosCheck: z.literal(true, { + message: 'You must accept the Terms of Service and Privacy Policy', + }), }) } @@ -64,6 +68,7 @@ const schema = computed(() => { const state = reactive({ email: '', name: '', + tosCheck: false, }) async function sendMagicLink(callbackURL: string) { @@ -167,6 +172,18 @@ async function handleSubmit(_event: FormSubmitEvent) { description: 'Please enter your name to create an account.', color: 'primary', }) + + //Ensure that user accepts tos before allowing submission + async function onSubmit(){ + if (isNewUser.value && !state.tosCheck) { + toast.add({ + title: 'Error', + description: 'You must accept the Terms of Service and Privacy Policy to create an account.', + color: 'error', + }) + return + } + } } @@ -233,6 +250,30 @@ async function handleSubmit(_event: FormSubmitEvent) { /> + + Date: Mon, 26 Oct 2026 15:17:11 -0500 Subject: [PATCH 2/6] I change it form a nuxt link to a page to a href to make it similar to the old raffle thing after completing form. --- app/pages/auth.vue | 73 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 66 insertions(+), 7 deletions(-) diff --git a/app/pages/auth.vue b/app/pages/auth.vue index 02690e6..c11629c 100644 --- a/app/pages/auth.vue +++ b/app/pages/auth.vue @@ -48,6 +48,7 @@ const loginRole = computed(() => { const isNewUser = ref(false) const checkingEmail = ref(false) const tosCheck = ref(false) +const showTos = ref(false) const schema = computed(() => { if (isNewUser.value) { @@ -263,16 +264,74 @@ async function handleSubmit(_event: FormSubmitEvent) { + + +
+ +
+ +
+ +

+ Terms of Service +

+ +
+

+ This Release and Waiver of Liability (the “Release”) executed on ___/___/___ (date) by + __________________________ (“Participant”) releases Friends of MLK (“FOMLK”) and each of its directors, + officers, employees, and agents from any and all liability, claims, demands, costs and damages of any kind. + Participant understands that the scope of Participant’s relationship with FOMLK is limited to a Participant position + and that no compensation is expected in return for services provided by Participant; that FOMLK will not provide + any benefits traditionally associated with employment to Participant; and that Participant is responsible for his/her + own insurance coverage in the event of personal injury or illness as a result of Participant’s services to FOMLK. + 1. Waiver and Release: I, the Participant, release and forever discharge and hold harmless FOMLK and its + successors and assigns from any and all liability, claims, and demands of whatever kind of nature, either in law or in + equity, which arise or may hereafter arise from the services I provide to FOMLK. I understand and acknowledge + that this Release discharges FOMLK from any liability or claim that I may have against FOMLK with respect to + bodily injury, personal injury, illness, death, or property damage that may result from the services I provide to + FOMLK or occurring while I am providing Participant services. + 2. Insurance: Further I understand that FOMLK does not assume any responsibility for or obligation to + provide me with financial or other assistance, including but not limited to medical, health, or disability benefits or + insurance. I expressly waive any such claim for compensation or liability on the part of FOMLK beyond what may + be offered freely by FOMLK in the event of injury or medical expenses incurred by me. + 3. Medical Treatment: I hereby Release and forever discharge FOMLK from any claim whatsoever which + arises or may hereafter arise on account of any first-aid treatment or other medical services rendered in connection + with an emergency during my tenure as a Participant with FOMLK. + 4. Assumption of Risk: I understand that the services I provide to FOMLK should not but may include + activities that may be hazardous to me. As a Participant, I hereby expressly assume risk of injury or harm from these + activities and Release FOMLK from all liability. + 5. Photographic Release: I grant and convey to FOMLK all right, title, and interests in any and all products, + photographs, images, video, or audio recordings of me or my likeness or voice made by FOMLK in connection with + my providing Participant services to FOMLK. + 6. Other: As a Participant, I expressly agree that this Release is intended to be as broad and inclusive as + permitted. I agree that in the event that any clause or provision of this Release is deemed invalid, the enforceability + of the remaining provisions of this Release shall not be affected. I agree to indemnify, defend, and hold harmless + FOMLK, and its directors, officers, employees, agents, subsidiaries and affiliates from and against any and all + losses, injuries, claims, demands, liabilities, obligations, suits, penalties, forfeitures, costs or expenses of every kind + including but not limited to attorney’s fees, arising out of participation in FOMLK activities. + By clicking the checkbox, I express my understanding and intent to enter into this Release and Waiver of Liability willingly + and voluntarily. +

+
+ + +
+
+ Date: Wed, 28 Oct 2026 13:21:38 -0500 Subject: [PATCH 3/6] server rejection when box is unchecked, and added visible error message --- app/pages/auth.vue | 26 +++++++------------------- server/utils/schemas.ts | 1 + 2 files changed, 8 insertions(+), 19 deletions(-) diff --git a/app/pages/auth.vue b/app/pages/auth.vue index c11629c..185acfc 100644 --- a/app/pages/auth.vue +++ b/app/pages/auth.vue @@ -47,7 +47,6 @@ const loginRole = computed(() => { const isNewUser = ref(false) const checkingEmail = ref(false) -const tosCheck = ref(false) const showTos = ref(false) const schema = computed(() => { @@ -56,7 +55,7 @@ const schema = computed(() => { email: z.string().email('Invalid email'), name: z.string().min(1, 'Name is required'), tosCheck: z.literal(true, { - message: 'You must accept the Terms of Service and Privacy Policy', + message: 'You must accept the Terms of Service to create an account.', }), }) } @@ -101,6 +100,7 @@ async function handleSubmit(_event: FormSubmitEvent) { email: state.email, name: state.name, role: loginRole.value, + tosCheck: state.tosCheck, }, }).catch((error) => { toast.add({ @@ -174,17 +174,7 @@ async function handleSubmit(_event: FormSubmitEvent) { color: 'primary', }) - //Ensure that user accepts tos before allowing submission - async function onSubmit(){ - if (isNewUser.value && !state.tosCheck) { - toast.add({ - title: 'Error', - description: 'You must accept the Terms of Service and Privacy Policy to create an account.', - color: 'error', - }) - return - } - } + } @@ -251,9 +241,7 @@ async function handleSubmit(_event: FormSubmitEvent) { /> - +
) { style="border-radius:2.5rem; box-shadow:0 20px 60px rgba(0,0,0,0.3); border-bottom:8px solid var(--brand-gold);">

- Terms of Service + Release and Waiver of Liability

diff --git a/server/utils/schemas.ts b/server/utils/schemas.ts index 5a97773..7a68a4f 100644 --- a/server/utils/schemas.ts +++ b/server/utils/schemas.ts @@ -6,6 +6,7 @@ export const userCreateSchema = z.object({ name: z.string().min(1).max(100), email: emailSchema, role: z.enum(['coach', 'reader']).default('reader'), + tosCheck: z.literal(true, { message: 'You must accept the Terms of Service to create an account.' }), }) export const classCreateSchema = z.object({ From 76f4b41d41f6e815380de9a018aac36ec2f1a4d4 Mon Sep 17 00:00:00 2001 From: nevins321 Date: Wed, 28 Oct 2026 13:23:52 -0500 Subject: [PATCH 4/6] minor fix --- server/utils/auth.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/server/utils/auth.ts b/server/utils/auth.ts index 1c47072..b0d07d9 100644 --- a/server/utils/auth.ts +++ b/server/utils/auth.ts @@ -23,6 +23,7 @@ export const auth = betterAuth({ plugins: [ magicLink({ + disableSignUp: true, async sendMagicLink({ email, url }) { try { await mailer.sendMail({ From d4b1d5b947af90e8b1be149f21639791dd700d1f Mon Sep 17 00:00:00 2001 From: nevins321 Date: Wed, 28 Oct 2026 13:29:35 -0500 Subject: [PATCH 5/6] fixed Terms of Service formatting to look better and added the date and users name --- app/pages/auth.vue | 116 +++++++++++++++++++++++---------------------- 1 file changed, 60 insertions(+), 56 deletions(-) diff --git a/app/pages/auth.vue b/app/pages/auth.vue index 185acfc..5895be8 100644 --- a/app/pages/auth.vue +++ b/app/pages/auth.vue @@ -48,6 +48,9 @@ const loginRole = computed(() => { const isNewUser = ref(false) const checkingEmail = ref(false) const showTos = ref(false) +const waiverDate = new Date().toLocaleDateString(undefined, { + year: 'numeric', month: 'long', day: 'numeric', +}) const schema = computed(() => { if (isNewUser.value) { @@ -258,68 +261,69 @@ async function handleSubmit(_event: FormSubmitEvent) {
- + +
- -
- -
- -

- Release and Waiver of Liability -

- -
-

- This Release and Waiver of Liability (the “Release”) executed on ___/___/___ (date) by - __________________________ (“Participant”) releases Friends of MLK (“FOMLK”) and each of its directors, - officers, employees, and agents from any and all liability, claims, demands, costs and damages of any kind. - Participant understands that the scope of Participant’s relationship with FOMLK is limited to a Participant position - and that no compensation is expected in return for services provided by Participant; that FOMLK will not provide - any benefits traditionally associated with employment to Participant; and that Participant is responsible for his/her - own insurance coverage in the event of personal injury or illness as a result of Participant’s services to FOMLK. - 1. Waiver and Release: I, the Participant, release and forever discharge and hold harmless FOMLK and its - successors and assigns from any and all liability, claims, and demands of whatever kind of nature, either in law or in - equity, which arise or may hereafter arise from the services I provide to FOMLK. I understand and acknowledge - that this Release discharges FOMLK from any liability or claim that I may have against FOMLK with respect to - bodily injury, personal injury, illness, death, or property damage that may result from the services I provide to - FOMLK or occurring while I am providing Participant services. - 2. Insurance: Further I understand that FOMLK does not assume any responsibility for or obligation to - provide me with financial or other assistance, including but not limited to medical, health, or disability benefits or - insurance. I expressly waive any such claim for compensation or liability on the part of FOMLK beyond what may - be offered freely by FOMLK in the event of injury or medical expenses incurred by me. - 3. Medical Treatment: I hereby Release and forever discharge FOMLK from any claim whatsoever which - arises or may hereafter arise on account of any first-aid treatment or other medical services rendered in connection - with an emergency during my tenure as a Participant with FOMLK. - 4. Assumption of Risk: I understand that the services I provide to FOMLK should not but may include - activities that may be hazardous to me. As a Participant, I hereby expressly assume risk of injury or harm from these - activities and Release FOMLK from all liability. - 5. Photographic Release: I grant and convey to FOMLK all right, title, and interests in any and all products, - photographs, images, video, or audio recordings of me or my likeness or voice made by FOMLK in connection with - my providing Participant services to FOMLK. - 6. Other: As a Participant, I expressly agree that this Release is intended to be as broad and inclusive as - permitted. I agree that in the event that any clause or provision of this Release is deemed invalid, the enforceability - of the remaining provisions of this Release shall not be affected. I agree to indemnify, defend, and hold harmless - FOMLK, and its directors, officers, employees, agents, subsidiaries and affiliates from and against any and all - losses, injuries, claims, demands, liabilities, obligations, suits, penalties, forfeitures, costs or expenses of every kind - including but not limited to attorney’s fees, arising out of participation in FOMLK activities. - By clicking the checkbox, I express my understanding and intent to enter into this Release and Waiver of Liability willingly - and voluntarily. -

+ class="fixed inset-0 z-[200] flex items-center justify-center bg-slate-900/50 p-4 backdrop-blur-sm" + @click.self="showTos = false" + @keydown.esc="showTos = false" + > +
+ Date: Wed, 28 Oct 2026 13:33:15 -0500 Subject: [PATCH 6/6] bug --- app/pages/auth.vue | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/app/pages/auth.vue b/app/pages/auth.vue index 5895be8..2979fe3 100644 --- a/app/pages/auth.vue +++ b/app/pages/auth.vue @@ -48,6 +48,12 @@ const loginRole = computed(() => { const isNewUser = ref(false) const checkingEmail = ref(false) const showTos = ref(false) +const waiverTrigger = ref(null) + +function restoreWaiverFocus(event: Event) { + event.preventDefault() + waiverTrigger.value?.focus() +} const waiverDate = new Date().toLocaleDateString(undefined, { year: 'numeric', month: 'long', day: 'numeric', }) @@ -255,22 +261,20 @@ async function handleSubmit(_event: FormSubmitEvent) {
- - -
-