Case study / 2026

Revisere - Personal Project

Personal project exploring production-minded AI contract analysis, designed to show backend architecture and system thinking rather than UI polish. Built with NestJS and TypeScript, with a strong focus on provider abstraction, schema validation, failure handling, and operational guardrails.

  • NestJS
  • TypeScript
  • AI Systems
  • Zod
  • Docker
  • System Design
Project preview: Revisere - Personal Project

Overview

Revisere is a personal backend project I built to explore how to design an AI-assisted service with production-minded architecture. Instead of treating the model as trusted business logic, I designed the system around validation, provider abstraction, and failure handling.

What I wanted to demonstrate

  • System design around non-deterministic AI dependencies
  • Clear modular boundaries across document parsing, provider resolution, extraction, risk analysis, summarisation, and comparison
  • Backend-first engineering judgement, with more attention on reliability than presentation

Architecture and backend design

  • NestJS service architecture with domain-oriented modules
  • Config-driven provider selection through a provider factory
  • Concurrent orchestration for extraction, risk analysis, and summarisation
  • Explicit handling for parse failures, invalid inputs, and downstream provider issues

Reliability and operational thinking

  • Schema validation with Zod for structured outputs
  • JSON extraction and repair flow for malformed provider responses
  • Rate limiting, request validation, logging, health checks, and environment-based configuration
  • Budget and abuse guardrails for costly AI-backed endpoints

Technical highlights

  • PDF and DOCX contract ingestion
  • Structured legal information extraction
  • Risk signal detection and plain-English summaries
  • Contract version comparison
  • Dockerised deployment setup and Render blueprint configuration

Why it fits in my portfolio

I included Revisere because it reflects how I think about systems and architecture: breaking a problem into clear modules, designing around unreliable dependencies, and making trade-offs explicit. It is a personal project, but it represents the kind of backend work I most enjoy.