xiangenSATA generates psychometrically-structured SATA questions on demand across 15 formats, captures how each learner reasons through the interaction, and turns that behavior into diagnostic insight — as a plain Node/Express app with no build step.
A single-best-answer item collapses a learner's understanding to one bit. SATA items expose the boundary of what someone knows — which distractors tempt them, which correct options they miss.
Design → 15 SATA formats, each scored to reward calibrated partial knowledge rather than all-or-nothing.What a learner does while deciding — hesitating, revising, rating confidence — carries signal that a final score discards.
Design → Confidence-Weighted & Meta-Cognitive formats + behavior capture of selections, changes, hovers and pauses.Assessment should feed back into learning, not just grade it. The interaction trace is the raw material for that feedback.
Design → per-format analysis playbooks (15 docs) that turn behavior signals into diagnostic reads.Different response formats surface different cognitive skills: categorizing, ranking, eliminating, reasoning across time or context.
Design → formats grouped in 4 families: Core Selection, Enhanced Response, Adaptive & Progressive, Advanced.Every model call routes through src/services/llm.js — one dispatch over 9
providers: OpenAI, Azure, Anthropic, Google Gemini, Cohere, Mistral, DeepSeek, Groq, Ollama.
Generated questions are validated with Ajv against a per-type JSON Schema
(src/schemas/); types without an explicit file fall back to a shared base schema.
Express serves public/ as-authored — no bundler, no transpiler, no CDN. Each format
ships a template trio: .html + .css + .js.
State is stored as JSON objects in Google Cloud Storage
(src/config/storage/gcs.js) — there is no local database of record.
Interaction is recorded as xAPI-style statements; behaviorAnalyzer.js reduces raw
events into signals: selection sequence, change count, hover count & time, pauses.
Roles admin · teacher · student (src/middleware/auth.js), gated with
requireRole(). Sign-in is delegated to an external OAuth gateway.
ADMIN_EMAILS; new users default to student.
Pick type, domain & level; the gateway drafts a schema-valid SATA item.
The matching template trio renders an accessible, interactive UI.
Selections, hovers, revisions & pauses stream as xAPI events.
behaviorAnalyzer reduces raw events into structured signals.
The LLM turns behavior into feedback via per-format playbooks.
Because questions are LLM-generated and schema-validated, authoring a varied bank stops being the bottleneck — the mechanism shifts effort from writing items to choosing formats and reading results.
Because behavior — not just the final selection — is captured, feedback can speak to how a decision was made, which is what makes metacognitive and confidence formats meaningful.
Because there is one LLM gateway and no build step, the app is provider-portable and cheap to self-host — swapping models or embedding assessments is a config change, not a rewrite.
Because every interaction is an xAPI statement in GCS and formats are a synchronized set, the platform yields a structured, comparable trace across all 15 response types.