Custody Exchange Switcher — Help

← Back to App
01

What is this app?

A custody time calculator for co-parents who need to occasionally swap childcare windows — without losing track of the overall balance.

Every week follows a default schedule (e.g. Mother has Tue 9–20, Fri 9–Sat 20). When either parent needs to swap a window — a work trip, a birthday, a school event — you edit that specific day. The app tracks exactly how many hours each parent has gained or lost across School, Sleep, and Free time.

Color system

ColorMeaning
PurpleMother's custody time
BlueFather's custody time
Orange dotDay has been manually modified
Orange badgeSchool day
Green badgeVacation / no school day
💾
All data is saved automatically in your browser's localStorage. Use Export to back up or share data with your co-parent.
02

Reading the Calendar

Each cell shows one day. Here's what every element means.

Calendar cells — annotated
School day, default schedule
12 Sch
0-9
9-20
2024
① Date number
Sch = school day
③ Proportional 24h bar
④ Blue bg = sleep time
⑤ Yellow bg = daytime
Vacation day (auto: weekend)
13 Vac
0-24
Vac = no school.
Weekends are auto-Vac.
Manually edited day
5
Sch
0-9
9-20
2024
M 14–18
孩子生日
Blue ring = today
Orange dot = modified
Purple bar = swap block
Italic = note/comment

The 24-hour time bar

The colored bar inside each cell represents the full day (0 to 24). Its width is proportional to time:

  • Purple segment — hours the child is with Mother
  • Light blue segment — hours the child is with Father
  • Numbers inside each segment show start–end hour (e.g. 9-20)
  • Very narrow segments (under ~2h) show two stacked numbers instead of a range

Background gradient

The cell background shows a soft day/night pattern based on your sleep settings:

  • Light blue background — sleep time (e.g. 20:00–09:00)
  • Light yellow background — daytime / awake hours

This makes it easy to see at a glance whether a custody window is "quality time" or just overnight.

Navigating months

Use the ← → buttons in the header to move between months. The app remembers all changes regardless of which month you're viewing.

03

Balance Bar

Shown below the header — tracks how many hours each parent has this month, broken into three meaningful categories plus a total.

Balance bar — example with a 3h swap toward Mother
School
M44h
F98h
=
Sleep
M120h
F240h
=
Free
M38h
F97h
M +3h
Total
M202h
F435h
M +3h

The three categories

CategoryWhat countsWhy it matters
School Overlapping hours with school schedule (Mon–Fri 8–15 by default) Child is at school — neither parent really "has" them, but someone must drop-off/pick-up
Sleep Overlapping hours with sleep window (20:00–09:00 by default) Child is asleep — custody is mainly about where they wake up
Free All remaining hours (awake, not at school) Most meaningful — actual quality time spent with the child

Delta pills

The colored pill shows the change compared to the default schedule for this month:

  • = — No change from default
  • M +3h — Mother gained 3 extra hours vs. her default
  • F +3h — Father gained 3h (Mother gave up 3h vs. her default)

The balance bar updates instantly as you edit days.

04

Editing a Day

Click any day on the calendar to open the Edit Day panel. This is where you make all per-day changes.

Edit Day modal

Day type toggle (top right)

School Day ↔ Vacation DayClick the badge in the top-right of the modal to toggle. On vacation days, school hours are reclassified as free time — useful for school holidays, teacher days, etc.
No School (greyed out)Weekends and any day not in your school schedule show "No School" — greyed out, not clickable, because they're inherently vacation.

Day summary cards

The three cards (School / Sleep / Free) show exactly how many hours each parent has today, after all blocks and vacation status are taken into account. Father's hours are the remaining time not covered by Mother's blocks.

Adding a note / comment

Click the text field below the summary cards — it says "Add note — e.g. Birthday, School event, Doctor…"
Type your note. It saves automatically as you type. No need to press a button.
The note appears in the calendar cell as small italic text at the bottom of the day.
To delete the note, clear the text field — it will be removed.

Adding a custom time block

Set the start hour using the first dropdown (0–23).
Set the end hour using the second dropdown (1–24). Use 24 for midnight end-of-day.
Choose the owner — Mother or Father.
Click "Add Block." The block appears in the existing-blocks list and the timeline bar updates immediately.
💡
Blocks you add are shown in the calendar cell as small coloured bars below the main timeline bar, and are counted as "swapped" in the balance tracking.

Removing a block

Each block in the list has a Remove button. Click it to delete that specific window. The timeline bar and balance update instantly.

Reset to Default

The red Reset to Default button discards all manual changes for this day — all added blocks, vacation override, and note are cleared — and restores the default schedule.

⚠️
Reset to Default cannot be undone. It removes all customizations for that day including the note.
05

