Skip to content
All projects

SyncToDo

A shared schedule and to-do board where several people see changes live, with an MCP server so an AI assistant can use it too.

Go
Gin
WebSocket
Next.js
PostgreSQL
MCP

The problem

Planning a day with someone else usually means a chat thread and a calendar that disagree. I wanted one board both people edit, where a change shows up on the other screen straight away.

How it works

  • A Go backend with a WebSocket hub: each client joins a schedule, and every change is broadcast to the others on it.
  • A Next.js frontend. Schedule times are kept in UTC and shown in the browser's time zone, so people in different zones see the same slot.
  • Sharing is permission-based, and people sign in with Google and are invited by email.
  • A separate Go MCP server lets an AI client read and change a person's schedule on their behalf, using that person's own login.
  • Dev and prod run in separate namespaces. The project has 30+ written decision records.

A decision: Start with an in-memory store behind an interface, move to Postgres later

The first version kept everything in memory so the data model was cheap to change. Handlers only called typed store methods, so SQLite and then Postgres could be swapped in without touching them.

What was hard

Daylight saving time. The hour that repeats when clocks go back makes wall-clock times ambiguous, so it has its own decision record and tests.