Skip to content
← All work

AI meeting planner across time zones, modern Angular + Claude

Meridly

Finds the fairest meeting time for distributed teams: one 24-hour grid of working hours, weekends and holidays, a tested deterministic scheduler, and Claude for plain-English requests and ready-to-send invites.

My role: Full-stack developer: Angular app, scheduling engine, Claude integration, Supabase auth and CI/CD

Visit ↗
  • Angular
  • Signals
  • Claude API
  • Supabase
  • Vercel
Screenshot of Meridly, ai meeting planner across time zones, modern angular + claude, built by Anshuman Verma

Overview

Meridly helps distributed teams find a meeting time that is fair to everyone. It shows the whole team's working hours, weekends and public holidays on one 24-hour grid, ranks the best slots with a deterministic scheduler and shares a link that shows the time in each person's own zone. Claude adds people and meeting requests from plain English, explains the suggestions and drafts the invite. All scheduling is done in tested TypeScript; every AI output is validated before it is used.

The challenge

Teams spread across India, the US, Europe and Australia waste time finding a meeting slot, and the same people end up taking every early or late call. Holidays and daylight-saving changes make it worse.

Meridly had to find genuinely fair times, never get a time zone wrong, and still be easy to use: type a request in plain English, get a suggestion and an invite ready to send.

How it works

  1. 1Add team + hours
  2. 2Holidays + DST
  3. 3Score 15-min slots
  4. 4Fairness ranking
  5. 5Claude explains + drafts invite
  6. 6Share link / .ics

Architecture

The Angular app is fully standalone and zoneless, with state in signals, signal forms for input and httpResource for data. The planner grid renders each person's day in their own zone using the browser's Intl time zone database, with public holidays from the Nager.Date API.

A deterministic TypeScript scheduler scores every 15-minute slot by distance outside each person's hours, penalises days off and holidays, and adds a fairness term so inconvenience rotates. It is unit-tested across daylight-saving transitions.

Claude runs in a Vercel Function: it turns plain-English requests into structured data, validated with Zod, and explains the chosen slot and drafts the invite. Supabase handles auth and Postgres with row-level security, and Vercel Cron resets the demo team nightly.

What I built

Time zone planner

A 24-hour grid with one row per person in their local time, working hours shaded, weekends and public holidays marked and the overlap band highlighted; time zone and daylight-saving maths use the browser's built-in time zone database.

Deterministic scheduler

Candidate slots every 15 minutes are scored by how far each falls outside each person's hours, with penalties for days off and holidays and a fairness term that spreads inconvenience; unit-tested across daylight-saving changes.

AI assistant on Claude

Add people and ask for a time in plain English, get a fairness note for the chosen slot and an invite for email, Slack or WhatsApp. Claude interprets and explains; the app's own code validates and computes every time.

Sharing without login

A meeting link shows the time in the viewer's zone plus everyone's local time, with .ics download and a Google Calendar link.

Auth and one-click demo

Supabase Auth with email, Google sign-in and password reset; a demo button opens a sample five-person team, reset every night by a scheduled job.

Modern Angular throughout

Standalone components, zoneless change detection, signals, signal forms, httpResource, new control flow, @defer for the AI panel, prerendering, PWA support and an accessible keyboard and screen-reader grid.

Engineering decisions

  • Compute every time in tested TypeScript; Claude only interprets requests and explains results.
  • Validate all AI output with Zod before it touches the schedule.
  • Use the browser's Intl time zone data instead of hand-written offsets, so daylight saving is always correct.
  • Report unconfigured services clearly instead of returning mock responses.

Results

  • Live on Vercel with a one-click demo team across five time zones.
  • Scheduling logic is deterministic and tested, including daylight-saving changes.
  • Shared meeting links open without login, with .ics and Google Calendar links.
  • CI with Vitest, Playwright and ESLint on GitHub Actions.

Stack

Framework
Angular (latest), standalone components, zoneless change detection, TypeScript strict
State and forms
Signals (signal, computed, linkedSignal), signal forms, httpResource
UI
Angular Material 3 custom theme, Angular CDK drag-and-drop and overlay, SCSS tokens
AI
Anthropic Claude API in a Vercel Function, Zod validation, streaming responses
Auth and data
Supabase Auth (email, Google), Supabase Postgres with RLS, Vercel Cron, Intl APIs, Nager.Date holidays
Testing and CI/CD
Vitest, Angular Testing Library, Playwright, ESLint, GitHub Actions, Vercel

Need something like this?

I can build a version of this for your product, your data and your stack.

Start a project