Level Ledger by Bar_Melis
Dashboard

Access denied

You do not have permission to view this page.

🔔 Action Center

Loading…

Workflow Guide

ℹ️ About Level Ledger

What Level Ledger is
Not another inventory tool with bar features bolted on. An ERP built on an explicit doctrine.
The guiding principle
The operational complexity of a venue is to be structured and governed — never simplified away.

Where other systems ask you to flatten reality to fit their fields, LL models reality as it is and makes it governable. From this, six concrete differences follow.

01
An append-only movement spine

Every economic fact — a purchase, a production run, a decant, a sale, a spill — is a recorded, immutable movement. Never deleted or overwritten: corrected with a reversal that itself stays in the history. Most ERPs overwrite the current state; LL preserves the sequence of facts.

02
Epistemic honesty about cost

LL doesn't pretend to know what it doesn't. A cost is Confirmed only when set by a real acquisition, Estimated when it needs a policy, Missing Source when there's none. No magic "set cost" field — no invented numbers passed off as certainties.

03
Three levels of question, never conflated

Inventory Health — what needs attention now? Cost Investigation — why? Provenance — what actually happened? Investigations hold only as evidence assembled over what is tracked, with honest boundaries — never as conjecture about physical reality, demand, or blame.

04
Exceptions as first-class citizens

Wine and draught becoming operational stations, high-velocity tracked bottles, perishables that change state once opened, tares derived at activation and weighed at end-of-life. LL absorbs these as variants on the same spine — without forking the model, without forcing you to lie in the data.

05
Real authority and authorship

Every write carries an authenticated actor. The system identity is reserved for internal reconciliations only. You always know who did what — and no audit entry can be forged by the client.

06
Truth measured, not typed

Where other systems trust whatever a human types, LL reads reality directly. An NFC tag identifies the exact bottle or container; an intelligent BLE scale captures its real weight at that instant. One tap becomes one movement — the resolved lot, the measured remaining, the moment. Counts stop being a guess.

A traditional ERP
  • Hands you a schema and asks you to conform.
  • Overwrites the current state — history is lost.
  • Stores a single "cost" with no notion of how sure it is.
  • Collapses every question into one blended dashboard.
  • Forces the odd cases into fields that don't fit.
  • Trusts whatever a human types as the count.
Level Ledger
  • Starts from the real work of the venue and structures its complexity.
  • Preserves the sequence of facts — append-only, reversible, auditable.
  • Labels every cost by confidence — Confirmed, Estimated, Missing.
  • Separates what needs attention, why, and what happened.
  • Models the exceptions as first-class variants on one spine.
  • Reads the count from an NFC tag + intelligent scale, not a keyboard.

In one sentence: traditional ERPs hand you a schema and ask you to conform. Level Ledger starts from the real work of the venue, structures its complexity, and keeps an operational truth that is honest, traceable, and tamper-proof.

🍾
Registered SKUs
📡
Total Scan Events
🧪
Active Batches
🍸
Station Items
🔧
Total Assets
⚙️
Fixed Assets
Expiring Soon
🔴
Low Stock
🟠
Below Par
🧪
Production Required
🛒
Reorder Required
Expiring (Par)
📦
Overstock
Supplier Deadlines
Loading…
Order Rule Warnings
Loading…
Recent Events
TimeSKUWeightFill
Loading…
Stock Overview
BottleFill %Last scan
Loading…

Smart SKUs

UIDSKUNameBrand CategorySizeABV Empty (g)DensityActions
🏷

No bottles registered yet.

Events

Active Events
Upcoming
All Events
IDNameTypeStoreStartGuestsStatusActions
Loading…

Scan History

TimeSKUBottle Name Weight (g)Liquid (g) Remaining mlRemaining %
📋

No events yet.

Stock Overview

StatusSKUBottle Name Last ScanWeight (g) Liquid (g)Remaining mlRemaining %
📦

No scan events yet.

Bottle Detail

🍾

Select a bottle above.

Station Inventory

Item IDStationProductBatch SKU ContainerCurrent mlTransferred mlNFC UIDStatus
🍸

No station items yet.

Batches / Production Runs

IDStatusBatch SKUProductCategory Yield mlDateLinesCreated byCreatedActions
🧪

No production runs yet.

Prep Inventory

Production IDBatch SKUProduct Available mlDensityExpiryStatus
🧴

No prep inventory yet.

Handmade Products

A Handmade Product is something you make in-house (syrups, cordials, infusions, purées…). Each product has a recipe — ingredients, equipment, instructions and yield — and you produce batches from it. Authoring a product changes no stock; producing a batch does.

Handmade Products
ProductCategoryYieldIngredients

No handmade products yet.

Production Runs
RunProductStatusActions

