Your family's WhatsApp and email messages, automatically organized into calendar events
v1.0.2 ยท Desktop App for Linux, Windows & macOS Created by Shahar Bar-MosheA desktop app that reads your children's school WhatsApp groups and teacher emails, uses AI to find events, and puts them on your Google Calendar.
Click your platform for a direct download from GitHub Releases v1.0.2. Per-platform run instructions later in the deck (Quick Start section).
No account needed. All assets: github.com/ShaharBarMoshe/ParentSync/releases/tag/v1.0.2
๐ก Click "Sync Now" to trigger an immediate scan of all your configured WhatsApp groups and email addresses.
๐ก Refresh button (top-right โป icon) reloads all data on the current page without triggering a new sync.
ParentSync automatically scans at the hours you configured in Settings โ Sync Schedule. For example, if you selected 8amโ10pm, it scans once per hour during those times.
Click "Sync Now" on the Dashboard to trigger an immediate scan. Useful after adding a new child or channel.
The โป refresh button (top-right corner of the nav bar) reloads all data on the current page from the database. It does NOT trigger a new sync โ it just refreshes the view.
๐ก The app keeps running and syncing even when minimized to the system tray.
Step-by-step setup for each integration
The AI engine that reads messages and extracts calendar events
Google's Gemini family of LLMs โ fast, cheap, and very good at multilingual extraction. ParentSync uses it to read WhatsApp and email messages and identify dates, events, and details.
๐ก The default model gemini-2.5-flash-lite is fast and cheap โ typical extraction costs are negligible. A free tier is available too.
๐ Don't want Gemini? OpenRouter is supported as an alternative provider โ see next slide.
One-stop shop for many LLM providers behind a single API key
A gateway to many AI models (GPT, Claude, Llama, Qwen, etc.) through a single API key. Useful if you already have credits there, or if you want to A/B test models without changing keys.
๐ก Free models are available โ typically labelled :free. They have rate limits but cost nothing.
sk-or-)You can fill both keys; the active provider is whichever the build is wired to (Gemini by default).
Connect Gmail and Google Calendar to read emails and sync events
OAuth lets ParentSync access your Gmail and Calendar without storing your Google password. You create a "Client ID" in Google Cloud Console โ think of it as a permission slip that tells Google "this app is allowed to access my data."
๐ก You can use separate Google accounts for email scanning and calendar โ or the same account for both.
http://localhost:41932/api/auth/google/callbackโ Tip: switch the consent screen to "In production" โ Test-mode tokens expire after 7 days.
๐บ Video walkthrough โ Create OAuth 2.0 Client ID in Google Console (YouTube)โ ๏ธ "Error 403: access_denied"
Your Google app is in "Testing" mode. Fix: Go to OAuth consent screen โ either add your email as a Test user or click "Publish App".
โ ๏ธ "Failed to exchange authorization code"
The Client Secret may be wrong, or the redirect URI doesn't match. Double-check both in Google Cloud Console and in ParentSync Settings.
Connect your WhatsApp to scan parent group messages
ParentSync connects to WhatsApp Web โ the same way you'd use WhatsApp on your computer. It runs its own browser in the background to read messages from the groups you specify.
๐ก Your WhatsApp session persists across app restarts. You only need to scan the QR code once. If the session expires, you'll be prompted to re-scan.
๐ฑ Your phone must stay connected to the internet for WhatsApp Web to work (WhatsApp requirement).
Then go to Children in Settings, add a child, and type the exact WhatsApp group name.
All data stored locally on your machine. No cloud servers, no accounts to create. Just download, configure, and run.
.dmg in your Downloads folder๐ฆ The build is unsigned (no Apple Developer certificate). The right-click โ Open dance is only needed the first time.
๐ฆ The installer is unsigned (no Authenticode certificate). The SmartScreen "Run anyway" is only needed the first time.
chmod +x ParentSync-1.0.2.AppImage./ParentSync-1.0.2.AppImage)sudo dpkg -i parentsync_1.0.2_amd64.debClone the repo and run npm run install:local โ registers the AppImage as a systemd user service.
| Platform | Format | How to Run |
|---|---|---|
| Linux | .AppImage (portable) | chmod +x, double-click or run from terminal |
| Linux | .deb (Debian/Ubuntu) | dpkg -i, run from app menu |
| Windows | .exe (NSIS installer) | Double-click installer |
| macOS | .dmg | Drag to Applications |
Built with Electron | All data stored locally | Private use
An in-app Settings โ Danger Zone โ Uninstall ParentSync button is planned (Phase 19) โ until then, here's the manual cleanup per platform. Add --purge / the data-removal step to also wipe your database, OAuth tokens, WhatsApp session, and logs.
๐ฑ After removing user data, open WhatsApp on your phone โ Settings โ Linked Devices and remove the ParentSync entry to fully unlink.
ParentSync sends a WhatsApp reminder ~24 hours before an event begins, but only for events that have settled in the system long enough to be trusted.
reminderSent flag)See docs/EVENT-REMINDERS.md for the full specification.
The AI never gets the last word โ you do, in two complementary ways. The prompt sets the rules; your reactions tune the edge cases. Both feed into the same LLM call, and changes take effect on the next sync.
Settings โ AI Extraction Prompt. The whole system prompt is a textarea. Add an example, change wording, or hit Reset to default. Effective on the next sync.
๐ / ๐ข in WhatsApp โ or the inline buttons on the Dashboard. Every ๐ข captures the source as a Learned Exclusion (most recent 50 appended to the prompt). Take back a reaction to undo.
The parse cache keys include a hash of the prompt + exclusions โ so feedback closes on the next sync, not 24 h later.
One real-world WhatsApp message can describe the same gathering from multiple angles โ a birthday is also a "meetup," a class trip is also a "ceremony." The LLM used to extract them as separate events at the same date+time. Now:
๐ก The check pairs with the negative-feedback loop: even if a duplicate slips through, one ๐ข reaction puts it in the learned-exclusions pool so it's gone for good.
Six cards at the top give you a quick health check. Use the Period dropdown (7/30/90 days) and Child filter to narrow the view.
Total WhatsApp + email messages collected. Green trend arrow shows change vs. previous period.
How many calendar events the AI extracted from messages. Trend arrow compares to previous period.
Average time per sync cycle (scanning + parsing). Under 30s is normal.
Percentage of syncs that completed without errors. Green โฅ80%, orange โฅ50%, red below 50%.
The WhatsApp group or email source that generated the most messages in this period.
Timestamp and status badge of the most recent sync. Tells you when data was last refreshed.
Line chart with two lines:
โ Green = WhatsApp messages
โ Red = Email messages
X-axis: dates, Y-axis: message count. Shows daily volume trends โ helps spot when groups are most active.
Horizontal bar chart showing event count by WhatsApp group name. Each channel gets a different purple shade. Hover to see percentage of total. Identifies which groups generate the most calendar events.
Combo chart โ bars + line overlay.
Bars: message count per sync (green = success, orange = partial, red = failed)
Line: sync duration in seconds (right axis)
Spot slow syncs or recurring failures at a glance.
Grid with channels as rows, dates as columns. Cell color intensity = message count. Darker purple = more messages. Hover any cell for exact count. Reveals which days and channels are busiest.
โ ๏ธ "Sync failed"
WhatsApp may be disconnected, or the LLM API key is missing/expired. Check Settings โ WhatsApp status and Gemini / OpenRouter API key.
โ ๏ธ "0 Events Created" after sync
The AI didn't find any events in the messages. This is normal if messages are just chat. Only messages with dates/times get parsed into events.
โ ๏ธ "Google OAuth not configured"
You haven't entered the Google Client ID and Secret yet. Go to Settings โ Google OAuth and follow the setup steps (slide 17).
โ ๏ธ "WhatsApp is not connected"
Session expired. Go to Settings โ click "Connect WhatsApp" โ scan QR code again with your phone.
โ ๏ธ "Failed to load dashboard data"
Backend may still be starting. Wait a few seconds and click the refresh button (โป top-right). If it persists, restart the app.
โ ๏ธ Events not appearing on Google Calendar
Check: 1) Google Calendar account is connected (Settings), 2) If using approval channel, react ๐ to approve the event in WhatsApp.