). if (preg_match('#]*\s*src\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); [$calendarTzId, $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'; $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', ]; ?>

Open TV view for a full-width dashboard without site chrome.

Google Calendar is not synced into Family Hub data. The Google panel below is an embedded view from Google (live in your browser). The Family Hub agenda lists chores, meals, groceries, expenses, bill reminders, and birthdays from this app only—Google events never appear there until a future API connection exists. You turned on “two-way sync” in settings; OAuth with Google is not implemented yet, so that option does not change behavior today.

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.

Google Calendar not configured (set .env).

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

Hub data only (not Google Calendar).

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

$dayEvents): ?>
Today · Past