No runs yet.

Produced Lots
LotNameRun (provenance)ProductRemainingExpiryStatusActions

No produced lots yet.

Station Readiness

Can each station open for service right now? Read-only — nothing here changes stock or movements.
Loading…

Opening Readiness

Pre-service walk-through. Read-only — fix issues in their own screens; nothing here changes stock.
Loading…

Station Zones

Universal Station Topology v1 — operational zones. Pick a station to upload its layout photo and place each zone on it (Admin / Bar Manager); zones-only mode stays a read-only universal reference.
Loading…

Decant / Transfer to Station

Build Stations

Advanced ▾

Step ① of the workflow. Recommended: ✨ Easy Station Setup — it creates the station, picks its store, and assigns the bottles it serves + par in one guided flow, so the station is ready to activate with no missing blueprint. The Advanced buttons build the pieces separately — a station without a template can’t be opened for service.

Stations
IDStation NameVenue AreaType StatusNotesActions
⚙️

Loading…

Par templates
IDNameStationStoreLinesStatusActions
Loading…

Station Setup

Par checklist
TypeItemTargetActualMissingActionStatusTask

Receiving

Record deliveries — creates movements, cost history, and lots

Invoices Archive

Invoice #SupplierOrderReceivingInvoice dateReceivedStoreTotalStatusAttach
Loading…

Purchase History

DateSupplierInvoiceItemQtyUnit CostTotalStore

Supplier Analytics

Spend by supplier
Top purchased items

Purchase Orders

Select a purchase order from the list,
or create a new one to get started.

Inventory

Export audit (CSV)

Stock levels are calculated live from the movement ledger. Numbers reflect all purchases, transfers, and adjustments.

Transfers

New Transfer
Add items
Recent Transfers
IDStatusTypeFromToItemsUserDate
Loading…

Production Decant to Station

Stock Movements

TimeEventSKU / BatchNameQuantityFromTo / StationSource
📜

No movements yet.

Operations Calendar

Daily Diary

📝 Shift Notes

Ingredients

Filters
Inventory value by category
Loading…
Inventory value by type
Loading…
SKUNameBrandCategoryTypeSupplierUnit presetStock unitRecipe unitCurrent CostStoreBarcodeNotesActions
🧃

No ingredients yet. Click Add Ingredient to create one.

Perishable Products

Expired
0
≤ 24h
0
≤ 48h
0
Active Lots
ProductSKULotExpiryRemainingStoreAlertActions
Loading…
Products
SKUNameSupplierUnitStoreShelf LifeLot / ExpiryID MethodActions
Loading…

Perishable Product Report

ProductLotReceivedExpiryCurrent QtyWasteRemaining ValueStatus
Loading…

🍷 Wine

Wines are catalog items on the shared spine (receiving · cost · movements · bottle-track), shown here as wine with their varietal facet + sommelier card. Mark any item “🍷 Wine” in its form to list it here.

WineProducerGrapeRegionVintageColourClassCostActions
Loading…

🍹 Cocktails

Your ✨ Signature drinks sit above the Classics canon — both carry recipe, pour cost and “can I make it with current stock?”. Cost & availability bind to your priced/stocked products (map them with ⚙). Classics are a curated offline reference (notes paraphrased + attributed); signatures are authored by your venue. You can also ➕ Add classic to extend the canon with your own “classics” (marked · added).

CocktailFamily
Loading…

📋 Stocktake

Count the real physical stock in your unit. On confirm, the ledger is reconciled to your count — a reason-typed movement is posted for each difference, so the counted quantity becomes the ledger truth. The variance is kept for audit. Only the items you enter a count for are adjusted.

ItemTheoreticalCountedΔ VarianceReason

Pick a store and load the count sheet.

Recent stocktakes

No stocktakes yet.

Ingredient Categories

Inventory master data — operations read only
Loading taxonomy…

Materials

SKUNameBrandCategorySupplierPurchase UnitInv UnitCurrent CostStoreActions
📦

No materials yet.

Scale Calibration

Loading scale status…
PASS ≤ 0.5g deviation · WARNING 0.5–2g · FAIL > 2g
Calibration weights
IDNameCertifiedNFCLast verified
Loading…

Calibration History

WhenModeScaleWeightCertifiedActualDeviationAccuracyStatus

No calibration tests yet.

Assets

Reusable bar tools & equipment
NameCategoryQtyStoreStatusConditionActions
Loading…

Fixed Assets

NameCategorySerialStoreStatusNext Maint.Actions
Loading…

Asset Transfers

IDAssetFromToQtyWhen

Asset Stocktake

Suppliers

