The Events tool lets team members propose social events, outings, and team activities. Others can vote on proposals, and managers can confirm dates and details.
- Event proposals — Any team member can propose an event with title, description, date, location, and image
- Voting — Toggle-based voting to gauge interest (one vote per person, click again to unvote)
- Status workflow — Events move through
proposed → confirmed → completed / cancelled
- Image uploads — Upload event images (JPEG, PNG, GIF, WebP, max 5 MB) stored in R2
- Sort by popularity — Events sorted by vote count, then recency
| Access Level | View | Update | Manage |
|---|
| Executive | Yes | Yes | Yes |
| Head | Yes | Yes | Yes |
| Manager | Yes | Yes | Yes |
| Lead | Yes | Yes | No |
| Employee | Yes | Yes | No |
- View — See events and vote
- Update — Create/edit events (own events, or any event if manager+)
- Manage — Delete events
| Parameter | Type | Description |
|---|
status | string | Filter by status: proposed, confirmed, completed, cancelled |
| Column | Type | Description |
|---|
| id | TEXT PK | UUID |
| title | TEXT | Event name |
| description | TEXT | Event details |
| proposed_date | TEXT | Suggested date |
| confirmed_date | TEXT | Confirmed date (set by manager) |
| location | TEXT | Event location |
| image_url | TEXT | Uploaded image URL |
| status | TEXT | proposed / confirmed / completed / cancelled |
| proposed_by | TEXT FK | User who proposed the event |
| Column | Type | Description |
|---|
| id | TEXT PK | UUID |
| event_id | TEXT FK | Event reference |
| user_id | TEXT FK | Voter |
Unique constraint on (event_id, user_id) — one vote per user per event.
| File | Purpose |
|---|
src/routes/events.tsx | Route definition |
src/hooks/use-events.ts | TanStack Query hooks |
worker/routes/events.ts | API endpoints |