Ehsan MavaeiEhsan Mavaei

Open to full-time roles and freelance work

Ehsan MavaeiFounder & Full Stack Developer

I build and run production software end to end—as founder and sole developer of Mavito, a café and restaurant management platform used by real venues in Iran. I work in React, Next.js, TypeScript, and Node.js with MongoDB, from product design through deployment and day-to-day operations.

Tech stack

Technologies I use to build and operate Mavito in production.

  • Frontend

    • Next.js
    • React
    • TypeScript
  • Backend

    • Node.js
    • REST APIs
  • Data

    • MongoDB
  • DevOps

    • production deployment
    • hosting
    • monitoring

What I can help with

Work I can substantiate from building and operating Mavito—not an agency roster.

  • Full-stack web applications with React, Next.js, TypeScript, and Node.js
  • Admin dashboards and internal tools for operations teams
  • REST APIs and integration with third-party services
  • MongoDB-backed applications: modeling, queries, and migrations
  • Improving and extending existing Next.js or Node.js codebases

Featured project

Mavito

Café & restaurant management SaaS

Mavito – café and restaurant menu & management software

Source code is private.

The problem

Café and restaurant owners need ordering, kitchen, inventory, and finances in one fast system instead of disconnected tools.

Who it’s for

Independent cafés and restaurants in Iran—owners, kitchen staff, waiters, and cashiers—who need one system for daily service, not scattered tools.

My role

Sole developer and founder: product, design, frontend, backend, database, deployment, and operations.

Stack

  • Next.js
  • React
  • TypeScript
  • Node.js
  • MongoDB

Customer-facing menus and admin panels use Next.js and React with TypeScript. Business logic and REST APIs run on Node.js. Persistent data lives in MongoDB. I handle production deployment, hosting, and operational monitoring.

How it fits together

Each venue runs in its own account with role-based access. Orders flow from QR or staff devices into a shared kitchen queue; completed sales tie into inventory recipes and financial reports where those modules are enabled.

Order flow (simplified)

  1. Guest scans QR or staff enters order at the table
  2. Order appears on the kitchen display with status and timers
  3. Payment and cashier steps update daily finance reports
  4. Inventory modules deduct raw materials from recipes when configured

Technical challenges

  • Keeping order status consistent for guests, waitstaff, and kitchen during peak service
  • Modeling recipes and stock so sales automatically reflect inventory without double entry
  • Designing permissions so each staff role sees only what they need on floor tablets and admin panels

Features by status

In production

  • QR digital menu with branded design
  • Table ordering and online ordering
  • Kitchen display (KDS) with live order status and timers
  • Waiter tablet ordering with item notes and split payment
  • Inventory with recipes, automatic raw-material deduction, and low-stock alerts
  • Customer club with loyalty points and campaigns
  • Finance: cashier, expenses, profit and loss, daily and monthly reports
  • Table management
  • Role-based users and access levels

Used by cafés such as Café Team, Rosebud, and Octave.

About

Portrait photo of Ehsan Mavaei

I focus on practical product work: clear UX for staff under time pressure, reliable APIs, and data models that match how a venue actually runs.

Building Mavito solo means I own trade-offs across the stack—from schema design and permissions to release and production support.

I'm open to remote full-time roles with product-focused teams and to well-scoped freelance builds (dashboards, APIs, or improving an existing Next.js/Node app).

Experience

  1. Founder & Full Stack Developer · Mavito

    Sole builder of a multi-module SaaS used in production: digital menu, ordering, kitchen display, inventory, finance, and staff permissions.

Let's work together

Email is the fastest way to reach me. Choose the option that matches your inquiry.