kluuu mascot

49 moods, one spec.

The mascot is a pure function of numbers. An app sets a mood; the transition, the breathing and the blinks happen in the runtime.

How the spec reaches an app

  1. 1

    Ship it embedded

    The runtime and the spec sit in the app bundle. The first launch renders without a network.

  2. 2

    Check occasionally

    Once a day, jittered per install, never on every launch and never on a metered connection. A check that finds nothing costs one 304 with no body.

  3. 3

    Swap atomically

    Verify the signature and hash, then replace. If the new spec fails on the next launch, the client falls back to the embedded copy.

Endpoints

https://kluuuapi.glade.studio
  • GET/spec/v1/index.jsonPointer to the current version. ETag, revalidates with a 304.max-age=300 · swr 24h
  • GET/spec/v1/releases/1.0.0/bundle.jsonAn immutable release: geometry, rig, motion and every mood.immutable · 1 year
  • GET/spec/v1/schema.jsonJSON Schema, generated from the same rig descriptors.immutable · 1 year

Integrate

A framework-free tag for plain HTML, a CMS template or a page you do not control the build of.

html
<script type="module">
  // Registers <kluuu-mascot>. Import for the side effect only.
  import 'https://esm.sh/@kluuu/mascot/define'
</script>

<kluuu-mascot mood="happy" size="160"></kluuu-mascot>

<script type="module">
  const el = document.querySelector('kluuu-mascot')
  el.mood = 'celebrating'        // springs across, never cuts
  el.setAttribute('idle', 'lively')
  el.setAttribute('colour-mode', 'brand')  // any mood in the original green
</script>

Full guide, including versioning and signing: docs/INTEGRATION.md