Meno
Inspiration
Our friend's younger brother has dyscalculia. Their family spent years dealing with "he's struggling with math," and no details about what was going on. The diagnosis came late. We wanted to build something that could have caught it earlier and shown the people around him exactly what was happening.
The name comes from Plato's Meno dialogue, where Socrates proves a boy with no education can arrive at a geometric proof if you ask the right questions. The knowledge was already there. It just needed the right questions.
What it does
The child plays math games themed around things like dinosaurs, basketballs, and flowers. Four game types, each targeting a specific cognitive signal from research literature (non-symbolic magnitude comparison, symbolic number comparison, rapid enumeration, and visuospatial working memory). Their responses log accuracy, response time, hesitation, and answer changes.
The parent sees a 3D voxelized brain representing the progress of the child. Each region maps to a knowledge graph category. Color encodes mastery on a continuous gradient from green (mastered) through amber (developing) to red (needs support). A trained classifier produces a risk score with per-feature contributions, and GPT-4o translates it into a natural language narrative. Parents can download a PDF screening report to bring to a specialist.
How we built it
Next.js 16, TypeScript, Tailwind v4, React Three Fiber. The brain is two voxel meshes (17k brain cells + 28k shell cells) with BVH-accelerated raycasting and custom GLSL shaders for the hover scatter and blast effects. Brain regions are assigned via Voronoi spatial allocation with per-category seed points.
The classifier is a logistic regression trained on a published 64-subject dyscalculia cohort (LOOCV AUC 0.81). We extract 12 behavioral features at runtime in TypeScript. Model weights are JSON, no Python at inference time.
$$\hat{y} = \sigma\left(\sum_{i=1}^{12} w_i \cdot \frac{x_i - \mu_i}{\sigma_i} + b\right)$$
Out-of-distribution inputs are caught via Mahalanobis distance against the training population.
$$D_M = \sqrt{(\mathbf{x} - \boldsymbol{\mu})^T \Sigma^{-1} (\mathbf{x} - \boldsymbol{\mu})}$$
GPT-4o generates the parent-facing narrative with zod-validated structured output. The system prompt forbids contradicting the classifier. If the LLM fails, a deterministic template fills in. The LLM never makes the screening decision.
Backend is Supabase (Postgres), six tables. The two platforms are segmented via Next.js route groups with separate React providers.
Challenges
The child engine and parent dashboard were built in parallel with different schemas (6 categories vs 8 domains, flat IDs vs compound, string misconceptions vs structured objects). Writing the adapter took longer than expected.
The classifier's training data has tight standard deviations on some features (symbolic comparison: mean 0.96, std 0.03). With 10 trials per task, 9/10 correct is already 2 sigma below the training mean. Tuning the demo personas to produce believable risk scores instead of saturating at 0% or 100% was finicky.
R3F's event system kept routing pointer events to the translucent shell instead of the brain inside it. The fix was adding the shell imperatively to the Three scene so R3F's reconciler never sees it.
Accomplishments
The brain sculpture tells a readable story. Seed a DD profile, and the frontal regions go red while the spatial regions stay green. That's not hardcoded. It falls out of the data. Responses route through the real assessment pipeline, mastery updates, Voronoi maps it to brain regions, and the color gradient does the rest.
The classifier works (AUC 0.81, LR outperformed XGBoost at \(n = 64\)). The PDF report is something a parent can actually hand to a specialist.
What we learned
Small \(n\) classifiers saturate fast. Mahalanobis OOD detection matters when your training and runtime populations differ. Separation of inference (classifier) and explanation (LLM) is worth the architecture cost. Route group segmentation forced us to define the data contract between platforms early, which made everything cleaner.
What's next
The demo targets dyscalculia, but the vision is broader. Every kid learns differently, and most of those patterns aren't always immediately visible. The teacher sees a grade. The parent sees a report card. How the individual learns isn't always in the picture.
We want Meno to make these patterns more visible. The architecture already supports four screening categories (dyscalculia, attention, working memory, and general learning difficulty). Next is adding game types for the other three, then expanding beyond math into reading, language processing, and executive function. The knowledge graph grows per child as the AI decomposes coarse nodes into finer concepts. Two kids with the same label might have completely different underlying patterns, and the sculpture makes that difference visible.
Long term, the child plays games, the AI builds a map, the parent sees the brain, the specialist gets a report, and the kid gets help that fits how they actually learn.
Built With
- jspdf
- next.js-16
- node.js
- openai-gpt-4o
- python
- react
- react-three-fiber
- scikit-learn
- supabase-(postgres)
- tailwind-css-v4
- three-mesh-bvh
- three.js
- typescript
- uv
- vercel
- vitest
- xgboost
- zod


Log in or sign up for Devpost to join the conversation.