How recycle385/calendar works
moim is a shared-link scheduling and date-voting service. Hosts create calendars and set candidate dates and a voting window; members or guests join, vote, and see results update in real time, after which the host or an automatic job can close the calendar. The graph combines that user workflow with documented analysis, guest-record reconciliation, holiday synchronization, and optional email. Several backend subsystems are represented by their existing directories because their implementation files were not sampled; those connections are documented capabilities, not claims about inspected call sites.
Main entry points: controllers Request controllers · database.ts MySQL data · cron.service.ts Scheduled jobs · auth.service.ts Authentication
Components 22
Web application
- SPA screens
frontend/src/app/pages - Calendar workflows
frontend/src/app/pages/calendar - Vote experience
frontend/src/domains/vote - HTTP client
frontend/src/shared/api/httpClient.ts - Socket client
frontend/src/shared/socket/socketClient.ts - Calendar cache
frontend/src/app/cache/calendarCache.ts
HTTP application
- API routes
back-end/src/routes - Request controllers
back-end/src/controllers
Scheduling domain
- Authentication
back-end/src/services/auth.service.ts - Calendar management
back-end/src/services/calendar.service.ts - Participant management
back-end/src/services/participant.service.ts - Voting
back-end/src/services/vote.service.ts - Vote analysis
back-end/src/services/analysis.service.ts
Realtime and jobs
- Socket.IO server
back-end/src/sockets - Scheduled jobs
back-end/src/services/cron.service.ts
Data and integrations
- MySQL data
back-end/src/config/database.ts - Redis state
back-end/src/config/redis.ts - Google OAuth
- Groq API
- Public data API
- Gmail API
Other components
- Host or participant
Connections 29
- Host or participant → SPA screens: uses
- SPA screens → Calendar workflows: presents
- Calendar workflows → HTTP client: requests
- Vote experience → HTTP client: requests
- HTTP client → API routes: calls API
- API routes → Request controllers: dispatches
back-end/src/routes/calendar.routes.ts - Request controllers → Authentication: delegates
back-end/src/controllers/auth.controller.ts - Request controllers → Calendar management: delegates
back-end/src/controllers/calendar.controller.ts - Request controllers → Participant management: delegates
back-end/src/controllers/participant.controller.ts - Request controllers → Voting: delegates
- Request controllers → Vote analysis: delegates
- Authentication → Google OAuth: authenticates
back-end/src/services/auth.service.ts - Authentication → MySQL data: persists users
back-end/src/services/auth.service.ts - Authentication → Redis state: uses tokens
- Calendar management → MySQL data: reads and writes
back-end/src/services/calendar.service.ts - Participant management → MySQL data: reads and writes
back-end/src/services/participant.service.ts - Voting → MySQL data: stores votes
- Host or participant → Calendar workflows: creates calendar
- Calendar workflows → Participant management: joins participants
- Vote experience → Voting: submits votes
- Socket.IO server → Socket client: broadcasts changes
- Socket client → Calendar cache: signals refresh
- Request controllers → Socket.IO server: emits updates
back-end/src/controllers/calendar.controller.ts - Request controllers → Socket.IO server: disconnects users
back-end/src/controllers/participant.controller.ts - Vote analysis → Groq API: analyzes votes
- Scheduled jobs → Calendar management: closes calendars
- Scheduled jobs → Gmail API: emails results
- Scheduled jobs → MySQL data: cleans expired data
- Scheduled jobs → Public data API: syncs holidays