{{ avatar.company }} {{ avatar.role }} {{ avatar.contract }} Container{{ avatar.container }} Next deadline{{ avatar.deadline }} Security{{ avatar.twofa }}
{{ c.sep }}
{{ hero.eyebrow }}

{{ h.text }}

{{ hero.lede }}

The shelves, open to everyone.

Each card names what the position tastes like, the quality band it holds and how deep the pool behind it runs. Open one for its lots, its calendar and a sample request.

Container consolidation

One buyer cannot pay for a container. Four micro-lots can.

Watch four micro-lots take their slots in one box. Nothing is blended and nothing is renamed — every unit still resolves to its own plot, and the freight bill stops being the reason a small lot never leaves the mill.

The gap in every rate card
{{ t.label }} {{ t.range }}

{{ tierGap.note }}

Bags in the box {{ consolPreview.bagsLabel }}
Freight per {{ consol.unitOne }} {{ consolPreview.perBagLabel }}
Against groupage {{ consolPreview.saveLabel }}
{{ consolPreview.capLabel }} {{ consolPreview.bagsLabel }}
{{ b.label }}{{ b.bags }}
{{ consolPreview.stepLabel }} {{ consolPreview.pctLabel }}
Your container

{{ crateName }} · {{ crateSummary.bagsLabel }}

{{ consol.spillNote }}

{{ bx.name }} {{ bx.role }} {{ bx.band }}
{{ s.label }}
{{ bx.bagsLabel }} · {{ bx.pctLabel }} {{ bx.roomLabel }} {{ bx.costLabel }}
Nearest dates
{{ d.label }} {{ d.when }}
Buying a position instead of a container

Everyone sells you a lot. We sell you the same cup next season.

A spot list gives you what happened to arrive. A shelf gives you a position on your menu with a written envelope behind it — and the work of refilling that position becomes ours, not yours.

The usual way
You buy the lot, then spend the year replacing it.
{{ c.k }} {{ c.spot }}
On a LONTARI shelf
You contract the position, and the lots rotate underneath it.
{{ c.k }} {{ c.shelf }}
Your quotes

{{ member.headline }}

{{ member.lede }}

Positions in your quote
Next steps {{ readiness.label }}
{{ r.k }} {{ r.v }}
{{ one.origin }} {{ one.process }} · {{ one.tier }} · {{ one.mode }}

{{ one.name }}

{{ one.character }}

Flavour signature

{{ one.sigNote }}

{{ n.label }} {{ n.share }}

The envelope

{{ s.k }}
{{ s.v }}

Lots holding this position

{{ one.lotNote }}

Availability through the year

{{ one.calNote }}

{{ m.label }}
{{ m.mark }}

Request a sample

Three hundred grams from the lot currently holding the position, with the passport attached.

{{ sampleClosedNote }}
{{ sampleNote }}

Trade portal

{{ portalNote }}

{{ rowSummary }}
{{ gateSummary }}
{{ portalStagedNote }}
Lot
Shelf
Origin
Q
Volume
Arrival
{{ stageHead }}
{{ r.cup }}
{{ r.shelf }}
{{ r.origin }}
{{ r.score }}
{{ r.volume }}
{{ r.arrival }}
{{ r.draftNote }}
Your container
{{ crateSummary.bagsLabel }}
{{ crateSummary.boxLabel }} · first box at {{ crateSummary.pctLabel }}
{{ crateSummary.saveLabel }} freight per {{ consol.unitOne }} against groupage
{{ gateTitle }}
{{ gateBody }}
Step {{ reg.step }} of three · {{ reg.stepName }}

{{ reg.title }}

Pick the positions you want quoted. This decides what opens first inside the portal.

Annual volume
Volumes and delivery calendars open immediately. Holding names, differentials and full passports open once we confirm you are a trading counterparty — usually the same working day.
{{ reg.doneTitle }}
{{ reg.doneBody }}
{{ reg.hint }}
My account

Your container, kept between visits.

{{ savedNote }} Set the quantity lot by lot, pick the packing and the box; when either the volume or the payload runs out, the load opens a second container by itself.

{{ accountHome }}

{{ g.head }}

{{ acctTitle }}

