diff --git a/.env.example b/.env.example index ba410fab..406c884f 100644 --- a/.env.example +++ b/.env.example @@ -35,10 +35,6 @@ NUXT_PUBLIC_MAPBOX_TOKEN=your-mapbox-public-token NUXT_TURNSTILE_SITE_KEY=your-turnstile-site-key NUXT_TURNSTILE_SECRET_KEY=your-turnstile-secret-key -# Feedback widget (site-wide chat bubble). No PROJECT_ID = widget not rendered. -NUXT_PUBLIC_FEEDBACK_API_BASE=https://support.example.org -NUXT_PUBLIC_FEEDBACK_PROJECT_ID=your-feedback-project-id - # Statinator analytics (self-hosted tracking-server) # Project must exist on the tracking-server with this site's hostname in allowed_domains. # Set NUXT_PUBLIC_STATINATOR_ENABLED=false (or unset) to disable tracking entirely. diff --git a/app/app.vue b/app/app.vue index f93fb729..f8eacfa7 100644 --- a/app/app.vue +++ b/app/app.vue @@ -1,45 +1,5 @@ - - - - diff --git a/app/components/FeedbackWidgetSlot.vue b/app/components/FeedbackWidgetSlot.vue deleted file mode 100644 index ffea3525..00000000 --- a/app/components/FeedbackWidgetSlot.vue +++ /dev/null @@ -1,22 +0,0 @@ - - - - - diff --git a/app/composables/useAuth.ts b/app/composables/useAuth.ts index aebd8bbb..d7084010 100644 --- a/app/composables/useAuth.ts +++ b/app/composables/useAuth.ts @@ -26,17 +26,6 @@ const clearCache = () => { } } -// Opt this browser into the feedback widget — the same `show-feedback-widget` -// flag that ?feedback=true sets. Lets logged-in users see the widget on public, -// edge-cached pages without a /api/auth/me check (we don't run one there). -const enableFeedbackWidget = () => { - if (import.meta.client) { - try { - localStorage.setItem('show-feedback-widget', 'true') - } catch {} - } -} - export const useAuth = () => { const user = useState('auth.user', () => null as any) const authReady = useState('auth.ready', () => false) @@ -58,7 +47,6 @@ export const useAuth = () => { if (response.success) { user.value = response.user saveToCache(response.user) - enableFeedbackWidget() const route = useRoute() const redirectTo = route.query.redirect as string @@ -124,7 +112,6 @@ export const useAuth = () => { const response = await $fetch('/api/auth/me') as { user: any } user.value = response.user saveToCache(response.user) - enableFeedbackWidget() return response.user } catch { user.value = null diff --git a/app/composables/useDoxaMap.ts b/app/composables/useDoxaMap.ts index 670d72fc..c2c5e4b3 100644 --- a/app/composables/useDoxaMap.ts +++ b/app/composables/useDoxaMap.ts @@ -4,7 +4,6 @@ // window.mapboxgl / window.MapboxGeocoder BEFORE map-app.iife.js runs // customElements.define('doxa-map', …) — otherwise the custom-element upgrade's // connectedCallback calls `new mapboxgl.Map(…)` before the global exists. -// The bundle is loaded globally via nuxt.config.ts. const MAPBOX_JS = 'https://api.mapbox.com/mapbox-gl-js/v3.3.0/mapbox-gl.js' const MAPBOX_GEOCODER_JS = 'https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-geocoder/v5.0.0/mapbox-gl-geocoder.min.js' diff --git a/app/composables/useFeedbackScript.ts b/app/composables/useFeedbackScript.ts deleted file mode 100644 index 56b78200..00000000 --- a/app/composables/useFeedbackScript.ts +++ /dev/null @@ -1,24 +0,0 @@ -// Idle-loads the third-party feedback web-component bundle. It's a ~95 KB -// script not needed for first paint, so we defer it until the browser is idle -// to keep it off the initial load critical path. Call this from any layout -// that renders a ; the in-DOM guard means multiple -// callers still load the bundle only once. -const FEEDBACK_SCRIPT = 'https://support.gospelambition.org/js/feedback-web-component.iife.js' - -function loadFeedbackScript() { - if (document.querySelector(`script[src="${FEEDBACK_SCRIPT}"]`)) return - const script = document.createElement('script') - script.src = FEEDBACK_SCRIPT - script.async = true - document.head.appendChild(script) -} - -export function useFeedbackScript() { - onMounted(() => { - if ('requestIdleCallback' in window) { - requestIdleCallback(loadFeedbackScript, { timeout: 3000 }) - } else { - setTimeout(loadFeedbackScript, 2000) - } - }) -} diff --git a/app/layouts/default.vue b/app/layouts/default.vue index dcf12c1e..dee9375b 100644 --- a/app/layouts/default.vue +++ b/app/layouts/default.vue @@ -8,11 +8,11 @@ const { locale, locales } = useI18n() const { public: pub } = useRuntimeConfig() // Warm DNS+TCP+TLS for the cross-origin services these pages hit: the prayer -// data API (people-group components) and the idle-loaded analytics + feedback -// widget scripts. Deriving from runtime config keeps these correct per env. +// data API (people-group components) and the idle-loaded analytics script. +// Deriving from runtime config keeps these correct per env. const preconnectOrigins = computed(() => { const origins = new Set() - for (const url of [pub.prayBaseUrl, pub.statinatorUrl, pub.feedbackApiBase]) { + for (const url of [pub.prayBaseUrl, pub.statinatorUrl]) { if (!url) continue try { origins.add(new URL(String(url)).origin) diff --git a/nuxt.config.ts b/nuxt.config.ts index f5d98df4..188a5417 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -277,8 +277,6 @@ export default defineNuxtConfig({ siteUrl: process.env.NUXT_PUBLIC_SITE_URL || '', prayBaseUrl: process.env.NUXT_PUBLIC_PRAY_BASE_URL || 'https://pray.doxa.life', mapboxToken: process.env.NUXT_PUBLIC_MAPBOX_TOKEN || '', - feedbackApiBase: process.env.NUXT_PUBLIC_FEEDBACK_API_BASE || 'https://support.gospelambition.org', - feedbackProjectId: process.env.NUXT_PUBLIC_FEEDBACK_PROJECT_ID || '', statinatorUrl: process.env.NUXT_PUBLIC_STATINATOR_URL || 'https://statinator.doxa.life', statinatorProjectId: process.env.NUXT_PUBLIC_STATINATOR_PROJECT_ID || 'doxa', statinatorEnabled: process.env.NUXT_PUBLIC_STATINATOR_ENABLED === 'true', @@ -299,7 +297,7 @@ export default defineNuxtConfig({ vue: { compilerOptions: { - isCustomElement: (tag: string) => ['doxa-map', 'doxa-research-map', 'feedback-web-component'].includes(tag) + isCustomElement: (tag: string) => ['doxa-map', 'doxa-research-map'].includes(tag) } }, @@ -313,7 +311,7 @@ export default defineNuxtConfig({ vue: { template: { compilerOptions: { - isCustomElement: (tag: string) => ['doxa-map', 'doxa-research-map', 'feedback-web-component'].includes(tag) + isCustomElement: (tag: string) => ['doxa-map', 'doxa-research-map'].includes(tag) } } }