()
const showModal = useIframeModal()
+const { $posthog } = useNuxtApp()
+
function play() {
+ $posthog?.capture('video_playback_opened', {
+ video_type: props.item.type,
+ })
return showModal(getVideoLink(props.item)!)
}
diff --git a/apps/basic-integration/nuxt/movies-nuxt-3-6/nuxt.config.ts b/apps/basic-integration/nuxt/movies-nuxt-3-6/nuxt.config.ts
index 03f11364d..ebc8d3fdc 100644
--- a/apps/basic-integration/nuxt/movies-nuxt-3-6/nuxt.config.ts
+++ b/apps/basic-integration/nuxt/movies-nuxt-3-6/nuxt.config.ts
@@ -21,6 +21,10 @@ export default defineNuxtConfig({
runtimeConfig: {
public: {
apiBaseUrl,
+ posthog: {
+ publicKey: process.env.NUXT_PUBLIC_POSTHOG_PROJECT_TOKEN,
+ host: process.env.NUXT_PUBLIC_POSTHOG_HOST,
+ },
},
},
devtools: {
diff --git a/apps/basic-integration/nuxt/movies-nuxt-3-6/package.json b/apps/basic-integration/nuxt/movies-nuxt-3-6/package.json
index 21554f57d..ca38aedaf 100644
--- a/apps/basic-integration/nuxt/movies-nuxt-3-6/package.json
+++ b/apps/basic-integration/nuxt/movies-nuxt-3-6/package.json
@@ -10,6 +10,15 @@
"lint": "eslint .",
"typecheck": "vue-tsc --noEmit"
},
+ "dependencies": {
+ "@opentelemetry/api-logs": "^0.223.0",
+ "@opentelemetry/exporter-logs-otlp-http": "^0.300.0",
+ "@opentelemetry/resources": "^3.0.0",
+ "@opentelemetry/sdk-logs": "^3.0.0",
+ "@opentelemetry/sdk-node": "^0.300.0",
+ "posthog-js": "^1.441.2",
+ "posthog-node": "^5.58.0"
+ },
"devDependencies": {
"@antfu/eslint-config": "^0.39.5",
"@iconify-json/carbon": "^1.1.17",
diff --git a/apps/basic-integration/nuxt/movies-nuxt-3-6/pages/login.vue b/apps/basic-integration/nuxt/movies-nuxt-3-6/pages/login.vue
index 67072592b..82244061e 100644
--- a/apps/basic-integration/nuxt/movies-nuxt-3-6/pages/login.vue
+++ b/apps/basic-integration/nuxt/movies-nuxt-3-6/pages/login.vue
@@ -4,16 +4,23 @@ const password = ref('')
const error = ref('')
const loading = ref(false)
const { login } = useAuth()
+const { $posthog } = useNuxtApp()
-const handleLogin = async () => {
+async function handleLogin() {
error.value = ''
loading.value = true
try {
await login(username.value, password.value)
- } catch (e: any) {
+ $posthog?.capture('login_succeeded')
+ $posthog?.logger.info('Login completed', { source: 'login_form' })
+ }
+ catch (e: any) {
error.value = e.message || 'Login failed'
- } finally {
+ $posthog?.capture('login_failed')
+ $posthog?.logger.warn('Login rejected', { source: 'login_form' })
+ }
+ finally {
loading.value = false
}
}
@@ -48,7 +55,7 @@ const handleLogin = async () => {
:disabled="loading"
/>
-
+