{{ accountName }}
{{ t.k }}
{{ t.v }}
{{ t.note }}
{{ accountName }}
Next up
{{ n.k }} {{ n.v }}
My positions
Annual volume drawn Each contracted position carries an annual volume in 70 kg bags; staged volume counts against it the moment it goes firm.
{{ volumeNote }}
{{ o.name }} {{ o.cls }} {{ o.takenLabel }}
{{ o.pct }} drawn{{ o.leftLabel }}
Your contract What the contract decides is who chooses the lots — and whether the position is refilled for you at all.
Managed · before the next consolidation
{{ managed.head }}
{{ managed.deadline }}
{{ managed.note }}
{{ shareLabel }}
Packing
Container
{{ consol.bindNote }}
{{ consol.floorNote }}
Against the alternatives
{{ a.label }} {{ a.perLabel }} {{ a.note }}
{{ consol.altNote }}
{{ bx.name }} {{ bx.role }} {{ bx.band }}
{{ s.label }}
{{ bx.bagsLabel }} · {{ bx.pctLabel }} {{ bx.roomLabel }} {{ bx.costLabel }}
Volume · {{ bx.volLabel }}
Payload · {{ bx.massLabel }}
{{ bx.bindLabel }}
One square is one unit · {{ consol.capLabel }} · {{ consol.spillNote }}
Lots inside · set the quantity {{ consol.bagsLabel }}
Nothing inside yet. Add a lot from the list below, or set a quantity on any row in the trade portal — what you set is what gets quoted.
{{ l.title }} {{ l.shareLabel }}
{{ l.meta }}
{{ l.bagsLabel }}
{{ consol.saveLabel }} {{ consol.saveNote }} {{ consol.roomLabel }} {{ consol.valueLabel }}
{{ consol.limitNote }}
{{ consol.costNote }}
Shared consolidation
One link, several buyers, one box
Publish a link to the box you are filling. Anyone holding it sees the positions inside, the room left and the deadline, then commits their own volume — interest first, held to the deadline, firm on signature.
{{ share.url }}
{{ share.totalLabel }} {{ share.firmLabel }} {{ share.roomLabel }} {{ share.deadline }}
{{ share.initiator }} {{ share.myBagsLabel }} · {{ share.myShare }}
{{ share.emptyNote }}
{{ c.who }} · {{ c.city }} {{ c.bagsLabel }}
{{ c.stageLabel }} · {{ c.stageNote }}
{{ share.anonNote }}
Interest — visible to you, withdrawable by them at any time.
Soft commit — volume reserved until the deadline, then they convert or lapse.
Firm — countersigned, priced, and written into the manifest.
{{ share.lockNote }}
Invitations and access codes
The link alone opens nothing. Each invited company gets its own code, so an opened box always names whose code was used — and revoking one invite leaves the others working.
{{ v.who }} {{ v.code }} {{ v.opensLabel }}
Lifetime · {{ security.linkTtl }} Opens allowed per code · {{ security.linkMax }}
Add a lot {{ consol.roomLabel }}
Consolidation passport
{{ consol.passport.id }}
{{ p.k }}{{ p.v }}
The passport is written once the container holds something: containers used, lots inside, positions, municipalities, and the line that says every unit still resolves to its own plot. Exports as CSV.
My positions
Samples requested {{ sampleCount }}
Nothing requested yet. Open a position and ask for three hundred grams — it appears here with its status and the lot reference.
{{ b.k }} {{ b.v }} {{ b.note }}
{{ payments.terms }}
{{ r.id }} {{ r.what }} {{ r.amount }} {{ r.due }} {{ r.state }}
{{ q.label }} planned {{ q.plannedLabel }}
shipped {{ q.shippedLabel }}
Every box that has left, is afloat or is booked, with the positions inside it. Bag identity travels with the manifest — a delivered sailing can still be resolved plot by plot.
{{ s.id }} {{ s.box }} {{ s.what }} {{ s.bags }} {{ s.left }} {{ s.arrived }} {{ s.state }}
{{ d.k }} {{ d.note }}
{{ security.watermark }}
Three roles inside your company. A Buyer stages and commits up to a per-operation ceiling; anything above the company threshold waits for an Owner's second signature.
{{ m.name }} {{ m.mail }}
{{ m.def }}
{{ m.limitLabel }}
Two-factor authentication {{ security.twofaLabel }}
Recovery codes · {{ security.recoveryLabel }}
Second signature threshold
{{ security.threshold }} indicative USD
{{ security.thresholdNote }}
{{ security.identSession }}
{{ s.device }} {{ s.where }} {{ s.when }} {{ s.mark }}
Shared-link policy
opens allowed per code {{ security.linkMax }}
Sign-in and export journal Nothing recorded in this browser yet. Every commitment, export and policy change lands here — and in the operator's journal, hashed against the entry before it.
{{ j.text }} {{ j.when }}
Deadlines that move money or lose a lot, in the order they arrive.
{{ n.k }} {{ n.v }}

Open containers

Containers other buyers listed with room left. Joining one moves your lots into their sailing; identity per unit is unaffected — the consolidation passport simply lists two owners.

{{ p.id }} {{ p.closes }}
{{ p.owner }}
{{ d.label }}
{{ p.bagsLabel }}
Taste graph

