<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Debjit Chandra Sarkar</title>
    <description>The latest articles on DEV Community by Debjit Chandra Sarkar (@debjit_chandrasarkar_5ed).</description>
    <link>https://dev.to/debjit_chandrasarkar_5ed</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3913864%2F4fb7d17d-7675-4cc1-8fb1-3d2321c7b011.jpg</url>
      <title>DEV Community: Debjit Chandra Sarkar</title>
      <link>https://dev.to/debjit_chandrasarkar_5ed</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/debjit_chandrasarkar_5ed"/>
    <language>en</language>
    <item>
      <title>How I built an AI-powered office booking system with MeDo — zero code written</title>
      <dc:creator>Debjit Chandra Sarkar</dc:creator>
      <pubDate>Tue, 05 May 2026 11:59:23 +0000</pubDate>
      <link>https://dev.to/debjit_chandrasarkar_5ed/how-i-built-an-ai-powered-office-booking-system-with-medo-zero-code-written-b2p</link>
      <guid>https://dev.to/debjit_chandrasarkar_5ed/how-i-built-an-ai-powered-office-booking-system-with-medo-zero-code-written-b2p</guid>
      <description>&lt;h1&gt;
  
  
  How I Built an AI-Powered Office Booking System with MeDo — Zero Code Written
&lt;/h1&gt;

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

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

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

&lt;p&gt;Here's the full story.&lt;/p&gt;




&lt;h2&gt;
  
  
  🏢 The Problem MeetOps Solves
&lt;/h2&gt;

&lt;p&gt;Organizations waste hours every week dealing with:&lt;/p&gt;

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

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




&lt;h2&gt;
  
  
  🏗️ How I Structured Conversations with MeDo
&lt;/h2&gt;

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

&lt;p&gt;Here's exactly how I broke the build down:&lt;/p&gt;

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

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

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

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

&lt;p&gt;&lt;strong&gt;Conversation 5 — LLM Plugin Integration&lt;/strong&gt;&lt;br&gt;
AI Booking Assistant as a floating chat widget, &lt;br&gt;
AI Meeting Agenda Generator on the booking form, &lt;br&gt;
and Admin AI Utilization Insights on the dashboard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conversation 6 — Google Translation Plugin&lt;/strong&gt;&lt;br&gt;
Full multilingual UI across 10 languages with &lt;br&gt;
real API calls, per-language caching, and Arabic &lt;br&gt;
RTL layout support.&lt;/p&gt;

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




&lt;h2&gt;
  
  
  🐛 The Hardest Bugs I Fixed Through Prompts
&lt;/h2&gt;

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

&lt;h3&gt;
  
  
  Bug 1 — The IST Timezone Disaster (UTC+5:30)
&lt;/h3&gt;

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

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

&lt;p&gt;&lt;strong&gt;The fix prompt I used:&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;The lesson:&lt;/strong&gt; Always name the specific broken &lt;br&gt;
function or method in your fix prompt. "Fix the &lt;br&gt;
timezone bug" produces a guess. "Stop using &lt;br&gt;
&lt;code&gt;.toISOString()&lt;/code&gt; and use this format instead" &lt;br&gt;
produces the correct fix.&lt;/p&gt;




&lt;h3&gt;
  
  
  Bug 2 — LLM Forgetting Bookings After Page Refresh
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The symptom:&lt;/strong&gt; User books a room through the &lt;br&gt;
AI assistant. Refreshes the page. Asks "show me &lt;br&gt;
my bookings." Assistant says no bookings exist — &lt;br&gt;
even though the booking is in the database.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;The fix prompt I used:&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;The lesson:&lt;/strong&gt; An LLM that reads from chat &lt;br&gt;
history instead of live data is a ticking time &lt;br&gt;
bomb. Always inject fresh context on every request.&lt;/p&gt;




&lt;h3&gt;
  
  
  Bug 3 — Calendar Showing "undefined" Instead of User Names
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The symptom:&lt;/strong&gt; Calendar events showing &lt;br&gt;
"Room 11 — undefined" instead of "Room 11 — Joy"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The root cause:&lt;/strong&gt; The calendar was fetching &lt;br&gt;
booking records but not resolving the associated &lt;br&gt;
user data. The user name field was being read &lt;br&gt;
before the user object was fetched — returning &lt;br&gt;
undefined.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix prompt I used:&lt;/strong&gt;&lt;/p&gt;

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

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




