AI-powered scheduling and real-time collaboration platform. Create and manage appointments with natural language, resolve conflicts automatically, collaborate in live workspaces (whiteboard, shared docs, video), and stay on top of your schedule with a modern dashboard and notifications.
- AI Assistant: Parse natural language requests, suggest optimal time slots, detect conflicts, and generate meeting agendas (Groq LLaMA3-based, with deterministic fallbacks).
- Smart Scheduling Wizard: End-to-end guided flow from text input to conflict resolution and confirmation.
- Real-time Collaboration: Shared whiteboard, TipTap doc editing via Yjs, WebRTC video calls, in-room chat, and presence.
- Calendar & Dashboard: FullCalendar UI with CRUD, analytics, weekly activity, and trends.
- Notifications: In-app and optional email notifications using per-user SMTP app passwords.
- Secure & Performant: JWT auth, rate limiting, Helmet, CORS; Socket.IO + Yjs websockets.
-
Natural-language scheduling
- Parse: “Schedule a 30-minute call with Sarah next Tuesday afternoon.”
- Deterministic date normalization and validation using
chrono-node
and server-side checks. - Time slot suggestions honoring working hours, timezone, buffers, and patterns.
- Conflict detection with deterministic overlap logic and AI-backed suggestions.
- Agenda generation for meetings.
-
Smart Scheduling Wizard (
frontend/src/components/SmartSchedulingWizard.js
)- Steps: Input → Suggestions → Conflict Resolution → Confirmation.
- Integrates AI parsing, suggestions, conflict checks, and appointment creation.
-
Real-time collaboration workspace (
/collaboration/:appointmentId
)- Whiteboard with live drawing broadcast via Socket.IO.
- Shared document editing powered by Yjs and
y-websocket
(TipTap editor). - Video conferencing using WebRTC (
simple-peer
) with screen sharing. - In-room chat, participant panel, presence, and room size limits.
-
Calendar & Scheduling
- FullCalendar views (month/week/day) with create/edit/delete dialogs.
- Appointment types, locations, descriptions, recurrence flags.
-
Dashboard
- Totals, upcoming, completed, team members, weekly activity, and trends via
/api/stats/dashboard
.
- Totals, upcoming, completed, team members, weekly activity, and trends via
-
Notifications
- In-app feed with unread counts; mark one/all as read.
- Optional email notifications using user-configured Gmail App Passwords (stored hashed).
-
Admin panel
- View users, set roles (
user
/admin
), and delete users with safety checks.
- View users, set roles (
-
Profile management
- Update username/email, notification prefs, change password, delete account.
- Configure email settings and send test emails.
- React 18, React Router v6
- MUI (Material UI)
- React Query (TanStack Query)
- FullCalendar (core/daygrid/timegrid/interaction)
- TipTap editor
- Socket.IO client,
simple-peer
(WebRTC) - date-fns, framer-motion, react-hot-toast
- Node.js, Express
- MongoDB with Mongoose
- Auth: JWT
- Security: Helmet, express-rate-limit, CORS
- Realtime: Socket.IO,
ws
,y-websocket
(Yjs) - AI:
groq-sdk
(LLaMA3-70B),chrono-node
(date parsing) - Validation/Logging: express-validator, zod (internal), winston
- Email: nodemailer (per-user SMTP via stored app passwords)
- REST API under
/api/*
:auth
,appointments
,users
,ai
,collaboration
,notifications
,search
,stats
- WebSockets:
- Socket.IO namespace:
/collab
(whiteboard, chat, WebRTC signaling, presence) - Yjs websocket endpoint:
ws://<host>:<port>/collab-sync
(shared doc sync)
- Socket.IO namespace:
- Data models:
User
,Appointment
,AISettings
,MeetingPatterns
,ConflictResolutions
,CollaborationRoom
,SharedDocument
,WhiteboardSnapshot
,CollaborationMessage
,Notification
- Node.js 18+
- npm 9+ (or pnpm/yarn)
- MongoDB (local or Atlas URI)
git clone <repo-url>
cd Taskuere
# Backend
cd backend
npm install
# Frontend
cd ../frontend
npm install
Backend (backend/.env
):
PORT=5000
NODE_ENV=development
MONGODB_URI=mongodb://localhost:27017/taskuere
JWT_SECRET=change_me
CLIENT_ORIGIN=http://localhost:3000
GROQ_API_KEY= # optional, enables AI features
COLLAB_ROOM_LIMIT=12 # optional
Frontend (frontend/.env
):
REACT_APP_API_URL=http://localhost:5000
Notes:
- AI features gracefully degrade if
GROQ_API_KEY
is not set (fallback parser still works). - Email notifications use per-user Gmail App Password configured in Profile; no global SMTP env is required.
In two terminals:
# Terminal A (backend)
cd backend
npm run dev
# Terminal B (frontend)
cd frontend
npm start
Smoke test:
curl http://localhost:5000/api/test
# -> { "message": "Backend is working!", ... }
-
Register or log in. JWT is stored in
localStorage
and used for all API calls. -
Optional: In Profile → Email Settings, add your Gmail App Password. You can send a test email via the profile UI; backend endpoint
/api/test-email
is also available for debugging. -
Calendar: Create, edit, and delete appointments. Click events to edit; drag-select to create.
-
AI Assistant: Describe what to schedule. The wizard guides you through suggestions → conflict checks → confirmation.
-
Collaboration: From Dashboard/Calendar, open a meeting’s workspace to access whiteboard, shared docs, video, chat, and presence.
-
Admin Panel: Manage users and roles (admin only).
POST /api/auth/register
POST /api/auth/login
GET /api/users/me
(auth) – current profilePUT /api/users/me
(auth) – update profile and notification settingsPUT /api/users/me/password
(auth)DELETE /api/users/me
(auth)GET /api/users
(admin)PATCH /api/users/:id/role
(admin)DELETE /api/users/:id
(admin)
GET /api/appointments
(auth)POST /api/appointments
(auth)GET /api/appointments/:id
(auth)PUT /api/appointments/:id
(auth)PATCH /api/appointments/:id/status
(auth)PATCH /api/appointments/:id/response
(auth)DELETE /api/appointments/:id
(auth)
POST /api/ai/parse-natural-language
(auth)POST /api/ai/suggest-times
(auth)POST /api/ai/detect-conflicts
(auth)POST /api/ai/generate-agenda
(auth)GET /api/ai/settings
|PUT /api/ai/settings
(auth)GET /api/ai/conflicts
|POST /api/ai/resolve-conflict/:id
(auth)
POST /api/collaboration/rooms
(auth) – ensure/get roomGET /api/collaboration/rooms/:appointmentId
(auth)POST /api/collaboration/documents
(auth)GET /api/collaboration/documents/:appointmentId
(auth)POST /api/collaboration/whiteboard
(auth)GET /api/collaboration/whiteboard/:appointmentId
(auth)GET /api/collaboration/chat/:appointmentId
(auth)
GET /api/notifications
(auth)GET /api/notifications/count
(auth)POST /api/notifications/:id/read
(auth)POST /api/notifications/read-all
(auth)
GET /api/search?q=...
(auth)GET /api/stats/dashboard
(auth)GET /api/test
– health check
WebSockets:
- Socket.IO namespace:
/collab
(JWT viaio(..., { auth: { token } })
) - Yjs WS:
ws://localhost:5000/collab-sync
- Set
CLIENT_ORIGIN
to your frontend origin. - Ensure websocket upgrades for both Socket.IO and
/collab-sync
through your reverse proxy. - Build frontend with
npm run build
and serve behind your chosen web server. - Securely provide
JWT_SECRET
,MONGODB_URI
, and optionalGROQ_API_KEY
.
Backend (backend/package.json
):
npm run dev
– start with nodemonnpm start
– start servernpm test
– run backend tests (if present)
Frontend (frontend/package.json
):
npm start
– start React dev servernpm run build
– production buildnpm test
– React tests
Pull requests and issues are welcome. For larger changes, please open an issue first to discuss what you’d like to change.
- Fork and create a feature branch
- Write clean, tested code
- Open a PR with a clear description
MIT. See LICENSE
.