ammarwaqar.dev logo

Viewday

Turn any Google Calendar or Notion database into a shareable, embeddable calendar view. Built and shipped solo in six weeks.

Role

Solo Engineer & PM

Timeline

6 weeks

Core Stack

Next.js 15SupabaseGoogle Calendar APINotion APILemonSqueezyVercel

Accelerated by

Viewday Hero 1
Viewday Hero 2
Viewday Hero 3
Viewday Hero 4
Viewday Hero 5

The Context

The Problem

Knowledge workers who live in Notion and Google Calendar have no single source of truth for their schedule. Notion's native calendar view is read-only and isolated, while Google Calendar's embed widget is visually dated and inflexible. Context-switching between these tools creates a significant productivity tax.

The Solution

Viewday authenticates with both Google and Notion via OAuth, normalizes events into a central Supabase cache, and surfaces data through high-fidelity, FullCalendar-powered embeds. It provides a clean separation of concerns: owners control access, and background sync via crons ensures data is always current.

System Architecture

A serverless monolith built on Next.js 15, utilizing Supabase for real-time persistence and Vercel for scheduled automation.

  • App Router Monorepo: Orchestrates 65 API route handlers, React 19 Server Components, and edge-compatible logic.
  • Custom OAuth 2.0 PKCE: Manual implementation using Node.js crypto and jose for multi-account Google/Notion linking, bypassing NextAuth complexity.
  • Idempotent Persistence: Supabase PostgreSQL with 18 tables; a hash-based diff strategy prevents redundant writes to large JSONB event payloads.
  • Hybrid Sync Pipeline: Google Calendar uses webhook push notifications with incremental syncTokens, while Notion uses a polling worker with exponential backoff.
Viewday Architecture

Feature Deep-Dives

Google Calendar Push Notification Pipeline

A real-time sync engine that updates the event cache within seconds of a change in Google Calendar, without aggressive polling.

Technical Hurdles Overcome

  • Implemented a three-tier fallback for webhook channel lookup to handle environment drift and stale records, ensuring high reliability.
  • Engineered incremental sync logic using Google's syncToken mechanism to Authoritatively order events and handle token refresh inline.

LemonSqueezy Billing & Overage Engine

A robust billing system handling subscriptions, LTDs, and add-ons with automated entitlement enforcement.

Technical Hurdles Overcome

  • Built a raw-byte HMAC verification pipeline with timing-attack protection and Postgres-driven idempotency to stop duplicate webhook processing.
  • Created a soft-disable reconciliation logic that enforces plan caps by deactivating old embeds rather than deleting data, ensuring a frictionless user downgrade/upgrade path.

The AI Multiplier

I leveraged AI (Claude / Gemini) to accelerate boilerplate Route Handler scaffolding, repetitive Supabase query patterns, and first-draft TypeScript interface definitions. AI was most valuable as a pair programmer for surfacing edge cases like Google's syncToken 410 paths and LemonSqueezy's retry behavior, while human-led design focused on the three-tier webhook fallbacks and the PKCE implementation.

Analytics & Outcomes

A comprehensive telemetry overlay tracking system health and user engagement across the entire stack.

  • //Custom Admin Feed: Aggregates data from 18 tables into a real-time activity dashboard with client-side derived growth stats.
  • //Cron Observability: A dedicated audit trail logs every automated worker execution (renewal, pruning, syncing) with status and error capture.
  • //Embed Impression Tracking: Service-role logic captures anonymized landing stats for every public embed to enable future per-workspace reporting.
Viewday Analytics

Discover More

Explore other high-performance technical case studies.