feat: organizers, meetups UI, Plausible analytics, and migration tooling

- Add organizer model/API, admin and public organizer pages, meetup cards
- Refresh events/home/contact; add calendar dialog and carousel components
- Optional Plausible via NEXT_PUBLIC_PLAUSIBLE_* env vars in root layout
- Prisma migration, seed updates, baseline-and-migrate script

Made-with: Cursor
This commit is contained in:
bbe
2026-04-04 21:55:34 +02:00
parent 586b572f73
commit 78271ea110
37 changed files with 1555 additions and 301 deletions

View File

@@ -1,10 +1,21 @@
import type { Metadata, Viewport } from "next";
import Script from "next/script";
import { ClientProviders } from "@/components/providers/ClientProviders";
import { OrganizationJsonLd, WebSiteJsonLd } from "@/components/public/JsonLd";
import "./globals.css";
const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || "https://belgianbitcoinembassy.org";
const plausibleDomain = process.env.NEXT_PUBLIC_PLAUSIBLE_DOMAIN?.trim();
const plausibleAnalyticsOrigin = process.env.NEXT_PUBLIC_PLAUSIBLE_ANALYTICS_ORIGIN?.trim().replace(
/\/$/,
"",
);
const plausibleScriptSrc =
plausibleDomain && plausibleAnalyticsOrigin
? `${plausibleAnalyticsOrigin}/js/script.js`
: null;
export const metadata: Metadata = {
metadataBase: new URL(siteUrl),
title: {
@@ -83,6 +94,14 @@ export default function RootLayout({ children }: { children: React.ReactNode })
return (
<html lang="en" dir="ltr" className="dark">
<body>
{plausibleScriptSrc && plausibleDomain ? (
<Script
defer
src={plausibleScriptSrc}
data-domain={plausibleDomain}
strategy="afterInteractive"
/>
) : null}
<OrganizationJsonLd />
<WebSiteJsonLd />
<ClientProviders>{children}</ClientProviders>