diff --git a/.env.example b/.env.example
index d99ce4c..9b7e723 100644
--- a/.env.example
+++ b/.env.example
@@ -44,6 +44,13 @@ GOOGLE_CLIENT_SECRET=
# Se não definido, todas as rotas ficam acessíveis.
# PUBLIC_DOMAIN=openmonetis.com
+# === Analytics (Opcional) ===
+# Umami: https://umami.is — self-hosted ou cloud
+UMAMI_URL=
+UMAMI_WEBSITE_ID=
+# Domínios rastreados (ex: openmonetis.com) — corresponde ao data-domains do script
+UMAMI_DOMAINS=
+
# === AI Providers (Opcional) ===
ANTHROPIC_API_KEY=
OPENAI_API_KEY=
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index 51fa934..182fc2f 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -29,12 +29,16 @@ export default function RootLayout({
>
-
+ {process.env.UMAMI_URL && process.env.UMAMI_WEBSITE_ID && (
+
+ )}
diff --git a/src/proxy.ts b/src/proxy.ts
index 0fe5f17..9ca7891 100644
--- a/src/proxy.ts
+++ b/src/proxy.ts
@@ -34,9 +34,9 @@ function buildCsp(): string {
}
})();
- const connectExtras = ["https://umami.felipecoutinho.com", s3Origin]
- .filter(Boolean)
- .join(" ");
+ const umamiOrigin = process.env.UMAMI_URL ?? "";
+
+ const connectExtras = [umamiOrigin, s3Origin].filter(Boolean).join(" ");
const imgExtras = ["https://lh3.googleusercontent.com", s3Origin]
.filter(Boolean)
@@ -44,7 +44,7 @@ function buildCsp(): string {
return [
"default-src 'self'",
- `script-src 'self' 'unsafe-inline'${isDev ? " 'unsafe-eval'" : ""} https://umami.felipecoutinho.com`,
+ `script-src 'self' 'unsafe-inline'${isDev ? " 'unsafe-eval'" : ""}${umamiOrigin ? ` ${umamiOrigin}` : ""}`,
"style-src 'self' 'unsafe-inline'",
`img-src 'self' ${imgExtras} data: blob:`,
"font-src 'self'",