Timey is an open-source employee, project, and time management platform for modern teams.
It combines passwordless access, organization onboarding, member management, and real-time collaboration into one fast web app.
- Passwordless OTP authentication with server-side sessions
- Workspace onboarding (create or join by workspace code)
- Team membership and invite flows
- Realtime collaboration powered by SpacetimeDB
- Global time awareness for distributed teams
- Clean TypeScript-first codebase ready for open-source contribution
Timey is built to become a full operating layer for:
- Employee management
- Project management
- Time and coordination management
Current release focuses on identity, workspace setup, members, invites, chat, and real-time foundations.
Project/task planning and deeper time tracking can be added on top of the existing schema and reducer model.
- Frontend: React 19 + TanStack Start + TanStack Router + React Query
- UI: MUI
- Backend runtime: TanStack Start server functions
- Realtime data layer: SpacetimeDB
- Auth: Email OTP + signed session cookie
- Package manager/runtime: Bun
bun installCreate .env.local:
SESSION_SECRET=change-me
ZEPTOMAIL_TOKEN=your-zeptomail-token
VITE_SPACETIMEDB_HOST=https://maincloud.spacetimedb.com
VITE_SPACETIMEDB_DB_NAME=timeydb
DYTE_ORG_ID=your-dyte-org-id
DYTE_API_KEY=your-dyte-api-key
DYTE_PRESET_NAME=group_call_hostbun run devApp runs at http://localhost:5173.
When changing schema/reducers in spacetimedb/src/index.ts:
bun run spacetime:generateTo publish module updates:
bun run spacetime:publishTo build the module directly:
bun --cwd spacetimedb run buildbun run devstart local dev serverbun run buildbuild production assetsbun run previewpreview production client buildbun run startrun generated server outputbun run spacetime:generateregenerate client bindingsbun run spacetime:publishpublish SpacetimeDB module
src/
components/ UI and feature components
hooks/ auth and data hooks
routes/ file-based app routes
server/ server functions (OTP, invites, sessions)
module_bindings/ generated SpacetimeDB bindings (do not edit)
spacetimedb/
src/index.ts schema + reducers
- OTP auth and session lifecycle
- Organization onboarding and workspace joins
- Member invites and workspace membership
- Realtime team chat foundations
- Multi-timezone awareness primitives
- Project entities, milestones, and ownership
- Task boards and workflow states
- Time entries, attendance, and reporting
- Role-based permissions and audit trails
- Chat page supports threaded replies, reactions, message editing, mentions, emoji picker, and read-state sync.
- Global right-side messenger panel is available outside
/chat. - Messenger supports both direct messages and group channels.
- Floating chat windows open from the messenger panel.
- Maximum 2 floating chat windows are kept open; opening a third replaces the oldest open window.
- Floating thread view now opens as a full thread screen in the same chat card with a top back button.
- Online/offline presence is global (not only
/chat) via SpacetimeDB heartbeat updates. - Topbar user profile shows live online/offline status.
- Incoming message sound plays when user is away from active chat context.
- System notifications for incoming messages work when user is away and notification permission is granted.
- Message input and message list UI in floating chat are aligned with shared chat components.
- Dyte video call integration is added to chat headers (start call -> open in-app Dyte meeting dialog).
- Dyte server bridge is added (
src/server/dyte.ts) to create meetings and participant auth tokens securely. - Call sessions are now chat-native via SpacetimeDB (
chat_call_session,chat_call_participant) with active call discovery, join, leave, and end flows. - Meetings manager is live at
/meetingswith channel/public meeting scheduling and join-window enforcement. - Meetings manager is simplified around actual operations instead of placeholder panels.
- Full-screen calendar view is redesigned as the primary calendar surface, with date popup workflows, in-place meeting creation/editing, conflict surfacing, drag rescheduling, and ICS export.
- Meeting settings are redesigned into a guided setup flow for office users (booking page, booking types, weekly availability, reminders/follow-up).
- Booking requests are moved to
/meetings/requestsas a dedicated host workflow page. - Meeting activity and follow-up are moved to
/meetings/activityas a separate operational page. - Meetings manager, calendar, requests, activity, and settings now share a standard meetings UI shell and a consistent submenu/sidebar.
- Public booking pages are available at
/u/:handleand/u/:handle/:eventTypeSlug. - Public booking event pages are redesigned into a cleaner booking flow with calendar-first scheduling and separate details confirmation.
- Booking approval workflow is live for event types with
requireApproval(pending queue + approve/decline in/meetings/requests). - Public booking flow now suggests nearby alternative slots when conflict/availability errors occur.
- Booking management links are live at
/booking/:token, redesigned as a guest-facing page with join-first flow plus manage controls. - Public scheduled meetings now support true external guest invite links via
/meet/:inviteTokeninstead of pointing outsiders into the workspace portal. - Host booking operations are now available on
/meetings/requests, including approve/decline, start/join meeting, reminder email, reschedule, cancel, and guest manage-link actions. - Meeting lifecycle emails are sent via ZeptoMail for booking request/confirm/decline/reschedule/cancel and scheduled-meeting notices.
- Confirmed/rescheduled notices include
.icscalendar invite attachments. - Reminder templates can queue reminder deliveries in
/meetings/settings, with due-now bulk dispatch, manual single-send, and failure tracking. - Direct reminder emails can also be sent from
/meetings/requestsfor approved bookings. - Post-meeting follow-up nudges are available from
/meetings/activityfor ended bookings. - Global radius tokens are added and main chat/dashboard/meetings/public-booking surfaces are standardized to the same corner system.
- Closed-tab/browser push notifications (requires Service Worker + Push API + backend Web Push).
- Notification preferences UI (sound on/off, desktop notification toggle, channel-level controls).
- Additional mobile refinements for floating messenger behavior.
- More chat QA coverage for reconnect/offline/online transitions and multi-account switching.
- Reminder automation worker so reminders send without opening settings.
- External calendar sync (Google/Microsoft).
- Enterprise reporting and compliance automation for meeting lifecycle.
- End-to-end automated tests for public booking, guest join, and host request flows.
- See the detailed meetings plan in docs/meetings-roadmap.md.
- @luckycrm
- Full list: CONTRIBUTORS.md
Contributions are welcome.
- Fork the repo
- Create a branch (
feat/your-feature) - Commit with clear messages (
feat: ...,fix: ...) - Open a pull request with screenshots/notes when UI changes are included
Generated files like src/module_bindings/ and src/routeTree.gen.ts should not be manually edited.
Read:
Automated review:
- CodeRabbit checks are configured via
.coderabbit.yaml - Install/enable the CodeRabbit GitHub App on this repository to activate PR checks
- Keep secrets in
.env.local - Never commit production keys
- Rotate
SESSION_SECRETand mail credentials regularly
If this project helps your team, support ongoing development via GitHub Sponsors.
Licensed under Apache 2.0. See LICENSE.

