--- import "../../styles/admin.css"; import { getArchiveEntries } from "../../lib/archive"; import { speechAdminEntryFromArchiveEntry } from "../../lib/admin-speeches"; import { calendarEvents, recurringCalendarEvents } from "../../data/events"; const entries = await getArchiveEntries(); const blogEntries = entries.filter((entry) => entry.data.type === "blog"); const speechEntries = entries.filter((entry) => entry.data.type === "speech"); const contactFormEndpoint = import.meta.env.PUBLIC_CONTACT_FORM_ENDPOINT ?? ""; const contactSubmissionsUrl = import.meta.env.PUBLIC_CONTACT_SUBMISSIONS_URL ?? ""; const analyticsDashboardUrl = import.meta.env.PUBLIC_ANALYTICS_DASHBOARD_URL ?? ""; const plausibleDomain = import.meta.env.PUBLIC_PLAUSIBLE_DOMAIN ?? ""; const today = new Date().toISOString().slice(0, 10); const latestEntry = entries[0]; const latestEntryTitle = latestEntry?.data.title ?? latestEntry?.id ?? "No content yet"; const latestEntryType = latestEntry?.data.type ?? "content"; const latestEntryDateIso = latestEntry?.data.published?.slice(0, 10) ?? ""; const latestEntryDate = latestEntry?.data.published ? new Intl.DateTimeFormat("en-IE", { day: "numeric", month: "short", year: "numeric" }).format(new Date(latestEntry.data.published)) : "No date"; const totalEvents = calendarEvents.length + recurringCalendarEvents.length; const contactConfigured = Boolean(contactFormEndpoint); const analyticsConfigured = Boolean(plausibleDomain); const configuredServices = [contactConfigured, analyticsConfigured].filter(Boolean).length; const speechAdminEntries = speechEntries.map((entry) => speechAdminEntryFromArchiveEntry(entry, today)); const speakerLabels = { rev: "Rev. Sun Myung Moon", mrs: "Dr. Hak Ja Han Moon", other: "Other speaker", }; const adminConfig = { analyticsDashboardUrl, contactEndpointConfigured: contactConfigured, contactSubmissionsUrl, plausibleDomain, }; --- Overview · FamilyFed.ie Admin Skip to content

Website dashboard

Overview

{configuredServices === 2 ? "Services ready" : `${configuredServices}/2 services ready`} View website

Everything you need to manage the site.

Create calendar updates, find and edit speeches, and check which connected services are ready.

Open public site
Calendar events {totalEvents} {recurringCalendarEvents.length} recurring · {calendarEvents.length} dated
Speeches {speechEntries.length} Available to search and edit
Blog and news {blogEntries.length} Published content entries
Connected services {configuredServices}/2 Contact form and analytics

Latest content

Most recently dated site entry

{latestEntryType}

{latestEntryTitle}

{latestEntryDateIso ? (

) : (

{latestEntryDate}

)}

Service status

Build-time connections

Contact form Visitor submissions
{contactConfigured ? "Ready" : "Setup needed"}
Analytics Website reporting
{analyticsConfigured ? "Ready" : "Setup needed"}

Publishing workflow

How changes reach the website

  1. Generate the event snippet or speech file here.
  2. Add the generated content to the repository.
  3. Commit and deploy the static site.