Open a supplier to manage its supplier items (the products & prices it supplies) via “+ Link Item”. Supplier items feed your purchase orders and receiving.
IDNameScheduleCurrencyContactPhoneEmailVATActions
🏭

No suppliers yet.

Stores

Stores are primary inventory locations. Stations are separate operational areas within a store.

IDNameCost CenterTypeDescriptionSublocationsActions
🏠

Loading…

Par Level — Item

Item par — the master min/par/max held per item, authored on each Ingredient / Asset / Material. This page is a read-only summary; use the category filter to narrow the selection by item type. Distinct from Par Level — Station Item (the per-station service par defined in Station Templates).

ItemLocationCurrentMinParMax StatusSupplierSuggestedActions
Loading…
Notifications

Produced Lots

Lot IDNameAllergensBatch SKUProducedExpiryVolume mlStoreStatus
🫙

No produced lots yet.

Settings

📥 Import your data

Bring a venue that already has stock into Level Ledger. Set your base currency in before importing prices. New here?

🚀 Drop & Go — set up everything from your files

Have your t:spoonLab/POS exports? Drop them all at once — ingredients, vendors, materials, menu/drinks, stocktake, recipe PDF. Level Ledger recognises each file, imports them in the right order, and links everything to one identity per item.

Import one file type at a time

Or import each list on its own — new SKUs are created, existing ones left untouched (re-running is safe).

Opening count (stocktake → opening balance)

Upload your stocktake sheet — columns are auto-mapped (item by name or sku/barcode, plus qty, unit, cost). Each row posts an opening_balance movement (auditable, with cost basis) for ingredients & materials. Items are matched to the catalog by SKU → name → barcode, so a sheet whose Code column is blank still resolves. If the sheet has no Store column, pick a destination store below. Preview before applying; re-applying the same file is blocked so stock can't double.

✔ Data completeness — your golden records

Cross-checks the imported files into one identity per item, assembled across the layers (name · SKU · barcode · unit · category · supplier · price · used in a drink), and shows where data is still missing.

🏢 Company Settings

Timestamps are stored in UTC. Lists and reports display times in your company timezone.

💱 Currency & Localization

Base currency is used for inventory costing and all reports. Invoice exchange rates are frozen at purchase time.

Exchange rates → base (multiply foreign amount)
Example: 120 AED × 0.254 = 30.48 EUR. Old invoices keep their stored rate.
🎨 Branding
🍶
Upload a custom logo for the sidebar. PNG, JPG, JPEG or SVG. Max 5 MB.
Archived Records

View and restore archived, retired, inactive, cancelled, or voided records. Permanent delete is only allowed for unused records.

TypeIDNameStatusArchivedActions
Open this section to load

Setup Readiness

Read-only — whether the venue has the minimum setup to begin truthful operations. Nothing here changes data.
Loading…
Cost Centers

Master data is shared; stock and operations are separated per cost center.

IDNameTypeCurrencyActiveActions
Loading…
Venue Areas

Master list of physical areas (Ground Floor, Lobby, Restaurant…). Stations reference these instead of free text, keeping reporting and filtering consistent.

IDNameDescriptionActiveActions
Loading…
Par & Stock Alerts
Hardware
Scale port: /dev/tty.usbserial-10
NFC reader: ACR122U (PC/SC)
Back up your data
Your whole venue — every product, cost, movement and lot — lives in this box's data files. Download a full backup regularly (and before any big change) and keep it somewhere safe (another computer or cloud). To restore: stop the server, unpack the backup over the runtime folder, restart.
Data Files
Architecture Notes
Ingredients — edible consumables (spirits, juices, syrups). Use barcode for commercial products.
Materials — non-edible consumables (straws, napkins, labels).
Assets — reusable equipment (NFC tags, kegs, containers).
Stores — primary inventory locations (warehouse, cold room, bar).
Stations — operational positions within a store (Station 1, Station 2).
Recipe Templates — production blueprints with yield management.
Produced Lots — every production creates a traceable lot (LOT-0001).
Inventory Movement Ledger — all stock changes recorded as movements. Stock is never modified directly.
NFC — used for internal productions and batch containers.
Barcode — used for commercial products from suppliers.

Supplier Detail

Price List Upload (CCD)

Upload a supplier price list (XLSX/CSV). Review matches, then apply. Nothing is written until you click Apply.
Linked Items & Price Stats
SKUItemTypePurchase UnitMOQVATLast PriceAverage PricePurchases
Purchase History
DateSupplierOriginalRateBase PriceSKUItemQty

Active Bottles

Active bottles are physical bottles activated for station service. They are created during Station Activation, where each is tagged with an NFC UID, tare, and pour weight for scale tracking. Warehouse and store inventory is tracked by quantity only and does not require NFC.