Settings

Click ⚙ Settings below the balance bar to configure the default weekly schedule, school hours, and sleep time.

⚠️
Always click Apply & Regenerate Calendar after making changes. This clears all per-day overrides and rebuilds the calendar from the new defaults.

Custody Schedule — Mother's default windows

Defines which time windows Mother has the child by default, every week. Everything not covered here belongs to Father.

Each row = one recurring window: day-of-week, owner (Mother/Father), start hour, end hour.
Overnight windows that cross midnight must be split into two rows. E.g. "Fri 9–24" and "Sat 0–20" together means Mother has the child from Friday 9am through Saturday 8pm.
+ Add Window adds a blank row you can configure.
Del removes a row.

Default: Tue 9–20 (Mother), Fri 9–24 (Mother), Sat 0–20 (Mother). All other time belongs to Father.

School Schedule

Defines when the child is at school. School time is tracked separately in the balance bar and shown differently in per-day summaries.

Default: Mon–Fri 8:00–15:00.
+ Add School Day to add extra sessions (e.g. Saturday school).
Days not in this list (like weekends) automatically get the green Vac badge.

Sleep Time

A daily window when the child is asleep. Applies to every day. If the end hour is earlier than the start hour, it wraps across midnight.

  • Default: Bedtime 20, Wake up 9 (i.e. 20:00–09:00 next morning)
  • Sleep time is tracked separately in the balance bar
  • The calendar cell background shows a subtle blue tint during sleep hours

Apply & Regenerate Calendar

After changing any setting, press this button. It:

  1. Saves the new school/sleep/custody defaults
  2. Clears all per-day manual overrides
  3. Rebuilds the calendar from scratch
💡
If you want to change settings without losing your manual swaps, use Export first to save a backup, then Apply.
06

Export / Import

Share your calendar data with your co-parent, or back it up before making big changes.

Export

Click "↓ Export" in the toolbar next to Settings.
A file named custody-2026-05.json (month-named) is downloaded automatically.
Send this file to your co-parent via email, iMessage, or any file-sharing method.

The exported file contains everything:

  • Default custody schedule, school schedule, sleep schedule
  • All per-day swap overrides
  • Vacation day markings
  • Day notes / comments

Import

Click "↑ Import" in the toolbar.
Select the .json file from your device.
All data is restored and the calendar refreshes. A confirmation alert appears.
⚠️
Import replaces all existing data. If you have unsaved local changes you want to keep, export first.

Sync workflow with co-parent

  1. Parent A makes changes, clicks Export, sends the file.
  2. Parent B receives the file, clicks Import.
  3. Both now have identical data.
  4. If both made changes independently, one person's changes will overwrite the other's — coordinate to avoid conflicts.
07

Printing

Click 🖨 Print in the toolbar to open the browser print dialog.

The print layout is optimised for paper:

  • Landscape orientation — set automatically
  • All colors preserved — timeline bars, gradient backgrounds, badges all print in full color
  • Full detail shown — Sch/Vac badges and swap entries are shown even if the screen was in mobile-compact mode
  • UI hidden — Settings panel, nav buttons, and modals do not print
💡
In your browser's print dialog, make sure "Background graphics" is enabled to preserve the gradient backgrounds and colored bars.
08

FAQ

My data disappeared after clearing the browser

All data lives in localStorage, which is cleared with browser history. Always Export regularly to keep a backup.

I changed the default schedule but old overrides are still showing

Clicking Apply & Regenerate clears all overrides and rebuilds from the new defaults. This is intentional — your manual edits are per-day and tied to the old schedule.

Can I set different school hours for different days?

Yes — in Settings → School Schedule, add individual rows for each day. You can have Mon 8–15 and Wed 8–12, for example.

A day shows "Vac" but it's a school day

That day-of-week isn't in your School Schedule. Add it in Settings → School Schedule → + Add School Day.

How do I mark a school holiday (a weekday with no school)?

Click the day → in the modal, click the School Day button to switch it to Vacation Day. Only that specific date is affected.

Can I track custody for more than one child?

The current app tracks one child's schedule. For multiple children with different schedules, open separate browser tabs or export/import separate files per child.

What does "Reset to Default" in the Edit Day modal do exactly?

It removes the day from the overrides store, deletes any vacation day marking for that date, and removes the comment. The day reverts to whatever the default weekly schedule says.

How do I completely reset the app to factory defaults?

Open the browser console (Cmd+Option+J on Mac, F12 on Windows) and run:

['ces_schedule','ces_school','ces_sleep','ces_overrides','ces_vacation','ces_comments'].forEach(k => localStorage.removeItem(k));

Then reload the page.