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)
}
}
}