A Flutter client and FastAPI backend built around an “AI hook” — start, end and error callbacks modelled on LangChain’s callback lifecycle — that drives loading, structured JSON and error states.
A small project for practising how an app should behave around an LLM call: show progress, accept only structured JSON, and fail gracefully.
The backend currently simulates the model’s response; connecting a real LLM is the next step.
What it includes
- Natural-language entryOne sentence can produce several expenses.
- AI hook lifecycleStart / end / error callbacks drive the UI states.
- Strict JSON contractItem, category, amount, currency.
- Graceful failureAn error state with an offline fallback view.
- Real LLM parsingPlannedThe backend returns a simulated response today.
Screens
