Inspiration
- Most sleep apps give everyone the same generic advice. Sleep is not one-size-fits-all, caffeine, screen time, and exercise affect everyone differently
- College students, teenagers, working professionals often ignore the importance of sleep
- Strava turned raw fitness data into personal accountability. Why doesn't sleep work the same way?
What it does
- A Flutter mobile app powered by a Jac agentic backend in which users log 5 behavioral factors daily: caffeine, exercise, screen time, stress, sleep hours
- The agent builds a persistent health graph and autonomously runs a full loop in which it computes personalized Pearson correlations, generates a data-backed insight via by
llm(), creates a 7–14 day behavioral intervention based on Pearson correlations - Social layer: users share one agent-generated metric card per day with followers
- ComparisonWalker traverses two users' graphs to find shared disruptors and generate a personalized comparison narrative
How we built it
- Jac backend: health history modeled as a native graph, UserProfile, SleepSession, BehaviorLog, Pattern, InterventionPlan, SleepCard nodes with typed edges
- 6 walkers: DataIngestionWalker, CorrelationWalker, InsightGeneratorWalker, PlannerWalker, FollowUpWalker, ComparisonWalker
- Flutter: pure display and input layer; fl_chart for visualizations; RepaintBoundary + toImage() for shareable PNG card export
Challenges we ran into
- CorrelationWalker was recomputing all correlations on every log, fixed by triggering only at 5, 7, and 14 data-point thresholds
- Early by
llm()prompts produced generic advice despite pattern data being available, fixed with hard prompt rules: always cite the r value, never use "consider", end with exactly one actionable sentence - Cross-user graph traversal in ComparisonWalker required a
check_access()gate verifying follow relationships before any traversal
Accomplishments that we're proud of
- Successfully modeling a full personal health history as a persistent Jac node graph, every session, behavior log, pattern, and intervention plan connected through typed edge archetypes rather than a traditional database schema
- The CorrelationWalker autonomously spawning PlannerWalker mid-traversal the moment a disruptor crosses the significance threshold, seeing genuine agent-to-agent coordination work in production without any external orchestrator was a milestone
- by llm() producing specific, data-grounded outputs, getting the LLM operator to consistently cite the user's actual r value and data-point count rather than falling back to generic advice required careful prompt architecture but the results feel genuinely intelligent
What we learned
Jac's graph-native model is the right abstraction for health data, sessions, behaviors, and patterns are naturally nodes and edges, not table rows. by llm() is most powerful doing the smallest possible job: let the graph compute, let the LLM narrate. The social layer required no separate architecture, just more nodes and walkers on the same graph
What's next for Drowzie
- Wearable integration: pull real data from Apple Health / Google Fit instead of self-report
- Compound factor modeling : multivariate regression (R2 across factor combinations) to capture interaction effects
- Anonymous population insights
Log in or sign up for Devpost to join the conversation.