Access denied
You do not have permission to view this page.
Loading…
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.
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.
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.
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.
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.
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.
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.
- 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.
- 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.
| Time | SKU | Weight | Fill |
|---|---|---|---|
Loading… | |||
| Bottle | Fill % | Last scan |
|---|---|---|
Loading… | ||
| UID | SKU | Name | Brand | Category | Size | ABV | Empty (g) | Density | Actions |
|---|---|---|---|---|---|---|---|---|---|
No bottles registered yet. | |||||||||
| ID | Name | Type | Store | Start | Guests | Status | Actions |
|---|---|---|---|---|---|---|---|
| Loading… | |||||||
| Time | SKU | Bottle Name | Weight (g) | Liquid (g) | Remaining ml | Remaining % |
|---|---|---|---|---|---|---|
No events yet. | ||||||
| Status | SKU | Bottle Name | Last Scan | Weight (g) | Liquid (g) | Remaining ml | Remaining % |
|---|---|---|---|---|---|---|---|
No scan events yet. | |||||||
Select a bottle above.
| Item ID | Station | Product | Batch SKU | Container | Current ml | Transferred ml | NFC UID | Status |
|---|---|---|---|---|---|---|---|---|
No station items yet. | ||||||||
| ID | Status | Batch SKU | Product | Category | Yield ml | Date | Lines | Created by | Created | Actions |
|---|---|---|---|---|---|---|---|---|---|---|
No production runs yet. | ||||||||||
| Production ID | Batch SKU | Product | Available ml | Density | Expiry | Status |
|---|---|---|---|---|---|---|
No prep inventory yet. | ||||||
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.
| Product | Category | Yield | Ingredients | |
|---|---|---|---|---|
No handmade products yet. | ||||
| Run | Product | Status | Actions |
|---|---|---|---|
No runs yet. | |||
| Lot | Name | Run (provenance) | Product | Remaining | Expiry | Status | Actions |
|---|---|---|---|---|---|---|---|
No produced lots yet. | |||||||
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.
| ID | Station Name | Venue Area | Type | Status | Notes | Actions |
|---|---|---|---|---|---|---|
Loading… | ||||||
| ID | Name | Station | Store | Lines | Status | Actions |
|---|---|---|---|---|---|---|
Loading… | ||||||
| Type | Item | Target | Actual | Missing | Action | Status | Task |
|---|
| Invoice # | Supplier | Order | Receiving | Invoice date | Received | Store | Total | Status | Attach | |
|---|---|---|---|---|---|---|---|---|---|---|
Loading… | ||||||||||
| Date | Supplier | Invoice | Item | Qty | Unit Cost | Total | Store |
|---|
Select a purchase order from the list,
or create a new one to get started.
Stock levels are calculated live from the movement ledger. Numbers reflect all purchases, transfers, and adjustments.
| ID | Status | Type | From | To | Items | User | Date | |
|---|---|---|---|---|---|---|---|---|
Loading… | ||||||||
| Time | Event | SKU / Batch | Name | Quantity | From | To / Station | Source |
|---|---|---|---|---|---|---|---|
No movements yet. | |||||||
| SKU | Name | Brand | Category | Type | Supplier | Unit preset | Stock unit | Recipe unit | Current Cost | Store | Barcode | Notes | Actions | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
No ingredients yet. Click Add Ingredient to create one. | ||||||||||||||
| Product | SKU | Lot | Expiry | Remaining | Store | Alert | Actions |
|---|---|---|---|---|---|---|---|
Loading… | |||||||
| SKU | Name | Supplier | Unit | Store | Shelf Life | Lot / Expiry | ID Method | Actions |
|---|---|---|---|---|---|---|---|---|
Loading… | ||||||||
| Product | Lot | Received | Expiry | Current Qty | Waste | Remaining Value | Status |
|---|---|---|---|---|---|---|---|
Loading… | |||||||
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.
| Wine | Producer | Grape | Region | Vintage | Colour | Class | Cost | Actions |
|---|---|---|---|---|---|---|---|---|
Loading… | ||||||||
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).
| Cocktail | Family | |
|---|---|---|
Loading… | ||
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.
| Item | Theoretical | Counted | Δ Variance | Reason |
|---|---|---|---|---|
Pick a store and load the count sheet. | ||||
Recent stocktakes
| No stocktakes yet. |
| SKU | Name | Brand | Category | Supplier | Purchase Unit | Inv Unit | Current Cost | Store | Actions |
|---|---|---|---|---|---|---|---|---|---|
No materials yet. | |||||||||
| ID | Name | Certified | NFC | Last verified | |
|---|---|---|---|---|---|
Loading… | |||||
| When | Mode | Scale | Weight | Certified | Actual | Deviation | Accuracy | Status |
|---|---|---|---|---|---|---|---|---|
No calibration tests yet. | ||||||||
| Name | Category | Qty | Store | Status | Condition | Actions | |
|---|---|---|---|---|---|---|---|
Loading… | |||||||
| Name | Category | Serial | Store | Status | Next Maint. | Actions | |
|---|---|---|---|---|---|---|---|
Loading… | |||||||
| ID | Asset | From | To | Qty | When |
|---|
| ID | Name | Schedule | Currency | Contact | Phone | VAT | Actions | |
|---|---|---|---|---|---|---|---|---|
No suppliers yet. | ||||||||
Stores are primary inventory locations. Stations are separate operational areas within a store.
| ID | Name | Cost Center | Type | Description | Sublocations | Actions |
|---|---|---|---|---|---|---|
Loading… | ||||||
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).
| Item | Location | Current | Min | Par | Max | Status | Supplier | Suggested | Actions |
|---|---|---|---|---|---|---|---|---|---|
| Loading… | |||||||||
| Lot ID | Name | Allergens | Batch SKU | Produced | Expiry | Volume ml | Store | Status |
|---|---|---|---|---|---|---|---|---|
No produced lots yet. | ||||||||
Bring a venue that already has stock into Level Ledger. Set your base currency in before importing prices. New here?
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.
Or import each list on its own — new SKUs are created, existing ones left untouched (re-running is safe).
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.
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.
Timestamps are stored in UTC. Lists and reports display times in your company timezone.
Base currency is used for inventory costing and all reports. Invoice exchange rates are frozen at purchase time.
View and restore archived, retired, inactive, cancelled, or voided records. Permanent delete is only allowed for unused records.
| Type | ID | Name | Status | Archived | Actions |
|---|---|---|---|---|---|
| Open this section to load | |||||
Master data is shared; stock and operations are separated per cost center.
| ID | Name | Type | Currency | Active | Actions |
|---|---|---|---|---|---|
| Loading… | |||||
Master list of physical areas (Ground Floor, Lobby, Restaurant…). Stations reference these instead of free text, keeping reporting and filtering consistent.
| ID | Name | Description | Active | Actions |
|---|---|---|---|---|
| Loading… | ||||
/dev/tty.usbserial-10| SKU | Item | Type | Purchase Unit | MOQ | VAT | Last Price | Average Price | Purchases |
|---|
| Date | Supplier | Original | Rate | Base Price | SKU | Item | Qty |
|---|
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.
| ID | NFC UID | SKU | Name | Status | Last Weight | Remaining ml | Fill % | Bottle Eq. | Store / Station | Actions | |
|---|---|---|---|---|---|---|---|---|---|---|---|
No active bottles yet. Bottles become active when tagged during Station Activation. | |||||||||||
Add Workstation
| ID | Type | Store | Station | NFC | Scale | Active | Actions |
|---|---|---|---|---|---|---|---|
| Loading… | |||||||
| ID | Type | NFC UID | Status | Bottle | Location | Last scan | Actions |
|---|---|---|---|---|---|---|---|
No NFC assets. | |||||||
| When | Event | Bottle | User |
|---|
Back bar layout
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
| Bottle | NFC Carrier | Pourer | Op. Tare | Status |
|---|---|---|---|---|
| Activate station first | ||||
Bottles on the back bar
| Bottle | NFC Carrier | Pourer | Op. Tare | Status |
|---|---|---|---|---|
| — | ||||
The back-bar photo and bottle positions are managed in the Back Bar section (shared per area).
| ID | Name | Category | Tare (g) | Active | Actions |
|---|---|---|---|---|---|
Loading… | |||||
| ID | Type | NFC UID | Tare (g) | Status | Bottle | Actions |
|---|---|---|---|---|---|---|
Loading… | ||||||
Transfer between wine stores
| Store | Item | SKU | Qty | Vintage | Bin |
|---|---|---|---|---|---|
— | |||||
| Bottle | Section | Opened | Remaining | Glass € | Pour ml | Cost/pour | Margin € | Margin % | ≈Glasses | |
|---|---|---|---|---|---|---|---|---|---|---|
— | ||||||||||
| When | Item | From | To | Qty | Reason |
|---|---|---|---|---|---|
— | |||||
Add a recurring cleaning task
| Cleaning task | Cadence | Time | Station | Sign | Active | |
|---|---|---|---|---|---|---|
— | ||||||
Due rotas appear automatically in Daily Tasks under “cleaning”, where they’re completed / signed off like any task.
| Control point | Type | Safe range | Last temp | Checked | Status | Log °C |
|---|---|---|---|---|---|---|
— | ||||||
Open excursions
| When | Control point | Temp | Breach | By | |
|---|---|---|---|---|---|
— | |||||
| ID | Name | Role | Active | Actions |
|---|
| Date | POS | Store | Uploaded | Lines | Mapped | Unmapped | Status | Actions |
|---|---|---|---|---|---|---|---|---|
No sales uploads yet. | ||||||||
| Status | Name | Type | Last run | Last result | Actions |
|---|---|---|---|---|---|
No connectors yet. Add a poll or webhook connector, or use 🔌 Connect your POS. | |||||
| Ingredient | Category | Demand (theo.) | Actual (meas.) | Events | Unexplained | Cost impact |
|---|---|---|---|---|---|---|
Run a sales upload and ensure production/movement data exists. | ||||||
| Date | Type | Item | Qty | From | To |
|---|---|---|---|---|---|
| — | |||||
| ID | Status | Recipe | Finished |
|---|---|---|---|
No production runs in range. | |||