Data Portraits
Meet the room and the machine — what generative AI is and how next-word prediction works.
Theming · Prop library
The standardised building blocks of the site, with their props and a live aesthetic preview. Chrome is constant; palette, surface and type come from the cascade. For the full lighting · surface · shape · rhythm · filter editor, open the cascade playground →
A lesson as a strip of film — standardised chrome, aesthetic-governed body.
import { LessonCard } from '@kino/components'| prop | type | what it does |
|---|---|---|
| title | string | Lesson title — the headline. |
| pattern | string | null | Defining pattern, rendered as the subtitle. |
| code | string | null | Small mono badge (e.g. "D1·1"). |
| image | string | null | Section image painted into the slide (wins over icon). |
| icon | string | null | Lucide icon slug for the slide when there is no image. |
| href | string | null | Click target — wraps the card in an <a>. |
| look | string | null | Aesthetic-theme slug; sets [data-grade] so the lesson's look governs the card. |
| accent | string | null | Accent colour for the rim + slide frame. |
| showcase | boolean | Exemplar treatment — larger, accented, rule-breaking hero. |
Re-skins the standard examples below via [data-grade]. Lighting, surface and the
rest live in the cascade playground.
Draw JARVIS's refusal boundaries — define what it won't do and defend your guardrails.
Give JARVIS hands — connect external actions using function calling and real tool integration.
Where AI already touches the world — and how to make it fetch you real information.
Push JARVIS live — deploy a web chat widget to a public endpoint with wifi fallback.
Pressure-test a story idea for its dramatic engine with AI brainstorming.
Identify the few keyframe moments that carry your story forward.
A themed container — surface, role, padding, accent.
import { Card } from '@kino/components'| prop | type | what it does |
|---|---|---|
| surface | SurfaceSlug | null | Surface finish (paper, glass, neon-pad…). Sets data-surface. |
| role | RoleSlug | null | Semantic intent (primary, warning…). Sets data-role. |
| padding | string | boolean | Inner padding; false = 0, true/undefined = surface default. |
| accent | string | Accent line colour (--dev-card-accent). |
| accentPosition | 'none'|'left'|'top'|'border'|'glow' | Where the accent appears. |
import { Button } from '@kino/components'| prop | type | what it does |
|---|---|---|
| role | RoleSlug | null | Colour/meaning; omit → primary. |
| emphasis | 'solid'|'soft'|'outline'|'ghost' | Visual weight. |
| size | 'sm'|'md'|'lg' | Control size. |
| href | string | Renders an <a> instead of a <button>. |
| disabled | boolean | Disabled state. |
import { Input } from '@kino/components'| prop | type | what it does |
|---|---|---|
| value | string | number | Bindable value. |
| placeholder | string | Placeholder text (native attr). |
| invalid | boolean | Invalid styling. |
import { Select } from '@kino/components'| prop | type | what it does |
|---|---|---|
| options | { value, label }[] | Option list. |
| value | string | Bindable selected value. |
| placeholder | string | Empty-state label. |
import { Textarea } from '@kino/components'| prop | type | what it does |
|---|---|---|
| value | string | Bindable value. |
| rows | number | Initial row count (default 3). |
| autoResize | boolean | Grow with content. |
import { DropdownMenu } from '@kino/components'| prop | type | what it does |
|---|---|---|
| items | { label, icon?, href?, onclick? }[] | Menu rows. |
| trigger | Snippet | The clickable trigger. |
| align | 'start' | 'end' | Menu alignment. |