Skip to content

MalseBot/Tas7e7

Repository files navigation

Naqdi - Modern Restaurant Management System

thumbnail

Naqdi Banner POS Node.js PostgreSQL Express Next.js React Tailwind License

A complete Point of Sale (POS) and restaurant operations platform
Streamline service, improve kitchen flow, and track performance in one system.

api kds inventory rbac

Built with the tools and technologies:

Node.js Express PostgreSQL JavaScript JWT Postman bcrypt dotenv


Overview

Naqdi is a restaurant management system focused on daily operations: order capture, table management, kitchen coordination, and management reporting. It is designed for cafes and full-service restaurants that need a fast POS workflow with a reliable back office.


What It Delivers

Orders Tables Menu Kitchen Reports

  • Order creation and status tracking across front-of-house and kitchen
  • Table assignment and service status control
  • Menu and item management
  • Kitchen Display System (KDS) with preparation workflow
  • Low-stock alerts and inventory visibility
  • Role-based access for admins, managers, cashiers, and cooks

Modules

Auth Admin KDS POS

  • Authentication and user roles
  • Orders, tables, and menu management
  • Kitchen operations and live queues
  • Admin analytics and reporting endpoints

Use Cases

Cafe Restaurant Multi

  • Small cafes needing fast checkout and simple table flow
  • Full-service restaurants coordinating FOH and BOH in real time
  • Teams with multiple roles and shift changes

Tech Stack

Stack API Security

  • Backend (server)
    • Node.js + Express (REST API)
    • PostgreSQL + Prisma
    • JWT auth + bcryptjs
    • dotenv, CORS, config
    • ESC/POS printing via escpos + escpos-usb
  • Frontend (client)
    • Next.js + React
    • TanStack React Query + Axios
    • Tailwind CSS + Radix UI
    • React Hook Form + Zod
    • i18next + language detection

Why It Matters for Buyers

  • Reduces service bottlenecks with live kitchen visibility
  • Increases order accuracy with structured workflows
  • Provides operational insight through reports and analytics
  • Scales from single-location cafes to larger restaurants

Visuals

Screenshot 2026-01-14 084310 Screenshot 2026-01-14 084250 Screenshot 2026-01-14 084449 Screenshot 2026-01-14 084435 Screenshot 2026-01-14 084333 Screenshot 2026-01-14 084418 Screenshot 2026-01-14 084404 Screenshot 2026-01-14 084348

🔒 POS Terminal Authorization & Internet Bridge

Naqdi POS includes hardware-level terminal gating to authorize specific client devices and protect against unauthorized network access, along with a persistent internet bridge to connect mobile devices.

1. Terminal Access Control

  • Auto-Gating: When a new tablet or mobile client loads the POS, it is automatically locked with an Approval Required screen showing the terminal's unique Device UUID.
  • Admin Approval: Administrators must navigate to the Settings -> Devices tab on their dashboard to view, name, and Approve or Deny connection requests.
  • Auto-Healing: Loopback connections on the host machine (localhost or 127.0.0.1) are automatically auto-approved and self-healed in case of accidental blocks.
  • Self-Lockout Protection: The dashboard automatically disables action controls on the current active admin device to prevent accidental self-lockout.

2. Persistent Internet Bridge (Localtunnel)

To connect tablets or mobile phones over the internet (bypassing local network constraints and localtunnel's phishing reminder landing pages), use the built-in tunnel wrapper:

  1. Configure your persistent subdomains in src/.env:
    TUNNEL_SUBDOMAIN_CLIENT=your-custom-client-subdomain
    TUNNEL_SUBDOMAIN_API=your-custom-api-subdomain
  2. Start the tunnel bridge in the root directory:
    npm run tunnel
  3. Scan the generated QR code or open the permanent URL: https://your-custom-client-subdomain.loca.lt?apiUrl=https://your-custom-api-subdomain.loca.lt This URL remains the same across server restarts, server reboots, or power outages.

☁️ Cloud Deployment (Free Tier)

This application is designed to be deployed entirely on Netlify for free:

1. Backend (Netlify Functions)

The backend has been configured with serverless-http to run natively as a Netlify Serverless Function.

  1. Go to Netlify and add a new site by importing an existing project from GitHub.
  2. Select this repository.
  3. Change the Base directory to server.
  4. The Build command (npm install) should automatically populate.
  5. Go to Environment variables and add:
    • DATABASE_URL (Prisma Connection String)
    • JWT_SECRET
    • JWT_EXPIRE (e.g., 7d)
    • NODE_ENV (Set to production)
  6. Click Deploy Site.
  7. Once deployed, copy the new URL for your backend (e.g., https://naqdi-api.netlify.app).

2. Frontend (Netlify)

  1. Go to Netlify and add a new site by importing an existing project from GitHub.
  2. Select this repository.
  3. Change the Base directory to client.
  4. The Build command (npm run build) and Publish directory (.next) should automatically populate.
  5. Go to Advanced build settings and add a new environment variable:
    • Key: NEXT_PUBLIC_API_URL
    • Value: Your Vercel backend URL (e.g., https://naqdi-backend.vercel.app).
  6. Click Deploy Site.

🖨️ Local Print Spooler Agent

Because cloud servers cannot connect to your cafe's local USB receipt printer, this project includes a standalone Local Print Agent.

This lightweight Node.js script runs on your store's computer. It connects to your cloud backend, fetches pending print jobs, and prints them to your USB printer.

How to use:

  1. Open a terminal on your cafe's local computer.
  2. Navigate to the local-print-agent directory:
    cd local-print-agent
    npm install
  3. Copy .env.example to .env and set your cloud backend URL:
    API_URL=https://cafe-pos-backend.onrender.com
    POLL_INTERVAL=5000
  4. Start the print agent:
    npm start
    Keep this terminal open, and it will automatically catch and print receipts as orders come in from the cloud.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors