]*\ssrc\s*=\s*["\']([^"\']+)["\']#i', $raw, $m)) { $u = html_entity_decode($m[1], ENT_QUOTES | ENT_HTML5, 'UTF-8'); return $allowed($u) ? $u : null; } return null; } $embedUrl = familyHub_google_calendar_embed_url($rawEmbed); $fromIdOnly = false; if ($embedUrl === null && $calId !== '' && $calId !== 'your_calendar_id_here') { $embedUrl = 'https://calendar.google.com/calendar/embed?src=' . rawurlencode($calId); $fromIdOnly = true; } [$rangeStart, $rangeEnd] = hubCalendarDefaultAgendaRange($familySettings); $events = hubCalendarAgendaEvents($rangeStart, $rangeEnd, $people, $familySettings); [, $tzLocal] = familyHubCalendarContext($familySettings); $todayYmd = familyHubTodayYmdInTz($tzLocal); $twoWayMerge = !empty($familySettings['calendar_two_way_google']); $isTvView = isset($_GET['view']) && (string) $_GET['view'] === 'tv'; $calendarBaseUrl = '?tab=calendar'; $calendarTvUrl = '?tab=calendar&view=tv'; $lastRefreshedStamp = gmdate('Y-m-d H:i') . ' UTC'; $eventsByDate = []; foreach ($events as $ev) { $d = (string) ($ev['date'] ?? ''); if ($d === '') { continue; } if (!isset($eventsByDate[$d])) { $eventsByDate[$d] = []; } $eventsByDate[$d][] = $ev; } ksort($eventsByDate); $iconByType = [ 'chore' => 'fa-tasks', 'meal' => 'fa-utensils', 'grocery_due' => 'fa-cart-shopping', 'expense' => 'fa-coins', 'bill_day' => 'fa-file-invoice-dollar', 'birthday_reminder' => 'fa-cake-candles', ]; ?>

Calendar

Exit TV view Open TV view

TV view auto-refreshes every 10 minutes. Open TV view for a dedicated dashboard URL that refreshes every 10 minutes.

Last refreshed:

Two-way Google Calendar sync is enabled in Family settings. OAuth connection is not available in this version yet. Your Google view below (if configured) and the Family Hub agenda still work; full sync will require signing in with Google when supported.

Google Calendar

Connect a shared family calendar by setting GOOGLE_CALENDAR_EMBED_CODE (embed URL or full <iframe> from Google Calendar) or GOOGLE_CALENDAR_ID in .env. See Google Calendar → calendar menu → Settings and sharingIntegrate calendar.

Showing calendar from GOOGLE_CALENDAR_ID. For more control (view, height), paste the embed URL or iframe into GOOGLE_CALENDAR_EMBED_CODE instead.

Family Hub agenda

to · Times use

Nothing scheduled in this range. Add chores, meal plan slots, expenses, or bill reminders.

$dayEvents): ?>
Today · Past