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
Ship it embedded
The runtime and the spec sit in the app bundle. The first launch renders without a network.
- 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
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.
<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