Inspiration

Many young people in Kenya have big goals: getting a first online job, learning a digital skill, saving for school fees. But big goals are easy to abandon. They have no obvious first step, plans list outcomes instead of actions, and when life gets hard the plan doesn't bend, so people quit.

Through my work with Project Trinitē, which runs solar-powered ICT training hubs (PODs) in underserved communities, I've seen how much small, consistent progress matters. I wanted a coach that meets people where they are: one small step at a time, in the language they think in. Hatua means "step" in Kiswahili

What it does

Hatua is an AI goal coach that turns one big goal into tiny daily steps and adapts as you go.

  • Plan it: enter a goal, why it matters and your daily minutes. The AI builds 3–5 milestones of small, concrete steps.
  • Today: see only your next 1–3 steps. Tick one off and your 🔥 streak grows.
  • Check in: pick 😀 Good, 😐 Okay or 😞 Hard and add a line about your day.
  • Adapt: the coach replies warmly, and on a hard day it makes your next steps smaller, with Undo if you'd rather keep the original.
  • Progress: overall %, a bar per milestone, your streak and check-ins this week.
  • Bilingual: one EN | SW switch changes the whole app, and the AI plans and coaches in everyday Kiswahili.
  • Works offline: built-in plans for common goals keep people moving if the AI or internet drops.
  • Safe by design: no medical, legal or financial advice, caring replies if someone is struggling, and the Kenya Red Cross 1199 line always on screen.

    How we built it

    Hatua is one full-stack Jac codebase, built and deployed with JacHammer:

  • Graph data model: goals, milestones, steps and check-ins are Jac nodes (root → Goal → Milestone → Step, Goal → CheckIn), saved automatically.

  • API with no boilerplate: every def:pub function becomes an HTTP endpoint, called from the frontend with a simple await.

  • Typed AI with byLLM: plan_goal(...) -> list[MilestonePlan] by llm(), coach_message(...) and adapt_steps(...), guided by sem descriptions, return real typed objects, so there is no prompt parsing. Google Gemini is the model.

  • React UI in Jac: jac-client powers the Today, Plan, Check-in and Progress tabs in the same project.

    Challenges we ran into

    Environment setup: running Jac on Windows through WSL, and learning that projects must live in the Linux file system, not on the Windows drive.

  • A misleading error: the app said "Could not reach the server" while the logs showed the server answering successfully. The real bug was on the client side, so we made error messages honest about what actually failed.

  • A build dependency cycle in the client compilation, which we traced and removed.

  • Adaptive AI done kindly: shrinking steps on hard days without sounding preachy, and keeping clear safety boundaries.

  • Natural Kiswahili: making the interface and AI output sound like everyday Kiswahili, not a literal translation.

Accomplishments that we're proud of

  • A complete daily loop (plan → act → check in → adapt) that works end to end.
  • A coach that responds to how you feel, not just what you've ticked off.
  • A fully bilingual English/Kiswahili experience.
  • An offline fallback for communities with weak connectivity.
  • Backend, AI and frontend all in a single Jac codebase. ## What we learned
  • How Jac's graph model makes relationships like goal → milestone → step natural to store and traverse.
  • How byLLM turns a typed function signature into a reliable AI call, and how much clear sem descriptions improve the output.
  • To read the logs before guessing when debugging a full-stack app.
  • That responsible AI design (safe boundaries, kind wording, a visible help line) is part of the product, not an add-on. ## What's next for Hatua App Pilot with POD learners for a week, then improve from their feedback.
  • Private accounts for each person, using Jac's built-in authentication.
  • A mobile app in React Native, on the same Jac endpoints.
  • More reach: more local languages, and gentle reminders by SMS or WhatsApp.

Built With

Share this project:

Updates

Submission history