Schedule

Family Schedule

This page helps you view and share calendars, announcements, and resources. Keep every family member informed with one centralized hub.

Home Cleaning & Maintenance Schedule :root { –ink: #1C2B2B; –ink-mid: #4A6060; –ink-light: #7A9494; –teal: #2E8B8B; –teal-dark: #1A5F5F; –teal-pale: #EAF4F4; –teal-mid: #C8E6E6; –daily-hue: #E67E22; –weekly-hue: #2980B9; –monthly-hue: #8E44AD; –annual-hue: #27AE60; –onetime-hue: #D35400; –surface: #FAFCFC; –white: #FFFFFF; –rule: #D8E8E8; –shadow-sm: 0 1px 4px rgba(30,70,70,0.07); –shadow-md: 0 4px 20px rgba(30,70,70,0.10); –radius: 12px; /* Responsive spacing */ –page-pad: clamp(1rem, 4vw, 2.5rem); –card-gap: clamp(0.75rem, 2vw, 1.2rem); –card-min: clamp(220px, 28vw, 300px); } *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { scroll-behavior: smooth; } body { font-family: ‘Source Sans 3’, sans-serif; background: var(–surface); color: var(–ink); min-height: 100vh; font-size: clamp(13px, 1.5vw, 15px); line-height: 1.6; } /* ── HEADER ── */ .header { background: linear-gradient(135deg, var(–teal-dark) 0%, var(–teal) 100%); color: white; padding: clamp(1.5rem, 5vw, 3rem) var(–page-pad) clamp(1.5rem, 4vw, 2.5rem); text-align: center; position: relative; overflow: hidden; } .header::before, .header::after { content: ”; position: absolute; border-radius: 50%; background: rgba(255,255,255,0.06); pointer-events: none; } .header::before { width: clamp(150px, 30vw, 320px); height: clamp(150px, 30vw, 320px); top: -30%; right: -5%; } .header::after { width: clamp(100px, 20vw, 200px); height: clamp(100px, 20vw, 200px); bottom: -40%; left: -3%; } .header-eyebrow { font-size: clamp(0.6rem, 1.2vw, 0.72rem); font-weight: 600; letter-spacing: 0.2em; text-transform: uppercase; opacity: 0.65; margin-bottom: 0.5rem; } .header-title { font-family: ‘Playfair Display’, serif; font-size: clamp(1.5rem, 4vw, 2.8rem); font-weight: 400; letter-spacing: -0.01em; line-height: 1.15; position: relative; z-index: 1; } .header-sub { margin-top: 0.6rem; font-size: clamp(0.78rem, 1.5vw, 0.9rem); font-weight: 300; opacity: 0.72; position: relative; z-index: 1; } .header-alert { display: inline-flex; align-items: center; gap: 0.5rem; margin-top: 1.2rem; background: rgba(255,255,255,0.14); border: 1px solid rgba(255,255,255,0.25); padding: 0.45rem clamp(0.7rem, 2vw, 1.1rem); border-radius: 99px; font-size: clamp(0.7rem, 1.3vw, 0.8rem); font-weight: 500; position: relative; z-index: 1; max-width: 90vw; text-align: left; } .header-alert::before { content: ‘⚠️’; flex-shrink: 0; } /* ── TABS ── */ .tabs-wrap { background: var(–white); border-bottom: 2px solid var(–rule); position: sticky; top: 0; z-index: 100; box-shadow: var(–shadow-sm); } .tabs { display: flex; max-width: 1600px; margin: 0 auto; flex-wrap: wrap; padding: 0 var(–page-pad); } .tab { display: flex; align-items: center; gap: 0.4rem; padding: clamp(0.6rem, 1.5vw, 1rem) clamp(0.7rem, 1.8vw, 1.6rem); font-size: clamp(0.7rem, 1.2vw, 0.85rem); font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; color: var(–ink-light); cursor: pointer; border-bottom: 3px solid transparent; margin-bottom: -2px; white-space: nowrap; transition: color 0.18s, border-color 0.18s; user-select: none; background: none; border-left: none; border-right: none; border-top: none; font-family: inherit; } .tab:hover { color: var(–ink); } .tab.active[data-freq=”daily”] { color: var(–daily-hue); border-bottom-color: var(–daily-hue); } .tab.active[data-freq=”weekly”] { color: var(–weekly-hue); border-bottom-color: var(–weekly-hue); } .tab.active[data-freq=”monthly”] { color: var(–monthly-hue); border-bottom-color: var(–monthly-hue);} .tab.active[data-freq=”annual”] { color: var(–annual-hue); border-bottom-color: var(–annual-hue); } .tab.active[data-freq=”biweekly”] { color: var(–weekly-hue); border-bottom-color: var(–weekly-hue); } .tab.active[data-freq=”week1″] { color: #2980B9; border-bottom-color: #2980B9; } .tab.active[data-freq=”week2″] { color: #27AE60; border-bottom-color: #27AE60; } .tab.active[data-freq=”week3″] { color: #8E44AD; border-bottom-color: #8E44AD; } .tab.active[data-freq=”week4″] { color: #D35400; border-bottom-color: #D35400; } .tab.active[data-freq=”floorcare”]{ color: #0891B2; border-bottom-color: #0891B2; } .tab.active[data-freq=”onetime”] { color: var(–onetime-hue); border-bottom-color: var(–onetime-hue); } .tab.active[data-freq=”floors”] { color: var(–teal); border-bottom-color: var(–teal); } .tab-icon { font-size: clamp(0.85rem, 1.5vw, 1rem); } .tab-count { background: var(–rule); border-radius: 99px; padding: 0.1rem 0.45rem; font-size: 0.65rem; font-weight: 700; } .tab.active .tab-count { background: currentColor; color: white; } /* ── MAIN LAYOUT ── */ .main { max-width: 1600px; margin: 0 auto; padding: clamp(1.5rem, 4vw, 2.5rem) var(–page-pad) 4rem; } /* ── SECTION PANELS ── */ .freq-panel { display: none; animation: fadeUp 0.22s ease; } .freq-panel.active { display: block; } @keyframes fadeUp { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } .panel-intro { margin-bottom: clamp(1rem, 3vw, 2rem); padding: clamp(0.9rem, 2vw, 1.2rem) clamp(1rem, 2.5vw, 1.5rem); border-radius: var(–radius); border-left: 4px solid; background: var(–white); box-shadow: var(–shadow-sm); } .panel-intro[data-freq=”daily”] { border-color: var(–daily-hue); } .panel-intro[data-freq=”weekly”] { border-color: var(–weekly-hue); } .panel-intro[data-freq=”monthly”] { border-color: var(–monthly-hue); } .panel-intro[data-freq=”annual”] { border-color: var(–annual-hue); } .panel-intro[data-freq=”biweekly”] { border-color: var(–weekly-hue); } .panel-intro[data-freq=”floorcare”]{ border-color: #0891B2; } .panel-intro[data-freq=”onetime”] { border-color: var(–onetime-hue); } .panel-intro-title { font-family: ‘Playfair Display’, serif; font-size: clamp(1.1rem, 2.5vw, 1.35rem); font-weight: 600; margin-bottom: 0.3rem; } .panel-intro-desc { font-size: clamp(0.8rem, 1.5vw, 0.88rem); color: var(–ink-mid); } /* ── AREA CARDS GRID ── */ /* Fluid grid: 1 col mobile → 2 col tablet → 3 col desktop → 4+ col widescreen */ .areas-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(var(–card-min), 1fr)); gap: var(–card-gap); } .area-card { background: var(–white); border-radius: var(–radius); box-shadow: var(–shadow-sm); border: 1px solid var(–rule); overflow: hidden; transition: box-shadow 0.18s, transform 0.15s; } .area-card:hover { box-shadow: var(–shadow-md); transform: translateY(-2px); } .area-card-header { padding: clamp(0.6rem, 1.5vw, 0.75rem) clamp(0.8rem, 2vw, 1.1rem); display: flex; align-items: center; gap: 0.6rem; border-bottom: 1px solid var(–rule); } .area-icon { font-size: clamp(1rem, 2vw, 1.1rem); flex-shrink: 0; } .area-name { font-weight: 600; font-size: clamp(0.8rem, 1.5vw, 0.88rem); letter-spacing: 0.01em; line-height: 1.3; } .area-badge { margin-left: auto; font-size: 0.65rem; font-weight: 700; padding: 0.15rem 0.5rem; border-radius: 99px; white-space: nowrap; flex-shrink: 0; } [data-freq=”daily”] .area-card-header { background: #FFF8F2; } [data-freq=”weekly”] .area-card-header { background: #F0F7FF; } [data-freq=”monthly”] .area-card-header { background: #F7F2FC; } [data-freq=”annual”] .area-card-header { background: #F0FAF3; } [data-freq=”onetime”] .area-card-header { background: #FEF3EC; } .area-tasks { padding: clamp(0.5rem, 1.5vw, 0.7rem) clamp(0.8rem, 2vw, 1.1rem) clamp(0.6rem, 1.5vw, 0.9rem); list-style: none; display: flex; flex-direction: column; gap: 0.3rem; } .area-task { font-size: clamp(0.75rem, 1.3vw, 0.82rem); color: var(–ink-mid); padding-left: 1rem; position: relative; line-height: 1.45; } .area-task::before { content: ‘·’; position: absolute; left: 0.2rem; color: var(–ink-light); font-size: 1.2rem; line-height: 1.1; } .area-task.alert { color: #C0392B; font-weight: 600; } .area-task.robot::before { content: ‘🤖’; font-size: 0.7rem; top: 1px; left: 0; } .area-task.mop::before { content: ‘🧹’; font-size: 0.7rem; top: 1px; left: 0; } .area-task.seasonal::before { content: ”; } /* ── SEASONAL BLOCKS ── */ .season-block { margin-bottom: 2rem; } .season-block:last-child { margin-bottom: 0; } .season-heading { display: flex; align-items: center; gap: 0.7rem; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(–rule); } .season-emoji { font-size: 1.5rem; } .season-title { font-family: ‘Playfair Display’, serif; font-size: clamp(1rem, 2vw, 1.2rem); color: var(–ink); } .season-subtitle { font-size: 0.8rem; color: var(–ink-light); } /* ── ROBOT VAC CARD ── */ .robot-card { grid-column: 1 / -1; background: var(–white); border-radius: var(–radius); box-shadow: var(–shadow-sm); border: 1px solid var(–rule); overflow: hidden; } .robot-card-header { background: #EFF6FF; padding: 0.75rem clamp(0.8rem, 2vw, 1.1rem); border-bottom: 1px solid #DBEAFE; display: flex; align-items: center; gap: 0.6rem; } .robot-card-header .area-name { color: #1D4ED8; } .robot-schedule { display: grid; /* 7 equal cols on large screens, wraps naturally on smaller */ grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 0; } .robot-day { padding: clamp(0.6rem, 1.5vw, 0.8rem) clamp(0.7rem, 1.5vw, 1.1rem); border-right: 1px solid var(–rule); border-bottom: 1px solid var(–rule); min-width: 0; /* allow shrink */ } .robot-day:last-child { border-right: none; } .robot-day-name { font-size: clamp(0.6rem, 1vw, 0.72rem); font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: #3B82F6; margin-bottom: 0.3rem; } .robot-day-rooms { list-style: none; display: flex; flex-direction: column; gap: 0.2rem; } .robot-floor-label { font-size: clamp(0.55rem, 0.9vw, 0.65rem); font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: #6B7280; margin-top: 0.35rem; margin-bottom: 0.1rem; } .robot-day-room { font-size: clamp(0.65rem, 1.1vw, 0.78rem); color: var(–ink-mid); padding-left: 0.7rem; position: relative; line-height: 1.35; word-break: break-word; } .robot-day-room::before { content: ‘·’; position: absolute; left: 0.1rem; color: #93C5FD; font-size: 1.1rem; line-height: 1.1; } .robot-day-room.alert { color: #C0392B; font-weight: 600; padding-left: 0; } .robot-day-room.alert::before { display: none; } /* ── MOP CARD ── */ .mop-card { grid-column: 1 / -1; background: var(–white); border-radius: var(–radius); box-shadow: var(–shadow-sm); border: 1px solid var(–rule); overflow: hidden; } .mop-card-header { background: #ECFDF5; padding: 0.75rem clamp(0.8rem, 2vw, 1.1rem); border-bottom: 1px solid #A7F3D0; display: flex; align-items: center; gap: 0.6rem; } .mop-card-header .area-name { color: #065F46; } .mop-sections { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 260px), 1fr)); gap: 0; } .mop-section { padding: clamp(0.7rem, 1.5vw, 0.9rem) clamp(0.8rem, 2vw, 1.1rem); border-right: 1px solid var(–rule); border-bottom: 1px solid var(–rule); } .mop-section:last-child { border-right: none; } .mop-section-title { font-size: clamp(0.65rem, 1.1vw, 0.72rem); font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: #059669; margin-bottom: 0.35rem; } .mop-room { font-size: clamp(0.7rem, 1.2vw, 0.78rem); color: var(–ink-mid); padding-left: 0.8rem; position: relative; line-height: 1.5; } .mop-room::before { content: ‘·’; position: absolute; left: 0.1rem; color: #6EE7B7; font-size: 1.1rem; line-height: 1.1; } /* ── ONE-TIME ITEMS ── */ .onetime-list { display: flex; flex-direction: column; gap: 0.75rem; } .onetime-item { background: var(–white); border-radius: var(–radius); border: 1px solid var(–rule); box-shadow: var(–shadow-sm); display: flex; align-items: flex-start; gap: 0.9rem; padding: clamp(0.75rem, 2vw, 1rem) clamp(0.9rem, 2vw, 1.2rem); cursor: pointer; transition: box-shadow 0.15s, transform 0.12s, opacity 0.2s; } .onetime-item:hover { box-shadow: var(–shadow-md); transform: translateY(-1px); } .onetime-item.done { opacity: 0.5; } .onetime-check { width: 20px; height: 20px; border-radius: 50%; border: 2px solid var(–onetime-hue); flex-shrink: 0; margin-top: 1px; display: flex; align-items: center; justify-content: center; transition: background 0.15s, border-color 0.15s; font-size: 0.7rem; color: white; } .onetime-item.done .onetime-check { background: var(–onetime-hue); } .onetime-body { flex: 1; min-width: 0; } .onetime-name { font-weight: 600; font-size: clamp(0.85rem, 1.5vw, 0.92rem); color: var(–ink); transition: text-decoration 0.15s; } .onetime-item.done .onetime-name { text-decoration: line-through; color: var(–ink-light); } .onetime-area { font-size: 0.75rem; color: var(–ink-light); margin-top: 0.1rem; } .onetime-note { font-size: clamp(0.72rem, 1.2vw, 0.78rem); color: var(–ink-mid); margin-top: 0.3rem; line-height: 1.4; } .onetime-tag { flex-shrink: 0; font-size: 0.65rem; font-weight: 700; padding: 0.2rem 0.55rem; border-radius: 99px; text-transform: uppercase; letter-spacing: 0.06em; margin-top: 2px; align-self: flex-start; } .tag-project { background: #FEF3EC; color: var(–onetime-hue); } .tag-repair { background: #FEF2F2; color: #C0392B; } .tag-install { background: #EFF6FF; color: #2563EB; } .tag-declutter{ background: #F0FAF3; color: #27AE60; } .tag-clean { background: #F7F2FC; color: #8E44AD; } .onetime-progress { margin-bottom: 1.5rem; background: var(–white); border-radius: var(–radius); border: 1px solid var(–rule); padding: 1rem 1.4rem; box-shadow: var(–shadow-sm); } .progress-label { font-size: 0.78rem; font-weight: 600; color: var(–ink-mid); margin-bottom: 0.5rem; display: flex; justify-content: space-between; } .progress-bar-bg { height: 8px; background: var(–rule); border-radius: 99px; overflow: hidden; } .progress-bar-fill { height: 100%; background: var(–onetime-hue); border-radius: 99px; transition: width 0.4s ease; } /* ── FLOORS VIEW ── */ .floors-layout { display: flex; flex-direction: column; gap: clamp(1.5rem, 3vw, 2.5rem); } .floor-block { background: var(–white); border-radius: var(–radius); border: 1px solid var(–rule); box-shadow: var(–shadow-sm); overflow: hidden; } .floor-header { padding: clamp(0.75rem, 2vw, 1rem) clamp(1rem, 2.5vw, 1.4rem); display: flex; align-items: flex-start; gap: 0.9rem; border-bottom: 1px solid var(–rule); flex-wrap: wrap; } .floor-icon { font-size: clamp(1.1rem, 2.5vw, 1.4rem); flex-shrink: 0; margin-top: 2px; } .floor-title { font-family: ‘Playfair Display’, serif; font-size: clamp(1rem, 2vw, 1.2rem); font-weight: 600; color: var(–ink); } .floor-subtitle { font-size: clamp(0.68rem, 1.2vw, 0.78rem); color: var(–ink-light); margin-top: 0.1rem; } .floor-badge { margin-left: auto; font-size: 0.68rem; font-weight: 700; padding: 0.2rem 0.65rem; border-radius: 99px; background: var(–teal-pale); color: var(–teal-dark); white-space: nowrap; align-self: flex-start; } .floor-rooms { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 200px), 1fr)); gap: 0; } .floor-room { padding: clamp(0.7rem, 1.5vw, 1rem) clamp(0.8rem, 2vw, 1.2rem); border-right: 1px solid var(–rule); border-bottom: 1px solid var(–rule); } .floor-room-header { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.4rem; } .floor-room-icon { font-size: 1rem; } .floor-room-name { font-weight: 600; font-size: clamp(0.78rem, 1.3vw, 0.85rem); color: var(–ink); line-height: 1.3; } .floor-room-tags { display: flex; flex-wrap: wrap; gap: 0.3rem; margin-bottom: 0.4rem; } .floor-room-tag { font-size: clamp(0.55rem, 0.9vw, 0.62rem); font-weight: 700; padding: 0.15rem 0.45rem; border-radius: 99px; text-transform: uppercase; letter-spacing: 0.05em; } .ftag-hard { background: #EFF6FF; color: #1D4ED8; } .ftag-carpet { background: #F5F3FF; color: #6D28D9; } .ftag-roger { background: #FEF3EC; color: #D35400; } .ftag-storage { background: #F0FAF3; color: #15803D; } .ftag-outdoor { background: #F7FEE7; color: #4D7C0F; } .floor-room-details { list-style: none; display: flex; flex-direction: column; gap: 0.15rem; } .floor-room-detail { font-size: clamp(0.68rem, 1.1vw, 0.75rem); color: var(–ink-mid); padding-left: 0.9rem; position: relative; line-height: 1.4; } .floor-room-detail::before { content: ‘·’; position: absolute; left: 0.15rem; color: var(–ink-light); font-size: 1.1rem; line-height: 1.1; } /* ── WIDE SCREEN (1400px+) ── */ @media (min-width: 1400px) { :root { –card-min: 280px; –page-pad: 3rem; } .tabs { max-width: 100%; } .robot-schedule { grid-template-columns: repeat(7, 1fr); } .floor-rooms { grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); } } /* ── DESKTOP (900–1400px) ── */ @media (min-width: 900px) and (max-width: 1399px) { :root { –card-min: 260px; } .robot-schedule { grid-template-columns: repeat(7, 1fr); } } /* ── TABLET (600–899px) ── */ @media (min-width: 600px) and (max-width: 899px) { :root { –card-min: 230px; –page-pad: 1.5rem; } .robot-schedule { grid-template-columns: repeat(4, 1fr); } .mop-sections { grid-template-columns: repeat(2, 1fr); } .floor-rooms { grid-template-columns: repeat(3, 1fr); } } /* ── MOBILE (<600px) ── */ @media (max-width: 599px) { :root { –card-min: 100%; –page-pad: 0.9rem; –card-gap: 0.75rem; } body { font-size: 14px; } .header { padding: 1.5rem var(–page-pad); } .header-title { font-size: 1.5rem; } /* Tabs scroll horizontally on mobile — cleaner than wrapping */ .tabs { flex-wrap: nowrap; overflow-x: auto; scroll-snap-type: x mandatory; -webkit-overflow-scrolling: touch; scrollbar-width: none; padding: 0 0.5rem; gap: 0; } .tabs::-webkit-scrollbar { display: none; } .tab { scroll-snap-align: start; padding: 0.75rem 0.9rem; font-size: 0.68rem; gap: 0.25rem; flex-shrink: 0; } .tab-icon { font-size: 0.9rem; } .panel-intro { padding: 0.9rem 1rem; } .panel-intro-title { font-size: 1.1rem; } /* Robot schedule: 2 cols on mobile */ .robot-schedule { grid-template-columns: repeat(2, 1fr); } .mop-sections { grid-template-columns: 1fr; } .floor-rooms { grid-template-columns: 1fr 1fr; } .floor-header { gap: 0.6rem; } .floor-subtitle { display: none; } /* hide long subtitle on tiny screens */ .onetime-item { flex-wrap: wrap; } .onetime-tag { order: -1; margin-bottom: 0.3rem; } } /* ── VERY SMALL MOBILE (<380px) ── */ @media (max-width: 379px) { :root { –page-pad: 0.7rem; } .robot-schedule { grid-template-columns: 1fr 1fr; } .floor-rooms { grid-template-columns: 1fr; } .header-title { font-size: 1.3rem; } }
Zelmat Family

Home Cleaning &
Maintenance Schedule

Three-Story Home  ·  Indoor & Outdoor  ·  All Floors

Every Friday evening: fill robot mop machine for Saturday kitchen run
Daily Tasks
Quick tasks that keep the home running smoothly — around 20–30 minutes total when shared across the household.
Week 1 — High-Traffic Rooms & Kitchen
First floor common areas, all bathrooms, kitchen deep clean. Repeats every month.
Week 2 — Bedrooms, Laundry & Second Floor
All bedrooms, laundry room, 2nd floor hallway, linen closets, media room. Handheld mop: 2nd floor hard floors.
Week 3 — Deep Cleans, Appliances & Mopping
Kitchen appliances, bathroom deep scrubs, all hard floor mopping runs, whole-home checks. Handheld mop: 1st floor + master bath.
Week 4 — Office, Entry, Garage & Outdoor
First floor entry/garage, office, third floor, all outdoor spaces.
🤖 Floor Care Schedule
Robot vacuums run on each floor on a set daily schedule. Robot mop runs in the kitchen every Saturday. Handheld mopping of all hard floors is done monthly — see week tabs for when each run falls.
Annual Tasks — by Season
Comprehensive deep cleans and home maintenance tied to the season. Plan a weekend for each. These protect the home and catch issues before they become costly repairs.
One-Time Projects & Maintenance
Projects and repairs that need to happen once. Click any item to mark it as done and track your progress.
Rooms by Floor
Every room and space in the home organized by floor. Includes floor type, storage areas, and notes on responsibility.
// ───────────────────────────────────────── // DATA // ───────────────────────────────────────── const DAILY = [ { icon: “🍳”, name: “Kitchen”, tasks: [ “Wipe down countertops”, “Wipe stovetop after use”, “Load/run dishwasher”, “Hand-wash items left in sink”, “Wipe sink and faucet”, “Spot-clean floor as needed”, “Empty compost/food scraps”, “Wipe exteriors of touched appliances”, ]}, { icon: “🪑”, name: “Dining Room”, tasks: [ “Clear table after meals”, “Wipe table surface”, “Push in chairs”, ]}, { icon: “🛋️”, name: “Family Room”, tasks: [ “Fluff and straighten cushions”, “Pick up items and clutter”, “Spot-clean surfaces as needed”, ]}, { icon: “🚪”, name: “Entry & Hallway”, tasks: [ “Hang coats, bags, and keys in designated spots”, “Sweep entryway mat”, “Spot-clean shoe area”, ]}, { icon: “🚿”, name: “All Bathrooms”, tasks: [ “Wipe sink and counter”, “Squeegee shower glass after use”, “Hang towels neatly”, “Replace toilet paper if needed”, ]}, { icon: “🛏️”, name: “Master Bedroom”, tasks: [ “Make bed”, “Put away clothing”, ]}, { icon: “🛏️”, name: “Roger’s Bedroom”, tasks: [ “Make bed”, “Put away clothing”, ]}, { icon: “🌿”, name: “Screened Porch”, tasks: [ “Pick up any items left outside”, “Spot-check for debris or leaves blown in”, ]}, ]; const WEEKS = [ { week: 1, title: “High-Traffic Rooms & Kitchen”, subtitle: “First floor common areas, all bathrooms, kitchen deep clean”, areas: [ { icon: “🍳”, name: “Kitchen”, tasks: [ “Deep clean stovetop grates/burners”, “Clean microwave inside and out”, “Wipe all cabinet fronts”, “Clean inside small appliances (toaster crumb tray, etc.)”, “Take out trash and recycling”, “Clean garbage disposal (baking soda + vinegar)”, “Wipe pantry shelves (spot clean)”, ]}, { icon: “🛋️”, name: “Family Room”, tasks: [ “Vacuum sofas and chairs”, “Dust all surfaces and shelves”, “Clean remotes and electronics with disinfectant wipe”, “Clean TV screen”, ]}, { icon: “🪑”, name: “Dining Room”, tasks: [ “Dust table, chairs, and sideboard”, “Wipe light fixture”, “Polish furniture if applicable”, “Vacuum chair cushions and under chair pads”, ]}, { icon: “🚿”, name: “All Bathrooms (Shared)”, tasks: [ “Scrub toilet inside and out”, “Scrub shower/tub”, “Wash bath mats”, “Clean mirrors”, “Wipe all surfaces and cabinet fronts”, “Empty trash”, “Restock supplies (soap, TP, etc.)”, ]}, { icon: “🚿”, name: “Roger’s Bathroom (Roger’s responsibility)”, tasks: [ “Scrub toilet inside and out”, “Scrub shower/tub”, “Wash bath mats”, “Clean mirrors”, “Wipe all surfaces and cabinet fronts”, “Empty trash”, “Restock supplies”, ]}, { icon: “🛏️”, name: “Roger’s Bedroom (Roger’s responsibility)”, tasks: [ “Change and launder bed linens”, “Dust furniture and surfaces”, “Tidy bedroom closet”, “Empty bedroom trash”, ]}, { icon: “👕”, name: “Roger’s Laundry”, tasks: [ “Run Roger’s laundry loads”, “Fold and put away all laundry”, ]}, { icon: “🏘️”, name: “Throughout Home”, tasks: [ “Wipe all light switches and door handles”, “Empty all trash cans”, “Quick vacuum of stairs (all flights)”, ]}, ] }, { week: 2, title: “Bedrooms, Laundry & Second Floor”, subtitle: “All bedrooms, laundry room, 2nd floor hallway, linen closets, media room”, areas: [ { icon: “🛏️”, name: “Master Bedroom & Closet”, tasks: [ “Change and launder bed linens”, “Dust furniture and surfaces”, “Tidy master closet — return items to proper place”, “Empty bedroom trash”, “Vacuum and rotate mattress”, “Launder pillows and mattress protector”, “Wipe baseboards and window sills”, “Tighten all cabinet knobs throughout home”, ]}, { icon: “🛏️”, name: “Guest Bedrooms & Retreat”, tasks: [ “Change and launder bed linens (or launder unused linens)”, “Dust furniture and surfaces”, “Tidy closets — return items to proper place”, “Vacuum mattresses”, “Wipe closet shelves”, “Run water in guest bathrooms to keep traps full”, ]}, { icon: “🛏️”, name: “Roger’s Bedroom (Roger’s responsibility)”, tasks: [ “Change and launder bed linens”, “Dust furniture and surfaces”, “Tidy bedroom closet”, “Deep vacuum mattress; launder pillows and mattress protector”, “Wipe closet shelves and rods”, “Wipe baseboards and window sills”, ]}, { icon: “👕”, name: “Laundry Room (2nd Floor)”, tasks: [ “Run all laundry loads (bedding, towels, clothing)”, “Wipe washer drum and gasket”, “Clean lint trap”, “Fold and put away all laundry”, “Clean washing machine drum, gasket, and detergent drawer”, “Wipe down all appliance exteriors and tops”, “🧹 Handheld mop: laundry room floor”, ]}, { icon: “🏠”, name: “2nd Floor Hallway & Linen Closets”, tasks: [ “Dust surfaces and light fixtures”, “Straighten 2nd floor linen closet — re-fold and restock”, “Clean 1st floor linen closet — launder extras, restock”, “Wipe baseboards”, “🧹 Handheld mop: hallway + retreat hard floor”, “🧹 Handheld mop: Jack-and-Jill bathroom + Retreat ensuite”, “🧹 Handheld mop: master bathroom floor”, ]}, { icon: “🎬”, name: “Media Room”, tasks: [ “Dust all surfaces and AV equipment”, “Spot-clean upholstery”, “Clean TV screen and remotes”, “Vacuum seating upholstery deeply”, “Deep clean carpet — spot treat stains”, “Clean windows and window sills”, “Wipe baseboards”, ]}, ] }, { week: 3, title: “Deep Cleans, Appliances & Mopping”, subtitle: “Kitchen appliances, bathroom deep scrubs, all hard floor mopping runs, whole-home checks”, areas: [ { icon: “🍳”, name: “Kitchen — Appliances & Deep Clean”, tasks: [ “Clean oven interior”, “Clean refrigerator interior — wipe shelves, check expiration dates”, “Wipe down all cabinet interiors”, “Clean range hood filter”, “Descale kettle and coffee maker”, “Pull out appliances and clean behind/beneath”, “Deep clean pantry — wipe all shelves, organize contents”, “🧹 Handheld mop: kitchen floor (deep clean)”, ]}, { icon: “🚿”, name: “Bathrooms — Deep Scrub”, tasks: [ “Deep scrub tile grout in all shared bathrooms”, “Wash shower curtain liner or deep-scrub glass”, “Clean exhaust fan grilles”, “Wipe down all baseboards in bathrooms”, “Check and restock all medicine cabinets”, “Deep scrub tile grout and shower glass in master ensuite”, ]}, { icon: “👕”, name: “Laundry — Appliance Maintenance”, tasks: [ “Clean lint trap housing (beyond the screen)”, “Clean behind/beneath washer and dryer”, “Wipe all appliance tops and sides”, ]}, { icon: “🛏️”, name: “Roger’s Suite Deep Clean (Roger’s responsibility)”, tasks: [ “Change and launder bed linens”, “Dust furniture and surfaces”, “Tidy bedroom closet”, “Empty bedroom trash”, “Deep vacuum mattress; launder pillows and mattress protector”, “Wash shower curtain or deep-scrub glass”, “Clean exhaust fan grille”, “Wipe baseboards and window sills”, ]}, { icon: “👕”, name: “Roger’s Laundry”, tasks: [ “Run Roger’s laundry loads”, “Fold and put away all laundry”, ]}, { icon: “🛏️”, name: “Master Bedroom & Closet”, tasks: [ “Change and launder bed linens”, “Dust furniture and surfaces”, “Tidy master closet — return items to proper place”, “Empty bedroom trash”, ]}, { icon: “🏘️”, name: “Throughout Home — Monthly Checks”, tasks: [ “Wipe all baseboards throughout home”, “Dust ceiling corners and light fixtures”, “Clean window sills throughout”, “Check all smoke and CO detector batteries”, “Check plumbing under all sinks for leaks or corrosion”, “Dust ceiling fan/light in family room”, “Vacuum underneath and behind furniture (family room)”, “Tighten all cabinet knobs throughout home”, “🔄 Quarterly: Replace all HVAC/furnace filters (every 3 months — Jan, Apr, Jul, Oct)”, ]}, ] }, { week: 4, title: “Office, Entry, Garage & Outdoor”, subtitle: “First floor entry/garage, office, third floor, all outdoor spaces”, areas: [ { icon: “💻”, name: “Office”, tasks: [ “Dust desk, shelves, and equipment”, “Wipe keyboard, mouse, monitor”, “Empty trash”, “File or tidy loose papers”, “Declutter and file papers”, “Wipe all electronics thoroughly”, “Vacuum under and behind furniture”, “Dust blinds or window coverings”, ]}, { icon: “🛏️”, name: “Master Bedroom & Closet”, tasks: [ “Change and launder bed linens”, “Dust furniture and surfaces”, “Tidy master closet — return items to proper place”, “Empty bedroom trash”, ]}, { icon: “🛏️”, name: “Roger’s Bedroom (Roger’s responsibility)”, tasks: [ “Change and launder bed linens”, “Dust furniture and surfaces”, “Tidy bedroom closet”, “Empty bedroom trash”, ]}, { icon: “🚪”, name: “Entry, Hall Closet & Garage”, tasks: [ “Dust entry table/bench”, “Wipe door handles and light switches”, “Tidy hall closet — return items to proper place”, “Deep-tidy hall closet — wipe shelves and rod”, “Wipe front door inside and out; clean door glass”, “Sweep garage floor; wipe shelving and storage units”, “Clean recycling bins”, “🧹 Handheld mop: entryway floor”, “🧹 Handheld mop: dining room, family room, office floors”, “🧹 Handheld mop: Roger’s bathroom floor”, “🧹 Handheld mop: kitchen floor (deep clean)”, ]}, { icon: “🎨”, name: “Third Floor / Craft Room”, tasks: [ “Wipe down work surfaces”, “Tidy and return supplies to storage”, “Empty trash”, “Quick-check attic door area”, “Deep clean all work surfaces”, “Organize and declutter craft room closet and luggage closet”, “Inspect attic door seal”, “Dust ceiling and corners for cobwebs”, “Wipe baseboards and window sills”, ]}, { icon: “🌿”, name: “Screened Porch”, tasks: [ “Sweep floor”, “Wipe down furniture and surfaces”, “Check screens for damage or debris”, “Shake or brush off cushions”, “Deep sweep and wash porch floor”, “Clean screens — brush and wipe each panel”, “Launder any seat cushion covers”, “Inspect screen frames and seals for damage”, ]}, { icon: “🔥”, name: “Patio & Outdoor Kitchen”, tasks: [ “Wipe outdoor kitchen counters and grill exterior”, “Clear and wipe patio table and chairs”, “Sweep patio surface”, “Cover grill if not in use”, “Deep clean grill grates, burners, and interior”, “Scrub patio surface”, “Inspect outdoor kitchen equipment and gas connections”, “Launder patio cushion covers”, ]}, { icon: “🏡”, name: “Driveway & Exterior Entry”, tasks: [ “Sweep or blow off driveway and front walkway”, “Check exterior entry lights”, “Clear debris from garage entry area”, “Power wash driveway and front walkway”, “Clean garage door exterior”, “Inspect driveway for cracks or damage”, “Check gutters and downspouts after heavy storms”, ]}, ] }, ]; const ROBOT_DAYS = [ { day: “Monday”, floors: [ { floor: “2nd Floor”, robot: “Floor 2 Robot”, rooms: [“Media Room”, “Retreat / Bedroom”, “Retreat Ensuite Bathroom”] }, ] }, { day: “Tuesday”, floors: [ { floor: “2nd Floor”, robot: “Floor 2 Robot”, rooms: [“Master Bedroom”, “2nd Floor Hallway”] }, ] }, { day: “Wednesday”, floors: [ { floor: “1st Floor”, robot: “Floor 1 Robot”, rooms: [“Entryway”, “Dining Room”, “Family Room”] }, { floor: “2nd Floor”, robot: “Floor 2 Robot”, rooms: [“Media Room”] }, ] }, { day: “Thursday”, floors: [ { floor: “1st Floor”, robot: “Floor 1 Robot”, rooms: [“Office”, “Roger’s Bedroom”] }, { floor: “2nd Floor”, robot: “Floor 2 Robot”, rooms: [“Front Guest Bedroom”, “Back Guest Bedroom”, “Jack-and-Jill Bathroom”] }, { floor: “3rd Floor”, robot: “Floor 3 Robot”, rooms: [“Bonus / Craft Room”] }, ] }, { day: “Friday”, floors: [ { floor: “2nd Floor”, robot: “Floor 2 Robot”, rooms: [“Laundry Room”] }, ], alert: “⚠️ Fill robot mop machine tonight — kitchen mop runs Saturday morning” }, { day: “Saturday”, floors: [ { floor: “1st Floor”, robot: “Floor 1 Robot”, rooms: [“Kitchen → Robot mop follows immediately after”] }, { floor: “2nd Floor”, robot: “Floor 2 Robot”, rooms: [“Master Bedroom (full suite)”, “Master Ensuite Bath”, “Master Closet”] }, ] }, { day: “Sunday”, floors: [ { floor: “All Floors”, robot: “All Robots”, rooms: [“Rest day — no robot runs”] }, ] }, ]; const MOP_SECTIONS = [ { title: “🤖 Robot Mop — Every Saturday”, rooms: [“Kitchen floor: every Saturday, runs after robot vac”, “⚠️ Fill machine every Friday evening”] }, { title: “🧹 Handheld Mop — Week 2: All Second Floor Hard Floors”, rooms: [“2nd Floor Hallway”, “Retreat (hard floor)”, “Jack-and-Jill Bathroom”, “Retreat Ensuite Bathroom”, “Laundry Room”, “Master Ensuite Bathroom”] }, { title: “🧹 Handheld Mop — Week 4: First Floor Deep Clean”, rooms: [“Entryway”, “Kitchen (deep clean — in addition to robot mop)”, “Dining Room”, “Family Room”, “Office”, “Roger’s Bathroom”] }, ]; const ANNUAL = [ { season: “🌸 Spring”, months: “March – May”, areas: [ { icon: “🏘️”, name: “Whole Home”, tasks: [ “Wash all windows inside and out”, “Launder all curtains and drapes”, “Deep-clean all carpets and area rugs (steam clean or professional)”, “Flip or rotate all mattresses throughout the home”, “Clean all ceiling fans — blades and motor housing”, “Service HVAC — change filters, schedule annual tune-up”, “Clean all air vents and returns throughout the home”, “Wipe down all walls — spot clean marks and scuffs”, “Service and inspect fireplace/chimney”, “Test all smoke and CO detectors — replace batteries”, “Declutter all closets throughout the home”, ]}, { icon: “🔧”, name: “Appliances & Kitchen”, tasks: [ “Deep clean range hood fan and full ducting”, ]}, { icon: “🚪”, name: “Exterior & Garage”, tasks: [ “Inspect weatherstripping on all exterior doors and windows”, “Deep clean garage — power wash floor, full reorganize”, “Power wash exterior entryways, sidewalks, driveway”, “Clean and lubricate garage door tracks and hardware”, “Inspect driveway surface for cracks”, ]}, { icon: “🌿”, name: “Outdoor Spaces”, tasks: [ “Season-open screened porch — wash all screens, treat furniture, inspect for winter damage”, “Season-open patio — power wash surface, inspect and clean all outdoor kitchen equipment”, “Check gas lines for outdoor kitchen”, “Set up patio furniture”, ]}, ] }, { season: “☀️ Summer”, months: “June – August”, areas: [ { icon: “❄️”, name: “Kitchen & Appliances”, tasks: [ “Clean refrigerator coils (back or underneath)”, “Deep clean all freezer compartments”, “Check and clean dishwasher filter and spray arms”, “Deep clean range hood fan and ducting (if not done in spring)”, ]}, { icon: “🏘️”, name: “Whole Home”, tasks: [ “Wash all window screens throughout the home”, “Lubricate all door hinges and window tracks”, “Wash all bed pillows and duvets”, “Check attic ventilation and insulation”, “Clean all air vents and returns throughout the home”, ]}, { icon: “🚿”, name: “Bathrooms”, tasks: [ “Re-caulk around tubs, showers, and sinks where needed”, ]}, { icon: “👕”, name: “Laundry”, tasks: [ “Clean dryer vent duct from exterior to appliance”, ]}, { icon: “🔥”, name: “Outdoor Kitchen & Grill”, tasks: [ “Deep clean grill — clean burners, check ignitor, inspect hoses and connections”, ]}, { icon: “🎨”, name: “Third Floor / Attic”, tasks: [ “Inspect attic for moisture, pests, or insulation issues”, “Clean and fully reorganize bonus/craft room”, ]}, ] }, { season: “🍂 Fall”, months: “September – November”, areas: [ { icon: “🏘️”, name: “Whole Home”, tasks: [ “Service heating system — replace furnace filter, schedule tune-up”, “Inspect and clean fireplace/chimney before heating season”, “Test all smoke and CO detectors — replace all batteries”, “Stock emergency supplies (candles, flashlights, batteries)”, “Rotate seasonal clothing in all closets”, “Launder all duvets, comforters, and heavy blankets”, “Declutter all common areas before holiday season”, “Clean all air vents and returns throughout the home”, ]}, { icon: “🍳”, name: “Kitchen”, tasks: [ “Deep clean all ovens and ranges before holiday cooking”, “Deep clean dishwasher — filter, spray arms, door gasket”, ]}, { icon: “👕”, name: “Laundry”, tasks: [ “Deep clean dryer — remove lint buildup from duct and exterior vent”, “Clean washing machine drum and door gasket thoroughly”, ]}, { icon: “🚪”, name: “Exterior & Garage”, tasks: [ “Clean gutters after leaf fall (late October/November)”, “Check and seal weatherstripping on all doors and windows”, “Winterize outdoor faucets and hoses”, “Check driveway for winter readiness — stock ice melt if applicable”, ]}, { icon: “🌿”, name: “Outdoor Spaces”, tasks: [ “Season-close screened porch — store cushions, cover or bring in furniture”, “Check screen integrity before cold weather”, “Season-close patio — deep clean grill and cover”, “Store or cover all patio furniture”, “Drain and cover outdoor plumbing”, ]}, ] }, { season: “❄️ Winter”, months: “December – February”, areas: [ { icon: “🍳”, name: “Kitchen”, tasks: [ “Deep clean after holiday entertaining”, “Deep clean refrigerator after holiday meal prep”, “Clean all cabinet fronts and hardware”, “Reorganize pantry after holiday restocking”, ]}, { icon: “🛏️”, name: “Bedrooms & Closets”, tasks: [ “Launder all holiday linens and tablecloths”, “Deep clean master closet and all bedroom closets”, “Declutter post-holiday — donate or store decorations promptly”, ]}, { icon: “🏘️”, name: “Whole Home”, tasks: [ “Wash windows and mirrors throughout the home”, “Inspect attic after heavy rain or snow”, “Check plumbing under all sinks for leaks or corrosion”, “Wipe down all walls and painted surfaces room by room”, “Plan and schedule spring services (HVAC, window washing, gutters)”, “Clean all air vents and returns throughout the home”, ]}, { icon: “❄️”, name: “Outdoor & Exterior”, tasks: [ “Check furniture covers and stored items for damage”, “Inspect exterior for any cold-weather or storm damage”, ]}, ] }, ]; // ───────────────────────────────────────── // RENDER HELPERS // ───────────────────────────────────────── function makeAreaCard(item, freq) { const card = document.createElement(‘div’); card.className = ‘area-card’; const hdr = document.createElement(‘div’); hdr.className = ‘area-card-header’; hdr.innerHTML = `${item.icon}${item.name}`; card.appendChild(hdr); const ul = document.createElement(‘ul’); ul.className = ‘area-tasks’; item.tasks.forEach(t => { const li = document.createElement(‘li’); li.className = ‘area-task’; if (t.startsWith(‘🤖’)) { li.classList.add(‘robot’); li.textContent = t.replace(‘🤖 ‘,”); } else if (t.startsWith(‘🧹’)) { li.classList.add(‘mop’); li.textContent = t.replace(‘🧹 ‘,”); } else if (t.startsWith(‘⚠️’)) { li.classList.add(‘alert’); li.textContent = t; } else { li.textContent = t; } ul.appendChild(li); }); card.appendChild(ul); return card; } function makeRobotCard() { const card = document.createElement(‘div’); card.className = ‘robot-card’; card.innerHTML = `
🤖Robot Vacuum — Day-by-Day Schedule (by Floor)
`; const sched = document.createElement(‘div’); sched.className = ‘robot-schedule’; ROBOT_DAYS.forEach(d => { const col = document.createElement(‘div’); col.className = ‘robot-day’; col.innerHTML = `
${d.day}
`; if (d.alert) { const alertEl = document.createElement(‘div’); alertEl.className = ‘robot-day-room alert’; alertEl.textContent = d.alert; col.appendChild(alertEl); } d.floors.forEach(f => { const floorLabel = document.createElement(‘div’); floorLabel.className = ‘robot-floor-label’; floorLabel.textContent = `${f.floor} · ${f.robot}`; col.appendChild(floorLabel); const ul = document.createElement(‘ul’); ul.className = ‘robot-day-rooms’; f.rooms.forEach(r => { const li = document.createElement(‘li’); li.className = ‘robot-day-room’ + (r.startsWith(‘→’) ? ‘ alert’ : ”); li.textContent = r; ul.appendChild(li); }); col.appendChild(ul); }); sched.appendChild(col); }); card.appendChild(sched); return card; } function renderFloorCare() { const container = document.getElementById(‘grid-floorcare’); // Robot vac card (full width) const robotCard = makeRobotCard(); robotCard.style.marginBottom = ‘1.5rem’; container.appendChild(robotCard); // Mop schedule card (full width) const mopCard = makeMopCard(); container.appendChild(mopCard); } function makeMopCard() { const card = document.createElement(‘div’); card.className = ‘mop-card’; card.innerHTML = `
🧹Mopping Schedule
`; const wrap = document.createElement(‘div’); wrap.className = ‘mop-sections’; MOP_SECTIONS.forEach(s => { const sec = document.createElement(‘div’); sec.className = ‘mop-section’; sec.innerHTML = `
${s.title}
`; s.rooms.forEach(r => { const p = document.createElement(‘p’); p.className = ‘mop-room’ + (r.startsWith(‘⚠️’) ? ‘ alert’ : ”); p.textContent = r; sec.appendChild(p); }); wrap.appendChild(sec); }); card.appendChild(wrap); return card; } function renderFreq(data, containerId, freq) { const grid = document.getElementById(containerId); let count = 0; data.forEach(item => { if (item.special === ‘robot’) { grid.appendChild(makeRobotCard()); } else if (item.special === ‘mop’) { grid.appendChild(makeMopCard()); } else { grid.appendChild(makeAreaCard(item, freq)); count += item.tasks.length; } }); return count; } function renderAnnual() { const container = document.getElementById(‘grid-annual’); let count = 0; ANNUAL.forEach(season => { const block = document.createElement(‘div’); block.className = ‘season-block’; block.innerHTML = `
${season.season.split(‘ ‘)[0]}
${season.season.replace(/^\S+\s/,”)}
${season.months}
`; const grid = document.createElement(‘div’); grid.className = ‘areas-grid’; season.areas.forEach(area => { grid.appendChild(makeAreaCard(area, ‘annual’)); count += area.tasks.length; }); block.appendChild(grid); container.appendChild(block); }); return count; } // ───────────────────────────────────────── // ONE-TIME ITEMS DATA // ───────────────────────────────────────── const ONETIME = [ { icon: “🎨”, name: “Deep clean third floor”, area: “Third Floor / Bonus Room”, note: “Full deep clean of bonus/craft room — surfaces, walls, baseboards, closets, and attic door surround.”, tag: “clean”, tagLabel: “Clean” }, { icon: “📦”, name: “Organize and purge craft supplies”, area: “Third Floor / Bonus Room”, note: “Sort through all craft supplies. Donate, discard, or store what isn’t actively in use. Assign a home to everything kept.”, tag: “declutter”, tagLabel: “Declutter” }, { icon: “🔧”, name: “Install stove vent and hood”, area: “Kitchen”, note: “Install range hood and vent. Confirm ducting route and any permit requirements before starting.”, tag: “install”, tagLabel: “Install” }, { icon: “🔲”, name: “Cover gap above oven”, area: “Kitchen”, note: “Measure and close the gap above the oven — use trim, filler strip, or cabinetry depending on the size.”, tag: “repair”, tagLabel: “Repair” }, { icon: “🏗️”, name: “Epoxy garage floor”, area: “Garage”, note: “Clean, prep, and apply epoxy coating to the garage floor. Allow full cure time before use — typically 72 hours.”, tag: “project”, tagLabel: “Project” }, { icon: “🪣”, name: “Clean garage walls”, area: “Garage”, note: “Wipe down all garage walls — remove dust, grease, and cobwebs. Consider painting if surfaces are stained.”, tag: “clean”, tagLabel: “Clean” }, { icon: “🖌️”, name: “Repaint ceiling in retreat”, area: “Second Floor / Retreat”, note: “Prep ceiling, apply primer if needed, and repaint. Choose finish appropriate for ceilings (flat/matte).”, tag: “project”, tagLabel: “Project” }, { icon: “🖌️”, name: “Repaint garage ceiling”, area: “Garage”, note: “Prep ceiling, apply primer if needed, and repaint. Choose flat/matte finish appropriate for ceilings.”, tag: “project”, tagLabel: “Project” }, { icon: “🚰”, name: “Change outdoor kitchen faucet”, area: “Outdoor Kitchen”, note: “Replace the outdoor kitchen faucet. Check supply line compatibility and shut off water at source before starting.”, tag: “repair”, tagLabel: “Repair” }, ]; const TAG_CLASSES = { project: ‘tag-project’, repair: ‘tag-repair’, install: ‘tag-install’, declutter: ‘tag-declutter’, clean: ‘tag-clean’ }; function renderOnetime() { const list = document.getElementById(‘list-onetime’); const progressWrap = document.getElementById(‘progress-wrap’); // Progress bar const progressEl = document.createElement(‘div’); progressEl.className = ‘onetime-progress’; progressEl.id = ‘onetime-progress-block’; progressEl.innerHTML = `
Progress 0 of ${ONETIME.length} completed
`; progressWrap.appendChild(progressEl); ONETIME.forEach((item, idx) => { const el = document.createElement(‘div’); el.className = ‘onetime-item’; el.dataset.idx = idx; el.innerHTML = `
${item.icon} ${item.name}
${item.area}
${item.note ? `
${item.note}
` : ”}
${item.tagLabel} `; el.addEventListener(‘click’, () => toggleOnetime(el, idx)); list.appendChild(el); }); document.getElementById(‘cnt-onetime’).textContent = ONETIME.length; updateProgress(); } function toggleOnetime(el, idx) { el.classList.toggle(‘done’); const check = document.getElementById(‘check-‘ + idx); check.textContent = el.classList.contains(‘done’) ? ‘✓’ : ”; updateProgress(); } function updateProgress() { const total = ONETIME.length; const done = document.querySelectorAll(‘.onetime-item.done’).length; const pct = Math.round((done / total) * 100); document.getElementById(‘progress-fill’).style.width = pct + ‘%’; document.getElementById(‘progress-text’).textContent = `${done} of ${total} completed`; } // ───────────────────────────────────────── // FLOORS DATA // ───────────────────────────────────────── const FLOORS = [ { icon: “1️⃣”, title: “First Floor”, subtitle: “Mostly hard floors — Roger’s bedroom and closet are carpet”, color: “#1A5F5F”, rooms: [ { icon: “🚪”, name: “Entryway”, tags: [“hard”], details: [“Front entrance to the home”, “Hall closet adjacent”] }, { icon: “🍳”, name: “Kitchen”, tags: [“hard”], details: [“Pantry included”, “Robot vac: Saturday”, “Robot mop: Saturday (fill machine Friday evening ⚠️)”] }, { icon: “🪑”, name: “Dining Room”, tags: [“hard”], details: [“Robot vac: Wednesday”] }, { icon: “🛋️”, name: “Family Room”, tags: [“hard”], details: [“Robot vac: Wednesday”] }, { icon: “💻”, name: “Office”, tags: [“hard”], details: [“Robot vac: Thursday”] }, { icon: “🛏️”, name: “Roger’s Bedroom”, tags: [“carpet”, “roger”], details: [“Roger’s responsibility”, “Robot vac: Thursday”] }, { icon: “🚿”, name: “Roger’s Bathroom”, tags: [“hard”, “roger”], details: [“Roger’s responsibility”, “Hard floor — handheld mop Week 4”] }, { icon: “🚗”, name: “Garage”, tags: [“hard”], details: [“Swept weekly”, “One-time project: epoxy floor, clean walls”] }, { icon: “🗄️”, name: “Hall Closet”, tags: [“hard”, “storage”], details: [“Entry area”, “Deep-tidy monthly”] }, { icon: “🥫”, name: “Pantry”, tags: [“hard”, “storage”], details: [“Off kitchen”, “Spot-clean weekly, deep clean monthly”] }, { icon: “🧺”, name: “First Floor Linen Closet”, tags: [“hard”, “storage”], details: [“Adjacent to Roger’s room”, “Shared responsibility — restock monthly”] }, { icon: “📦”, name: “Roger’s Bedroom Closet”, tags: [“carpet”, “storage”, “roger”], details: [“Roger’s responsibility”, “Deep-tidy monthly”] }, ] }, { icon: “2️⃣”, title: “Second Floor”, subtitle: “Mixed — hard floors in hallway, bathrooms, retreat, laundry & some closets; carpet in bedrooms, media room & some closets”, color: “#2E8B8B”, rooms: [ { icon: “🏠”, name: “Hallway”, tags: [“hard”], details: [“Robot vac: Tuesday”, “Handheld mop: Week 2”] }, { icon: “👕”, name: “Laundry Room”, tags: [“hard”], details: [“Robot vac: Friday”, “Handheld mop: Week 2”] }, { icon: “🎬”, name: “Media Room”, tags: [“carpet”], details: [“Most-used room”, “Robot vac: Mon / Wed”] }, { icon: “🛏️”, name: “Front Guest Bedroom”, tags: [“carpet”], details: [“Robot vac: Thursday”] }, { icon: “🛏️”, name: “Back Guest Bedroom”, tags: [“carpet”], details: [“Robot vac: Thursday”] }, { icon: “🚿”, name: “Jack-and-Jill Bathroom”, tags: [“hard”], details: [“Shared ensuite for both guest bedrooms”, “Robot vac: Thursday”, “Handheld mop: Week 2”] }, { icon: “🛏️”, name: “Retreat”, tags: [“hard”], details: [“Additional bedroom”, “Robot vac: Monday”, “One-time: repaint ceiling”, “Handheld mop: Week 2”] }, { icon: “🚿”, name: “Retreat Ensuite Bathroom”, tags: [“hard”], details: [“Robot vac: Monday”, “Handheld mop: Week 2”] }, { icon: “🛏️”, name: “Master Bedroom”, tags: [“carpet”], details: [“Robot vac: Tuesday + Saturday”] }, { icon: “🚿”, name: “Master Ensuite Bathroom”, tags: [“hard”], details: [“Robot vac: Saturday”, “Handheld mop: Week 2”] }, { icon: “🧺”, name: “Second Floor Linen Closet”, tags: [“hard”, “storage”], details: [“Hallway — restock monthly”] }, { icon: “👗”, name: “Master Closet”, tags: [“carpet”, “storage”], details: [“Robot vac: Saturday”] }, { icon: “👗”, name: “Front Guest Bedroom Closet”, tags: [“carpet”, “storage”], details: [“Deep-tidy monthly”] }, { icon: “👗”, name: “Back Guest Bedroom Closet”, tags: [“carpet”, “storage”], details: [“Deep-tidy monthly”] }, { icon: “👗”, name: “Retreat Closet”, tags: [“hard”, “storage”], details: [“Deep-tidy monthly”] }, ] }, { icon: “3️⃣”, title: “Third Floor”, subtitle: “All carpet — attic excluded from vacuuming”, color: “#6B5B95”, rooms: [ { icon: “🎨”, name: “Bonus / Craft Room”, tags: [“carpet”], details: [“Robot vac: Thursday”, “One-time: deep clean, organize & purge craft supplies”] }, { icon: “🎨”, name: “Craft Room Closet”, tags: [“storage”], details: [“Deep-tidy monthly”] }, { icon: “🧳”, name: “Luggage Closet”, tags: [“storage”], details: [“Deep-tidy monthly”] }, { icon: “🔒”, name: “Walk-in Attic”, tags: [“storage”], details: [“Attic excluded from vacuuming”, “Inspect seasonally for moisture, pests, insulation”] }, ] }, { icon: “🌿”, title: “Outdoor Spaces”, subtitle: “Seasonal maintenance fully integrated into monthly tasks”, color: “#4D7C0F”, rooms: [ { icon: “🌿”, name: “Screened Porch”, tags: [“outdoor”], details: [“Sweep weekly”, “Deep clean monthly”, “Season-open in spring, season-close in fall”] }, { icon: “🔥”, name: “Patio”, tags: [“outdoor”], details: [“Sweep weekly”, “Scrub surface monthly”, “Power wash seasonally”] }, { icon: “👨‍🍳”, name: “Outdoor Kitchen”, tags: [“outdoor”], details: [“Wipe surfaces weekly”, “Deep clean grill monthly”, “Check gas connections seasonally”] }, { icon: “🏡”, name: “Driveway & Exterior Entry”, tags: [“outdoor”], details: [“Sweep weekly”, “Power wash seasonally”, “Check gutters after storms”] }, ] }, ]; const FLOOR_TAG_LABELS = { hard: “Hard Floor”, carpet: “Carpet”, roger: “Roger’s”, storage: “Storage”, outdoor: “Outdoor” }; const FLOOR_TAG_CLASSES = { hard: “ftag-hard”, carpet: “ftag-carpet”, roger: “ftag-roger”, storage: “ftag-storage”, outdoor: “ftag-outdoor” }; function renderFloors() { const container = document.getElementById(‘grid-floors’); let roomCount = 0; FLOORS.forEach(floor => { const block = document.createElement(‘div’); block.className = ‘floor-block’; const hdr = document.createElement(‘div’); hdr.className = ‘floor-header’; hdr.style.borderLeft = `4px solid ${floor.color}`; hdr.innerHTML = ` ${floor.icon}
${floor.title}
${floor.subtitle}
${floor.rooms.length} spaces `; block.appendChild(hdr); const roomsGrid = document.createElement(‘div’); roomsGrid.className = ‘floor-rooms’; floor.rooms.forEach(room => { const roomEl = document.createElement(‘div’); roomEl.className = ‘floor-room’; const roomHdr = document.createElement(‘div’); roomHdr.className = ‘floor-room-header’; roomHdr.innerHTML = `${room.icon}${room.name}`; roomEl.appendChild(roomHdr); if (room.tags && room.tags.length) { const tagsEl = document.createElement(‘div’); tagsEl.className = ‘floor-room-tags’; room.tags.forEach(t => { const tag = document.createElement(‘span’); tag.className = `floor-room-tag ${FLOOR_TAG_CLASSES[t]}`; tag.textContent = FLOOR_TAG_LABELS[t]; tagsEl.appendChild(tag); }); roomEl.appendChild(tagsEl); } if (room.details && room.details.length) { const ul = document.createElement(‘ul’); ul.className = ‘floor-room-details’; room.details.forEach(d => { const li = document.createElement(‘li’); li.className = ‘floor-room-detail’; if (d.includes(‘⚠️’)) li.style.color = ‘#C0392B’; li.textContent = d; ul.appendChild(li); }); roomEl.appendChild(ul); } roomsGrid.appendChild(roomEl); roomCount++; }); block.appendChild(roomsGrid); container.appendChild(block); }); document.getElementById(‘cnt-floors’).textContent = roomCount; } // ───────────────────────────────────────── // INIT // ───────────────────────────────────────── function renderWeek(weekIndex, containerId) { const week = WEEKS[weekIndex]; const grid = document.getElementById(containerId); week.areas.forEach(item => { grid.appendChild(makeAreaCard(item, ‘weekly’)); }); } document.addEventListener(‘DOMContentLoaded’, () => { renderFreq(DAILY, ‘grid-daily’, ‘daily’); renderWeek(0, ‘grid-week1’); renderWeek(1, ‘grid-week2’); renderWeek(2, ‘grid-week3’); renderWeek(3, ‘grid-week4’); renderFloorCare(); renderAnnual(); renderOnetime(); renderFloors(); document.getElementById(‘cnt-annual’).textContent = ANNUAL.length + ‘ seasons’; document.querySelectorAll(‘.tab’).forEach(tab => { tab.addEventListener(‘click’, () => { document.querySelectorAll(‘.tab’).forEach(t => t.classList.remove(‘active’)); document.querySelectorAll(‘.freq-panel’).forEach(p => p.classList.remove(‘active’)); tab.classList.add(‘active’); document.getElementById(‘panel-‘ + tab.dataset.freq).classList.add(‘active’); }); }); });

Family Routines

A polished wooden dining table transformed into a tidy planning station, holding a silver laptop with a blank screen, a stack of neatly arranged paper planners labeled “Meals,” “Chores,” and “Activities,” and a slim digital tablet showing a simple weekly grid with color blocks. A closed, minimalist folder embossed “Zelmat Family Hub” lies beside a fine-tip pen and a small, uncluttered ceramic cup filled with highlighters. Soft morning light filters across the surface from a nearby window, casting subtle shadows and a gentle, focused glow. Photographic realism, shot from a slightly elevated angle with balanced composition, emphasizing clarity, privacy, and professionalism, with the background intentionally blurred to keep attention on the planning tools rather than the room.

A structured services-style layout breaks down recurring family activities like meals, school, sports, and work into clear blocks. Each block highlights person, time, and location to keep everyone aligned.

An orderly home office corner dedicated to announcements and resources, featuring a slim, matte-black bulletin board framed in brushed aluminum, holding tidy, anonymized printouts labeled “This Week,” “Important,” and “Reminders” in clean typography. Below it, a white desk supports a closed laptop, a minimalist metal file organizer filled with plain manila folders, and a small, modern desk lamp casting a focused pool of warm light across the surface. The surrounding space is uncluttered, with a neutral wall and a single small plant adding a hint of green. Photographic realism, shot at a three-quarter angle with moderate depth of field, creating a quiet, secure, and professional mood ideal for a private family information hub.

Use color-coded sections and simple icons to quickly scan who is doing what. This system grows with your family, adapting to new activities and schedules.