A restaurant ordering platform for the South African market. QR-powered ordering, real-time kitchen management, per-restaurant branding and payments.
OrderIt is a restaurant ordering platform for the South African market. Diners scan a QR code at their table, browse the menu, place orders, split the bill, and pay digitally. Restaurant owners manage operations through a web dashboard — menus, live orders, tables, staff, reviews, and analytics.
The platform operates as a B2B SaaS business: restaurants pay a monthly subscription. Diners use it at no cost. All diner payments flow directly to the restaurant's own merchant account — OrderIt never holds or processes diner funds.
This proposal presents two options:
Estimated timeline: 16–19 weeks depending on options selected.
A South African based software agency founded by engineers who got tired of watching projects fail because of poor architecture, dated tech, and agencies that overpromise and underdeliver.
We're a small, senior team. No outsourcing, no subcontractors, no offshore handoffs. The people who architect the system are the same people who write the code, configure the infrastructure, and answer your questions on a Tuesday afternoon.
Shipping production software — web platforms, mobile apps, cloud infrastructure, and AI systems.
We finish what we start. Every project gets a dedicated technical lead and real sprint demos.
Deep experience with NestJS, Next.js, React Native, PostgreSQL, Google Cloud. Not experimental for us.
SA timezone, global standards. We understand Paystack, Peach, SnapScan, and local hosting requirements.
Every project gets full IP ownership at the end. We build for your ownership, not vendor lock-in. More at inventixx.com.
South African restaurants face growing expectations for digital ordering — but most solutions require expensive POS replacement, complex integrations, or force restaurants onto a single payment provider. Staff shortages and high table turnover make efficient ordering critical.
QR-based dine-in ordering is growing rapidly. OrderIt meets restaurants where they are: integrates with existing POS systems, connects to their existing payment gateway, and lets them keep their brand identity with per-restaurant theming.
| Requirement | Our Understanding |
|---|---|
| Per-restaurant payments | Each restaurant connects their own gateway. Funds flow directly to the restaurant. |
| POS integration | Pilot POS and Lightspeed out of the box. Additional systems on request. |
| White-labelling | Each restaurant configures colours, fonts, and logo. Diners see the restaurant's brand. |
| Kitchen Display System | Dedicated touch-friendly screen for kitchen staff with real-time orders. |
| South African hosting | Google Cloud (africa-south1, Johannesburg) for low latency. |
| Scalable architecture | Modular monolith with microservice extraction path. |
Both share the same backend, infrastructure, and feature set. The difference is delivery method.
R621,000
The complete platform, entirely web-based.
R772,500
Everything in Essential, plus native mobile.
PWA remains as a fallback for diners who prefer not to download.
Option A can be upgraded to Option B at any time after launch. The native apps are additive — the web platform continues to function. Upgrade cost: R139,500 (186 hours).
If something comes up during the build, we'll discuss it openly via the change order process (Section 13).
Modular monolith — 15 strictly isolated modules with a microservice extraction path. Full technical specifications in the accompanying handoff documents.
| Layer | Technology |
|---|---|
| Diner Web App (PWA) | Next.js 16, Tailwind CSS 4, Service Worker |
| Native Apps (Option B) | React Native (Expo 54), TypeScript |
| Admin Dashboard + KDS | Next.js 16, shadcn/ui, Tailwind CSS 4, Recharts |
| Backend API | NestJS 11, TypeScript, Drizzle ORM |
| Authentication | Better Auth (RBAC, impersonation) |
| Database | PostgreSQL 16 (Cloud SQL for PostgreSQL, HA) |
| Cache + Real-time | Redis 7 (Memorystore for Redis), Socket.IO 4 |
| Infrastructure | Google Cloud Run, GitLab CI/CD, Cloudflare, Prometheus + Grafana |
16 weeks for the core build. 19 weeks with the optional Brand & Corporate Identity phase.
| Phase | Duration | Description |
|---|---|---|
| Phase 0 (optional) | 2-3 weeks | Brand & Corporate Identity |
| Phase 1 | Weeks 1-4 | Foundation — infrastructure, backend API, CI/CD |
| Phase 2 | Weeks 5-10 | Application development — all frontends, integrations |
| Phase 3 | Weeks 11-14 | Production hardening — payments, testing, security |
| Phase 4 | Weeks 15-16 | Launch — beta, go-live, app stores (Option B) |
Direct access to the people building your platform. No middlemen, no black boxes.
Direct access to the technical lead via Slack or WhatsApp. Same-day responses. No account managers or middlemen.
Live screen-share walkthrough every two weeks. Working software, not slide decks. Weekly progress updates between demos.
From Phase 2, you get a staging environment with the latest build. Test, share, get early feedback. Not a "wait until the end" process.
We flag decisions early with our recommendation and reasoning. Payment gateways, branding, feature tradeoffs — it's your call.
Private GitLab repo with your access from day one. Project board you can view anytime. Source code, tasks, history — no black boxes.
Scope changes happen — we handle them cleanly. Every change is documented with impact, cost, and timeline before any work begins. No surprises on the invoice.
API docs, deployment runbooks, and onboarding guides are delivered with the code. Your next developer won't start from scratch.
Full knowledge transfer session, credential handover, and architecture walkthrough. You own the platform completely — no ongoing dependency on us.
| Option A (Essential) | Option B (Premium) | |
|---|---|---|
| Base development | R621,000 (828h) | R772,500 (1,030h) |
| + Brand & Corporate Identity | R649,500 (866h) | R801,000 (1,068h) |
Rate: R750/hour. Brand CI adds R28,500 (38 hours) to either option.
Infrastructure pricing notice: All infrastructure and third-party service costs are estimates based on current provider pricing as of April 2026. Cloud provider pricing is volatile and subject to change without notice. Actual costs may vary based on usage patterns, USD/ZAR exchange rate fluctuations, provider pricing changes, and scaling requirements. We recommend budgeting 15–20% above these estimates. Year 1 totals that include infrastructure should be treated as indicative, not fixed.
| Category | Option A | Option A + CI | Option B | Option B + CI |
|---|---|---|---|---|
| Development | R621,000 | R649,500 | R772,500 | R801,000 |
| Infrastructure (12 months) | R85,800 | R85,800 | R107,760 | R107,760 |
| POS maintenance + services | R45,200 | R45,200 | R47,513 | R47,513 |
| Year 1 Total | R752,000 | R780,500 | R927,773 | R956,273 |
Milestone-based: 20% / 20% / 30% / 15% / 15%. Amounts shown as Option A / Option B.
Option A can be upgraded to Option B at any time. R139,500 (186 hours).
All line items at R750/hour. Full breakdown by phase.
| Component | Hours | Cost |
|---|---|---|
| Phase 0 — Brand & Corporate Identity (Optional) | ||
| Brand strategy + positioning | 4 | R3,000 |
| Logo design (full suite) | 8 | R6,000 |
| Colour system + typography | 4 | R3,000 |
| Business stationery + email signature | 6 | R4,500 |
| Document templates + social media kit | 8 | R6,000 |
| Brand guidelines PDF | 4 | R3,000 |
| App icons + store assets | 4 | R3,000 |
| Phase 0 Subtotal | 38 | R28,500 |
| Phase 1 — Foundation (Weeks 1-4) | ||
| Cloud Run setup + networking | 20 | R15,000 |
| CI/CD pipelines (4 workflows) | 12 | R9,000 |
| Monitoring stack (Prometheus + Grafana + Loki) | 10 | R7,500 |
| Database schema design + migrations | 16 | R12,000 |
| Auth module (Better Auth — RBAC, impersonation) | 20 | R15,000 |
| Restaurant API (CRUD + onboarding) | 12 | R9,000 |
| Menu API (categories, items, customisations) | 16 | R12,000 |
| Order API (placement, status, history) | 20 | R15,000 |
| User & Staff API | 12 | R9,000 |
| File upload service + image processing | 8 | R6,000 |
| Seed data + testing | 8 | R6,000 |
| Phase 1 Subtotal | 154 | R115,500 |
| Phase 2 — Admin Dashboard (Shared) | ||
| Platform admin — Dashboard + KPIs | 10 | R7,500 |
| Platform admin — Restaurant management + onboarding wizard | 20 | R15,000 |
| Platform admin — Billing, orders, users, analytics | 24 | R18,000 |
| Platform admin — Support ticket system | 12 | R9,000 |
| Restaurant admin — Dashboard + KPIs | 8 | R6,000 |
| Restaurant admin — Menu management (CRUD + images) | 16 | R12,000 |
| Restaurant admin — Order Kanban board (real-time) | 16 | R12,000 |
| Restaurant admin — Table floor plan editor | 14 | R10,500 |
| Restaurant admin — QR code generator + management | 8 | R6,000 |
| Restaurant admin — Staff, reviews, analytics, billing, settings | 24 | R18,000 |
| Restaurant admin — Theme settings (colours, fonts, logo, preview) | 12 | R9,000 |
| Global search (Cmd+K command palette) | 6 | R4,500 |
| Responsive design (tablet + mobile) | 12 | R9,000 |
| Admin Subtotal | 182 | R136,500 |
| Phase 2 — Marketing Website (Shared) | ||
| Homepage (hero, features, stats, testimonials) | 10 | R7,500 |
| Features + For Restaurants pages | 8 | R6,000 |
| Pricing page (plan comparison, FAQ) | 6 | R4,500 |
| About + Contact + How to Use OrderIt | 8 | R6,000 |
| SEO optimisation + structured data | 4 | R3,000 |
| Website Subtotal | 36 | R27,000 |
| Phase 2 — Backend Integration (Shared) | ||
| WebSocket server (orders, chat, kitchen) | 16 | R12,000 |
| QR code generation service | 6 | R4,500 |
| Subscription + billing API (OrderIt SaaS) | 12 | R9,000 |
| Table management API | 6 | R4,500 |
| Restaurant theme API + contrast validation | 8 | R6,000 |
| Shared TypeScript API client library | 8 | R6,000 |
| White-label testing (multiple themes, edge cases) | 4 | R3,000 |
| Backend Integration Subtotal | 60 | R45,000 |
| Phase 2 — Kitchen Display System (Shared) | ||
| KDS web application (real-time order feed, touch UI) | 20 | R15,000 |
| KDS backend (order routing, kitchen stations) | 12 | R9,000 |
| KDS testing + kitchen workflow | 6 | R4,500 |
| KDS Subtotal | 38 | R28,500 |
| Phase 2 — POS Integration (Shared) | ||
| POS adapter framework (plugin architecture) | 20 | R15,000 |
| Pilot POS adapter | 24 | R18,000 |
| Lightspeed adapter | 24 | R18,000 |
| POS management UI (admin dashboard) | 16 | R12,000 |
| Testing with real POS hardware | 18 | R13,500 |
| POS documentation | 4 | R3,000 |
| POS Subtotal | 106 | R79,500 |
| Phase 2 Shared Total | 422 | R316,500 |
| Phase 2 — Diner Web App / PWA (Both Options) | ||
| QR scanner (web camera API) | 6 | R4,500 |
| Restaurant home + menu browsing | 12 | R9,000 |
| Item detail + customisation | 6 | R4,500 |
| Cart management | 8 | R6,000 |
| Split bill feature | 10 | R7,500 |
| Checkout + payment flow | 10 | R7,500 |
| Order tracking (real-time) | 6 | R4,500 |
| Waiter chat (real-time) | 8 | R6,000 |
| Rewards + loyalty | 6 | R4,500 |
| Profile + order history | 5 | R3,750 |
| Search + allergens + specials | 6 | R4,500 |
| Per-restaurant theming | 8 | R6,000 |
| PWA setup (service worker, install, offline) | 3 | R2,250 |
| Diner PWA Subtotal | 94 | R70,500 |
| Phase 2 — Option B: Native Diner App (iOS + Android) | ||
| QR scanner + table identification | 8 | R6,000 |
| Restaurant home + menu browsing (4 screens) | 16 | R12,000 |
| Item detail + customisation flow | 8 | R6,000 |
| Cart management | 10 | R7,500 |
| Split bill feature | 12 | R9,000 |
| Checkout + payment flow | 12 | R9,000 |
| Order tracking (real-time) | 8 | R6,000 |
| Waiter chat (real-time) | 10 | R7,500 |
| Rewards + loyalty | 8 | R6,000 |
| Profile + order history | 6 | R4,500 |
| Search + allergens + specials | 8 | R6,000 |
| Per-restaurant theming | 10 | R7,500 |
| Native Diner Subtotal | 116 | R87,000 |
| Phase 2 — Option B: Admin Mobile App | ||
| Dashboard (live KPIs, revenue) | 10 | R7,500 |
| Order management (accept, status, details) | 12 | R9,000 |
| Push notifications | 6 | R4,500 |
| Menu quick-edit (sold out, specials) | 8 | R6,000 |
| Staff overview | 6 | R4,500 |
| Reviews | 4 | R3,000 |
| Settings | 4 | R3,000 |
| Admin Mobile Subtotal | 50 | R37,500 |
| Phase 2 — Option B: Platform | ||
| Push notification service (both apps) | 8 | R6,000 |
| Expo EAS setup (2 apps) | 4 | R3,000 |
| App Store + Play Store submissions | 8 | R6,000 |
| Option B Additions Total | 186 | R139,500 |
| Phase 3 — Production Hardening (Weeks 11-14) | ||
| Payment gateway integration (per-restaurant, multi-provider) | 16 | R12,000 |
| Invoice generation (PDF) | 8 | R6,000 |
| Push notification service — Option B only | 8 | R6,000 |
| Transactional email system (templates + delivery) | 10 | R7,500 |
| Security audit + hardening | 12 | R9,000 |
| Performance testing + optimisation | 12 | R9,000 |
| E2E test suite (critical flows) | 20 | R15,000 |
| Unit + integration tests | 20 | R15,000 |
| Bug fixes + polish | 16 | R12,000 |
| Phase 3 Subtotal | 114 / 122 | R85,500 / R91,500 |
| Phase 4 — Launch (Weeks 15-16) | ||
| App Store + Play Store submissions — Option B only | 8 | R6,000 |
| API documentation (Swagger/OpenAPI) | 6 | R4,500 |
| Restaurant onboarding guide | 4 | R3,000 |
| Beta onboarding support (3-5 restaurants) | 12 | R9,000 |
| Bug fixes from beta | 16 | R12,000 |
| Final deployment + go-live | 6 | R4,500 |
| Phase 4 Subtotal | 44 / 52 | R33,000 / R39,000 |
| Option A Total (Essential) | 828 | R621,000 |
| Option B Total (Premium) | 1,030 | R772,500 |
All infrastructure costs are estimates based on current provider pricing (April 2026) and are subject to change. Actual costs depend on usage, exchange rates, and provider pricing updates.
| Resource | Specification | Monthly (ZAR) |
|---|---|---|
| Cloud Run (API + 4 frontends) | 2 vCPU / 4 GB, auto-scale to zero | R1,500 |
| Cloud SQL (PostgreSQL 16) | db-f1-micro, HA, 50 GB SSD | R2,200 |
| Memorystore (Redis) | Basic, 1 GB | R850 |
| Cloud Storage | Menu images, QR codes, receipts | R200 |
| Cloud CDN + Load Balancing | Global edge caching | R600 |
| Artifact Registry | Container images | R100 |
| Cloud Monitoring + Logging | Included (free tier) | R0 |
| Secret Manager | ~50 secrets | R50 |
| GCP Subtotal | R5,500 |
| Service | Plan | Monthly (ZAR) |
|---|---|---|
| Cloudflare Pro | WAF + DDoS | R370 |
| Sentry | Team (errors + performance) | R481 |
| Expo EAS (Option B only) | Production | R1,832 |
| Third-Party Subtotal | R851 (A) / R2,683 (B) |
Monthly Total: Option A ~R6,350 / Option B ~R8,180. Staging: Cloud Run staging revisions + Cloud SQL dev ~R800/month.
Logo suite, colour system, typography, stationery, email signatures, document templates, social media kit, brand guidelines PDF, app store assets.
The 30-day warranty covers defects. After that, your platform still needs someone keeping an eye on things.
| Block | Hours | Rate | Monthly |
|---|---|---|---|
| Starter | 10 hours/month | R750/hr | R7,500 |
| Standard | 20 hours/month | R700/hr | R14,000 |
| Growth | 40 hours/month | R650/hr | R26,000 |
No commitment. R750/hour. Response within 48 hours on business days.
Bug fixes, minor features, dependency updates, security patches, infrastructure monitoring, performance tuning, and technical advice. Major new features scoped separately.
We recommend the Standard retainer for the first 3-6 months while the platform stabilises. Step down to Starter or ad-hoc once things settle.
This timeline and pricing assume the following. If anything changes, we'll discuss the impact openly.
3-5 business day response on questions and decisions. Delays push the timeline.
Beta restaurants need active Paystack/Peach/SnapScan merchant accounts. Sandbox by mid-Phase 2, production by Phase 3.
3-5 restaurants identified and willing to participate. You recruit them; we provide all technical support and onboarding materials.
Restaurants provide their own menu data (items, prices, descriptions, images). We build the upload tools.
Apple Developer + Google Play accounts in your name. We handle submission; accounts must be yours.
orderit.co.za registered in your name. We configure DNS and SSL.
All infrastructure accounts (Google Cloud, Cloudflare, Sentry, GitLab) created under your ownership from day one. We set them up and manage them during development, but credentials and billing sit with you. No migration delay at project end. We don't believe in setups where the client has to ask permission to access their own infrastructure.
All source code, designs, and documentation become client property upon final payment. Open-source components retain their licenses.
Scope changes require a written change order with timeline and cost impact. No work begins until written approval.
30-day post-launch warranty for defects. Does not cover requirement changes, third-party outages, or client modifications.
Due within 7 days of milestone completion. Late payments may result in project suspension. Infrastructure billed monthly.
Both parties keep project details confidential. Portfolio usage requires separate written agreement.
Limited to fees paid. No liability for indirect or consequential damages. Standard force majeure provisions.
30 days written notice. Client pays for completed work. All deliverables transfer upon payment.
| Risk | Impact | Mitigation |
|---|---|---|
| Restaurant payment gateway onboarding | Launch delay | Multi-provider support. Start integration early. |
| App Store rejection (Option B) | 2-week delay | Follow guidelines. Plan review buffer. |
| Restaurant adoption pace | Revenue impact | Quality beta with 3-5 restaurants first. |
| Scope creep | Budget overrun | Written change orders. Weekly scope reviews. |
Review this proposal. Schedule a walkthrough to discuss questions and adjustments.
Choose Essential or Premium. Decide on the Brand & Corporate Identity add-on.
Sign the SOW, make the initial payment. Phase 0 or Phase 1 begins immediately.
Detailed technical specifications for the development team. Expand each section for full details.
OrderIt uses Better Auth for session-based authentication with built-in user management, RBAC, and impersonation. No custom JWT middleware.
| Role | Access Scope |
|---|---|
dine_admin | Full platform access — all restaurants, billing, users, support |
restaurant_owner | Full access to own restaurant — menu, orders, staff, billing, settings |
restaurant_manager | Own restaurant — menu, orders, staff (no billing or settings) |
restaurant_staff | Own restaurant — orders and tables only |
Impersonation: Platform admins use Better Auth's built-in impersonation plugin to view any restaurant's dashboard for debugging.
Socket.IO 4 with Redis pub/sub adapter for multi-instance coordination. Room-based isolation per restaurant/table.
| Namespace | Purpose | Key Events |
|---|---|---|
/orders | Order status updates | order:new, order:status_changed, order:cancelled |
/chat | Waiter-diner messaging | message:new, typing, read_receipt |
/kitchen | Kitchen display updates | order:new, order:item_ready |
Each restaurant configures their own payment gateway. OrderIt never holds diner funds.
| Aspect | Detail |
|---|---|
| Supported providers | Paystack, Peach Payments, SnapScan (adapter pattern) |
| Fund flow | Diner → Restaurant merchant account (direct) |
| Credentials | Encrypted per-restaurant in database (JSONB) |
| Webhooks | Per-restaurant webhook secret verification |
| VAT | 15% calculated and displayed on all transactions |
| OrderIt billing | Separate — OrderIt invoices restaurants for SaaS subscription |
Plugin-based adapter system. Each POS gets its own adapter module implementing a shared interface.
| Capability | Direction | Description |
|---|---|---|
| Order Push | OrderIt → POS | Orders appear in POS automatically |
| Menu Sync | POS → OrderIt | Pull categories, items, prices from POS |
| Status Sync | POS → OrderIt | Kitchen status reflected in real-time |
| Reconciliation | OrderIt → POS | Payments mapped to POS transactions |
Included: Pilot POS + Lightspeed. Additional integrations: R42,500–R60,000 per system. Annual maintenance: R22,500/year per integration.
Single NestJS application with 15 strictly isolated modules. Each module owns its database tables and communicates through an internal event bus (@nestjs/event-emitter).
| Module | Owns | Extraction Priority |
|---|---|---|
| auth | users, sessions | Low |
| restaurant | restaurants, themes | Low |
| menu | categories, items | Medium |
| order | orders, order_items | High |
| payment | payment_configurations | Medium |
| table | tables, qr_codes | Low |
| billing | plans, subscriptions, invoices | Low |
| chat | chat_messages | High |
| review | reviews | Low |
| support | tickets, messages | Low |
| pos | integrations, mappings | Medium |
| kds | kitchen routing | High |
| notification | (event-driven) | Medium |
| analytics | daily aggregates | Medium |
| file | Cloud Storage | Low |
Extraction path: When a module needs independent scaling, internal event bus swaps to RabbitMQ/NATS, the module becomes its own NestJS app deployed as its own Cloud Run service.
PostgreSQL 16 with Drizzle ORM. All monetary values stored as integers (cents). Displayed as R X XXX.
| Table | Purpose | Key Relationships |
|---|---|---|
| plans | Subscription tiers and limits | — |
| restaurants | Restaurant profiles and status | → plans |
| restaurant_themes | Per-restaurant branding (colours, fonts, logo) | → restaurants |
| users | All accounts (admins, owners, staff) | → restaurants |
| sessions | Better Auth session storage | → users |
| menu_categories | Menu sections per restaurant | → restaurants |
| menu_items | Items with pricing + customisations | → menu_categories |
| tables | Physical tables per restaurant | → restaurants |
| qr_codes | QR codes linked to tables | → tables |
| orders | Customer orders | → restaurants, tables |
| order_items | Items within an order | → orders, menu_items |
| payment_configurations | Per-restaurant gateway credentials | → restaurants |
| subscriptions | Active subscription per restaurant | → restaurants, plans |
| invoices | Billing invoices | → restaurants |
| reviews | Customer ratings | → restaurants, orders |
| support_tickets | Support threads | → restaurants, users |
| chat_messages | Waiter-diner chat | → restaurants, tables |
| rewards | Loyalty rewards | → restaurants |
| loyalty_transactions | Points earned/redeemed | → users, orders |
| pos_integrations | POS config per restaurant | → restaurants |
| pos_menu_mappings | POS item ↔ OrderIt item | → pos_integrations |
| audit_log | All admin actions | → users |
| Domain | Service |
|---|---|
| orderit.co.za | Marketing website |
| app.orderit.co.za | Admin dashboard + KDS |
| api.orderit.co.za | Backend API + WebSocket |
| assets.orderit.co.za | CDN for images and static files (Cloud Storage) |
| Component | RPO | RTO |
|---|---|---|
| Database | 5 minutes (PITR) | 30 minutes |
| File storage | 0 (Cloud Storage globally redundant) | Immediate |
| Cloud Run services | 0 (stateless, instant redeploy) | 5 minutes |
| Application code | 0 (Git) | 30 minutes (redeploy) |
109 design frames, 22 reusable components. Luxury minimalist aesthetic with dark mode support.
| Token | Value | Usage |
|---|---|---|
| --bg-primary | #FAFAFA | Page backgrounds (light) |
| --bg-inverse | #0A0A0A | Dark sections, dark mode base |
| --fg-primary | #0A0A0A | Primary text |
| --fg-secondary | #6B6B6B | Secondary text, labels |
| --accent-light | #0D9488 | Gold highlights, premium indicators |
| --success | #16A34A | Confirmations, available |
| --warning | #D97706 | Alerts, pending |
| --error | #DC2626 | Errors, destructive |
Typography: Playfair Display (headings, 600/700) + Inter (body/UI, 400-700). Uppercase labels with 2-8px letter spacing.
Per-restaurant theming overrides these tokens with restaurant-configured colours, fonts, and logo. Contrast validation (WCAG AA) enforced on save.
This proposal is confidential.
Incorrect passcode