IDNFC UIDSKUNameStatus Last WeightRemaining mlFill %Bottle Eq. Store / StationActions
🏷️

No active bottles yet. Bottles become active when tagged during Station Activation.

Bottle Lookup

MacBook + USB NFC reader + scale. Enter a UID or scan with the USB reader — no iPhone needed. (iPhone Web NFC is an optional future enhancement.)

Workstations

A workstation = laptop/terminal + NFC reader + scale, assigned to a station/store/outlet. Set the active one here — Bottle Lookup & Weight Scan use it. (Manual selection; no auto-detect.)

Add Workstation

IDTypeStoreStationNFCScaleActiveActions
Loading…

NFC Assets

Collar · Clip · Shelf · Direct tag · Calibration
IDTypeNFC UIDStatusBottleLocationLast scanActions

No NFC assets.

Bottle Activity

Active
Available
Needs verification
Recent events
WhenEventBottleUser

Back Bar

Shared per venue area by the stations that face it — layout config, distinct from per-shift Station Activation.

Back bar layout

Select a station to see its back bar.

Mobile Operations

↗ Open in new tab Live mirror of the staff mobile app (/mobile) — sign in as the staff member to preview their shift journey, exactly as it looks on a phone.
✥ drag

Shift Assignments

Author who works which shift on which stations, plus extra duties. Feeds each worker's My Shift journey (core tasks are always added automatically).
New assignment

Assignments
Loading…

Station Activation

Service setup (NFC collar + pourer) belongs here — not on bottle master record. Register physical bottles in Bottle Register.

1. Open Station for Service

Per-shift operational step. Stations must first be configured (blueprint) in ① Build Stations.

2. Bottle Setup (shift)

Bottle setups for active shift

BottleNFC CarrierPourerOp. TareStatus
Activate station first

Bottles on the back bar

BottleNFC CarrierPourerOp. TareStatus

The back-bar photo and bottle positions are managed in the Back Bar section (shared per area).

Garnishes

Garnish ingredients classified by cut type (Zest / Wedge / Slice…), yield-aware. Built on fresh-fruit breakdowns.
Loading…

Pourer Types

Editable tare weights — not hardcoded in calculations
IDNameCategoryTare (g)ActiveActions
Loading…

NFC Carriers

IDTypeNFC UIDTare (g)StatusBottleActions
Loading…

Wine Cellar & Fridges

Transfer between wine stores

Wine Cellar Stock Report

StoreItemSKUQtyVintageBin

BTG Open Bottle Report

BottleSectionOpenedRemainingGlass €Pour mlCost/pourMargin €Margin %≈Glasses

Wine Movement Report

WhenItemFromToQtyReason

Cleaning Rotas

Add a recurring cleaning task

Cleaning taskCadenceTimeStationSignActive

Due rotas appear automatically in Daily Tasks under “cleaning”, where they’re completed / signed off like any task.

HACCP — Temperatures

Control pointTypeSafe rangeLast tempCheckedStatusLog °C

Open excursions

WhenControl pointTempBreachBy

Wine Section

Operations Users

IDNameRoleActiveActions

Sales Upload

CSV / XLSX from POS — feeds theoretical depletion + variance · columns: pos_code, pos_name, qty, revenue · does not modify inventory
DatePOSStoreUploadedLinesMappedUnmappedStatusActions

No sales uploads yet.

POS Connections

Automate the sales feed: poll (LL pulls a file/URL) or webhook (POS pushes). File upload stays under Sales Upload. Live feeds auto-deplete (real-time stock & COGS).
StatusNameTypeLast runLast resultActions

No connectors yet. Add a poll or webhook connector, or use 🔌 Connect your POS.

Theoretical Depletion

Theoretical usage is calculated from imported POS sales × recipes. If this looks empty, import sales first under Reports → Sales Upload.
Theoretical Cost
Revenue (upload)
Lines processed
Top consumed ingredients
Top consumed categories

Variance Analysis

Theoretical (sales × recipes) vs actual (movements, production, scans, waste)
If this looks empty, there is no inventory activity yet. Complete receiving, transfers or stock activity (and import sales) before variances appear.
Cost impact
Over-use items
Under-use / loss
Top loss items
Positive variance
IngredientCategoryDemand (theo.)Actual (meas.)EventsUnexplainedCost impact

Run a sales upload and ensure production/movement data exists.

Cost Analysis

Theoretical COGS
Revenue
Est. margin
Inventory book
Top cost ingredients (theoretical)

Inventory Reports

Export audit (CSV) Read-only — stock in Bottle/EA; recipe depletion in ml
Recent movements
DateTypeItemQtyFromTo

Production Reports

Runs
Lots
Templates
IDStatusRecipeFinished

No production runs in range.