Automated group scheduling. Create an event, invite participants, connect Google Calendars, and find a time that works for everyone — no back-and-forth.
- Create an event — set a date range, duration, and working hours
- Invite participants — they receive email invitations with unique links
- Connect calendars — each participant grants read-only access to their Google Calendar free/busy data
- Auto-propose — once everyone's connected, the app finds available slots and proposes the best one
- Confirm — participants confirm or decline; if declined, the next slot is proposed automatically
| Layer | Technology |
|---|---|
| Web | Next.js 16, React 19, TypeScript, Tailwind CSS v4 |
| iOS | SwiftUI, iOS 17+ |
| Database | Turso (libSQL) via Drizzle ORM |
| Resend | |
| Calendar | Google Calendar API (free/busy) |
| Auth | Google OAuth 2.0 (per-participant, scoped to calendar read) |
TURSO_DATABASE_URL=libsql://your-db.turso.io
TURSO_AUTH_TOKEN=your-token
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
ENCRYPTION_KEY=any-random-string
RESEND_API_KEY=your-resend-key
NEXT_PUBLIC_BASE_URL=http://localhost:3000
npm install
npm run devOpen ios/get2gethr.xcodeproj in Xcode. The app targets iOS 17+ and connects to the same backend API.
Update the baseURL in Services/APIClient.swift to point to your deployed instance.
get2gethr/
├── app/ # Next.js pages + API routes
│ ├── api/ # REST API (events, invites, auth)
│ ├── events/[id]/ # Event dashboard page
│ └── invite/[token]/ # Invitation + confirmation pages
├── lib/ # Server-side logic
│ ├── db/ # Drizzle schema + Turso connection
│ ├── scheduler.ts # State machine (advance events, finalize slots)
│ ├── availability.ts # Free slot computation
│ ├── google-calendar.ts # OAuth + Calendar API
│ ├── email.ts # Resend templates
│ └── crypto.ts # AES-256 token encryption
├── components/ # React UI components
└── ios/ # SwiftUI iOS app
└── get2gethr/
├── Views/ # CreateEvent, Dashboard, Invite, SlotConfirm
├── Models/ # Data models + theme
├── Services/ # API client
└── Components/ # Reusable UI (chips, banners)
Private.