Project record

02 / 03

Shared pet care with an AI and RAG assistant

RotinaPet

A whole family cares for the same pet without double-dosing medication or missing a vaccine: every owner sees what was already done, by whom, and when. The AI assistant only ever sees what that family is allowed to see, and it never records anything without a person confirming it.

RotinaPet organizes schedules, clinical history, documents, and shared care. Its AI layer searches only the family's authorized sources, cites what it found, and produces drafts that still pass through deterministic domain rules.

Period
05.2025 · present
My contribution
Backend architecture, RAG authorization, indexing pipeline, and assistant integration with the Angular frontend.
Technology
Kotlin · Spring Boot · Angular · PostgreSQL/pgvector · OpenAI
Status
Published product under active development
Official RotinaPet logo in green, black, and yellow
RotinaPet identity for the product that organizes schedules, documents, and household care decisions.

RING

Answering without crossing households or prescribing alone

A semantically similar passage may belong to another pet or household. Even the correct source may not provide enough clinical support for an answer. A care suggestion also cannot become a plan merely because the model returned valid JSON.

SECTOR

Boundaries placed around AI

  1. Authorization defines the corpus

    Household, pet, and sources in READY state define the searchable set before ranking. A revoked document becomes ineligible immediately, even when physical chunk cleanup runs later.

  2. Hybrid retrieval with checked citations

    Portuguese FTS and vector distance are merged through RRF. Returned citations must point to passages in the authorized set; without enough support, the assistant abstains.

  3. Recoverable indexing

    Source, activity, and outbox are written in one transaction. The worker batches embeddings and publishes chunks with READY state atomically, with retries and a dead-letter path for persistent failures.

  4. Domain confirmation

    Structured Outputs creates a versioned draft. Before writing a plan, the use case revalidates role, version, expiry, idempotency, and explicit confirmation from the responsible person.

MARK

Criteria recorded in the project

  • Versioned evaluation dataset with answerable and unanswerable cases, covering retrieval, citation, and abstention
  • Prompt-injection cases and integration tests with Testcontainers and pgvector
  • Source states, chunks, and citations preserve the path from an answer to its authorized document
  • Kotlin/Spring Boot backend and Angular frontend deployed separately with public repositories

SHEET