Cal Poly senior capstone with Calling All Kids · 2025–2026

Calling All Kids Parent Dashboard

Turning children’s simulated calls into a report a parent can actually understand.

  • Node.js
  • Express
  • Flutter Web
  • local CSV snapshots
  • Mocha
  • OpenAI API
Calling All Kids parent dashboard showing a child's archetype and behavioral insights
a parent-friendly view of behavioral signals
a gentle report,
not a diagnosis ♡
the parent problem

useful signals were hiding inside every call

Calling All Kids lets children ages two to six have simulated conversations with virtual characters. The calls created rich usage and transcript data, but parents had no calm, understandable way to see what those signals might mean.

Our six-person Cal Poly capstone team designed a standalone parent-dashboard prototype: a periodic, non-clinical snapshot of activity, temperament, moods, topics, and practical guidance that CAK's engineers could later integrate into their production system.

what the prototype does

four parent-facing chapters from one call history

01

Activity

Call count, completion, duration, ratings, time-of-day patterns, favorite characters, and common themes make usage legible.

02

Temperament + archetype

Qualitative scoring maps concentration, energy, and sensitivity into a gentle animal archetype rather than a clinical label.

03

Moods + topics

Transcript analysis summarizes recurring emotional and conversational signals for the same reporting window.

04

Parent guidance

Conversation starters, daily strategies, and reframing prompts turn the report into something a parent can try.

from labels to little characters

making personality feel supportive, not clinical

Early explorations represented each archetype with a human child. We worried that a specific-looking child could feel too literal and invite a parent to compare that illustration directly with their own child, so the team moved toward animal characters instead.

The animal direction made the categories warmer, more playful, and less like a fixed judgment. I contributed to the team's archetype naming and design brainstorm; teammates implemented the mapping system.

human-child explorationsless literal representationseven animal archetypes
Calling All Kids archetype screen showing seven animal characters
the seven archetypes as warm, distinct animal characters
Bright Explorer
Colorful Spark
Gentle Observer
Smooth Sailor
Social Connector
Little Strategist
Balanced Thinker
Calling All Kids Tips page with conversation starters and daily strategies
conversation starters and daily strategies turn a description into a next step

parent guidance

turning a label into something useful

A score or archetype alone was not enough. The next question was: what does this mean, and what can a parent gently try?

I authored the source advice used in the app: conversation starters, daily strategies, ways to get back on track, and ways to reframe new challenges. Teammates wired that content into the interface.

The language stays explicitly non-clinical and avoids presenting a young child's behavior as a diagnosis or a permanent identity.

six people, one product

building it like a real product team

Six students built the prototype through seven Jira-tracked sprints. Work was divided by feature and bandwidth rather than formal titles, with dedicated meetings and separate Discord channels for the team, professor, and client conversations.

That coordination mattered because quantitative analysis, temperament, moods, topics, advice, and the dashboard evolved in parallel. When output contracts stopped matching the whiteboard plan, regular handoffs and integration work became as important as any individual feature.

  • planJira estimates and sprint commitments
  • buildindependently owned product pieces
  • reconcileshared shapes, reviews, and handoffs
  • presentclient, course, and final-capstone demos
Jira chart comparing estimated and completed hours across seven capstone sprints
seven sprints made estimation and team handoffs visible
how it works

from a call to a parent-facing report

  1. 01

    Select a reporting window

    The reporting rules choose a child's recent eligible calls, filtering accidental, incomplete, stale, or too-short records.

  2. 02

    Build quantitative signals

    The quant pipeline calculates activity metrics such as completion, duration, ratings, characters, themes, and call timing.

  3. 03

    Score qualitative signals

    Separate services derive temperament, mood, and topic objects from the selected transcripts.

  4. 04

    Normalize the seams

    The assembler reconciles strings versus label objects, nested metadata, and mismatched field names across independently built services.

  5. 05

    Create the final contract

    The report service separates parent-facing external content from internal audit/model metadata and feedback placeholders.

  6. 06

    Render the chapters

    Flutter displays Activity, Insights, and Tips in a phone-shaped handoff prototype for CAK's product team.

  7. 07

    Inspect reliability

    Synthetic fixtures and the unmerged Bucket Spread tool test deterministic report assembly and repeated-scoring consistency.

