← The Open Values Standard

Create your own Values Commons instance

Values Commons is the public ecosystem. The Open Values Standard is the protocol underneath it. The whole point is that this is not one app: Conscious Consuming is
instance #1. Kosplora is instance #2. Where to Message
is instance #3 — and it was built from only a lens + a skin, on the unmodified shared engine and shell.
You can build instance #4 the same way, in an afternoon, and no one can stop you or take it down. That is the design.

The three layers (and what you actually write)

LayerFileWho owns itYou edit it?
L1 — the engine (the math: scoring, bands, the verdict, the passport)app/engine.jsthe Open Values StandardNo. Never. It is shared and unedited across every instance.
L2 — the shell (the experience: live ranking, sliders, the detail/verdict view, passport import)app/shell.jsthe Open Values StandardNo. Shared, unedited.
L3 — the skin (colours, type, layout)your index.html <style>youYes — make it look like nothing else.
The lens / manifest (your domain: entities, criteria, value vocabulary, the passport map)your lens.jsyouYes — this is your instance.

An instance = a manifest (lens.js) + a skin (an index.html) + three <script> tags. Nothing more.

Step 1 — write your manifest (lens.js)

It assigns one global, window.OVS_LENS:

window.OVS_LENS = {
  meta: {
    id: 'coffee', storeKey: 'ovs-coffee.values', noun: 'coffee',
    title: 'Where to Buy Coffee',
    tagline: 'Rank roasters by your own values.',
    footer: 'a Values Commons instance, powered by the Open Values Standard.'   // shell prepends "Running Values Engine vX — "
  },
  // The SOURCED axes you rate each entity on. tier:'measured' = a fact (a number, a licence); 'assessed' = a judgement.
  criteria: [
    {key:'fairness', label:'Fair to farmers', tier:'assessed'},
    {key:'planet',   label:'Low-impact',      tier:'assessed'},
    {key:'price',    label:'Affordable',      tier:'measured'}
  ],
  // The VALUE VOCABULARY a person weights once (0–5). These derive the per-criterion weights.
  themes: [
    {id:'ethics', label:'Ethics',     blurb:'fair pay, dignity'},
    {id:'planet', label:'Planet',     blurb:'low footprint'},
    {id:'cost',   label:'Affordable', blurb:'easy on the wallet'}
  ],
  // Which theme drives each criterion. Reuse a theme across criteria freely.
  key2theme: { fairness:'ethics', planet:'planet', price:'cost' },
  // The PASSPORT BRIDGE: a visitor's universal values → your themes. Values that span domains travel in;
  // the rest stay home. Universal vocabulary: planet, people, openness, access, wellbeing, autonomy,
  // animals, community, quality, joy. (See VALUES-PASSPORT.html.)
  universalToLocal: { people:'ethics', planet:'planet', access:'cost' },
  // Your ENTITIES. scores are 0–100 per criterion; provenance is a short note (or {note,source,asof}) per claim.
  resources: [
    {code:'roaster-a', name:'Local Co-op Roasters', brand:'worker-owned',
     scores:{fairness:92, planet:80, price:55},
     provenance:{fairness:'Direct-trade, published prices', planet:'Compostable bags', price:'Premium'}}
    // …more entities…
  ]
};

That is the entire data contract. The shell reads meta, criteria, themes, key2theme, universalToLocal, and resources — nothing else.

Step 2 — write your skin (index.html)

Copy any existing instance's index.html as a starting point (Kosplora or
Where to Message), change the <style> to taste, keep these mount points,
and end with the three script tags:

<div class="wrap">
  <h1>Where to Buy Coffee</h1>
  <p class="sub">Rank roasters by your own values.</p>
  <div id="chips"></div>          <!-- the value sliders render here -->
  <p class="summary" id="summary"></p>
  <label>Bring your values<input type="file" id="passfile" accept=".json" hidden></label>
  <span id="passnote"></span>
  <div id="list"></div>           <!-- the ranked list + verdict view render here -->
  <footer id="foot"></footer>
</div>

<script src="../app/engine.js"></script>   <!-- shared core — never edit -->
<script src="lens.js"></script>             <!-- your manifest -->
<script src="../app/shell.js"></script>     <!-- shared shell — never edit -->

(Adjust the ../app/… paths to wherever you place your folder relative to app/.)

Step 3 — open it

Serve the folder over any static host (or open it through a local server so the ../app/*.js paths resolve).
There is no build step, no backend, no account, no key. It runs from a flash drive.

What you get for free, by doing nothing

values that span both domains carry over. Your instance is born federated.

The rules of the standard (so instances stay trustworthy)

  1. Never edit engine.js or shell.js. If your domain needs something they can't express, that is a

proposal to the standard (open an issue / fork the core for everyone) — not a private patch. A private
patch is how a standard dies.

  1. Show your sources. Use provenance honestly; mark tier:'measured' only for facts.
  2. No pay-to-rank, no ads, no tracking, no account. The visitor's values decide the order — nothing else.

This is the one line that, if crossed, makes it not an instance of this standard.

Build instance #4. Then tell no one you need permission — because you don't.