import { ref, computed, onMounted } from 'vue'
+import posthog from 'posthog-js'
import type { Media } from '../../types'
import { formatTime, formatVote, getTrailer } from '../../composables/utils'
const props = defineProps<{
item: Media
}>()
+const isPostHogConfigured = Boolean(
+ import.meta.env.VITE_POSTHOG_PROJECT_TOKEN && import.meta.env.VITE_POSTHOG_HOST,
+)
const mounted = ref(false)
const showModal = ref(false)
@@ -18,6 +22,11 @@ onMounted(() => {
function playTrailer() {
if (trailerUrl.value) {
showModal.value = true
+ if (isPostHogConfigured) {
+ posthog.capture('trailer_started', {
+ media_id: props.item.id,
+ })
+ }
}
}
diff --git a/apps/basic-integration/vue/movies/src/main.js b/apps/basic-integration/vue/movies/src/main.js
index e659bf08d..b64b555a9 100644
--- a/apps/basic-integration/vue/movies/src/main.js
+++ b/apps/basic-integration/vue/movies/src/main.js
@@ -3,12 +3,44 @@ import 'virtual:uno.css'
import { createApp } from 'vue'
import { createPinia } from 'pinia'
+import posthog from 'posthog-js'
import App from './App.vue'
import router from './router'
const app = createApp(App)
+const posthogProjectToken = import.meta.env.VITE_POSTHOG_PROJECT_TOKEN
+const posthogHost = import.meta.env.VITE_POSTHOG_HOST
+let isPostHogConfigured = false
+
+if (!posthogProjectToken || !posthogHost) {
+ if (import.meta.env.DEV) {
+ const missingVariable = posthogProjectToken
+ ? 'VITE_POSTHOG_HOST'
+ : 'VITE_POSTHOG_PROJECT_TOKEN'
+ throw new Error(
+ `${missingVariable} variable required by PostHog is missing or un-configured, this causes events to be silently missed. This error stops appearing once ${missingVariable} is configured`,
+ )
+ }
+} else {
+ posthog.init(posthogProjectToken, {
+ api_host: posthogHost,
+ defaults: '2026-08-30',
+ logs: {
+ serviceName: 'vue-movies-web',
+ environment: import.meta.env.MODE,
+ },
+ })
+ isPostHogConfigured = true
+}
+
+app.config.errorHandler = (error) => {
+ if (isPostHogConfigured) {
+ posthog.captureException(error)
+ }
+}
+
app.use(createPinia())
app.use(router)
diff --git a/apps/basic-integration/vue/movies/src/views/LoginView.vue b/apps/basic-integration/vue/movies/src/views/LoginView.vue
index 60630974c..1051649a3 100644
--- a/apps/basic-integration/vue/movies/src/views/LoginView.vue
+++ b/apps/basic-integration/vue/movies/src/views/LoginView.vue
@@ -1,5 +1,6 @@