under the hood

a handoff-oriented prototype architecture

Flutter Web

Provides the phone-shaped parent experience and a development panel for selecting a child and running the pipeline.

Node.js + Express

Organizes routes, controllers, services, helpers, and report contracts around conventions CAK's engineers could integrate later.

Local CSV + analysis services

The handoff prototype reads anonymized local CSV snapshots rather than a database. Independent services produce usage, temperament, mood, and topic outputs from the selected calls.

OpenAI structured output

A direct HTTP wrapper calls gpt-4o-mini at low temperature with JSON Schema constrained output. Retry and graceful-degradation behavior were specified for the handoff rather than presented as production infrastructure.

Report assembler

Acts as the integration adapter: validates required inputs, normalizes divergent shapes, and builds the final external/internal payload.

Mocha + Chai + NYC

Runs 147 backend tests with 92.56% statement coverage across the reviewed working tree; 31 tests focus on my report seam.

integration

one report, several pipelines

Quantitative activity, temperament, moods, and topics were developed in parallel. I owned the report-assembly seam: normalizing the different output shapes and restructuring them into the single parent-report contract.

At that boundary, missing upstream pieces fail loudly, while field-name and label differences are reconciled before they travel further through the system.

Calling All Kids Activity page showing call statistics
activity signals form one chapter of the assembled report
product rules

deciding when a report is ready

I wrote the reporting-logic specification around call-count windows, data quality, graceful degradation, retries, and score smoothing.

A full report waits for 20 calls. The design also proposed smoothing and requiring consecutive reports before visibly changing an archetype, so one noisy window would not produce an overconfident conclusion.

testability

breaking dependencies at the seam

The original assembler reached directly into data files, networked services, and model calls. I applied Parameterize Method so it accepts completed pipeline outputs instead.

That refactor made the integration deterministic enough for 10 assembler tests and 21 final-report tests to run without mocks, data files, network access, or API keys.

quality assurance

making model consistency visible

On a separate, unmerged feature branch, I built Bucket Spread Testing: a Chart.js admin tool that repeats scoring and visualizes how often a child lands in the same archetype or temperament triplet.

Four charts, a plain-language glossary, run persistence, and a confirmation step make a fuzzy reliability question inspectable without presenting the tool as a shipped production feature.

Bucket Spread Testing dashboard with archetype and triplet consistency charts
distribution and variance reveal when model outputs drift
my contribution

product rules, integration, hardening, and parent guidance

I owned the report assembler and final report shape, wrote the reporting-logic specification, authored the source advice used in the app, and fixed integration problems across several team-owned services.

I also built the Bucket Spread admin visualization on an unmerged feature branch. The quantitative pipeline and archetype-mapping implementation were teammate work; I presented the quant work in the final demo and contributed to the group's archetype naming/design direction.

  • Normalized real teammate output shapes into one header / external / internal / feedback contract.
  • Applied Parameterize Method so 31 focused tests run without mocks, data files, API keys, or network access.
  • Specified call-count thresholds, data quality, retries, smoothing, trends, and graceful degradation.
  • Authored parent advice and helped keep the framing supportive, non-clinical, and reviewed by an external child psychologist.
  • Built four Chart.js reliability views plus a glossary, run persistence, and a billed-call confirmation step.
what we can verify

results, with context

20 calls

full-report threshold

The handoff specification waits for enough call history before presenting the full qualitative report.

31 tests

my integration seam

The assembler and final-report flow run independently of model APIs, data files, and network access.

7 sprints

team process

Jira-tracked planning showed commitment and completion estimates converging over the capstone.

looking back...

The project became most interesting where product care and engineering met: choosing language that would not overstate what a child's calls could tell us, giving parents a useful next step, coordinating six independently moving pieces, and then making the resulting report dependable enough to hand off. I would formalize the shared pipeline contracts earlier next time. NDA-sensitive Figma work and private client materials remain off this page.