diff --git a/app/middleware/require-classroom-intro.ts b/app/middleware/require-classroom-intro.ts
new file mode 100644
index 0000000..e0eff44
--- /dev/null
+++ b/app/middleware/require-classroom-intro.ts
@@ -0,0 +1,10 @@
+import {CLASSROOM_INTRO_STORAGE_KEY} from '~~/shared/constants/storage'
+
+export default defineNuxtRouteMiddleware(() => {
+ if (process.server) return
+
+ const introComplete = localStorage.getItem(CLASSROOM_INTRO_STORAGE_KEY) === 'true'
+ if (!introComplete) {
+ return navigateTo('/classroom-introduction')
+ }
+})
diff --git a/app/pages/classroom-introduction.vue b/app/pages/classroom-introduction.vue
index 423d838..6643a4e 100644
--- a/app/pages/classroom-introduction.vue
+++ b/app/pages/classroom-introduction.vue
@@ -13,7 +13,7 @@
Guided preflight briefing
-
+
Enter Classroom hub
@@ -167,7 +167,7 @@
Start guided tour
-
+
Skip to Classroom
@@ -382,10 +382,10 @@
Next stop
-
+
Enter Classroom hub
-
+
@@ -403,6 +403,7 @@
import { computed, nextTick, onBeforeUnmount, ref, watch } from 'vue'
import { useHead } from '#imports'
import { useApi } from '~/composables/useApi'
+import { CLASSROOM_INTRO_STORAGE_KEY } from '~~/shared/constants/storage'
import type { PizzicatoLite } from '~~/shared/utils/pizzicatoLite'
import { loadPizzicatoLite } from '~~/shared/utils/pizzicatoLite'
import { clampReadability, createNoiseGenerators, getReadabilityProfile } from '~~/shared/utils/radioEffects'
@@ -420,6 +421,8 @@ interface StageStop {
voiceLine: string
}
+definePageMeta({ middleware: 'require-auth' })
+
useHead({ title: 'Classroom orientation • OpenSquawk' })
const stages: StageStop[] = [
@@ -497,6 +500,15 @@ const stages: StageStop[] = [
const api = useApi()
+function markClassroomIntroComplete() {
+ if (typeof window === 'undefined') return
+ localStorage.setItem(CLASSROOM_INTRO_STORAGE_KEY, 'true')
+}
+
+function handleClassroomEntry() {
+ markClassroomIntroComplete()
+}
+
const voiceMode = ref('text')
const radioLevel = ref(3)
const hasCompletedRadioCheck = ref(false)
diff --git a/app/pages/classroom.vue b/app/pages/classroom.vue
index 82d89bd..20956b9 100644
--- a/app/pages/classroom.vue
+++ b/app/pages/classroom.vue
@@ -122,6 +122,10 @@
+
+ mdi-message-draw
+ Feedback
+