&lt;h2&gt;
  
  
  🔌 How the Two Plugins Work Inside MeetOps
&lt;/h2&gt;

&lt;h3&gt;
  
  
  LLM Plugin — AI Booking Assistant
&lt;/h3&gt;

&lt;p&gt;The LLM plugin powers four features:&lt;/p&gt;

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

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

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

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

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




&lt;h3&gt;
  
  
  Google Text Translation Plugin — Full Multilingual UI
&lt;/h3&gt;

&lt;p&gt;The translation plugin supports 10 languages:&lt;br&gt;
English, Hindi, Bengali, Tamil, Spanish, French, &lt;br&gt;
Arabic, Chinese, Japanese, and German.&lt;/p&gt;

&lt;p&gt;What makes this implementation genuinely useful &lt;br&gt;
rather than a gimmick:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Everything translates&lt;/strong&gt; — 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&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No hardcoded strings&lt;/strong&gt; — every translation 
comes from the Google Translation API, cached 
per language to prevent redundant calls&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persists across sessions&lt;/strong&gt; — language preference 
saved to the user's database profile, not 
localStorage. Works on any device after login&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Arabic triggers RTL&lt;/strong&gt; — switching to Arabic 
flips the entire app layout right-to-left. 
Sidebar moves to the right, all text aligns 
right, every layout reverses&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💡 What I Learned About Prompt Engineering as a Dev Methodology
&lt;/h2&gt;

&lt;p&gt;After building an entire production SaaS through &lt;br&gt;
prompting alone, here's what actually works:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Structure every fix prompt with three parts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Root cause (what is actually broken and why)&lt;/li&gt;
&lt;li&gt;Fix instruction (exactly what to change)&lt;/li&gt;
&lt;li&gt;Acceptance criteria (what correct behavior looks like)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vague prompts produce vague fixes. Precise prompts &lt;br&gt;
produce precise fixes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. One feature per conversation&lt;/strong&gt;&lt;br&gt;
Starting a new conversation for each major feature &lt;br&gt;
keeps MeDo focused. Mixing five features into one &lt;br&gt;
prompt produces a tangled output that's hard to &lt;br&gt;
debug.&lt;/p&gt;

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

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

&lt;p&gt;&lt;strong&gt;5. The confirmation step saves everything&lt;/strong&gt;&lt;br&gt;
For any AI-driven action (booking creation, &lt;br&gt;
cancellation), always build in a confirmation step &lt;br&gt;
before execution. It catches misinterpretation &lt;br&gt;
before damage is done.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 Final Result
&lt;/h2&gt;

&lt;p&gt;MeetOps is a fully deployed, production-quality &lt;br&gt;
AI-powered office room booking system built with &lt;br&gt;
zero lines of manual code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try it live:&lt;/strong&gt;&lt;br&gt;
🔗 &lt;a href="https://app-b5rmjd5bhh4x.appmedo.com" rel="noopener noreferrer"&gt;https://app-b5rmjd5bhh4x.appmedo.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test credentials:&lt;/strong&gt;&lt;br&gt;
  Admin: admin / DEBjit737362! User: user / DEBjit737362!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watch the demo:&lt;/strong&gt;&lt;br&gt;
🎥 &lt;a href="https://youtu.be/_RSBLRvmJ38" rel="noopener noreferrer"&gt;https://youtu.be/_RSBLRvmJ38&lt;/a&gt;&lt;/p&gt;




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

&lt;p&gt;That's prompt engineering. And it's worth learning.&lt;/p&gt;

&lt;h1&gt;
  
  
  BuiltWithMeDo #MeetOps  #Hackathon
&lt;/h1&gt;

&lt;h1&gt;
  
  
  WorkAndProductivity
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjjriztt1fnde6llc4faz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjjriztt1fnde6llc4faz.png" alt=" " width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>builtwithmedo</category>
      <category>medo</category>
      <category>hackathon</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
