diff --git a/README.md b/README.md index 7109ff8e..2bb52863 100644 --- a/README.md +++ b/README.md @@ -194,6 +194,12 @@ Application behavior can be changed by configuring the following environment var - `NEXT_PUBLIC_SITE_FEEDS = 1` enables feeds at `/feed.json` and `/rss.xml` - `NEXT_PUBLIC_OG_TEXT_ALIGNMENT = BOTTOM` keeps OG image text bottom aligned (default is top) +#### Scripts & Analytics +- `PAGE_SCRIPT_URLS` + - comma-separated list of URLs to be added to the bottom of the body tag via "next/script" + - urls must begin with 'https' + - ⚠️ this will invoke arbitrary script execution on every page—use with caution + ## Alternate storage providers Only one storage adapter—Vercel Blob, Cloudflare R2, AWS S3, or MinIO—can be used at a time. Ideally, this is configured before photos are uploaded (see [Issue #34](https://github.com/sambecker/exif-photo-blog/issues/34) for migration considerations). If you have multiple adapters, you can set one as preferred by storing `aws-s3`, `cloudflare-r2`, `minio`, or `vercel-blob` in `NEXT_PUBLIC_STORAGE_PREFERENCE`. See [FAQ](#will-there-be-support-for-image-storage-providers-beyond-vercel-aws-and-cloudflare) regarding unsupported providers. diff --git a/app/layout.tsx b/app/layout.tsx index 47a84e60..009f76f4 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -10,6 +10,7 @@ import { HTML_LANG, SITE_FEEDS_ENABLED, ADMIN_DEBUG_TOOLS_ENABLED, + PAGE_SCRIPT_URLS, } from '@/app/config'; import AppStateProvider from '@/app/AppStateProvider'; import ToasterWithThemes from '@/toast/ToasterWithThemes'; @@ -30,6 +31,7 @@ import SharedHoverProvider from '@/components/shared-hover/SharedHoverProvider'; import { PATH_FEED_JSON, PATH_RSS_XML } from '@/app/path'; import SelectPhotosProvider from '@/admin/select/SelectPhotosProvider'; import AdminBatchEditPanel from '@/admin/select/AdminBatchEditPanel'; +import Script from 'next/script'; import '../tailwind.css'; @@ -137,13 +139,14 @@ export default function RootLayout({ - + + {PAGE_SCRIPT_URLS.map(url =>