Where the assortment sits on the flavour wheel.

Descriptors are grouped into families, families into a wheel, and every lot is placed by its leading note. What the wheel leaves empty is as useful as what it fills — that is the part of a menu this origin cannot build for you.

The wheel, with lots on orbit

Two axes at once: a family's share of the wheel is how often it recurs, and how far its band reaches out is how much body the lots carrying it have.

{{ a.k }} {{ a.v }}
{{ famHint }}
{{ w.label }} Harvest slice Colombia slice
{{ famSel.name }} {{ famSel.lotsLabel }} · {{ famSel.shelvesLabel }}
{{ sh.label }}

Coverage by family

The same tally read as a list: how often each family recurs, how many lots carry it and how many positions it reaches.

{{ missingNote }}
{{ c.label }} {{ c.lotsLabel }} · {{ c.shelvesLabel }}

Lot cards

A fan of the lot's descriptors above the ten SCA axes it was scored on. Subscores are synthetic in this demonstration slice; the total is the declared figure.

{{ f.shelf }}
{{ f.title }}
{{ f.meta }}
{{ w.label }}
{{ s.k }}
{{ s.v }}
Total {{ f.total }}

Position × family

Which families each position can actually deliver. A dense cell is a family the position leans on; an empty one is a promise it should not make.

Position
{{ c.label }}
{{ r.trade }} {{ r.name }}
{{ c.mark }}
Origins

{{ originsHead }}

A shelf survives a bad month because it draws on several holdings and two harvest windows rather than one farm's luck.

{{ o.region }}
{{ o.meta }}
{{ o.body }}
{{ sh.label }}
Platform

The shelves are the shop window. This is the machinery behind them.

One graph of typed objects — plots, farms, lots, contracts, containers, laboratory measurements, roasting batches, passports. Users read it through queries and write through auditable actions, and every property traces back to its source document or instrument.

Four modules, one core.

{{ m.tag }}
{{ m.title }}
{{ m.body }}
Common core — dynamic ontology, append-only journal, time travel, invariants as health checks, tenant isolation.
Replacement protocol

How we select lots

{{ walk.intro }}

{{ g.n }} · {{ g.tab }} {{ g.statusLabel }}
{{ g.claim }}
{{ fct.k }} {{ fct.v }}
{{ g.body }}
{{ g.verdict }}

Go deeper

{{ deep.tag }}

{{ deep.title }}

{{ deep.lede }}

{{ b.h }}
{{ b.p }}
About

Palm leaves bound into one scroll.

Indonesian lontar manuscripts bound separate palm leaves into a single body of knowledge. We do the same with a supply chain: scattered claims, measurements and documents become one connected record, and a roaster reads it as eight positions they can buy.

A person recognises the pattern, the machine holds the volume. Nothing here forecasts a harvest or a price — it records what happened and computes what follows.

Straight answers

{{ f.q }}
{{ f.a }}
Legal

What this site is, and what it is not.

LONTARI is pending incorporation. The plainest version: everything you can read without signing in is a demonstration, and every commitment we make is made in writing on a signed order.

{{ l.h }}
{{ l.p }}
{{ lot.counter }}
{{ lot.shelfName }} · {{ lot.shelfCls }} · {{ lot.shelfTrade }} {{ lot.id }}

{{ lot.title }}

{{ lot.envelope.label }} {{ lot.envelope.note }}
The lot as recorded {{ lot.holding }}
{{ fc.k }} {{ fc.v }}
{{ n.label }} {{ n.family }}
{{ m.label }}
{{ w.label }}
SCA total {{ lot.total }}
{{ sc.k }}{{ sc.v }}
In the cup {{ lot.cupWord }} {{ lot.cupText }} {{ lot.cupNote }}
Physical analysis
{{ p.k }} {{ p.v }}
The plot
{{ p.k }} {{ p.v }}
Processing protocol
{{ p.k }} {{ p.v }}
Custody
{{ c.k }} {{ c.v }}
Compliance record
{{ c.k }} {{ c.v }} {{ c.mark }}
Statements here support the operator's own EUDR obligations. LONTARI does not certify compliance and is not a verification body.
{{ lot.siblingsHead }}
Into your container
bags
{{ lot.staged }}
{{ lot.gateNote }}
Sample {{ lot.sampleNote }}

Six positions on an Andean harvest slice, contracted for a season and refilled under a published protocol.

{{ s.k }} {{ s.v }}
The six positions
Trading
Platform
{{ footAccountHead }}
Lots are a working exporter catalogue; everything around them is demonstration data. Nothing here is an offer, and LONTARI is pending incorporation. Positions, bands and municipalities are public; holdings and measured values open to confirmed counterparties.
© 2026 LONTARI