Back to projects
Oct 07, 2025
3 min read

SyncMaster

SyncMaster automatically syncs your Canvas assignments to Google Calendar and Todoist using a polyglot Next.js + Go architecture.

SyncMaster is a self-hosted automation tool that connects your Canvas LMS account with Google Calendar and Todoist, automatically creating events and tasks for upcoming assignments.

Diagram of the architecture

Overview

I designed SyncMaster to simplify my student workflow: instead of checking Canvas every day or reliying on the Canvas app to notify me, assignments would appear directly in my calendar and to-do app.
The system fetches data from Canvas, processes it through a Go backend, and syncs to external services all self-hosted in my homelab.

Architecture

  • Frontend: Next.js (App Router) + tRPC + NextAuth + Drizzle ORM
  • Backend: Go service handling all sync logic
  • Database: Shared PostgreSQL instance
  • Integrations: Canvas API, Google Calendar API, Todoist API
  • Deployment: Docker Compose (frontend + backend + database)

Assignments are identified by deterministic SHA1 IDs to avoid duplicates, and every sync run is idempotent you can safely re-run it without breaking your data.

How It Works

  1. Connect your Canvas, Google, and Todoist accounts through the dashboard.
  2. SyncMaster fetches assignments and filters only upcoming, actionable ones.
  3. The backend worker creates or updates calendar events and Todoist tasks.
  4. Old or completed assignments are automatically cleaned up.

Current Status

The system is currently live at canvas.cachaza.cc used by me and a few friends.
It’s stable, functional, and running on my Proxmox-based homelab setup.

Built With

  • Next.js 15 + TypeScript
  • Go 1.23
  • Postgres
  • tRPC & Drizzle ORM
  • NextAuth (Google OAuth)
  • Docker + Cloudflare Tunnels for access

Next Steps

  • Add metrics dashboard (sync success, failed tokens, retry count)
  • Implement Notion / Outlook integration
  • Improve per-course calendar configuration

Related Posts
Self-Hosted Gitea on Proxmox
Local CI/CD with GitHub Actions