keanan.w
← Work
Title
Naiya
Role
Full-stack
Year
2025
Naiya

To-do lists and time blocking fail for the same reason: your tasks never sync with your actual time.

90%
lower inference cost
60%
lower latency

The problem

I kept bouncing between a to-do list and a calendar, and they never agreed with each other. So I built Naiya to collapse the two. You dump your life at it, by voice or text, and it turns that into a full week that accounts for classes, deadlines, social stuff, exercise, and energy. When the week falls apart, which it always does, it re-plans instead of leaving you with a schedule that's already wrong.

The architecture decision

The obvious build is a pure LLM. I split it instead: DeepSeek-V3 handles the genuinely ambiguous part, pulling structured events out of natural language, and a plain TypeScript engine does the scheduling. That cut inference cost by 90% and latency by 60% against the pure-LLM version.

It's a rule I keep coming back to: use the model for the part that's actually ambiguous, use code for the part that has a right answer.

Stack  TypeScript, PostgreSQL, Supabase, DeepSeek-V3, Next.js

github.com/keananwongso/naiya