mighty840/kitchenasty
A self-hosted restaurant online ordering, table reservation, and management system. KitchenAsty enables restaurants, cafes, and takeaways to accept online orders for delivery and pickup, manage menus, handle table reservations, and run operations from a single admin panel
KitchenAsty
Self-hosted restaurant ordering, reservations, and management — all in one platform.
Live Demo · Quick Start · Docs · Report Bug · Request Feature · Discussions
Try it now: demo.kitchenasty.com (storefront) | demo.kitchenasty.com/admin (admin —
admin@kitchenasty.com/admin123)The demo resets every 2 hours and is rate-limited. See the docs for details.
KitchenAsty enables restaurants, cafes, and takeaways to accept online orders for delivery and pickup, manage menus, handle table reservations, and run day-to-day operations from a single admin panel. Built as a modern TypeScript monorepo with separate admin and storefront frontends, a REST API with real-time WebSocket updates, and a full test suite with 350+ tests.
Features
Ordering & Payments
- Online ordering with delivery/pickup, scheduling, and guest checkout
- Stripe payment integration with webhooks, plus cash-on-delivery
- Real-time order tracking with visual progress and Socket.IO updates
- Kitchen display — live Kanban board with one-click status progression
- Coupon system with percentage, fixed, and free-delivery discount types
Menu & Kitchen
- Category management with nesting and menu item CRUD
- Options, allergens, and mealtime tagging per item
- Image uploads (JPEG/PNG/WebP/GIF, 5 MB max) with preview
- Stock tracking with automatic availability updates
Reservations & Reviews
- Customer booking with time-slot availability checking
- Admin reservation workflow: pending, confirmed, seated, completed
- Table assignment with capacity tracking and reservation protection
- Customer reviews (1-5 stars) with admin moderation (approve/reject)
Staff Management
- Three-tier role system: Super Admin, Manager, Staff
- Email-based staff invitation with secure single-use tokens (7-day expiry)
- Role-based admin navigation — each role sees only their permitted pages
- Staff CRUD: list, search, filter by role, edit, activate/deactivate
Settings & Configuration
- Centralized admin settings dashboard with clickable card grid
- 7 settings groups: General, Orders, Reservations, Mail, Payments, Reviews, Advanced
- DB-first config resolution for email, Stripe, and PayPal with env var fallback
- Secret masking for sensitive fields (API keys, passwords) in the UI and API
- Role-based settings access (MANAGER vs SUPER_ADMIN)
- Test email functionality to verify SMTP configuration
Storefront Templates
- 10 pre-designed templates (Classic, Modern, Rustic, Elegant, Minimal, Bold, Coastal, Garden, Urban, Artisan)
- One-click template switching from admin settings with live preview
- Each template includes header, hero, features section, and footer
- Templates respect restaurant branding (colors, logo, name)
Analytics & Automation
- Dashboard with real-time metrics: orders, revenue, reservations, customers
- Interactive charts: revenue trends, daily orders, hourly patterns, category breakdown
- Branded HTML email notifications for order and reservation confirmations
- API docs via Swagger UI at
/api/docs
Internationalization
- i18n with react-i18next and language switcher
- English, Spanish, French, German, Italian, and Portuguese translations
Observability & Developer Tools
- Structured logging with Pino (JSON in production, pretty-printed in dev)
- Request tracing with unique
x-request-idper request - API metrics dashboard with response time charts and endpoint performance
- Audit logging for all admin mutations (SUPER_ADMIN only)
Developer Experience
- TypeScript strict mode across the entire monorepo
- Vitest unit/integration + Playwright E2E (350+ tests)
- GitHub Actions CI: lint, test, audit, build, and artifact packaging
- Docker Compose for local PostgreSQL, npm workspaces for monorepo
Tech Stack
| Layer | Technology |
|---|---|
| Backend | Node.js + Express |
| Frontend (Admin) | React 18 + Vite |
| Frontend (Storefront) | React 18 + Vite |
| Database | PostgreSQL + Prisma ORM |
| Auth | JWT (jsonwebtoken) + bcrypt |
| Validation | Zod |
| Real-time | Socket.IO |
| Charts | Recharts |
| File Upload | Multer |
| Styling | Tailwind CSS |
| Logging | Pino |
| Testing | Vitest + Supertest + Playwright |
| CI/CD | GitHub Actions |
| Language | TypeScript (strict mode) |
Quick Start
Prerequisites
- Node.js 22+ | Docker (for PostgreSQL) | npm 10+
1. Clone & install
git clone git@github.com:mighty840/kitchenasty.git
cd kitchenasty
npm install2. Start the database
docker compose up -d3. Set up environment & migrate
cp packages/server/.env.example packages/server/.env
npx -w packages/server prisma migrate dev --schema ../../prisma/schema.prisma
npx -w packages/server prisma db seed4. Start development servers
npm run dev:server # API server → http://localhost:3000
npm run dev:admin # Admin panel → http://localhost:5173
npm run dev:storefront # Storefront → http://localhost:5174Project Structure
kitchenasty/
├── .github/workflows/ # CI pipeline
├── assets/ # Logo and brand assets
├── e2e/ # Playwright E2E tests
│ ├── admin/ # Admin panel tests
│ └── storefront/ # Customer storefront tests
├── packages/
│ ├── admin/ # React admin panel (Vite, port 5173)
│ ├── docs/ # VitePress documentation site
│ ├── server/ # Express API server (port 3000)
│ ├── shared/ # Shared types and constants
│ └── storefront/ # React customer storefront (Vite, port 5174)
├── prisma/
│ ├── schema.prisma # Database schema (22 models)
│ └── seed.ts # Sample data seeder
├── docker-compose.yml # PostgreSQL for local dev
├── playwright.config.ts # E2E test configuration
└── PLAN.md # Full feature roadmap
Documentation
Full documentation is available at mighty840.github.io/kitchenasty, including:
- Getting Started Guide
- Self-Hosting Guide — server setup, Docker, reverse proxy, SSL, backups
- Mobile App Publishing — developer accounts, building, app store submission
- API Reference — all endpoints with request/response schemas
- Configuration — environment variables, payments, email, social login
Interactive Swagger UI is served at /api/docs when the server is running.
Contributing
We welcome contributions of all kinds! Please read our Contributing Guide to get started.
- Fork the repository and create a feature branch from
main - Make changes and add tests
- Ensure all tests pass:
npm test && npm run test:e2e - Push and open a pull request
Looking for a good starting point? Check out issues labeled good first issue.
See PLAN.md for the full roadmap and feature ideas.
Community
- GitHub Discussions — Ask questions, share ideas, get help
- Issue Tracker — Report bugs and request features
- Security Policy — Report vulnerabilities responsibly
- Code of Conduct — Our community standards
License
This project is licensed under the MIT License.