Project record
02 / 03Shared 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
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
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.
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.
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.
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