DEV Community

Debjit Chandra Sarkar
Debjit Chandra Sarkar

Posted on

How I built an AI-powered office booking system with MeDo — zero code written

How I Built an AI-Powered Office Booking System with MeDo — Zero Code Written

If you've ever walked into a meeting room you booked
days ago only to find another team already in there
— you know exactly why I built MeetOps.

Double bookings. Scattered spreadsheets. Zero
visibility into who has what room and when. It's
one of those problems every office has but nobody
has properly solved for small and mid-size teams.

So for the Build with MeDo Hackathon, I decided
to build MeetOps — a centralized AI-powered office
room booking system. The twist? I built the entire
thing using MeDo's conversational full-stack builder.
Zero lines of code written. Not one.

Here's the full story.


🏢 The Problem MeetOps Solves

Organizations waste hours every week dealing with:

  • Double-booked rooms with no conflict prevention
  • Manual scheduling via spreadsheets and Slack threads
  • Zero visibility into who has booked what and when
  • No approval workflows — anyone books anything without oversight
  • Language barriers for multinational and multicultural teams

MeetOps eliminates all of this with a single
centralized platform that combines real-time conflict
detection, structured approval workflows, a live
shared calendar, and an AI booking assistant that
lets users book rooms through natural language.


🏗️ How I Structured Conversations with MeDo

The biggest lesson I learned early: MeDo works
best when you treat each feature as its own focused
conversation.
One giant prompt trying to build
everything at once produces mediocre results.
Feature-by-feature conversations produce excellent ones.

Here's exactly how I broke the build down:

Conversation 1 — Foundation
Authentication system (register, login, logout,
password reset) and role-based access control
(Admin, Manager, User) with permissions enforced
at both UI and data levels.

Conversation 2 — Core Booking Engine
Resource management (Admin CRUD), booking creation
form with date/time selection, and the conflict
detection logic that prevents overlapping bookings.

Conversation 3 — Approval Workflow
State machine: Pending → Approved / Rejected →
auto-archived as Completed when the meeting ends.
Only Managers and Admins can approve. Every
transition logged with timestamp and reviewer identity.

Conversation 4 — Calendar and Notifications
Shared live calendar with month/week/day views,
color-coded by booking status. In-app notification
system scoped by role — Admins see everything,
Users see only their own.

Conversation 5 — LLM Plugin Integration
AI Booking Assistant as a floating chat widget,
AI Meeting Agenda Generator on the booking form,
and Admin AI Utilization Insights on the dashboard.

Conversation 6 — Google Translation Plugin
Full multilingual UI across 10 languages with
real API calls, per-language caching, and Arabic
RTL layout support.

Conversation 7 — Landing Page and Design System
Public landing page and the neo-brutalist design
system applied across every page — checkerboard
background, hard offset shadows, golden amber
buttons, zero border-radius anywhere.


🐛 The Hardest Bugs I Fixed Through Prompts

This is the part nobody talks about in hackathon
write-ups. Bugs. Here are the three hardest ones
I faced and exactly how I fixed them through
prompt engineering.

Bug 1 — The IST Timezone Disaster (UTC+5:30)

The symptom: User asks LLM to book a room
from 10:00 AM to 11:30 AM. Booking details show
3:30 PM to 5:00 PM. Exactly 5 hours and 30 minutes
ahead — which is precisely the IST offset.

The root cause: The LLM was extracting the
correct time from the user's message but then
constructing the datetime using .toISOString()
which always outputs UTC. When this UTC timestamp
was stored and then displayed in the browser
running in IST, it added 5:30 hours — making
every booking appear wrong.

The fix prompt I used:

"The LLM booking creation is calling
.toISOString() which converts the extracted
local time to UTC before storing. Replace this
with a plain local datetime string in the format
YYYY-MM-DDTHH:mm:ss with no Z suffix and no
timezone conversion. The LLM booking path must
use the exact same booking creation function as
the manual form which already works correctly."

The lesson: Always name the specific broken
function or method in your fix prompt. "Fix the
timezone bug" produces a guess. "Stop using
.toISOString() and use this format instead"
produces the correct fix.


Bug 2 — LLM Forgetting Bookings After Page Refresh

The symptom: User books a room through the
AI assistant. Refreshes the page. Asks "show me
my bookings." Assistant says no bookings exist —
even though the booking is in the database.

The root cause: The LLM was relying on
conversation history to answer questions about
bookings. When the page refreshed, chat history
cleared, and the assistant had no data. It was
echoing back what the user had said in previous
messages — not reading from the database.

The fix prompt I used:

"On every single message sent to the LLM
assistant, before processing the message,
fetch fresh data from the database and inject
it into the LLM system prompt: all rooms, all
active bookings across all users, and the
current user's complete booking history. The
assistant must never rely on conversation
history for factual data — only on the freshly
injected database context."

