# Creative Jev — complete catalog Creative Jev is a hackathon starter pack containing 1,000 self-contained Lovable build prompts across 10 creative disciplines. Every concept uses TypeSafe Jev for typed decisions rather than generated prose. Canonical site: https://jevprompts.lovable.app Jev documentation: https://docs.typesafe.ai Jev API: https://docs.typesafe.ai/api Jev primitives: https://docs.typesafe.ai/primitives ## Jev in brief - Choice selects exactly one option from a closed set and returns probabilities plus confidence. - Noul returns the probability that a yes/no condition is true. It has no separate confidence field. - Score returns a probability-weighted position across ordered levels, with probabilities, legend, and confidence. - Product rules, arithmetic, authorization, thresholds, and actions remain deterministic code. - API keys and Jev requests stay server-side. Missing or uncertain answers must go to review, never a fabricated fallback. ## Participant workflow 1. Choose an idea below. 2. Copy its complete mega-prompt into a fresh Lovable project. 3. Add TYPESAFE_API_KEY through Lovable's secure secret form when requested. 4. Build and test contrasting, uncertain, and service-error cases through the real interface. ## Catalog conventions Each entry includes its stable ID, discipline, sub-discipline, pitch, Jev pattern, typed-decision rationale, indicative hackathon market notes, and a standalone mega-prompt. Market figures are starting points for a pitch and require independent research before commercial use. Built during the Creative AI & Quantum Hackathon organised by StreetKode Fam during Indian Krump Festival 14. --- # Discipline: Dance & Choreography Audience: choreographers, dancers, dance teachers, movement directors Market anchor: the global dance industry (~$5B; >2M studios worldwide) ## 0001. Audition Lane Desk ID: dance-audition-lane-desk Sub-discipline: Dance casting Jev pattern: Choice Router — pick one of a set Pitch: The casting team pastes an audition application and role requirements, and Jev routes the applicant to a review lane with lane-specific checks. Why typed decisions: Typed lanes and flags populate casting queues directly without interpreting prose recommendations. TAM: Est. 100k global dance casting users SAM: Est. 12k digitally managed casting users SOM: Target 150 pilot users ### Self-contained Lovable mega-prompt Build "Audition Lane Desk" as a ONE-SHOT Lovable build (~5 credits, no follow-ups). Single-page TanStack Start app, one route, cut scope ruthlessly. THIS PROMPT IS SELF-CONTAINED Do not assume the participant knows Jev or has read any other page. TypeSafe Jev is a decision model, not a text generator. It receives `state` plus a map of typed `questions` and returns JSON that code can use directly. Use Choice to select exactly one defined option, Noul for a yes/no probability from 0 to 1, and Score for a probability-weighted position across ordered levels. Keep rules, thresholds, arithmetic, and actions in code. Use a generative model only if the product separately needs prose. CONCEPT The casting team pastes an audition application and role requirements, and Jev routes the applicant to a review lane with lane-specific checks. Discipline: Dance & Choreography (Dance casting). Jev pattern: Choice Router (pick one of a set) — a Jev `choice` question that routes each incoming item to one handler/category from a fixed option map, plus branch-specific questions asked in the same request. Why typed decisions: Typed lanes and flags populate casting queues directly without interpreting prose recommendations. ENGINE: TypeSafe Jev (typed decisions, not text) - Before writing code, ask the participant for `TYPESAFE_API_KEY` with Lovable's secure secret form. Never ask them to paste it into chat, never prefix it with `VITE_`, and never expose it to browser code. - Put the callable server function in `src/lib/jev.functions.ts`; do not import a server-only module from UI code. - Validate the user's input before the handler and read `process.env['TYPESAFE_API_KEY']` inside the handler. - From the server, call: POST https://api.typesafe.ai/v1/systemone Authorization: Bearer , Content-Type: application/json body: { "model": "jev-latest", "state": , "questions": QUESTIONS } - Ask all questions in ONE request (they run in parallel and cannot see each other). - Read Choice from `answers[id].choice`, `.probabilities`, and `.confidence`; Score from `.score`, `.probabilities`, `.legend`, and `.confidence`; Noul from `.noul` only (it has no separate confidence). SERVER IMPLEMENTATION (adapt the input name and result mapping to this concept) ```ts import { createServerFn } from "@tanstack/react-start"; import { z } from "zod"; const Input = z.object({ text: z.string().trim().min(1).max(20000) }); export const decide = createServerFn({ method: "POST" }) .inputValidator((input: unknown) => Input.parse(input)) .handler(async ({ data }) => { const apiKey = process.env['TYPESAFE_API_KEY']; if (!apiKey) return { ok: false as const, status: 500, message: "TYPESAFE_API_KEY is not configured." }; const requestBody = { model: "jev-latest", state: { text: data.text }, questions: QUESTIONS, }; let response: Response | undefined; for (let attempt = 0; attempt < 3; attempt += 1) { response = await fetch("https://api.typesafe.ai/v1/systemone", { method: "POST", headers: { Authorization: `Bearer ${apiKey}`, "Content-Type": "application/json" }, body: JSON.stringify(requestBody), }); if (response.ok || (response.status !== 429 && response.status < 500)) break; if (attempt < 2) await new Promise((resolve) => setTimeout(resolve, 750 * 2 ** attempt)); } if (!response) return { ok: false as const, status: 503, message: "Jev did not respond." }; if (!response.ok) { const message = (await response.text()).slice(0, 500) || `Jev request failed (${response.status}).`; return { ok: false as const, status: response.status, message }; } const result = await response.json(); return { ok: true as const, answers: result.answers }; }); ``` In the page component, call `decide` with `useServerFn`, preserve the participant's input while loading or on error, disable duplicate submissions, and render the returned typed values rather than parsing prose. QUESTIONS (start here, refine wording if needed) { "review_lane": { "type": "choice", "instructions": "Which review handler should receive this application?", "criteria": { "principal": "Evidence best matches a featured role's stated performance requirements.", "ensemble": "Evidence best matches ensemble requirements.", "specialist": "A required specialist movement skill is the strongest match.", "clarify": "Missing or contradictory information prevents a reliable match." } }, "specialist_evidence": { "type": "noul", "instructions": "If routed to specialist, is the required skill supported by concrete experience? Otherwise return false.", "criteria": { "true": "Application cites relevant training, credits, or submitted evidence.", "false": "Evidence is absent, merely asserted, or the specialist branch is inactive." } }, "clarification_blocker": { "type": "score", "instructions": "If routed to clarify, grade how strongly the missing information blocks review; otherwise select level 0.", "criteria": [ "0: Clarify branch is inactive.", "1: A minor detail is missing.", "2: A role-critical requirement is unclear.", "3: Multiple essentials are missing or contradictory." ] } } DECISION RULES (in code, not in the model) - choice/score: if confidence < 0.6 show a "needs review" badge instead of acting. - noul: >= 0.75 = yes, <= 0.25 = no, otherwise "review". - score: normalise with score / (levels - 1) before combining with weights. - Missing or malformed answers go to review. Show safe HTTP status and message in the UI. Retry only 429/5xx, at most twice with increasing delay; never retry 400/401/402/403/404 and never invent results. - If the product needs prose (a summary, a message), use Lovable AI for that text only; Jev makes the decisions. UI a paste box that shows the chosen option, the full probability bar chart, and a 'needs review' badge when confidence is low. Include 2 sample inputs as one-click chips so the demo works instantly. Tailwind + shadcn, editorial look, footer: "Built during the Creative AI & Quantum Hackathon organised by StreetKode Fam during Indian Krump Festival 14". NO database, NO auth, NO extra pages, NO tests. BEFORE YOU FINISH - Run the app and test both sample inputs through the real server function. - Confirm the browser receives no API key and no fabricated fallback result. - Confirm Choice/Score confidence and Noul probability drive the stated review rules. - Confirm loading, success, review, empty-input, and service-error states are readable on mobile. Reference only if needed: https://docs.typesafe.ai/api and https://docs.typesafe.ai/primitives --- ## 0002. Rehearsal Note Switchboard ID: dance-rehearsal-note-switchboard Sub-discipline: Rehearsal direction Jev pattern: Choice Router — pick one of a set Pitch: A choreographer pastes a rehearsal note with phrase context, and Jev routes it to timing, spatial, expressive, or production work. Why typed decisions: A fixed handler and branch flags turn mixed rehearsal notes into actionable task queues. TAM: Est. 500k global rehearsal leaders SAM: Est. 60k shared-note workflow users SOM: Target 300 pilot users ### Self-contained Lovable mega-prompt Build "Rehearsal Note Switchboard" as a ONE-SHOT Lovable build (~5 credits, no follow-ups). Single-page TanStack Start app, one route, cut scope ruthlessly. THIS PROMPT IS SELF-CONTAINED Do not assume the participant knows Jev or has read any other page. TypeSafe Jev is a decision model, not a text generator. It receives `state` plus a map of typed `questions` and returns JSON that code can use directly. Use Choice to select exactly one defined option, Noul for a yes/no probability from 0 to 1, and Score for a probability-weighted position across ordered levels. Keep rules, thresholds, arithmetic, and actions in code. Use a generative model only if the product separately needs prose. CONCEPT A choreographer pastes a rehearsal note with phrase context, and Jev routes it to timing, spatial, expressive, or production work. Discipline: Dance & Choreography (Rehearsal direction). Jev pattern: Choice Router (pick one of a set) — a Jev `choice` question that routes each incoming item to one handler/category from a fixed option map, plus branch-specific questions asked in the same request. Why typed decisions: A fixed handler and branch flags turn mixed rehearsal notes into actionable task queues. ENGINE: TypeSafe Jev (typed decisions, not text) - Before writing code, ask the participant for `TYPESAFE_API_KEY` with Lovable's secure secret form. Never ask them to paste it into chat, never prefix it with `VITE_`, and never expose it to browser code. - Put the callable server function in `src/lib/jev.functions.ts`; do not import a server-only module from UI code. - Validate the user's input before the handler and read `process.env['TYPESAFE_API_KEY']` inside the handler. - From the server, call: POST https://api.typesafe.ai/v1/systemone Authorization: Bearer , Content-Type: application/json body: { "model": "jev-latest", "state": , "questions": QUESTIONS } - Ask all questions in ONE request (they run in parallel and cannot see each other). - Read Choice from `answers[id].choice`, `.probabilities`, and `.confidence`; Score from `.score`, `.probabilities`, `.legend`, and `.confidence`; Noul from `.noul` only (it has no separate confidence). SERVER IMPLEMENTATION (adapt the input name and result mapping to this concept) ```ts import { createServerFn } from "@tanstack/react-start"; import { z } from "zod"; const Input = z.object({ text: z.string().trim().min(1).max(20000) }); export const decide = createServerFn({ method: "POST" }) .inputValidator((input: unknown) => Input.parse(input)) .handler(async ({ data }) => { const apiKey = process.env['TYPESAFE_API_KEY']; if (!apiKey) return { ok: false as const, status: 500, message: "TYPESAFE_API_KEY is not configured." }; const requestBody = { model: "jev-latest", state: { text: data.text }, questions: QUESTIONS, }; let response: Response | undefined; for (let attempt = 0; attempt < 3; attempt += 1) { response = await fetch("https://api.typesafe.ai/v1/systemone", { method: "POST", headers: { Authorization: `Bearer ${apiKey}`, "Content-Type": "application/json" }, body: JSON.stringify(requestBody), }); if (response.ok || (response.status !== 429 && response.status < 500)) break; if (attempt < 2) await new Promise((resolve) => setTimeout(resolve, 750 * 2 ** attempt)); } if (!response) return { ok: false as const, status: 503, message: "Jev did not respond." }; if (!response.ok) { const message = (await response.text()).slice(0, 500) || `Jev request failed (${response.status}).`; return { ok: false as const, status: response.status, message }; } const result = await response.json(); return { ok: true as const, answers: result.answers }; }); ``` In the page component, call `decide` with `useServerFn`, preserve the participant's input while loading or on error, disable duplicate submissions, and render the returned typed values rather than parsing prose. QUESTIONS (start here, refine wording if needed) { "note_handler": { "type": "choice", "instructions": "Which handler owns the primary correction?", "criteria": { "timing": "Counts, tempo, synchronization, or cue timing.", "spacing": "Positions, pathways, formations, or distance.", "expression": "Intention, dynamics, focus, or performance quality.", "production": "Lighting, sound playback, costume, or technical logistics." } }, "shared_timing_fix": { "type": "noul", "instructions": "For timing notes, does the correction require multiple dancers to rehearse together? Otherwise return false.", "criteria": { "true": "The correction depends on shared synchronization or a handoff.", "false": "It is an individual correction or the timing branch is inactive." } }, "spacing_scope": { "type": "score", "instructions": "For spacing notes, grade the reach of the formation change; otherwise select level 0.", "criteria": [ "0: Spacing branch is inactive.", "1: One dancer's placement changes.", "2: A pair or subgroup must adjust.", "3: The full formation or traffic pattern must change." ] } } DECISION RULES (in code, not in the model) - choice/score: if confidence < 0.6 show a "needs review" badge instead of acting. - noul: >= 0.75 = yes, <= 0.25 = no, otherwise "review". - score: normalise with score / (levels - 1) before combining with weights. - Missing or malformed answers go to review. Show safe HTTP status and message in the UI. Retry only 429/5xx, at most twice with increasing delay; never retry 400/401/402/403/404 and never invent results. - If the product needs prose (a summary, a message), use Lovable AI for that text only; Jev makes the decisions. UI a paste box that shows the chosen option, the full probability bar chart, and a 'needs review' badge when confidence is low. Include 2 sample inputs as one-click chips so the demo works instantly. Tailwind + shadcn, editorial look, footer: "Built during the Creative AI & Quantum Hackathon organised by StreetKode Fam during Indian Krump Festival 14". NO database, NO auth, NO extra pages, NO tests. BEFORE YOU FINISH - Run the app and test both sample inputs through the real server function. - Confirm the browser receives no API key and no fabricated fallback result. - Confirm Choice/Score confidence and Noul probability drive the stated review rules. - Confirm loading, success, review, empty-input, and service-error states are readable on mobile. Reference only if needed: https://docs.typesafe.ai/api and https://docs.typesafe.ai/primitives --- ## 0003. Phrase Study Shelves ID: dance-phrase-study-shelves Sub-discipline: Choreographic composition Jev pattern: Choice Router — pick one of a set Pitch: A choreographer pastes a movement phrase description, and Jev files it by compositional engine while grading relevant study properties. Why typed decisions: Typed shelves make a phrase library filterable and reproducible instead of filling it with inconsistent descriptive tags. TAM: Est. 300k global choreographic creators SAM: Est. 35k digital phrase-library users SOM: Target 200 pilot users ### Self-contained Lovable mega-prompt Build "Phrase Study Shelves" as a ONE-SHOT Lovable build (~5 credits, no follow-ups). Single-page TanStack Start app, one route, cut scope ruthlessly. THIS PROMPT IS SELF-CONTAINED Do not assume the participant knows Jev or has read any other page. TypeSafe Jev is a decision model, not a text generator. It receives `state` plus a map of typed `questions` and returns JSON that code can use directly. Use Choice to select exactly one defined option, Noul for a yes/no probability from 0 to 1, and Score for a probability-weighted position across ordered levels. Keep rules, thresholds, arithmetic, and actions in code. Use a generative model only if the product separately needs prose. CONCEPT A choreographer pastes a movement phrase description, and Jev files it by compositional engine while grading relevant study properties. Discipline: Dance & Choreography (Choreographic composition). Jev pattern: Choice Router (pick one of a set) — a Jev `choice` question that routes each incoming item to one handler/category from a fixed option map, plus branch-specific questions asked in the same request. Why typed decisions: Typed shelves make a phrase library filterable and reproducible instead of filling it with inconsistent descriptive tags. ENGINE: TypeSafe Jev (typed decisions, not text) - Before writing code, ask the participant for `TYPESAFE_API_KEY` with Lovable's secure secret form. Never ask them to paste it into chat, never prefix it with `VITE_`, and never expose it to browser code. - Put the callable server function in `src/lib/jev.functions.ts`; do not import a server-only module from UI code. - Validate the user's input before the handler and read `process.env['TYPESAFE_API_KEY']` inside the handler. - From the server, call: POST https://api.typesafe.ai/v1/systemone Authorization: Bearer , Content-Type: application/json body: { "model": "jev-latest", "state": , "questions": QUESTIONS } - Ask all questions in ONE request (they run in parallel and cannot see each other). - Read Choice from `answers[id].choice`, `.probabilities`, and `.confidence`; Score from `.score`, `.probabilities`, `.legend`, and `.confidence`; Noul from `.noul` only (it has no separate confidence). SERVER IMPLEMENTATION (adapt the input name and result mapping to this concept) ```ts import { createServerFn } from "@tanstack/react-start"; import { z } from "zod"; const Input = z.object({ text: z.string().trim().min(1).max(20000) }); export const decide = createServerFn({ method: "POST" }) .inputValidator((input: unknown) => Input.parse(input)) .handler(async ({ data }) => { const apiKey = process.env['TYPESAFE_API_KEY']; if (!apiKey) return { ok: false as const, status: 500, message: "TYPESAFE_API_KEY is not configured." }; const requestBody = { model: "jev-latest", state: { text: data.text }, questions: QUESTIONS, }; let response: Response | undefined; for (let attempt = 0; attempt < 3; attempt += 1) { response = await fetch("https://api.typesafe.ai/v1/systemone", { method: "POST", headers: { Authorization: `Bearer ${apiKey}`, "Content-Type": "application/json" }, body: JSON.stringify(requestBody), }); if (response.ok || (response.status !== 429 && response.status < 500)) break; if (attempt < 2) await new Promise((resolve) => setTimeout(resolve, 750 * 2 ** attempt)); } if (!response) return { ok: false as const, status: 503, message: "Jev did not respond." }; if (!response.ok) { const message = (await response.text()).slice(0, 500) || `Jev request failed (${response.status}).`; return { ok: false as const, status: response.status, message }; } const result = await response.json(); return { ok: true as const, answers: result.answers }; }); ``` In the page component, call `decide` with `useServerFn`, preserve the participant's input while loading or on error, disable duplicate submissions, and render the returned typed values rather than parsing prose. QUESTIONS (start here, refine wording if needed) { "phrase_shelf": { "type": "choice", "instructions": "Which compositional engine most strongly organizes the phrase?", "criteria": { "repetition": "Recurring motifs and their variation organize the phrase.", "travel": "Pathways and displacement organize the phrase.", "partnering": "Relationships and exchanges between bodies organize the phrase.", "stillness": "Pauses, held shapes, and restrained transitions organize the phrase." } }, "partner_contact": { "type": "noul", "instructions": "For partnering phrases, is physical contact structurally necessary? Otherwise return false.", "criteria": { "true": "The described exchange depends on touch, support, or shared weight.", "false": "The relationship can remain noncontact or the partnering branch is inactive." } }, "variation_depth": { "type": "score", "instructions": "For repetition phrases, grade the extent of motif transformation; otherwise select level 0.", "criteria": [ "0: Repetition branch is inactive.", "1: Nearly exact repetition.", "2: One clear parameter changes.", "3: Multiple parameters transform while the motif remains recognizable." ] } } DECISION RULES (in code, not in the model) - choice/score: if confidence < 0.6 show a "needs review" badge instead of acting. - noul: >= 0.75 = yes, <= 0.25 = no, otherwise "review". - score: normalise with score / (levels - 1) before combining with weights. - Missing or malformed answers go to review. Show safe HTTP status and message in the UI. Retry only 429/5xx, at most twice with increasing delay; never retry 400/401/402/403/404 and never invent results. - If the product needs prose (a summary, a message), use Lovable AI for that text only; Jev makes the decisions. UI a paste box that shows the chosen option, the full probability bar chart, and a 'needs review' badge when confidence is low. Include 2 sample inputs as one-click chips so the demo works instantly. Tailwind + shadcn, editorial look, footer: "Built during the Creative AI & Quantum Hackathon organised by StreetKode Fam during Indian Krump Festival 14". NO database, NO auth, NO extra pages, NO tests. BEFORE YOU FINISH - Run the app and test both sample inputs through the real server function. - Confirm the browser receives no API key and no fabricated fallback result. - Confirm Choice/Score confidence and Noul probability drive the stated review rules. - Confirm loading, success, review, empty-input, and service-error states are readable on mobile. Reference only if needed: https://docs.typesafe.ai/api and https://docs.typesafe.ai/primitives --- ## 0004. Class Readiness Gates ID: dance-class-readiness-gates Sub-discipline: Dance pedagogy Jev pattern: Choice Router — pick one of a set Pitch: A teacher pastes a learner's self-reported experience and class prerequisites, and Jev routes the enrollment to a suitable review path. Why typed decisions: Typed readiness routes support consistent enrollment handling without inventing an authoritative assessment of physical ability. TAM: Est. 1m global dance educators SAM: Est. 100k online enrollment users SOM: Target 400 pilot users ### Self-contained Lovable mega-prompt Build "Class Readiness Gates" as a ONE-SHOT Lovable build (~5 credits, no follow-ups). Single-page TanStack Start app, one route, cut scope ruthlessly. THIS PROMPT IS SELF-CONTAINED Do not assume the participant knows Jev or has read any other page. TypeSafe Jev is a decision model, not a text generator. It receives `state` plus a map of typed `questions` and returns JSON that code can use directly. Use Choice to select exactly one defined option, Noul for a yes/no probability from 0 to 1, and Score for a probability-weighted position across ordered levels. Keep rules, thresholds, arithmetic, and actions in code. Use a generative model only if the product separately needs prose. CONCEPT A teacher pastes a learner's self-reported experience and class prerequisites, and Jev routes the enrollment to a suitable review path. Discipline: Dance & Choreography (Dance pedagogy). Jev pattern: Choice Router (pick one of a set) — a Jev `choice` question that routes each incoming item to one handler/category from a fixed option map, plus branch-specific questions asked in the same request. Why typed decisions: Typed readiness routes support consistent enrollment handling without inventing an authoritative assessment of physical ability. ENGINE: TypeSafe Jev (typed decisions, not text) - Before writing code, ask the participant for `TYPESAFE_API_KEY` with Lovable's secure secret form. Never ask them to paste it into chat, never prefix it with `VITE_`, and never expose it to browser code. - Put the callable server function in `src/lib/jev.functions.ts`; do not import a server-only module from UI code. - Validate the user's input before the handler and read `process.env['TYPESAFE_API_KEY']` inside the handler. - From the server, call: POST https://api.typesafe.ai/v1/systemone Authorization: Bearer , Content-Type: application/json body: { "model": "jev-latest", "state": , "questions": QUESTIONS } - Ask all questions in ONE request (they run in parallel and cannot see each other). - Read Choice from `answers[id].choice`, `.probabilities`, and `.confidence`; Score from `.score`, `.probabilities`, `.legend`, and `.confidence`; Noul from `.noul` only (it has no separate confidence). SERVER IMPLEMENTATION (adapt the input name and result mapping to this concept) ```ts import { createServerFn } from "@tanstack/react-start"; import { z } from "zod"; const Input = z.object({ text: z.string().trim().min(1).max(20000) }); export const decide = createServerFn({ method: "POST" }) .inputValidator((input: unknown) => Input.parse(input)) .handler(async ({ data }) => { const apiKey = process.env['TYPESAFE_API_KEY']; if (!apiKey) return { ok: false as const, status: 500, message: "TYPESAFE_API_KEY is not configured." }; const requestBody = { model: "jev-latest", state: { text: data.text }, questions: QUESTIONS, }; let response: Response | undefined; for (let attempt = 0; attempt < 3; attempt += 1) { response = await fetch("https://api.typesafe.ai/v1/systemone", { method: "POST", headers: { Authorization: `Bearer ${apiKey}`, "Content-Type": "application/json" }, body: JSON.stringify(requestBody), }); if (response.ok || (response.status !== 429 && response.status < 500)) break; if (attempt < 2) await new Promise((resolve) => setTimeout(resolve, 750 * 2 ** attempt)); } if (!response) return { ok: false as const, status: 503, message: "Jev did not respond." }; if (!response.ok) { const message = (await response.text()).slice(0, 500) || `Jev request failed (${response.status}).`; return { ok: false as const, status: response.status, message }; } const result = await response.json(); return { ok: true as const, answers: result.answers }; }); ``` In the page component, call `decide` with `useServerFn`, preserve the participant's input while loading or on error, disable duplicate submissions, and render the returned typed values rather than parsing prose. QUESTIONS (start here, refine wording if needed) { "enrollment_route": { "type": "choice", "instructions": "Which enrollment handler fits the supplied evidence?", "criteria": { "standard": "Reported experience meets the stated prerequisites.", "foundation": "A foundational prerequisite is explicitly not yet met.", "teacher_review": "Evidence is ambiguous or prerequisites require observation.", "access_planning": "A stated access request needs planning with the teacher." } }, "foundation_available": { "type": "noul", "instructions": "For foundation routing, does the provided course catalog contain a matching prerequisite class? Otherwise return false.", "criteria": { "true": "An available class explicitly addresses the missing prerequisite.", "false": "No matching class is supplied or the foundation branch is inactive." } }, "access_coordination": { "type": "score", "instructions": "For access planning, grade the coordination described, not the learner's capability; otherwise select level 0.", "criteria": [ "0: Access-planning branch is inactive.", "1: One stated classroom adjustment.", "2: Several adjustments or a teacher check-in.", "3: Coordination with venue staff or additional support personnel." ] } } DECISION RULES (in code, not in the model) - choice/score: if confidence < 0.6 show a "needs review" badge instead of acting. - noul: >= 0.75 = yes, <= 0.25 = no, otherwise "review". - score: normalise with score / (levels - 1) before combining with weights. - Missing or malformed answers go to review. Show safe HTTP status and message in the UI. Retry only 429/5xx, at most twice with increasing delay; never retry 400/401/402/403/404 and never invent results. - If the product needs prose (a summary, a message), use Lovable AI for that text only; Jev makes the decisions. UI a paste box that shows the chosen option, the full probability bar chart, and a 'needs review' badge when confidence is low. Include 2 sample inputs as one-click chips so the demo works instantly. Tailwind + shadcn, editorial look, footer: "Built during the Creative AI & Quantum Hackathon organised by StreetKode Fam during Indian Krump Festival 14". NO database, NO auth, NO extra pages, NO tests. BEFORE YOU FINISH - Run the app and test both sample inputs through the real server function. - Confirm the browser receives no API key and no fabricated fallback result. - Confirm Choice/Score confidence and Noul probability drive the stated review rules. - Confirm loading, success, review, empty-input, and service-error states are readable on mobile. Reference only if needed: https://docs.typesafe.ai/api and https://docs.typesafe.ai/primitives --- ## 0005. Formation Traffic Desk ID: dance-formation-traffic-desk Sub-discipline: Ensemble staging Jev pattern: Choice Router — pick one of a set Pitch: A movement director pastes a formation transition in counts and coordinates, and Jev routes it to the most relevant traffic-review handler. Why typed decisions: Typed review categories connect semantic movement descriptions to staging overlays without implying a certified safety check. TAM: Est. 200k global ensemble staging users SAM: Est. 25k digitally planned ensemble users SOM: Target 120 pilot users ### Self-contained Lovable mega-prompt Build "Formation Traffic Desk" as a ONE-SHOT Lovable build (~5 credits, no follow-ups). Single-page TanStack Start app, one route, cut scope ruthlessly. THIS PROMPT IS SELF-CONTAINED Do not assume the participant knows Jev or has read any other page. TypeSafe Jev is a decision model, not a text generator. It receives `state` plus a map of typed `questions` and returns JSON that code can use directly. Use Choice to select exactly one defined option, Noul for a yes/no probability from 0 to 1, and Score for a probability-weighted position across ordered levels. Keep rules, thresholds, arithmetic, and actions in code. Use a generative model only if the product separately needs prose. CONCEPT A movement director pastes a formation transition in counts and coordinates, and Jev routes it to the most relevant traffic-review handler. Discipline: Dance & Choreography (Ensemble staging). Jev pattern: Choice Router (pick one of a set) — a Jev `choice` question that routes each incoming item to one handler/category from a fixed option map, plus branch-specific questions asked in the same request. Why typed decisions: Typed review categories connect semantic movement descriptions to staging overlays without implying a certified safety check. ENGINE: TypeSafe Jev (typed decisions, not text) - Before writing code, ask the participant for `TYPESAFE_API_KEY` with Lovable's secure secret form. Never ask them to paste it into chat, never prefix it with `VITE_`, and never expose it to browser code. - Put the callable server function in `src/lib/jev.functions.ts`; do not import a server-only module from UI code. - Validate the user's input before the handler and read `process.env['TYPESAFE_API_KEY']` inside the handler. - From the server, call: POST https://api.typesafe.ai/v1/systemone Authorization: Bearer , Content-Type: application/json body: { "model": "jev-latest", "state": , "questions": QUESTIONS } - Ask all questions in ONE request (they run in parallel and cannot see each other). - Read Choice from `answers[id].choice`, `.probabilities`, and `.confidence`; Score from `.score`, `.probabilities`, `.legend`, and `.confidence`; Noul from `.noul` only (it has no separate confidence). SERVER IMPLEMENTATION (adapt the input name and result mapping to this concept) ```ts import { createServerFn } from "@tanstack/react-start"; import { z } from "zod"; const Input = z.object({ text: z.string().trim().min(1).max(20000) }); export const decide = createServerFn({ method: "POST" }) .inputValidator((input: unknown) => Input.parse(input)) .handler(async ({ data }) => { const apiKey = process.env['TYPESAFE_API_KEY']; if (!apiKey) return { ok: false as const, status: 500, message: "TYPESAFE_API_KEY is not configured." }; const requestBody = { model: "jev-latest", state: { text: data.text }, questions: QUESTIONS, }; let response: Response | undefined; for (let attempt = 0; attempt < 3; attempt += 1) { response = await fetch("https://api.typesafe.ai/v1/systemone", { method: "POST", headers: { Authorization: `Bearer ${apiKey}`, "Content-Type": "application/json" }, body: JSON.stringify(requestBody), }); if (response.ok || (response.status !== 429 && response.status < 500)) break; if (attempt < 2) await new Promise((resolve) => setTimeout(resolve, 750 * 2 ** attempt)); } if (!response) return { ok: false as const, status: 503, message: "Jev did not respond." }; if (!response.ok) { const message = (await response.text()).slice(0, 500) || `Jev request failed (${response.status}).`; return { ok: false as const, status: response.status, message }; } const result = await response.json(); return { ok: true as const, answers: result.answers }; }); ``` In the page component, call `decide` with `useServerFn`, preserve the participant's input while loading or on error, disable duplicate submissions, and render the returned typed values rather than parsing prose. QUESTIONS (start here, refine wording if needed) { "traffic_handler": { "type": "choice", "instructions": "Which issue most needs human staging review?", "criteria": { "crossing": "Pathways intersect within overlapping counts.", "bottleneck": "Several dancers converge on a narrow passage.", "sightline": "A featured action is obscured by the arrangement.", "routine": "No specific traffic concern is apparent in the supplied description." } }, "crossing_same_count": { "type": "noul", "instructions": "For crossing routing, do intersecting paths explicitly share a count window? Otherwise return false.", "criteria": { "true": "The supplied timing places dancers at the intersection together.", "false": "Timing is separated, unspecified, or the crossing branch is inactive." } }, "bottleneck_extent": { "type": "score", "instructions": "For bottleneck routing, grade the described congestion; otherwise select level 0.", "criteria": [ "0: Bottleneck branch is inactive.", "1: A pair shares a constrained passage.", "2: A subgroup converges with limited clearance.", "3: Multiple groups converge or an entrance and exit compete." ] } } DECISION RULES (in code, not in the model) - choice/score: if confidence < 0.6 show a "needs review" badge instead of acting. - noul: >= 0.75 = yes, <= 0.25 = no, otherwise "review". - score: normalise with score / (levels - 1) before combining with weights. - Missing or malformed answers go to review. Show safe HTTP status and message in the UI. Retry only 429/5xx, at most twice with increasing delay; never retry 400/401/402/403/404 and never invent results. - If the product needs prose (a summary, a message), use Lovable AI for that text only; Jev makes the decisions. UI a paste box that shows the chosen option, the full probability bar chart, and a 'needs review' badge when confidence is low. Include 2 sample inputs as one-click chips so the demo works instantly. Tailwind + shadcn, editorial look, footer: "Built during the Creative AI & Quantum Hackathon organised by StreetKode Fam during Indian Krump Festival 14". NO database, NO auth, NO extra pages, NO tests. BEFORE YOU FINISH - Run the app and test both sample inputs through the real server function. - Confirm the browser receives no API key and no fabricated fallback result. - Confirm Choice/Score confidence and Noul probability drive the stated review rules. - Confirm loading, success, review, empty-input, and service-error states are readable on mobile. Reference only if needed: https://docs.typesafe.ai/api and https://docs.typesafe.ai/primitives --- ## 0006. Transition Stitch Bench ID: dance-transition-stitch-bench Sub-discipline: Phrase sequencing Jev pattern: Choice Router — pick one of a set Pitch: A choreographer pastes two adjacent phrase descriptions, and Jev routes their join to the editing technique most likely to resolve the mismatch. Why typed decisions: A typed editing route opens the appropriate timeline tool rather than producing a vague transition suggestion. TAM: Est. 300k global choreographic creators SAM: Est. 40k digital sequencing users SOM: Target 200 pilot users ### Self-contained Lovable mega-prompt Build "Transition Stitch Bench" as a ONE-SHOT Lovable build (~5 credits, no follow-ups). Single-page TanStack Start app, one route, cut scope ruthlessly. THIS PROMPT IS SELF-CONTAINED Do not assume the participant knows Jev or has read any other page. TypeSafe Jev is a decision model, not a text generator. It receives `state` plus a map of typed `questions` and returns JSON that code can use directly. Use Choice to select exactly one defined option, Noul for a yes/no probability from 0 to 1, and Score for a probability-weighted position across ordered levels. Keep rules, thresholds, arithmetic, and actions in code. Use a generative model only if the product separately needs prose. CONCEPT A choreographer pastes two adjacent phrase descriptions, and Jev routes their join to the editing technique most likely to resolve the mismatch. Discipline: Dance & Choreography (Phrase sequencing). Jev pattern: Choice Router (pick one of a set) — a Jev `choice` question that routes each incoming item to one handler/category from a fixed option map, plus branch-specific questions asked in the same request. Why typed decisions: A typed editing route opens the appropriate timeline tool rather than producing a vague transition suggestion. ENGINE: TypeSafe Jev (typed decisions, not text) - Before writing code, ask the participant for `TYPESAFE_API_KEY` with Lovable's secure secret form. Never ask them to paste it into chat, never prefix it with `VITE_`, and never expose it to browser code. - Put the callable server function in `src/lib/jev.functions.ts`; do not import a server-only module from UI code. - Validate the user's input before the handler and read `process.env['TYPESAFE_API_KEY']` inside the handler. - From the server, call: POST https://api.typesafe.ai/v1/systemone Authorization: Bearer , Content-Type: application/json body: { "model": "jev-latest", "state": , "questions": QUESTIONS } - Ask all questions in ONE request (they run in parallel and cannot see each other). - Read Choice from `answers[id].choice`, `.probabilities`, and `.confidence`; Score from `.score`, `.probabilities`, `.legend`, and `.confidence`; Noul from `.noul` only (it has no separate confidence). SERVER IMPLEMENTATION (adapt the input name and result mapping to this concept) ```ts import { createServerFn } from "@tanstack/react-start"; import { z } from "zod"; const Input = z.object({ text: z.string().trim().min(1).max(20000) }); export const decide = createServerFn({ method: "POST" }) .inputValidator((input: unknown) => Input.parse(input)) .handler(async ({ data }) => { const apiKey = process.env['TYPESAFE_API_KEY']; if (!apiKey) return { ok: false as const, status: 500, message: "TYPESAFE_API_KEY is not configured." }; const requestBody = { model: "jev-latest", state: { text: data.text }, questions: QUESTIONS, }; let response: Response | undefined; for (let attempt = 0; attempt < 3; attempt += 1) { response = await fetch("https://api.typesafe.ai/v1/systemone", { method: "POST", headers: { Authorization: `Bearer ${apiKey}`, "Content-Type": "application/json" }, body: JSON.stringify(requestBody), }); if (response.ok || (response.status !== 429 && response.status < 500)) break; if (attempt < 2) await new Promise((resolve) => setTimeout(resolve, 750 * 2 ** attempt)); } if (!response) return { ok: false as const, status: 503, message: "Jev did not respond." }; if (!response.ok) { const message = (await response.text()).slice(0, 500) || `Jev request failed (${response.status}).`; return { ok: false as const, status: response.status, message }; } const result = await response.json(); return { ok: true as const, answers: result.answers }; }); ``` In the page component, call `decide` with `useServerFn`, preserve the participant's input while loading or on error, disable duplicate submissions, and render the returned typed values rather than parsing prose. QUESTIONS (start here, refine wording if needed) { "join_handler": { "type": "choice", "instructions": "Which editing handler best addresses the dominant join problem?", "criteria": { "pathway": "Ending and starting locations or facings do not connect.", "rhythm": "Count structure or momentum conflicts at the join.", "dynamic": "Movement qualities shift without the intended continuity.", "preserve": "The join already supports the stated intention." } }, "pathway_reset": { "type": "noul", "instructions": "For pathway routing, is an explicit repositioning interval needed in the supplied sequence? Otherwise return false.", "criteria": { "true": "The stated endpoints cannot connect within the existing movement description.", "false": "A connection is already described or the pathway branch is inactive." } }, "rhythm_disruption": { "type": "score", "instructions": "For rhythm routing, grade the size of the count mismatch; otherwise select level 0.", "criteria": [ "0: Rhythm branch is inactive.", "1: A local accent or pickup conflicts.", "2: A full count group needs adjustment.", "3: Phrase lengths or meters fundamentally conflict." ] } } DECISION RULES (in code, not in the model) - choice/score: if confidence < 0.6 show a "needs review" badge instead of acting. - noul: >= 0.75 = yes, <= 0.25 = no, otherwise "review". - score: normalise with score / (levels - 1) before combining with weights. - Missing or malformed answers go to review. Show safe HTTP status and message in the UI. Retry only 429/5xx, at most twice with increasing delay; never retry 400/401/402/403/404 and never invent results. - If the product needs prose (a summary, a message), use Lovable AI for that text only; Jev makes the decisions. UI a paste box that shows the chosen option, the full probability bar chart, and a 'needs review' badge when confidence is low. Include 2 sample inputs as one-click chips so the demo works instantly. Tailwind + shadcn, editorial look, footer: "Built during the Creative AI & Quantum Hackathon organised by StreetKode Fam during Indian Krump Festival 14". NO database, NO auth, NO extra pages, NO tests. BEFORE YOU FINISH - Run the app and test both sample inputs through the real server function. - Confirm the browser receives no API key and no fabricated fallback result. - Confirm Choice/Score confidence and Noul probability drive the stated review rules. - Confirm loading, success, review, empty-input, and service-error states are readable on mobile. Reference only if needed: https://docs.typesafe.ai/api and https://docs.typesafe.ai/primitives --- ## 0007. Music Fit Lanes ID: dance-music-fit-lanes Sub-discipline: Music-led choreography Jev pattern: Choice Router — pick one of a set Pitch: A choreographer pastes track structure notes and a dance brief, and Jev routes the track to a preset choreographic use lane. Why typed decisions: Typed fit lanes drive playlist organization without generating unsupported claims about audio that was never supplied. TAM: Est. 600k global dance music selectors SAM: Est. 70k annotated-playlist users SOM: Target 250 pilot users ### Self-contained Lovable mega-prompt Build "Music Fit Lanes" as a ONE-SHOT Lovable build (~5 credits, no follow-ups). Single-page TanStack Start app, one route, cut scope ruthlessly. THIS PROMPT IS SELF-CONTAINED Do not assume the participant knows Jev or has read any other page. TypeSafe Jev is a decision model, not a text generator. It receives `state` plus a map of typed `questions` and returns JSON that code can use directly. Use Choice to select exactly one defined option, Noul for a yes/no probability from 0 to 1, and Score for a probability-weighted position across ordered levels. Keep rules, thresholds, arithmetic, and actions in code. Use a generative model only if the product separately needs prose. CONCEPT A choreographer pastes track structure notes and a dance brief, and Jev routes the track to a preset choreographic use lane. Discipline: Dance & Choreography (Music-led choreography). Jev pattern: Choice Router (pick one of a set) — a Jev `choice` question that routes each incoming item to one handler/category from a fixed option map, plus branch-specific questions asked in the same request. Why typed decisions: Typed fit lanes drive playlist organization without generating unsupported claims about audio that was never supplied. ENGINE: TypeSafe Jev (typed decisions, not text) - Before writing code, ask the participant for `TYPESAFE_API_KEY` with Lovable's secure secret form. Never ask them to paste it into chat, never prefix it with `VITE_`, and never expose it to browser code. - Put the callable server function in `src/lib/jev.functions.ts`; do not import a server-only module from UI code. - Validate the user's input before the handler and read `process.env['TYPESAFE_API_KEY']` inside the handler. - From the server, call: POST https://api.typesafe.ai/v1/systemone Authorization: Bearer , Content-Type: application/json body: { "model": "jev-latest", "state": , "questions": QUESTIONS } - Ask all questions in ONE request (they run in parallel and cannot see each other). - Read Choice from `answers[id].choice`, `.probabilities`, and `.confidence`; Score from `.score`, `.probabilities`, `.legend`, and `.confidence`; Noul from `.noul` only (it has no separate confidence). SERVER IMPLEMENTATION (adapt the input name and result mapping to this concept) ```ts import { createServerFn } from "@tanstack/react-start"; import { z } from "zod"; const Input = z.object({ text: z.string().trim().min(1).max(20000) }); export const decide = createServerFn({ method: "POST" }) .inputValidator((input: unknown) => Input.parse(input)) .handler(async ({ data }) => { const apiKey = process.env['TYPESAFE_API_KEY']; if (!apiKey) return { ok: false as const, status: 500, message: "TYPESAFE_API_KEY is not configured." }; const requestBody = { model: "jev-latest", state: { text: data.text }, questions: QUESTIONS, }; let response: Response | undefined; for (let attempt = 0; attempt < 3; attempt += 1) { response = await fetch("https://api.typesafe.ai/v1/systemone", { method: "POST", headers: { Authorization: `Bearer ${apiKey}`, "Content-Type": "application/json" }, body: JSON.stringify(requestBody), }); if (response.ok || (response.status !== 429 && response.status < 500)) break; if (attempt < 2) await new Promise((resolve) => setTimeout(resolve, 750 * 2 ** attempt)); } if (!response) return { ok: false as const, status: 503, message: "Jev did not respond." }; if (!response.ok) { const message = (await response.text()).slice(0, 500) || `Jev request failed (${response.status}).`; return { ok: false as const, status: response.status, message }; } const result = await response.json(); return { ok: true as const, answers: result.answers }; }); ``` In the page component, call `decide` with `useServerFn`, preserve the participant's input while loading or on error, disable duplicate submissions, and render the returned typed values rather than parsing prose. QUESTIONS (start here, refine wording if needed) { "music_lane": { "type": "choice", "instructions": "Based only on the annotations, which choreographic use best fits this track?", "criteria": { "unison": "Stable pulse and clear phrasing support synchronized ensemble work.", "improvisation": "Open structure or evolving texture supports exploratory movement.", "narrative": "Distinct sections and emotional changes support a dramatic arc.", "review": "Annotations are insufficient or conflict with the brief." } }, "unison_count_anchor": { "type": "noul", "instructions": "For unison routing, are recurring count anchors explicitly documented? Otherwise return false.", "criteria": { "true": "Annotations identify repeatable downbeats, accents, or phrase boundaries.", "false": "Anchors are not documented or the unison branch is inactive." } }, "narrative_contrast": { "type": "score", "instructions": "For narrative routing, grade the documented sectional contrast; otherwise select level 0.", "criteria": [ "0: Narrative branch is inactive.", "1: One modest change in mood or energy.", "2: Several clearly differentiated sections.", "3: A pronounced buildup, reversal, or resolution across sections." ] } } DECISION RULES (in code, not in the model) - choice/score: if confidence < 0.6 show a "needs review" badge instead of acting. - noul: >= 0.75 = yes, <= 0.25 = no, otherwise "review". - score: normalise with score / (levels - 1) before combining with weights. - Missing or malformed answers go to review. Show safe HTTP status and message in the UI. Retry only 429/5xx, at most twice with increasing delay; never retry 400/401/402/403/404 and never invent results. - If the product needs prose (a summary, a message), use Lovable AI for that text only; Jev makes the decisions. UI a paste box that shows the chosen option, the full probability bar chart, and a 'needs review' badge when confidence is low. Include 2 sample inputs as one-click chips so the demo works instantly. Tailwind + shadcn, editorial look, footer: "Built during the Creative AI & Quantum Hackathon organised by StreetKode Fam during Indian Krump Festival 14". NO database, NO auth, NO extra pages, NO tests. BEFORE YOU FINISH - Run the app and test both sample inputs through the real server function. - Confirm the browser receives no API key and no fabricated fallback result. - Confirm Choice/Score confidence and Noul probability drive the stated review rules. - Confirm loading, success, review, empty-input, and service-error states are readable on mobile. Reference only if needed: https://docs.typesafe.ai/api and https://docs.typesafe.ai/primitives --- ## 0008. Costume Motion Checks ID: dance-costume-motion-checks Sub-discipline: Dance costume coordination Jev pattern: Choice Router — pick one of a set Pitch: A movement director pastes costume specifications and choreography notes, and Jev routes the combination to a targeted fitting check. Why typed decisions: Typed fitting queues assign the right test without mistaking a generated opinion for evidence from an actual movement fitting. TAM: Est. 150k global dance costume collaborators SAM: Est. 18k digitally coordinated production users SOM: Target 100 pilot users ### Self-contained Lovable mega-prompt Build "Costume Motion Checks" as a ONE-SHOT Lovable build (~5 credits, no follow-ups). Single-page TanStack Start app, one route, cut scope ruthlessly. THIS PROMPT IS SELF-CONTAINED Do not assume the participant knows Jev or has read any other page. TypeSafe Jev is a decision model, not a text generator. It receives `state` plus a map of typed `questions` and returns JSON that code can use directly. Use Choice to select exactly one defined option, Noul for a yes/no probability from 0 to 1, and Score for a probability-weighted position across ordered levels. Keep rules, thresholds, arithmetic, and actions in code. Use a generative model only if the product separately needs prose. CONCEPT A movement director pastes costume specifications and choreography notes, and Jev routes the combination to a targeted fitting check. Discipline: Dance & Choreography (Dance costume coordination). Jev pattern: Choice Router (pick one of a set) — a Jev `choice` question that routes each incoming item to one handler/category from a fixed option map, plus branch-specific questions asked in the same request. Why typed decisions: Typed fitting queues assign the right test without mistaking a generated opinion for evidence from an actual movement fitting. ENGINE: TypeSafe Jev (typed decisions, not text) - Before writing code, ask the participant for `TYPESAFE_API_KEY` with Lovable's secure secret form. Never ask them to paste it into chat, never prefix it with `VITE_`, and never expose it to browser code. - Put the callable server function in `src/lib/jev.functions.ts`; do not import a server-only module from UI code. - Validate the user's input before the handler and read `process.env['TYPESAFE_API_KEY']` inside the handler. - From the server, call: POST https://api.typesafe.ai/v1/systemone Authorization: Bearer , Content-Type: application/json body: { "model": "jev-latest", "state": , "questions": QUESTIONS } - Ask all questions in ONE request (they run in parallel and cannot see each other). - Read Choice from `answers[id].choice`, `.probabilities`, and `.confidence`; Score from `.score`, `.probabilities`, `.legend`, and `.confidence`; Noul from `.noul` only (it has no separate confidence). SERVER IMPLEMENTATION (adapt the input name and result mapping to this concept) ```ts import { createServerFn } from "@tanstack/react-start"; import { z } from "zod"; const Input = z.object({ text: z.string().trim().min(1).max(20000) }); export const decide = createServerFn({ method: "POST" }) .inputValidator((input: unknown) => Input.parse(input)) .handler(async ({ data }) => { const apiKey = process.env['TYPESAFE_API_KEY']; if (!apiKey) return { ok: false as const, status: 500, message: "TYPESAFE_API_KEY is not configured." }; const requestBody = { model: "jev-latest", state: { text: data.text }, questions: QUESTIONS, }; let response: Response | undefined; for (let attempt = 0; attempt < 3; attempt += 1) { response = await fetch("https://api.typesafe.ai/v1/systemone", { method: "POST", headers: { Authorization: `Bearer ${apiKey}`, "Content-Type": "application/json" }, body: JSON.stringify(requestBody), }); if (response.ok || (response.status !== 429 && response.status < 500)) break; if (attempt < 2) await new Promise((resolve) => setTimeout(resolve, 750 * 2 ** attempt)); } if (!response) return { ok: false as const, status: 503, message: "Jev did not respond." }; if (!response.ok) { const message = (await response.text()).slice(0, 500) || `Jev request failed (${response.status}).`; return { ok: false as const, status: response.status, message }; } const result = await response.json(); return { ok: true as const, answers: result.answers }; }); ``` In the page component, call `decide` with `useServerFn`, preserve the participant's input while loading or on error, disable duplicate submissions, and render the returned typed values rather than parsing prose. QUESTIONS (start here, refine wording if needed) { "fitting_handler": { "type": "choice", "instructions": "Which fitting check is most strongly indicated?", "criteria": { "range": "Garment construction may limit required movement range.", "entanglement": "Loose elements may interact with partners, props, or floorwork.", "quick_change": "The change sequence or fastenings need operational testing.", "routine": "No specialized check is indicated beyond a normal movement fitting." } }, "partner_entanglement": { "type": "noul", "instructions": "For entanglement routing, does a loose costume element meet a described partner-contact area? Otherwise return false.", "criteria": { "true": "The supplied descriptions place loose material at a contact or support point.", "false": "No such overlap is described or the entanglement branch is inactive." } }, "change_complexity": { "type": "score", "instructions": "For quick-change routing, grade operational complexity; otherwise select level 0.", "criteria": [ "0: Quick-change branch is inactive.", "1: One straightforward garment change.", "2: Several fastenings or a helper-dependent change.", "3: Multiple layers, shared helpers, or overlapping change demands." ] } } DECISION RULES (in code, not in the model) - choice/score: if confidence < 0.6 show a "needs review" badge instead of acting. - noul: >= 0.75 = yes, <= 0.25 = no, otherwise "review". - score: normalise with score / (levels - 1) before combining with weights. - Missing or malformed answers go to review. Show safe HTTP status and message in the UI. Retry only 429/5xx, at most twice with increasing delay; never retry 400/401/402/403/404 and never invent results. - If the product needs prose (a summary, a message), use Lovable AI for that text only; Jev makes the decisions. UI a paste box that shows the chosen option, the full probability bar chart, and a 'needs review' badge when confidence is low. Include 2 sample inputs as one-click chips so the demo works instantly. Tailwind + shadcn, editorial look, footer: "Built during the Creative AI & Quantum Hackathon organised by StreetKode Fam during Indian Krump Festival 14". NO database, NO auth, NO extra pages, NO tests. BEFORE YOU FINISH - Run the app and test both sample inputs through the real server function. - Confirm the browser receives no API key and no fabricated fallback result. - Confirm Choice/Score confidence and Noul probability drive the stated review rules. - Confirm loading, success, review, empty-input, and service-error states are readable on mobile. Reference only if needed: https://docs.typesafe.ai/api and https://docs.typesafe.ai/primitives --- ## 0009. Prop Handoff Board ID: dance-prop-handoff-board Sub-discipline: Prop choreography Jev pattern: Choice Router — pick one of a set Pitch: A choreographer pastes a prop interaction cue, and Jev routes it to preset, transfer, movement-integration, or strike handling. Why typed decisions: Typed handlers let a prop board assign ownership and expose handoff dependencies automatically. TAM: Est. 180k global movement production users SAM: Est. 20k prop-intensive production users SOM: Target 100 pilot users ### Self-contained Lovable mega-prompt Build "Prop Handoff Board" as a ONE-SHOT Lovable build (~5 credits, no follow-ups). Single-page TanStack Start app, one route, cut scope ruthlessly. THIS PROMPT IS SELF-CONTAINED Do not assume the participant knows Jev or has read any other page. TypeSafe Jev is a decision model, not a text generator. It receives `state` plus a map of typed `questions` and returns JSON that code can use directly. Use Choice to select exactly one defined option, Noul for a yes/no probability from 0 to 1, and Score for a probability-weighted position across ordered levels. Keep rules, thresholds, arithmetic, and actions in code. Use a generative model only if the product separately needs prose. CONCEPT A choreographer pastes a prop interaction cue, and Jev routes it to preset, transfer, movement-integration, or strike handling. Discipline: Dance & Choreography (Prop choreography). Jev pattern: Choice Router (pick one of a set) — a Jev `choice` question that routes each incoming item to one handler/category from a fixed option map, plus branch-specific questions asked in the same request. Why typed decisions: Typed handlers let a prop board assign ownership and expose handoff dependencies automatically. ENGINE: TypeSafe Jev (typed decisions, not text) - Before writing code, ask the participant for `TYPESAFE_API_KEY` with Lovable's secure secret form. Never ask them to paste it into chat, never prefix it with `VITE_`, and never expose it to browser code. - Put the callable server function in `src/lib/jev.functions.ts`; do not import a server-only module from UI code. - Validate the user's input before the handler and read `process.env['TYPESAFE_API_KEY']` inside the handler. - From the server, call: POST https://api.typesafe.ai/v1/systemone Authorization: Bearer , Content-Type: application/json body: { "model": "jev-latest", "state": , "questions": QUESTIONS } - Ask all questions in ONE request (they run in parallel and cannot see each other). - Read Choice from `answers[id].choice`, `.probabilities`, and `.confidence`; Score from `.score`, `.probabilities`, `.legend`, and `.confidence`; Noul from `.noul` only (it has no separate confidence). SERVER IMPLEMENTATION (adapt the input name and result mapping to this concept) ```ts import { createServerFn } from "@tanstack/react-start"; import { z } from "zod"; const Input = z.object({ text: z.string().trim().min(1).max(20000) }); export const decide = createServerFn({ method: "POST" }) .inputValidator((input: unknown) => Input.parse(input)) .handler(async ({ data }) => { const apiKey = process.env['TYPESAFE_API_KEY']; if (!apiKey) return { ok: false as const, status: 500, message: "TYPESAFE_API_KEY is not configured." }; const requestBody = { model: "jev-latest", state: { text: data.text }, questions: QUESTIONS, }; let response: Response | undefined; for (let attempt = 0; attempt < 3; attempt += 1) { response = await fetch("https://api.typesafe.ai/v1/systemone", { method: "POST", headers: { Authorization: `Bearer ${apiKey}`, "Content-Type": "application/json" }, body: JSON.stringify(requestBody), }); if (response.ok || (response.status !== 429 && response.status < 500)) break; if (attempt < 2) await new Promise((resolve) => setTimeout(resolve, 750 * 2 ** attempt)); } if (!response) return { ok: false as const, status: 503, message: "Jev did not respond." }; if (!response.ok) { const message = (await response.text()).slice(0, 500) || `Jev request failed (${response.status}).`; return { ok: false as const, status: response.status, message }; } const result = await response.json(); return { ok: true as const, answers: result.answers }; }); ``` In the page component, call `decide` with `useServerFn`, preserve the participant's input while loading or on error, disable duplicate submissions, and render the returned typed values rather than parsing prose. QUESTIONS (start here, refine wording if needed) { "prop_handler": { "type": "choice", "instructions": "Which operational handler owns the cue's primary action?", "criteria": { "preset": "Place or prepare a prop before performer use.", "transfer": "Pass a prop between performers or crew.", "integration": "Manipulate a prop as part of the movement phrase.", "strike": "Remove or return a prop after use." } }, "transfer_owner_clear": { "type": "noul", "instructions": "For transfer routing, are both giving and receiving roles explicitly assigned? Otherwise return false.", "criteria": { "true": "Both sides of the handoff are unambiguously identified.", "false": "At least one role is unclear or the transfer branch is inactive." } }, "integration_dependency": { "type": "score", "instructions": "For integration routing, grade how much the phrase depends on the prop; otherwise select level 0.", "criteria": [ "0: Integration branch is inactive.", "1: Prop is decorative and movement remains intact without it.", "2: Several actions depend on the prop.", "3: The phrase's timing or structure depends throughout on prop manipulation." ] } } DECISION RULES (in code, not in the model) - choice/score: if confidence < 0.6 show a "needs review" badge instead of acting. - noul: >= 0.75 = yes, <= 0.25 = no, otherwise "review". - score: normalise with score / (levels - 1) before combining with weights. - Missing or malformed answers go to review. Show safe HTTP status and message in the UI. Retry only 429/5xx, at most twice with increasing delay; never retry 400/401/402/403/404 and never invent results. - If the product needs prose (a summary, a message), use Lovable AI for that text only; Jev makes the decisions. UI a paste box that shows the chosen option, the full probability bar chart, and a 'needs review' badge when confidence is low. Include 2 sample inputs as one-click chips so the demo works instantly. Tailwind + shadcn, editorial look, footer: "Built during the Creative AI & Quantum Hackathon organised by StreetKode Fam during Indian Krump Festival 14". NO database, NO auth, NO extra pages, NO tests. BEFORE YOU FINISH - Run the app and test both sample inputs through the real server function. - Confirm the browser receives no API key and no fabricated fallback result. - Confirm Choice/Score confidence and Noul probability drive the stated review rules. - Confirm loading, success, review, empty-input, and service-error states are readable on mobile. Reference only if needed: https://docs.typesafe.ai/api and https://docs.typesafe.ai/primitives --- ## 0010. Access Adaptation Desk ID: dance-access-adaptation-desk Sub-discipline: Inclusive dance teaching Jev pattern: Choice Router — pick one of a set Pitch: A teacher pastes an exercise and a participant's stated access request, and Jev routes it to the relevant adaptation-planning workflow. Why typed decisions: Typed routes separate access tasks while preserving participant choice and avoiding inferred diagnoses. TAM: Est. 1m global dance educators SAM: Est. 80k access-planning workflow users SOM: Target 250 pilot users ### Self-contained Lovable mega-prompt Build "Access Adaptation Desk" as a ONE-SHOT Lovable build (~5 credits, no follow-ups). Single-page TanStack Start app, one route, cut scope ruthlessly. THIS PROMPT IS SELF-CONTAINED Do not assume the participant knows Jev or has read any other page. TypeSafe Jev is a decision model, not a text generator. It receives `state` plus a map of typed `questions` and returns JSON that code can use directly. Use Choice to select exactly one defined option, Noul for a yes/no probability from 0 to 1, and Score for a probability-weighted position across ordered levels. Keep rules, thresholds, arithmetic, and actions in code. Use a generative model only if the product separately needs prose. CONCEPT A teacher pastes an exercise and a participant's stated access request, and Jev routes it to the relevant adaptation-planning workflow. Discipline: Dance & Choreography (Inclusive dance teaching). Jev pattern: Choice Router (pick one of a set) — a Jev `choice` question that routes each incoming item to one handler/category from a fixed option map, plus branch-specific questions asked in the same request. Why typed decisions: Typed routes separate access tasks while preserving participant choice and avoiding inferred diagnoses. ENGINE: TypeSafe Jev (typed decisions, not text) - Before writing code, ask the participant for `TYPESAFE_API_KEY` with Lovable's secure secret form. Never ask them to paste it into chat, never prefix it with `VITE_`, and never expose it to browser code. - Put the callable server function in `src/lib/jev.functions.ts`; do not import a server-only module from UI code. - Validate the user's input before the handler and read `process.env['TYPESAFE_API_KEY']` inside the handler. - From the server, call: POST https://api.typesafe.ai/v1/systemone Authorization: Bearer , Content-Type: application/json body: { "model": "jev-latest", "state": , "questions": QUESTIONS } - Ask all questions in ONE request (they run in parallel and cannot see each other). - Read Choice from `answers[id].choice`, `.probabilities`, and `.confidence`; Score from `.score`, `.probabilities`, `.legend`, and `.confidence`; Noul from `.noul` only (it has no separate confidence). SERVER IMPLEMENTATION (adapt the input name and result mapping to this concept) ```ts import { createServerFn } from "@tanstack/react-start"; import { z } from "zod"; const Input = z.object({ text: z.string().trim().min(1).max(20000) }); export const decide = createServerFn({ method: "POST" }) .inputValidator((input: unknown) => Input.parse(input)) .handler(async ({ data }) => { const apiKey = process.env['TYPESAFE_API_KEY']; if (!apiKey) return { ok: false as const, status: 500, message: "TYPESAFE_API_KEY is not configured." }; const requestBody = { model: "jev-latest", state: { text: data.text }, questions: QUESTIONS, }; let response: Response | undefined; for (let attempt = 0; attempt < 3; attempt += 1) { response = await fetch("https://api.typesafe.ai/v1/systemone", { method: "POST", headers: { Authorization: `Bearer ${apiKey}`, "Content-Type": "application/json" }, body: JSON.stringify(requestBody), }); if (response.ok || (response.status !== 429 && response.status < 500)) break; if (attempt < 2) await new Promise((resolve) => setTimeout(resolve, 750 * 2 ** attempt)); } if (!response) return { ok: false as const, status: 503, message: "Jev did not respond." }; if (!response.ok) { const message = (await response.text()).slice(0, 500) || `Jev request failed (${response.status}).`; return { ok: false as const, status: response.status, message }; } const result = await response.json(); return { ok: true as const, answers: result.answers }; }); ``` In the page component, call `decide` with `useServerFn`, preserve the participant's input while loading or on error, disable duplicate submissions, and render the returned typed values rather than parsing prose. QUESTIONS (start here, refine wording if needed) { "adaptation_handler": { "type": "choice", "instructions": "Which planning handler best matches the explicit request?", "criteria": { "cue_format": "Change how instructions or counts are presented.", "movement_variant": "Offer an alternative movement pathway or position.", "environment": "Adjust room layout, sensory conditions, or equipment.", "participant_check": "The request needs clarification before planning." } }, "cue_resource_ready": { "type": "noul", "instructions": "For cue-format routing, is the requested format supported by listed resources? Otherwise return false.", "criteria": { "true": "The necessary visual, written, tactile-by-consent, or other requested resource is listed.", "false": "Support is unavailable, unspecified, or the cue-format branch is inactive." } }, "variant_objective_fit": { "type": "score", "instructions": "For movement-variant routing, grade how clearly the stated learning objective permits alternatives; otherwise select level 0.", "criteria": [ "0: Movement-variant branch is inactive.", "1: Objective is unclear or tied to one prescribed form.", "2: Some intended qualities can be preserved through alternatives.", "3: Objective explicitly supports multiple movement forms." ] } } DECISION RULES (in code, not in the model) - choice/score: if confidence < 0.6 show a "needs review" badge instead of acting. - noul: >= 0.75 = yes, <= 0.25 = no, otherwise "review". - score: normalise with score / (levels - 1) before combining with weights. - Missing or malformed answers go to review. Show safe HTTP status and message in the UI. Retry only 429/5xx, at most twice with increasing delay; never retry 400/401/402/403/404 and never invent results. - If the product needs prose (a summary, a message), use Lovable AI for that text only; Jev makes the decisions. UI a paste box that shows the chosen option, the full probability bar chart, and a 'needs review' badge when confidence is low. Include 2 sample inputs as one-click chips so the demo works instantly. Tailwind + shadcn, editorial look, footer: "Built during the Creative AI & Quantum Hackathon organised by StreetKode Fam during Indian Krump Festival 14". NO database, NO auth, NO extra pages, NO tests. BEFORE YOU FINISH - Run the app and test both sample inputs through the real server function. - Confirm the browser receives no API key and no fabricated fallback result. - Confirm Choice/Score confidence and Noul probability drive the stated review rules. - Confirm loading, success, review, empty-input, and service-error states are readable on mobile. Reference only if needed: https://docs.typesafe.ai/api and https://docs.typesafe.ai/primitives --- ## 0011. Improvisation Constraint Deck ID: dance-improvisation-constraint-deck Sub-discipline: Dance improvisation Jev pattern: Choice Router — pick one of a set Pitch: A facilitator pastes an existing improvisation exercise, and Jev routes it into a constraint deck with exercise-specific readiness checks. Why typed decisions: Typed deck membership makes existing exercises searchable without generating new prompts as the product. TAM: Est. 250k global improvisation facilitators SAM: Est. 30k digital exercise-library users SOM: Target 180 pilot users ### Self-contained Lovable mega-prompt Build "Improvisation Constraint Deck" as a ONE-SHOT Lovable build (~5 credits, no follow-ups). Single-page TanStack Start app, one route, cut scope ruthlessly. THIS PROMPT IS SELF-CONTAINED Do not assume the participant knows Jev or has read any other page. TypeSafe Jev is a decision model, not a text generator. It receives `state` plus a map of typed `questions` and returns JSON that code can use directly. Use Choice to select exactly one defined option, Noul for a yes/no probability from 0 to 1, and Score for a probability-weighted position across ordered levels. Keep rules, thresholds, arithmetic, and actions in code. Use a generative model only if the product separately needs prose. CONCEPT A facilitator pastes an existing improvisation exercise, and Jev routes it into a constraint deck with exercise-specific readiness checks. Discipline: Dance & Choreography (Dance improvisation). Jev pattern: Choice Router (pick one of a set) — a Jev `choice` question that routes each incoming item to one handler/category from a fixed option map, plus branch-specific questions asked in the same request. Why typed decisions: Typed deck membership makes existing exercises searchable without generating new prompts as the product. ENGINE: TypeSafe Jev (typed decisions, not text) - Before writing code, ask the participant for `TYPESAFE_API_KEY` with Lovable's secure secret form. Never ask them to paste it into chat, never prefix it with `VITE_`, and never expose it to browser code. - Put the callable server function in `src/lib/jev.functions.ts`; do not import a server-only module from UI code. - Validate the user's input before the handler and read `process.env['TYPESAFE_API_KEY']` inside the handler. - From the server, call: POST https://api.typesafe.ai/v1/systemone Authorization: Bearer , Content-Type: application/json body: { "model": "jev-latest", "state": , "questions": QUESTIONS } - Ask all questions in ONE request (they run in parallel and cannot see each other). - Read Choice from `answers[id].choice`, `.probabilities`, and `.confidence`; Score from `.score`, `.probabilities`, `.legend`, and `.confidence`; Noul from `.noul` only (it has no separate confidence). SERVER IMPLEMENTATION (adapt the input name and result mapping to this concept) ```ts import { createServerFn } from "@tanstack/react-start"; import { z } from "zod"; const Input = z.object({ text: z.string().trim().min(1).max(20000) }); export const decide = createServerFn({ method: "POST" }) .inputValidator((input: unknown) => Input.parse(input)) .handler(async ({ data }) => { const apiKey = process.env['TYPESAFE_API_KEY']; if (!apiKey) return { ok: false as const, status: 500, message: "TYPESAFE_API_KEY is not configured." }; const requestBody = { model: "jev-latest", state: { text: data.text }, questions: QUESTIONS, }; let response: Response | undefined; for (let attempt = 0; attempt < 3; attempt += 1) { response = await fetch("https://api.typesafe.ai/v1/systemone", { method: "POST", headers: { Authorization: `Bearer ${apiKey}`, "Content-Type": "application/json" }, body: JSON.stringify(requestBody), }); if (response.ok || (response.status !== 429 && response.status < 500)) break; if (attempt < 2) await new Promise((resolve) => setTimeout(resolve, 750 * 2 ** attempt)); } if (!response) return { ok: false as const, status: 503, message: "Jev did not respond." }; if (!response.ok) { const message = (await response.text()).slice(0, 500) || `Jev request failed (${response.status}).`; return { ok: false as const, status: response.status, message }; } const result = await response.json(); return { ok: true as const, answers: result.answers }; }); ``` In the page component, call `decide` with `useServerFn`, preserve the participant's input while loading or on error, disable duplicate submissions, and render the returned typed values rather than parsing prose. QUESTIONS (start here, refine wording if needed) { "constraint_deck": { "type": "choice", "instructions": "Which constraint primarily drives the exercise?", "criteria": { "spatial": "Boundaries, levels, directions, or pathways.", "temporal": "Duration, rhythm, pauses, or speed.", "relational": "Attention, response, contact, or group interaction.", "imagistic": "An image, sensation, or metaphor drives exploration." } }, "relational_consent": { "type": "noul", "instructions": "For relational exercises, does the text explicitly include consent and an opt-out for physical contact when contact is required? Otherwise return false.", "criteria": { "true": "Required contact includes explicit consent and an alternative.", "false": "Those provisions are absent, contact is not required, or the relational branch is inactive." } }, "temporal_layering": { "type": "score", "instructions": "For temporal exercises, grade simultaneous timing constraints; otherwise select level 0.", "criteria": [ "0: Temporal branch is inactive.", "1: One timing rule.", "2: Two interacting timing rules.", "3: Multiple independently changing timing rules." ] } } DECISION RULES (in code, not in the model) - choice/score: if confidence < 0.6 show a "needs review" badge instead of acting. - noul: >= 0.75 = yes, <= 0.25 = no, otherwise "review". - score: normalise with score / (levels - 1) before combining with weights. - Missing or malformed answers go to review. Show safe HTTP status and message in the UI. Retry only 429/5xx, at most twice with increasing delay; never retry 400/401/402/403/404 and never invent results. - If the product needs prose (a summary, a message), use Lovable AI for that text only; Jev makes the decisions. UI a paste box that shows the chosen option, the full probability bar chart, and a 'needs review' badge when confidence is low. Include 2 sample inputs as one-click chips so the demo works instantly. Tailwind + shadcn, editorial look, footer: "Built during the Creative AI & Quantum Hackathon organised by StreetKode Fam during Indian Krump Festival 14". NO database, NO auth, NO extra pages, NO tests. BEFORE YOU FINISH - Run the app and test both sample inputs through the real server function. - Confirm the browser receives no API key and no fabricated fallback result. - Confirm Choice/Score confidence and Noul probability drive the stated review rules. - Confirm loading, success, review, empty-input, and service-error states are readable on mobile. Reference only if needed: https://docs.typesafe.ai/api and https://docs.typesafe.ai/primitives --- ## 0012. Dance Film Coverage ID: dance-dance-film-coverage Sub-discipline: Screendance direction Jev pattern: Choice Router — pick one of a set Pitch: A screendance director pastes a movement beat and shot constraints, and Jev routes it to a fixed coverage plan category. Why typed decisions: Typed coverage decisions create sortable shot-board cards instead of unstructured cinematography advice. TAM: Est. 120k global dance-film creators SAM: Est. 15k structured shot-planning users SOM: Target 100 pilot users ### Self-contained Lovable mega-prompt Build "Dance Film Coverage" as a ONE-SHOT Lovable build (~5 credits, no follow-ups). Single-page TanStack Start app, one route, cut scope ruthlessly. THIS PROMPT IS SELF-CONTAINED Do not assume the participant knows Jev or has read any other page. TypeSafe Jev is a decision model, not a text generator. It receives `state` plus a map of typed `questions` and returns JSON that code can use directly. Use Choice to select exactly one defined option, Noul for a yes/no probability from 0 to 1, and Score for a probability-weighted position across ordered levels. Keep rules, thresholds, arithmetic, and actions in code. Use a generative model only if the product separately needs prose. CONCEPT A screendance director pastes a movement beat and shot constraints, and Jev routes it to a fixed coverage plan category. Discipline: Dance & Choreography (Screendance direction). Jev pattern: Choice Router (pick one of a set) — a Jev `choice` question that routes each incoming item to one handler/category from a fixed option map, plus branch-specific questions asked in the same request. Why typed decisions: Typed coverage decisions create sortable shot-board cards instead of unstructured cinematography advice. ENGINE: TypeSafe Jev (typed decisions, not text) - Before writing code, ask the participant for `TYPESAFE_API_KEY` with Lovable's secure secret form. Never ask them to paste it into chat, never prefix it with `VITE_`, and never expose it to browser code. - Put the callable server function in `src/lib/jev.functions.ts`; do not import a server-only module from UI code. - Validate the user's input before the handler and read `process.env['TYPESAFE_API_KEY']` inside the handler. - From the server, call: POST https://api.typesafe.ai/v1/systemone Authorization: Bearer , Content-Type: application/json body: { "model": "jev-latest", "state": , "questions": QUESTIONS } - Ask all questions in ONE request (they run in parallel and cannot see each other). - Read Choice from `answers[id].choice`, `.probabilities`, and `.confidence`; Score from `.score`, `.probabilities`, `.legend`, and `.confidence`; Noul from `.noul` only (it has no separate confidence). SERVER IMPLEMENTATION (adapt the input name and result mapping to this concept) ```ts import { createServerFn } from "@tanstack/react-start"; import { z } from "zod"; const Input = z.object({ text: z.string().trim().min(1).max(20000) }); export const decide = createServerFn({ method: "POST" }) .inputValidator((input: unknown) => Input.parse(input)) .handler(async ({ data }) => { const apiKey = process.env['TYPESAFE_API_KEY']; if (!apiKey) return { ok: false as const, status: 500, message: "TYPESAFE_API_KEY is not configured." }; const requestBody = { model: "jev-latest", state: { text: data.text }, questions: QUESTIONS, }; let response: Response | undefined; for (let attempt = 0; attempt < 3; attempt += 1) { response = await fetch("https://api.typesafe.ai/v1/systemone", { method: "POST", headers: { Authorization: `Bearer ${apiKey}`, "Content-Type": "application/json" }, body: JSON.stringify(requestBody), }); if (response.ok || (response.status !== 429 && response.status < 500)) break; if (attempt < 2) await new Promise((resolve) => setTimeout(resolve, 750 * 2 ** attempt)); } if (!response) return { ok: false as const, status: 503, message: "Jev did not respond." }; if (!response.ok) { const message = (await response.text()).slice(0, 500) || `Jev request failed (${response.status}).`; return { ok: false as const, status: response.status, message }; } const result = await response.json(); return { ok: true as const, answers: result.answers }; }); ``` In the page component, call `decide` with `useServerFn`, preserve the participant's input while loading or on error, disable duplicate submissions, and render the returned typed values rather than parsing prose. QUESTIONS (start here, refine wording if needed) { "coverage_handler": { "type": "choice", "instructions": "Which coverage category best preserves the stated movement priority?", "criteria": { "full_body": "Whole-body articulation and floor contact must remain legible.", "detail": "A localized gesture or contact point carries the beat.", "formation": "Spatial relationships across the ensemble carry the beat.", "traveling": "Following displacement is central to the beat." } }, "detail_context_needed": { "type": "noul", "instructions": "For detail routing, would the described gesture lose its stated meaning without an adjacent context shot? Otherwise return false.", "criteria": { "true": "The meaning depends on an off-frame body, partner, or spatial relationship.", "false": "The detail is self-contained or the detail branch is inactive." } }, "traveling_complexity": { "type": "score", "instructions": "For traveling routing, grade the described camera-follow coordination; otherwise select level 0.", "criteria": [ "0: Traveling branch is inactive.", "1: One predictable linear pathway.", "2: Direction changes or several subjects.", "3: Interweaving pathways, level changes, or moving obstructions." ] } } DECISION RULES (in code, not in the model) - choice/score: if confidence < 0.6 show a "needs review" badge instead of acting. - noul: >= 0.75 = yes, <= 0.25 = no, otherwise "review". - score: normalise with score / (levels - 1) before combining with weights. - Missing or malformed answers go to review. Show safe HTTP status and message in the UI. Retry only 429/5xx, at most twice with increasing delay; never retry 400/401/402/403/404 and never invent results. - If the product needs prose (a summary, a message), use Lovable AI for that text only; Jev makes the decisions. UI a paste box that shows the chosen option, the full probability bar chart, and a 'needs review' badge when confidence is low. Include 2 sample inputs as one-click chips so the demo works instantly. Tailwind + shadcn, editorial look, footer: "Built during the Creative AI & Quantum Hackathon organised by StreetKode Fam during Indian Krump Festival 14". NO database, NO auth, NO extra pages, NO tests. BEFORE YOU FINISH - Run the app and test both sample inputs through the real server function. - Confirm the browser receives no API key and no fabricated fallback result. - Confirm Choice/Score confidence and Noul probability drive the stated review rules. - Confirm loading, success, review, empty-input, and service-error states are readable on mobile. Reference only if needed: https://docs.typesafe.ai/api and https://docs.typesafe.ai/primitives --- ## 0013. Understudy Coverage Grid ID: dance-understudy-coverage-grid Sub-discipline: Repertory management Jev pattern: Choice Router — pick one of a set Pitch: A rehearsal director pastes a role's requirements and an understudy's rehearsal log, and Jev routes the pairing to a coverage-review lane. Why typed decisions: Typed coverage states power a dependable grid while leaving final readiness decisions to rehearsal staff. TAM: Est. 80k global repertory management users SAM: Est. 10k companies' digital coverage users SOM: Target 80 pilot users ### Self-contained Lovable mega-prompt Build "Understudy Coverage Grid" as a ONE-SHOT Lovable build (~5 credits, no follow-ups). Single-page TanStack Start app, one route, cut scope ruthlessly. THIS PROMPT IS SELF-CONTAINED Do not assume the participant knows Jev or has read any other page. TypeSafe Jev is a decision model, not a text generator. It receives `state` plus a map of typed `questions` and returns JSON that code can use directly. Use Choice to select exactly one defined option, Noul for a yes/no probability from 0 to 1, and Score for a probability-weighted position across ordered levels. Keep rules, thresholds, arithmetic, and actions in code. Use a generative model only if the product separately needs prose. CONCEPT A rehearsal director pastes a role's requirements and an understudy's rehearsal log, and Jev routes the pairing to a coverage-review lane. Discipline: Dance & Choreography (Repertory management). Jev pattern: Choice Router (pick one of a set) — a Jev `choice` question that routes each incoming item to one handler/category from a fixed option map, plus branch-specific questions asked in the same request. Why typed decisions: Typed coverage states power a dependable grid while leaving final readiness decisions to rehearsal staff. ENGINE: TypeSafe Jev (typed decisions, not text) - Before writing code, ask the participant for `TYPESAFE_API_KEY` with Lovable's secure secret form. Never ask them to paste it into chat, never prefix it with `VITE_`, and never expose it to browser code. - Put the callable server function in `src/lib/jev.functions.ts`; do not import a server-only module from UI code. - Validate the user's input before the handler and read `process.env['TYPESAFE_API_KEY']` inside the handler. - From the server, call: POST https://api.typesafe.ai/v1/systemone Authorization: Bearer , Content-Type: application/json body: { "model": "jev-latest", "state": , "questions": QUESTIONS } - Ask all questions in ONE request (they run in parallel and cannot see each other). - Read Choice from `answers[id].choice`, `.probabilities`, and `.confidence`; Score from `.score`, `.probabilities`, `.legend`, and `.confidence`; Noul from `.noul` only (it has no separate confidence). SERVER IMPLEMENTATION (adapt the input name and result mapping to this concept) ```ts import { createServerFn } from "@tanstack/react-start"; import { z } from "zod"; const Input = z.object({ text: z.string().trim().min(1).max(20000) }); export const decide = createServerFn({ method: "POST" }) .inputValidator((input: unknown) => Input.parse(input)) .handler(async ({ data }) => { const apiKey = process.env['TYPESAFE_API_KEY']; if (!apiKey) return { ok: false as const, status: 500, message: "TYPESAFE_API_KEY is not configured." }; const requestBody = { model: "jev-latest", state: { text: data.text }, questions: QUESTIONS, }; let response: Response | undefined; for (let attempt = 0; attempt < 3; attempt += 1) { response = await fetch("https://api.typesafe.ai/v1/systemone", { method: "POST", headers: { Authorization: `Bearer ${apiKey}`, "Content-Type": "application/json" }, body: JSON.stringify(requestBody), }); if (response.ok || (response.status !== 429 && response.status < 500)) break; if (attempt < 2) await new Promise((resolve) => setTimeout(resolve, 750 * 2 ** attempt)); } if (!response) return { ok: false as const, status: 503, message: "Jev did not respond." }; if (!response.ok) { const message = (await response.text()).slice(0, 500) || `Jev request failed (${response.status}).`; return { ok: false as const, status: response.status, message }; } const result = await response.json(); return { ok: true as const, answers: result.answers }; }); ``` In the page component, call `decide` with `useServerFn`, preserve the participant's input while loading or on error, disable duplicate submissions, and render the returned typed values rather than parsing prose. QUESTIONS (start here, refine wording if needed) { "coverage_lane": { "type": "choice", "instructions": "Which coverage workflow is supported by the recorded milestones?", "criteria": { "maintenance": "All required milestones have recorded approval.", "phrase_learning": "Required movement sections remain unlearned or unreviewed.", "partner_session": "Partner-specific rehearsal requirements remain outstanding.", "stage_run": "Movement milestones are complete but staging integration remains outstanding." } }, "partner_available": { "type": "noul", "instructions": "For partner-session routing, is the required partner available in a supplied rehearsal slot? Otherwise return false.", "criteria": { "true": "A listed slot explicitly includes the necessary partner.", "false": "No matching slot is supplied or the partner-session branch is inactive." } }, "learning_gap": { "type": "score", "instructions": "For phrase-learning routing, grade the recorded learning gap; otherwise select level 0.", "criteria": [ "0: Phrase-learning branch is inactive.", "1: One short section remains.", "2: Several sections remain.", "3: Most of the role remains unlearned or undocumented." ] } } DECISION RULES (in code, not in the model) - choice/score: if confidence < 0.6 show a "needs review" badge instead of acting. - noul: >= 0.75 = yes, <= 0.25 = no, otherwise "review". - score: normalise with score / (levels - 1) before combining with weights. - Missing or malformed answers go to review. Show safe HTTP status and message in the UI. Retry only 429/5xx, at most twice with increasing delay; never retry 400/401/402/403/404 and never invent results. - If the product needs prose (a summary, a message), use Lovable AI for that text only; Jev makes the decisions. UI a paste box that shows the chosen option, the full probability bar chart, and a 'needs review' badge when confidence is low. Include 2 sample inputs as one-click chips so the demo works instantly. Tailwind + shadcn, editorial look, footer: "Built during the Creative AI & Quantum Hackathon organised by StreetKode Fam during Indian Krump Festival 14". NO database, NO auth, NO extra pages, NO tests. BEFORE YOU FINISH - Run the app and test both sample inputs through the real server function. - Confirm the browser receives no API key and no fabricated fallback result. - Confirm Choice/Score confidence and Noul probability drive the stated review rules. - Confirm loading, success, review, empty-input, and service-error states are readable on mobile. Reference only if needed: https://docs.typesafe.ai/api and https://docs.typesafe.ai/primitives --- ## 0014. Competition Entry Lanes ID: dance-competition-entry-lanes Sub-discipline: Dance competition administration Jev pattern: Choice Router — pick one of a set Pitch: A teacher pastes a routine description and an event's category rules, and Jev routes the entry to a supported category or manual review. Why typed decisions: Typed category IDs can fill entry forms directly while surfacing ambiguous rule matches. TAM: Est. 300k global competition-entry users SAM: Est. 45k multi-event studio administrators SOM: Target 200 pilot users ### Self-contained Lovable mega-prompt Build "Competition Entry Lanes" as a ONE-SHOT Lovable build (~5 credits, no follow-ups). Single-page TanStack Start app, one route, cut scope ruthlessly. THIS PROMPT IS SELF-CONTAINED Do not assume the participant knows Jev or has read any other page. TypeSafe Jev is a decision model, not a text generator. It receives `state` plus a map of typed `questions` and returns JSON that code can use directly. Use Choice to select exactly one defined option, Noul for a yes/no probability from 0 to 1, and Score for a probability-weighted position across ordered levels. Keep rules, thresholds, arithmetic, and actions in code. Use a generative model only if the product separately needs prose. CONCEPT A teacher pastes a routine description and an event's category rules, and Jev routes the entry to a supported category or manual review. Discipline: Dance & Choreography (Dance competition administration). Jev pattern: Choice Router (pick one of a set) — a Jev `choice` question that routes each incoming item to one handler/category from a fixed option map, plus branch-specific questions asked in the same request. Why typed decisions: Typed category IDs can fill entry forms directly while surfacing ambiguous rule matches. ENGINE: TypeSafe Jev (typed decisions, not text) - Before writing code, ask the participant for `TYPESAFE_API_KEY` with Lovable's secure secret form. Never ask them to paste it into chat, never prefix it with `VITE_`, and never expose it to browser code. - Put the callable server function in `src/lib/jev.functions.ts`; do not import a server-only module from UI code. - Validate the user's input before the handler and read `process.env['TYPESAFE_API_KEY']` inside the handler. - From the server, call: POST https://api.typesafe.ai/v1/systemone Authorization: Bearer , Content-Type: application/json body: { "model": "jev-latest", "state": , "questions": QUESTIONS } - Ask all questions in ONE request (they run in parallel and cannot see each other). - Read Choice from `answers[id].choice`, `.probabilities`, and `.confidence`; Score from `.score`, `.probabilities`, `.legend`, and `.confidence`; Noul from `.noul` only (it has no separate confidence). SERVER IMPLEMENTATION (adapt the input name and result mapping to this concept) ```ts import { createServerFn } from "@tanstack/react-start"; import { z } from "zod"; const Input = z.object({ text: z.string().trim().min(1).max(20000) }); export const decide = createServerFn({ method: "POST" }) .inputValidator((input: unknown) => Input.parse(input)) .handler(async ({ data }) => { const apiKey = process.env['TYPESAFE_API_KEY']; if (!apiKey) return { ok: false as const, status: 500, message: "TYPESAFE_API_KEY is not configured." }; const requestBody = { model: "jev-latest", state: { text: data.text }, questions: QUESTIONS, }; let response: Response | undefined; for (let attempt = 0; attempt < 3; attempt += 1) { response = await fetch("https://api.typesafe.ai/v1/systemone", { method: "POST", headers: { Authorization: `Bearer ${apiKey}`, "Content-Type": "application/json" }, body: JSON.stringify(requestBody), }); if (response.ok || (response.status !== 429 && response.status < 500)) break; if (attempt < 2) await new Promise((resolve) => setTimeout(resolve, 750 * 2 ** attempt)); } if (!response) return { ok: false as const, status: 503, message: "Jev did not respond." }; if (!response.ok) { const message = (await response.text()).slice(0, 500) || `Jev request failed (${response.status}).`; return { ok: false as const, status: response.status, message }; } const result = await response.json(); return { ok: true as const, answers: result.answers }; }); ``` In the page component, call `decide` with `useServerFn`, preserve the participant's input while loading or on error, disable duplicate submissions, and render the returned typed values rather than parsing prose. QUESTIONS (start here, refine wording if needed) { "entry_category": { "type": "choice", "instructions": "Which supported event category fits the supplied rules, prioritizing manual review when ambiguous?", "criteria": { "solo": "Exactly one performer and all supplied solo rules are met.", "duet_trio": "Two or three performers and the supplied category rules are met.", "group": "The supplied group-size and entry rules are met.", "manual_review": "Rules are missing, conflicting, or do not support a clear category." } }, "group_size_exception": { "type": "noul", "instructions": "For group routing, does the entry rely on an explicitly allowed size exception? Otherwise return false.", "criteria": { "true": "An event-provided exception is necessary and applicable.", "false": "Standard size rules suffice or the group branch is inactive." } }, "review_complexity": { "type": "score", "instructions": "For manual review, grade the number and scope of unresolved rule issues; otherwise select level 0.", "criteria": [ "0: Manual-review branch is inactive.", "1: One missing field.", "2: One substantive rule ambiguity.", "3: Multiple ambiguities or contradictory rules." ] } } DECISION RULES (in code, not in the model) - choice/score: if confidence < 0.6 show a "needs review" badge instead of acting. - noul: >= 0.75 = yes, <= 0.25 = no, otherwise "review". - score: normalise with score / (levels - 1) before combining with weights. - Missing or malformed answers go to review. Show safe HTTP status and message in the UI. Retry only 429/5xx, at most twice with increasing delay; never retry 400/401/402/403/404 and never invent results. - If the product needs prose (a summary, a message), use Lovable AI for that text only; Jev makes the decisions. UI a paste box that shows the chosen option, the full probability bar chart, and a 'needs review' badge when confidence is low. Include 2 sample inputs as one-click chips so the demo works instantly. Tailwind + shadcn, editorial look, footer: "Built during the Creative AI & Quantum Hackathon organised by StreetKode Fam during Indian Krump Festival 14". NO database, NO auth, NO extra pages, NO tests. BEFORE YOU FINISH - Run the app and test both sample inputs through the real server function. - Confirm the browser receives no API key and no fabricated fallback result. - Confirm Choice/Score confidence and Noul probability drive the stated review rules. - Confirm loading, success, review, empty-input, and service-error states are readable on mobile. Reference only if needed: https://docs.typesafe.ai/api and https://docs.typesafe.ai/primitives --- ## 0015. Movement Intent Ledger ID: dance-movement-intent-ledger Sub-discipline: Dramatic movement direction Jev pattern: Choice Router — pick one of a set Pitch: A movement director pastes a scripted physical beat and scene context, and Jev routes the beat to a rehearsal objective category. Why typed decisions: Typed objectives make movement beats sortable across a script without replacing the director's interpretation with generated prose. TAM: Est. 200k global movement and theatre directors SAM: Est. 25k digital script-breakdown users SOM: Target 150 pilot users ### Self-contained Lovable mega-prompt Build "Movement Intent Ledger" as a ONE-SHOT Lovable build (~5 credits, no follow-ups). Single-page TanStack Start app, one route, cut scope ruthlessly. THIS PROMPT IS SELF-CONTAINED Do not assume the participant knows Jev or has read any other page. TypeSafe Jev is a decision model, not a text generator. It receives `state` plus a map of typed `questions` and returns JSON that code can use directly. Use Choice to select exactly one defined option, Noul for a yes/no probability from 0 to 1, and Score for a probability-weighted position across ordered levels. Keep rules, thresholds, arithmetic, and actions in code. Use a generative model only if the product separately needs prose. CONCEPT A movement director pastes a scripted physical beat and scene context, and Jev routes the beat to a rehearsal objective category. Discipline: Dance & Choreography (Dramatic movement direction). Jev pattern: Choice Router (pick one of a set) — a Jev `choice` question that routes each incoming item to one handler/category from a fixed option map, plus branch-specific questions asked in the same request. Why typed decisions: Typed objectives make movement beats sortable across a script without replacing the director's interpretation with generated prose. ENGINE: TypeSafe Jev (typed decisions, not text) - Before writing code, ask the participant for `TYPESAFE_API_KEY` with Lovable's secure secret form. Never ask them to paste it into chat, never prefix it with `VITE_`, and never expose it to browser code. - Put the callable server function in `src/lib/jev.functions.ts`; do not import a server-only module from UI code. - Validate the user's input before the handler and read `process.env['TYPESAFE_API_KEY']` inside the handler. - From the server, call: POST https://api.typesafe.ai/v1/systemone Authorization: Bearer , Content-Type: application/json body: { "model": "jev-latest", "state":