Back to Projects
DineFlow

DineFlow

A restaurant management product centered on outlets and structured digital menus.

RoleFull Stack Developer
Status
In progress
Platforms
Web, Backend

Key Challenges

  • Building a hierarchical drag-and-drop menu builder supporting nested sections, categories, and dishes with dynamic reordering and display order management using dnd-kit
  • Designing a multi-tenant architecture supporting restaurant chains with multiple outlets, each with independent menus, tables, and staff while sharing common resources
  • Implementing granular role-based access control (RBAC) with Admin, Owner, and Manager roles, each with different permissions across restaurants and outlets
  • Managing complex state synchronization between local UI state and server data, handling optimistic updates with pending changes tracking and bulk save operations

Key Learnings

  • Gained deep expertise in dnd-kit library for implementing complex nested drag-and-drop interfaces with custom collision detection algorithms
  • Learned effective patterns for RTK Query with automatic cache invalidation, optimistic updates, and efficient data fetching strategies
  • Developed skills in building scalable multi-tenant SaaS architectures with MongoDB, handling data isolation and shared resources
  • Improved understanding of form validation patterns using Zod schemas with React Hook Form for type-safe, reusable validation logic

Overview

DineFlow is my personal full-stack restaurant management product for restaurant and multi-outlet operations. Its dashboard connects restaurants, outlets, staff, menus, dishes, addons, and tables, with role-based access for administrators, owners, and managers. I built the application frontend, marketing frontend, and Express/MongoDB backend.

Built with a modern tech stack featuring React 19, TypeScript, Express 5, and MongoDB, DineFlow demonstrates advanced patterns in state management, real-time UI interactions, and multi-tenant architecture design.

Key Features

Outlet Table Management

Create, update, and manage tables for restaurant outlets, with searchable table lists and outlet-aware views.

Drag-and-Drop Menu Builder

Hierarchical menu construction with sections, categories, and dishes. Supports nested drag-and-drop reordering, custom pricing per menu, and dynamic display order management using dnd-kit.

Multi-Tenant Restaurant Management

Support for restaurant chains with multiple outlets. Each outlet has independent menus, tables, and staff while sharing dishes, categories, and addons at the restaurant level.

Role-Based Access Control

Granular permissions system with Admin, Owner, and Manager roles. Route-level guards and API-level authorization ensure secure access to features based on user roles and organizational hierarchy.

Comprehensive Dish & Addon Management

Full CRUD operations for dishes with support for dietary types (veg, non-veg, egg), preparation time, serving size, pricing, and customizable addons that can be attached to multiple dishes.

Technical Implementation

The application follows a clean architecture pattern with separate frontend (React + Vite), marketing frontend (React + Vite), and backend (Express + MongoDB) applications. State management leverages Redux Toolkit with RTK Query for efficient API caching and automatic refetching.

  • Frontend Architecture: React 19 with TypeScript, Vite for fast HMR, shadcn/ui components built on Radix primitives, and Tailwind CSS for styling
  • State Management: Redux Toolkit with RTK Query for API state, custom slices for UI state, and optimistic updates with rollback support
  • Backend Design: Express 5 with service-layer architecture, Mongoose ODM for MongoDB, JWT authentication, and Joi validation
  • Drag-and-Drop: dnd-kit library with custom collision detection, sortable contexts, and drag overlays for visual feedback
  • Form Handling: React Hook Form with Zod schema validation for type-safe forms with reusable validators across frontend and backend
  • Theming: next-themes integration with system preference detection and persistent theme storage

Menu Data Model and Outlet Boundaries

Menu placement is represented by a flat collection of items with parent IDs and display order. The service builds an ordered tree and populates section, category, and dish references, separating reusable dish data from where it appears in a particular menu.

Role checks assign different restaurant and outlet scopes to administrators, owners, and managers. Joi validates backend menu operations, while the frontend uses React Hook Form and Zod. This case study focuses on the implemented management flows rather than treating order models as a complete live ordering system.

Have a project or opportunity in mind?

Let's discuss employment opportunities or freelance work.

Contact Kunj