The lesson: An LLM that reads from chat
history instead of live data is a ticking time
bomb. Always inject fresh context on every request.


Bug 3 — Calendar Showing "undefined" Instead of User Names

The symptom: Calendar events showing
"Room 11 — undefined" instead of "Room 11 — Joy"

The root cause: The calendar was fetching
booking records but not resolving the associated
user data. The user name field was being read
before the user object was fetched — returning
undefined.

The fix prompt I used:

"The calendar event rendering is reading the
user name before the user data is resolved.
Fix the data fetching so that when bookings
are loaded for the calendar, the associated
user record for each booking is also fetched
and fully resolved before the events are
rendered. Every calendar event must show the
actual user's name — never undefined."

The lesson: Describe what the data should
look like when it arrives, not just that something
is broken. "Never undefined" is a clear acceptance
criterion that MeDo can test against.


🔌 How the Two Plugins Work Inside MeetOps

LLM Plugin — AI Booking Assistant

The LLM plugin powers four features:

1. Natural Language Booking
Users open the floating chat widget and type
requests like "Book me Room 11 for tomorrow at
10AM for a team standup with 5 people."
The
assistant checks live availability, detects
conflicts, shows a confirmation, and creates the
booking on confirmation.

The key technical detail: on every message, fresh
data is fetched from the database and injected
into the LLM system prompt — all rooms, all active
bookings, and the current user's history. The
assistant never guesses. It always works from
real-time ground truth.

2. Conflict Explanation
When a room is taken, instead of a generic red
error, the LLM generates: "Room 11 is booked
from 2PM to 3:30PM by Debjit. The next available
slot is 3:30PM. Room 15 is also free during your
requested time."
A frustrating error becomes
a helpful conversation.

3. AI Meeting Agenda Generator
On the booking form, users click "Generate Agenda
with AI." The LLM takes the purpose field and
generates a 3–5 point professional meeting agenda
instantly. Sets teams up for productive meetings
before anyone walks in the door.

4. Admin AI Utilization Insights
Admins click "Generate Insights" on the dashboard.
The LLM analyzes booking data and produces a
plain English summary: busiest days, most and
least used rooms, and one actionable recommendation.


Google Text Translation Plugin — Full Multilingual UI

The translation plugin supports 10 languages:
English, Hindi, Bengali, Tamil, Spanish, French,
Arabic, Chinese, Japanese, and German.

What makes this implementation genuinely useful
rather than a gimmick:

  • Everything translates — not just the chat. Navigation, buttons, table headers, status badges, form labels, validation errors, toast messages, and system notifications all translate via real API calls
  • No hardcoded strings — every translation comes from the Google Translation API, cached per language to prevent redundant calls
  • Persists across sessions — language preference saved to the user's database profile, not localStorage. Works on any device after login
  • Arabic triggers RTL — switching to Arabic flips the entire app layout right-to-left. Sidebar moves to the right, all text aligns right, every layout reverses

💡 What I Learned About Prompt Engineering as a Dev Methodology

After building an entire production SaaS through
prompting alone, here's what actually works:

1. Structure every fix prompt with three parts

  • Root cause (what is actually broken and why)
  • Fix instruction (exactly what to change)
  • Acceptance criteria (what correct behavior looks like)

Vague prompts produce vague fixes. Precise prompts
produce precise fixes.

2. One feature per conversation
Starting a new conversation for each major feature
keeps MeDo focused. Mixing five features into one
prompt produces a tangled output that's hard to
debug.

3. Call out the specific broken code pattern
Instead of "fix the timezone bug" — write "stop
using .toISOString() and use this format instead:
YYYY-MM-DDTHH:mm:ss." Naming the specific pattern
that's broken eliminates guessing.

4. Acceptance criteria prevents fake fixes
MeDo can sometimes produce frontend-only workarounds
that look correct but don't actually fix the
underlying data issue. Writing explicit acceptance
criteria like "this must be a real database write,
not a frontend calculation" forces a genuine fix.

5. The confirmation step saves everything
For any AI-driven action (booking creation,
cancellation), always build in a confirmation step
before execution. It catches misinterpretation
before damage is done.


🎯 Final Result

MeetOps is a fully deployed, production-quality
AI-powered office room booking system built with
zero lines of manual code.

Try it live:
🔗 https://app-b5rmjd5bhh4x.appmedo.com

Test credentials:
Admin: admin / DEBjit737362! User: user / DEBjit737362!

Watch the demo:
🎥 https://youtu.be/_RSBLRvmJ38


If you're considering building with MeDo — do it.
The barrier to building complex software is gone.
The only skill that matters now is knowing how to
describe what you want with precision.

That's prompt engineering. And it's worth learning.

BuiltWithMeDo #MeetOps #Hackathon

WorkAndProductivity

Top comments (0)