All work
App · Web · Research

Sufra

Restaurant reviews and discovery for Iraq and Kurdistan. In prelaunch.

Sufra is the company and the app Monty co-founded and runs as president. It helps people find sit-down restaurants worth going to, in English, Arabic, and Kurdish, with a mobile app, a restaurant dashboard, and a website all on one NestJS backend. After a beta with about 22 testers, Sufra is in prelaunch.

Starting with research

Before building anything, Monty ran a 286-person pain-point survey to make sure people actually wanted a review and discovery platform for sit-down restaurants. The answers set the user segments and personas, and the product came from there.

They wanted it. In one round of 231 responses, 73.2% said they wanted a better platform for restaurant reviews, and only 18.6% fully trusted the reviews they could find. Nearly 90% check star ratings at least sometimes, and more than 70% follow food bloggers. So reviews and creator content became the core of the app.

Reviews were all over the place: Instagram, social media, delivery apps. There was no single place people trusted. Most people who answered were 18 to 25, and Iraqi and Western food topped the list of cuisines they wanted.

Survey charts on review platforms, trust, star ratings, and food bloggers
Four of the questions, 231 responses each.
Bar chart of preferred cuisines
The cuisines people wanted most.

Five people, one problem

From the answers came five personas. Laila, 17, is studying for her national exams and keeps going back to the same few places. Mohammed, 19, picks where to eat based on food influencers. Fatima, 21, mostly orders in and keeps a list of places that let her down. Ali, 28, is a pharmacist with a toddler who needs family-friendly spots on a budget. Mustafa, 37, owns a business and needs restaurants good enough for client lunches.

They all had the same problems: no time to research, too many choices, and reviews they couldn’t trust. Sufra answers with four-part reviews, price levels, tags, and recommendations that do the narrowing down for them.

Sizing up the market

Sufra’s closest competitors were Talabat, Yelp, and TripAdvisor. Talabat is a delivery app. Yelp isn’t in Iraq. TripAdvisor is built for travelers more than locals. None of them is a review-first platform made for Iraq.

So the plan was simple: build the biggest restaurant database possible, partner with restaurants, stay close to the community, and keep improving from user feedback.

Designing the app

Monty started with low-fidelity wireframes in Arabic, then designed the high-fidelity app in Figma with Sufra’s CTO, who built the front end in React Native with Expo and Redux. Home leads with creator review content and quick category filters, and every restaurant page has its menu, hours, and price level.

Reviews rate four things separately: food, cleanliness, ambiance, and service. The app uses the Google Places API for location search, and the backend’s map module finds every restaurant within a radius, closest first, and whether it’s open right now.

The first user flow and information architecture
The first user flow and information architecture, since reworked.
Sufra user flow today, from sign-in to home, search, map, restaurant pages, reviews, and profiles
The user flow today, mapped from the backend and the first flow.
Low-fidelity Arabic wireframe beside the final home screen
From the first wireframe, in Arabic, to the final home screen.
Search results with restaurant, food, and people tabs, and the map view
Search with tabs for restaurants, foods, and people, and the map.
Restaurant page and review screen
A restaurant page, and the four-part review.

What Monty would do differently

Fully flesh out the user flows and the design before building. The team jumped the gun, then had to pause and rework screens that were already built.

Rebuilding the backend

Sufra’s first backend was Express with MariaDB, a separate Flask API for the recommendation code, and an internal admin tool behind a VPN. Managing Express in-house with custom design patterns got out of hand. A mini migration from JavaScript Express to TypeScript Express followed, and managing Node and TypeScript together at the time was a pain.

So Monty rebuilt it in NestJS. The out-of-the-box modularity is really nice, and Monty wanted its object-oriented features: dependency injection and a ton of validation. The DTO validators are really nice and secure, and so are the entity fields.

The first architecture: Express, MariaDB, a Flask service, and a VPN-only admin tool
The first architecture, before the NestJS rebuild.

The hardest problem: what makes a restaurant popular

The hardest thing was a system design problem: how to actually use all the information Sufra collects. What makes a restaurant popular, and where should that math happen?

The first version kept live popularity scores in Redis for restaurants, food items, and reviews. Search would run its database query, group the results by type with a JavaScript reduce, look up each result’s score in Redis, then sort everything in the API. An hourly job copied the scores back into PostgreSQL. It worked, but every search made extra trips to Redis, and the scores lived in two places.

Now a Python service does the math on a schedule and writes one popularity table: likes, weighted food ratings, views, how ratings moved over the last seven days, and a final score and rank for every restaurant. The API joins that table and lets PostgreSQL sort it. One query, one source of truth.

Under the hood

One REST API runs everything: 67 endpoints across 22 modules and 31 tables, built with NestJS and PostgreSQL. Every restaurant name, description, address, and menu item is stored in English, Arabic, and Kurdish.

Recommendations work the same way as popularity. A second Python service runs on a cron job and builds a list for each user with collaborative filtering. Anyone without a list yet gets a hand-picked one instead.

Authentication is in-house with bcrypt, and Google and Sign in with Apple go through the same system. The API runs under PM2 behind NGINX on Ubuntu, with Redis in Docker. In production, PostgreSQL and Redis each get their own container.

Architecture diagram: app and website, NGINX, NestJS API, PostgreSQL, Redis, and Python services
The architecture today.

The website and the dashboard

The website and the restaurant dashboard run on the same backend as the app, so restaurants, reviews, and recommendations stay in sync everywhere. Both are under construction right now. The dashboard is the business side of Sufra: free for restaurants today, and what Sufra upsells later.

Going to market

Sufra is fighting on two fronts: the app for diners, and the dashboard for restaurants. Restaurants get the dashboard for free. It’s the lead magnet, so restaurants absorb it into how they run, and later Sufra can upsell them.

Restaurants will hand out QR codes that send people to Sufra. That’s warm one-to-many marketing, because people already trust a QR code from the restaurant they’re sitting in. Setting up each dashboard is cold one-to-one outreach. On top of that come long-form blog posts and short-form TikTok content built from Sufra’s own data, for tourists and locals alike.

Where it’s headed

Sufra ran a beta with about 22 testers and is now in prelaunch, still building and testing. Restaurants come first: their free dashboards get set up one by one, then their QR codes bring diners in at the table. Blog and TikTok content keep people coming after that.

What Monty hopes Sufra becomes: the place people in Iraq and Kurdistan check before they go out to eat, with reviews they can actually trust, and the tool restaurants use to run their side of it.

Next project
Johnson & Johnson