Skip to content

Repository files navigation

SyncHours

Find a meeting time that works across timezones — no accounts, no backend.

SyncHours is a static timezone meeting planner. Add 2–6 people in different cities, set each person’s local work window, and see overlapping hours over the next five days. Share the plan with a single URL hash — everything lives in the browser.

Live (after Pages enabled): https://xxx1694.github.io/SyncHours/
Repo: https://github.com/XXX1694/SyncHours

Deploy gate: open Settings → Pages, set source to GitHub Actions (or branch gh-pages / /), then re-run the deploy workflow. Details in DEPLOY.md.


Features

  • 2–6 people — name, city, and local work hours for each participant
  • Work windows — per-person start/end hours in their local timezone
  • 5-day overlap timeline — hour-by-hour availability and best overlapping ranges
  • Share via URL hash — encode the full plan in the link; no server round-trip
  • No backend — fully static; works offline once loaded
  • IANA timezones via the browser Intl APIs — DST-aware local conversions

Stack

Layer Choice
Bundler / dev server Vite
Language Vanilla TypeScript
Timezones Intl + IANA zone IDs
Hosting GitHub Pages (static dist/)

No framework, no database, no auth.


Local development

Requires Node.js 22+ (matches CI) and npm.

npm install
npm run dev          # Vite dev server
npm run build        # typecheck + production build → dist/
npm run preview      # serve dist/ locally
npm run smoke        # post-build smoke checks
npm run typecheck    # tsc --noEmit only

Open the URL printed by npm run dev (typically http://localhost:5173/SyncHours/). The Vite base is /SyncHours/ so local paths match production.


Deploy

Production is published with GitHub Actions → GitHub Pages.

  • Workflow: .github/workflows/deploy.yml
  • Triggers: push to main, or manual workflow_dispatch
  • Steps: npm cinpm run buildnpm run smoke → upload dist/ → deploy Pages

Production URL:

https://xxx1694.github.io/SyncHours/

After the first successful run, enable Settings → Pages → Source = GitHub Actions if it is not already set. See DEPLOY.md for custom domains, Cloudflare Pages, and canonical URL updates.


Ads

Ad placement is reserved below the overlap results — never in the hero or above-the-fold tool.

  • Guide: ADS.md
  • DOM target: aside#ad-slot.ad-placeholder
  • Supported networks: Google AdSense, Yandex RSYA

Analytics

A client stub is defined on window:

window.synchoursAnalytics?.track(event, props?)

In development it logs to the console. Wire it to your provider of choice (Plausible, Umami, GA4, etc.).

A Plausible snippet is commented in index.html:

<!-- Analytics: uncomment and set your domain after deploy
<script defer data-domain="YOUR_DOMAIN" src="https://plausible.io/js/script.js"></script>
-->

Uncomment after deploy and replace YOUR_DOMAIN with your production hostname (e.g. xxx1694.github.io or a custom domain).


License

MIT


На русском (кратко)

SyncHours — статический планировщик встреч по часовым поясам (Vite + TypeScript). Добавьте 2–6 человек, укажите рабочие окна, посмотрите пересечения на 5 дней и поделитесь ссылкой (состояние в hash URL). Бэкенда нет.

Команда Назначение
npm install зависимости
npm run dev локальная разработка
npm run build сборка в dist/
npm run preview превью сборки
npm run smoke smoke-тесты
npm run typecheck проверка типов

Прод: https://xxx1694.github.io/SyncHours/ через GitHub Actions. Реклама — ADS.md (#ad-slot / .ad-placeholder). Аналитика — window.synchoursAnalytics и закомментированный Plausible в index.html. Лицензия MIT.

About

Static timezone meeting planner — add 2–6 people, set work windows, see 5-day overlap. Shareable via URL hash, no backend. Vite + TypeScript, GitHub Pages

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages