Markdown Converter
Agent skill for markdown-converter
**Smart Calendar Chatbot Web App (MVP)**
Sign in to like and favorite skills
Smart Calendar Chatbot Web App (MVP)
A full-stack assistant that lets users chat with their Google Calendar:
create events, retrieve past/future events, and answer questions about them using AI + Google Calendar API.
| Layer | Tech Stack |
|---|---|
| Frontend | React (Vite), TailwindCSS, shadcn/ui, react-chat-ui |
| Backend | Node.js (Express), Google Calendar API, OpenAI API |
| LLM | OpenAI (or Claude), used to process event queries |
| OAuth | Google OAuth2 (with googleapis Node.js package) |
| Storage | Optional: PostgreSQL or in-memory cache for event data |
/calendar-chatbot
├── /client # React frontend
│ ├── /components # Chat UI, Calendar Viewer
│ ├── /pages # Auth, Home
│ └── App.jsx
├── /server # Node.js backend
│ ├── /routes
│ │ ├── /auth.js
│ │ ├── /calendar.js
│ │ └── /chatbot.js
│ ├── /utils
│ │ ├── parseMessage.js # Parses chat to intent
│ │ └── generatePrompt.js # Formats RAG prompt
│ └── server.js
├── .env
└── README.md
User types:
"Create a calendar event for 5 PM on July 30 titled 'Eat dinner' and repeat every day"
Frontend sends message to /api/chatbot/message
Backend does:
LLM Input Prompt Example:
User said: "Schedule dinner with John at 7 PM next Friday and repeat weekly."
Extract:
titlestart datetimeend datetime (assume +1 hr if missing)recurrence ruleRespond as JSON: { "title": "...", "start": "...", "end": "...", "recurrence": "RRULE:FREQ=WEEKLY" }
POST /api/calendar/create
{ "title": "Dinner with John", "start": "2025-08-01T19:00:00", "end": "2025-08-01T20:00:00", "recurrence": "RRULE:FREQ=WEEKLY" }
Inserts into Google Calendar using authenticated user’s token.
User asks:
“When was my last dentist appointment?”
Backend Flow:
Fetch user’s past calendar events using Google Calendar API
Filter or chunk into short summaries like:
- Dentist Checkup - 2025-03-01 at 10:00 - Meeting - 2025-03-03 at 14:00 - Dinner - 2025-03-04 at 19:00
Create RAG prompt:
Question: "When was my last dentist appointment?" Context: - Dentist Cleaning - 2024-09-10 10:00 - Dental Checkup - 2025-03-01 15:00 - Staff Meeting - 2025-03-05 09:00
"Your last dentist appointment was on March 1, 2025 at 3:00 PM."
GET /api/calendar/past
Optional Enhancements:
dentist, doctor, etc.)POST /api/chatbot/message
Request:
{ "message": "When was my last dentist appointment?" }
Response:
{ "response": "Your last dentist appointment was on March 1, 2025 at 3:00 PM." }
| Scenario | Input | Expected |
|---|---|---|
| Create event | "Schedule gym at 6 PM Friday" | Event is created for correct time |
| View next event | "What’s next on my calendar?" | Returns next calendar item |
| Past query | "When was my last dentist visit?" | Returns last event with 'dentist' |
| No match | "When did I go to Mars?" | Returns fallback "No match found" |