Welcome To GrayWorks Technologies

PlateLedger

Category

Restaurant Inventory Software

Year

2026

Role

Product Design, Development & Hosting
PlateLedger

Project Description

PlateLedger is a GrayWorks product for independent restaurants running one to ten locations. It reads the point of sale, multiplies every completed sale through the dish's recipe, and writes the ingredients off the shelf: three chicken quesadillas sold records six tortillas, 378 grams of chicken, and 180 grams of cheddar gone. Square and Clover connect directly and read-only — nothing is ever written back to the merchant's POS — while Toast and Shift4/SkyTab come in through a sales-mix CSV import.

From that ledger the app forecasts days of stock against each supplier's lead time and raises alerts that show their reasoning — the sales average used, what is on hand, and the lead time — rather than a bare number. Ingredients below par become a suggested order grouped by preferred supplier and rounded up to whole packs, which becomes a purchase-order draft to approve and send as HTML and PDF, then receive back into stock. A physical count taken on a phone in the walk-in reconciles the theoretical figure against the shelf and reports the variance in dollars, and six reports export to CSV.

The application is Node 22 and TypeScript on Express 5 over an append-only SQLite stock ledger, with Argon2 password hashing, session cookies or scoped API keys, org-scoped data access, and Stripe Checkout driving a 14-day trial and four paid plans. An AI layer adds demand forecasting — Google's TimesFM 2.5 running in a private Python worker behind a typed HTTP boundary — and an in-app assistant that answers questions about the signed-in org's own data and never writes without a confirmation. It ships as a non-root, multi-stage Docker image behind a TLS reverse proxy with a strict Content-Security-Policy and HSTS, scores 100 on Lighthouse accessibility on its main screens, and is covered by more than 700 vitest tests across 83 files plus Playwright end-to-end specs.

Key Deliverables

A POS-driven inventory ledger for independent restaurants — every plate sold depletes its ingredients, forecasts flag what runs out next, and the purchase order drafts itself.

Client

GrayWorks Technologies (in-house product)

Website

plateledger.pro

Location

Washington, DC

Scope of Work

Everything GrayWorks built into PlateLedger:

  • Product Design & Brand System
  • POS Integrations & Data Ingestion
  • Inventory Engine & Recipe Depletion
  • AI Forecasting & In-App Assistant
  • Alerts, Purchase Orders & Reporting
  • Billing, Hosting & Security
Open Project

A merchant connects Square or Clover over OAuth, maps each POS location to an internal one, and the adapter syncs the catalog into menu items and backfills 30 days of completed orders. After that, HMAC-verified webhooks are acknowledged in milliseconds and processed on an in-process queue, so every completed order depletes stock and every refund reverses it, with idempotency keys making a replayed delivery a no-op. POS tokens are encrypted at rest, and Toast, Shift4/SkyTab and generic exports import through a matched sales-mix CSV instead.

Each dish carries a recipe — ingredient, quantity, any convertible unit, a waste percentage for trim and prep loss, and optional one-level sub-recipes — and modifiers add or remove ingredients on top. A sale multiplies straight through it and writes negative rows to an append-only stock ledger, so on-hand figures and usage rates are derived from history rather than overwritten. Physical counts write their own adjustment rows and record theoretical-versus-actual variance with its dollar impact.

Demand forecasting runs Google's TimesFM 2.5 in a private Python worker that only the application talks to, never the browser, with statistical baselines behind it; every quantity comes from tested arithmetic and numerical models, and no language model invents demand or purchase amounts. On top of it sit per-service and per-event forecasts, prep and loadout plans, and accuracy tracking against what actually sold. The separate in-app assistant reaches its model through a gateway alias rather than a provider key, is gated by the same roles as the UI, and only ever proposes a change for the user to confirm.

Five alert rules are evaluated every 15 minutes with deduplication, auto-resolve, acknowledge and snooze; an ingredient that will not survive its supplier's lead time emails immediately, and the rest arrive in a 6 am digest in the organization's own timezone. Suppliers and supplier items drive suggested orders that round up to whole packs, become purchase-order drafts, and are approved, emailed as HTML and PDF, and received back into stock. Six reports — inventory value, usage, variance, sales mix, purchases, and days of stock — each export to CSV.

Start a Similar Project

Your email address will not be published. Required fields are marked *