For AI agents: use /llms.txt to read this portfolio in plain text.
Applied AI at Nakafa
Nina is Nakafa's AI tutor. It combines source-backed retrieval, explicit learning capabilities, tool use, and deterministic evaluations.
A learning answer needs more than fluent text. Nina has to find relevant evidence, understand the current learning context, choose the right capability, use tools when they help, and stream a response through the product interface.
One package-owned Nina harness gives the application a single interface while learning capabilities keep their own behavior.
I built one package-owned Effect service as the app-facing boundary for Nina. Internal learning capabilities own the behavior behind that boundary, while evidence and context packs keep source material separate from model instructions.
This structure gives the application one stable interface without turning every learning behavior into the same prompt. A capability can change its retrieval or tool use without forcing the product surface to learn those details.
| Part | Decision | How I check it |
|---|---|---|
| Harness | Owns the one app-facing interface for a Nina turn. | Contract and integration tests exercise the same interface the app uses. |
| Learning capability | Chooses the behavior for a specific learning need. | Named evaluation cases cover the capability's behavior. |
| Evidence and context | Separates source material and learning state from model instructions. | Fixtures keep the expected evidence visible during review. |
| Provider adapter | Handles model and streaming details behind the harness. | Provider-backed evaluations remain explicit and opt-in. |
Nina now has one app-facing service while each learning capability can own its retrieval, tool use, and response behavior. Named evaluation suites make those behavior boundaries visible before a release. Deterministic cases run in normal development and continuous integration. Provider-backed evaluations stay opt-in because they depend on external models, cost, and network conditions.
The evaluation layer does not claim that every answer is correct. It gives each important behavior an explicit place to be checked, reviewed, and changed.
Public implementation
The public context and architecture decision record describe Nina's harness, learning capabilities, evidence, context packs, and evaluation suites.
Building an AI feature?
That includes retrieval, tool use, evaluation boundaries, service integration, and the controls needed to operate the feature in production.