Inspiration
Messaging based restaurant ordering platforms have a big potential to streamline restaurant operations and increase customer satisfaction (by reducing waiting time).
What it does
In short, ROMS is a Facebook Messenger Ordering Platform Tailored for Restaurants.
For shoppers, ROMS allows for convenient & cashless ordering of food and beverages using the app they already have, Facebook Messenger. There will be no need for them to install a new app, login, or sign-up, and in addition, they can get cashback rewards.
For restaurants. ROMS can reduce queues, shorten customers’ wait time, increase customer’s satisfaction and eventually boost sales. Coupled with increase worker’s productivity (no time wasted “waiting” on customers to pick their orders), ROMS will be key to increase restaurant’s profitability.
How We built it
- We use node.js backend with Express for rapid prototyping.
- We use React SPA (with React Router) blazing fast front-end.
- We use Material UI framework for styling.
- For database, we use MongoDB NoSQL for scalability and flexible schema
- We host everything in Google App Engine and MongoDB Atlas
- We use Stripe for payment
- We use Messenger webhook APIs:
- Generic template
- Button template
- Webview
- Persistent Menu
- One-time Notification
Challenges We ran into
- One Big challenge is to keep user’s credit card information secure. We employ dual tokens (1 long-lived, 1 checkout session token) to guard against malicious perpetrators whilst still making the checkout experience seamless. We also had to fully utilize Stripe APIs to securely process credit cards.
- Another big challenge is to have a usable restaurant admin dashboard which synchronises well on new orders. We had to spend time designing a user-friendly dashboard which can improve worker’s productivity.
- Finally, the biggest challenge is how to send reminders to users on expiring cashbacks to drive their engagement. Fortunately, messenger has the one-time notification API which is suitable for this use-case.
Accomplishments that We’re proud of
- The Bot is fully functional with the restaurant admin dashboard included. There might be bugs, but we even tested beyond the happy flow (e.g. cancelled order and expired orders).
- Not only will the Bot solve a real business problem (long queues causing shoppers to balk and increase restaurant workers productivity), it will potentially solve the safe distancing issue (in COVID 19 times) by reducing overcrowding and providing a convenient and contactless checkout.
- Very proud of very sleek and fast UX thanks to React.
- Finally, we’re proud that we even think of the user's privacy and security. For example, we don’t reveal the user's full name in the restaurant dashboard (just initials) and we don’t store the user's credit card and instead, rely on the secure Stripe token mechanism.
What We learned
- We learned many small tricks which can greatly improve Messenger user experience. For example:
- Using one-time notification feature (still in BETA)
- Disabling text composer to limit, yet focus user’s interaction
- Blend webview and native messages to get best of both worlds
- Using emojis to add “color” and add visual cues to your otherwise plain text message
- We learned node js (express) and MongoDB with React and Material UI front-end. I.e. MERN Stack
- We learned deployment in Google Cloud App Engine (including crons) and MongoDB Atlas.
What's next for ROMS - Messenger Ordering for Restaurants
- We will try to market it to restaurants in Singapore (where we’re based in). If we’re successful, we’ll try to expand to other countries.
- Right now, the product is just an MVP. We will enhance with important features such as internationalisation, order ticket printing support, or even integration with major restaurant cloud POS providers.
- The product needs to be improved in terms of scalability (e.g. using Redis cache layer) to decrease latency.
Built With
- google-cloud
- javascript
- material-design
- mongodb
- node.js
- react
- stripe



Log in or sign up for Devpost to join the conversation.