Inspiration

People make plans every day, but what they intend to do and what actually happens are often very different. To-do apps record tasks, but they rarely help us understand our real behavior.

We built GAP-AI around one question: What is the gap between our intentions and reality?

What it does

GAP-AI is a proactive AI personal life assistant. You tell it your plan in everyday language, by typing or by voice, and it turns that into a structured plan. You then record what really happened: done, postponed, or skipped. Over time, GAP-AI measures your adherence, finds patterns in your behavior, and gives you coaching and recommendations.

  • Natural-language and voice plan creation (web and ESP32-S3 device)
  • Outcome tracking and behavioral analytics
  • Personalized onboarding and preferences
  • Three kinds of recommendations:
    • Behavior-based: derived from your recorded plans and outcomes.
    • Contextual: based on goals, deadlines, availability, upcoming plans, and weather.
    • Discovery: a separate catalog of new ideas. These are not generated from your past behavior, and we never present them as if they were.

How we built it

GAP-AI is a full-stack system: a React web app, a FastAPI backend, a Supabase/PostgreSQL database, hosted AI inference, and an ESP32-S3 hardware prototype.

NVIDIA Nemotron on Nebius Token Factory

We did not rent GPUs or host a model ourselves. Our backend calls NVIDIA Nemotron through Nebius Token Factory's hosted, OpenAI-compatible API (nvidia/Nemotron-3_5-Lightning, Chat Completions, using our initial credits and free allowance). Nemotron does three jobs:

  1. Understands natural language. "I want to study calculus tomorrow afternoon for two hours" becomes intent, title, date, start time, duration, and category.
  2. Produces structured output. Every model result is validated against our JSON schema (ai/schema.json) before it can become a record. The backend can tell a valid plan from a request that needs clarification or is unsupported.
  3. Writes coaching narratives. It explains metrics in human language and suggests a practical next step.

Our key design decision: Python calculates, AI explains

Nemotron never computes our official statistics and never touches the database. Our Python backend calculates the numbers:

  • Adherence rate: done / (done + postponed + skipped), so it only covers plans with a reported outcome. Plans without a reported outcome are counted separately, and we do not present the rate as "the completion rate of all plans".
  • Counts of completed, postponed, skipped, and unreported plans.
  • Patterns by weekday, hour, and category, plus postponement patterns.

Nemotron only receives these verified numbers and turns them into advice. The language model is never the source of truth for analytics, so the results stay predictable and trustworthy.

Voice, backend, and data

  • Speech recognition: Groq whisper-large-v3. The ESP32 records mono, 16 kHz, 16-bit audio (up to 10 seconds) and the transcript enters the same workflow as typed text.
  • Spoken responses: Groq Orpheus TTS, with TTS.ai (Kokoro) as a fallback. If speech fails, the plan is still saved.
  • Backend: Python 3.11, FastAPI, Pydantic, HTTPX, with bounded timeouts and deterministic fallbacks, so an unavailable AI provider does not break the app.
  • Database and login: Plan and activity data flow through our backend to Supabase (PostgreSQL). The web app also uses the Supabase Auth client for Google sign-in when it is configured. The AI model has no direct database access. We also built isolated demo sessions so reviewers can try the app without touching anyone's data.
  • Frontend: React 19, TypeScript, Vite. Users review every AI-generated plan before saving it.
  • Weather: Open-Meteo. Our MVP uses a fixed default location (Üsküdar) instead of claiming to know the user's live location.

The hardware

The ESP32-S3 prototype (ESP-IDF, firmware in C) uses an INMP441 microphone, a MAX98357A amplifier with speaker, an SSD1306 OLED display, and physical buttons. It connects to Wi-Fi, records audio, talks to the backend, and shows the result. The web app and the device share the same backend voice contract.

Built entirely on free tiers

Netlify (frontend), Render (backend), Supabase (database), Nebius and Groq (AI) all run on free tiers or initial credits. Note: the Render free backend sleeps when idle, so the first request may take a little while to wake up.

Challenges we ran into

Five independent systems had to work together: a web app, a backend, external AI providers, a database, and embedded hardware. We solved this with a shared API contract and JSON schemas, so the frontend, backend, AI, and firmware all spoke the same language.

Two lessons stayed with us:

  • AI should not be the source of truth for numbers. That is why analytics live in deterministic backend code.
  • A successful HTTP response does not prove the hardware works. An API call can return 200 while the speaker stays silent. We learned to test the API, the firmware, and the physical audio separately.

What we learned

Building GAP-AI taught us how to bring different engineering disciplines together. We learned to integrate hosted AI models, design reliable APIs, validate structured data, work with embedded systems, and troubleshoot real-world hardware and software problems.

We also learned that building a useful AI product is not just about choosing a powerful model. It requires reliable architecture, clear data flow, careful testing, and thoughtful decisions about what AI should and should not do.

Our Journey as a Team

We are 10 first-year Electrical and Electronics Engineering students, and GAP-AI is one of our first major attempts to build a complete system that connects software, AI, and physical hardware.

It was not easy. We had incompatible code, API integration problems, and unexpected hardware behavior. Sometimes solving one bug revealed another, and a "simple" fix took hours late at night. Getting the backend, AI services, web app, and ESP32 to communicate reliably took repeated testing, patience, and teamwork.

But every error taught us something. Along the way we learned how to divide responsibilities, integrate different technologies, and turn an ambitious idea into a working prototype.

For us, GAP-AI is more than a project. It is the result of learning, experimenting, failing, and building together.

What's next

  • Comparing adherence against previous periods to show real trends over time
  • Better physical device verification and richer embedded interactions
  • A more proactive, personalized coaching experience
  • Our long-term vision: moving beyond task management to help people build a realistic understanding of their own habits

GAP-AI turns plans into measurable outcomes, and outcomes into better decisions.

Try it: https://gap-ai-demo.netlify.app

Built With

  • c
  • esp-idf
  • esp32-s3
  • fastapi
  • groq
  • i2s-audio
  • nebius-token-factory
  • netlify
  • nvidia-nemotron
  • open-meteo
  • postgresql
  • python
  • react
  • render
  • rest-api
  • speech-to-text
  • supabase
  • text-to-speech
  • tts.ai
  • typescript
  • vite
  • whisper
Share this project:

Updates

Submission history