Notaire
2014 → University Project2026 → AI-Powered

The Story ofNotaire

From a Java Swing university project in 2014 to a modern, AI-accelerated microservices platform— a decade of evolution, one commit at a time.

Project History

A Decade of Evolution

From dormant Swing monolith to AI-accelerated microservices — every commit tells a story.

☕
March 201419 commits

The Origin

University Project

A Java Swing monolith born as a university notarial management system. Direct DB access, JDBC queries embedded in UI event handlers, tightly coupled business logic.

Java 1.6Java SwingMySQLJDBC
14
💤
Dormancy 2015–20185 commits

Years of Silence

Project Paused

The project entered a long dormancy. Real-world complexity exceeded the scope of an academic exercise. The code slept, but the vision remained.

Frozen in time
18
🌱
December 202514 commits

The Renaissance

Modern Reboot

A decade later, the project was reborn. Java 21, Spring Boot 3.2.9, Docker, PostgreSQL. The monolith began its transformation into a proper microservices architecture.

Java 21Spring Boot 3.2.9PostgreSQL 16Docker
25
⚡
February 202639 commits

API & Frontend

Next.js Migration

REST API layer solidified. The Swing GUI was retired, replaced by a modern Next.js 15 + React 19 + TypeScript frontend with a proper design system.

Next.js 15React 19TypeScriptTailwind CSS
26
🤖
March–April 2026220 commits

AI Acceleration

Claude Code Integration

AI-assisted development became the primary workflow. 220 commits in two months. Tests, E2E coverage, security audits, observability—all accelerated by Claude AI agents.

Claude AIPlaywrightJaCoCoPrometheus
26
🚀
May–August 2026524 commits

Production Ready

Observability & Security

Grafana dashboards, Prometheus alerts, Loki log aggregation, SonarQube quality gates. A 2014 university project became a production-grade platform on Spring Boot 4.1.0 and Next.js 16.

GrafanaLokiSonarQubeSpring Boot 4.1
26
☁️
September–October 2026400 commits

Cloud AI SDLC

Autonomous Delivery Fleet

Cursor Cloud agents took the CONSTITUTION from paper to practice: OpenSpec Gate 1, TDD-first PRs, heavy-CI merge gates (Bruno + Playwright + coverage), Flyway as the sole schema source, and continuous Englishize hygiene. The Delivery Board stayed the single work queue while multi-slice API validation and UI/UX audits shipped in serial heavy-green merges.

Cursor CloudOpenSpecHeavy-CIFlyway-only
26

Version history

Product cuts

Semver releases of Notaire. The timeline above is the narrative. This list is the tag history. A delivery-train milestone is not a git tag.

Current product

v0.2.5

v0.2 · Release identity & product forms (2026-10)

Backend
0.2.5
Frontend
0.2.5
Database schema
Flyway V53
  1. v0.2.5

    2026-10-28

    v0.2 · Release identity & product forms (2026-10)

  2. v0.2.4

    2026-10-17

    v0.2 · Release identity & product forms (2026-10)

  3. v0.2.3

    2026-10-16

    v0.2 · Release identity & product forms (2026-10)

  4. v0.2.2

    2026-10-15

    v0.2 · Release identity & product forms (2026-10)

  5. v0.2.1

    2026-10-13

    v0.2 · Release identity & product forms (2026-10)

  6. v0.2.0

    2026-10-12

    v0.2 · Release identity & product forms (2026-10)

  7. notaire-v0.1.2

    2026-10-10

    v0.1 · First release cuts (2026-10)

  8. notaire-v0.1.1

    2026-10-07

    v0.1 · First release cuts (2026-10)

Tech Evolution

Three Generations

The same business domain, reimagined through each era of software engineering.

2014
The Monolith
// 2014 — Everything in one place
class NotaireForm extends JFrame {
  private Connection conn;

  void saveDocument() {
    // Direct SQL from event handler
    PreparedStatement ps = conn.prepareStatement(
      "INSERT INTO escrituras VALUES(?,?,?)"
    );
    ps.setString(1, txtNombre.getText());
    // business logic tangled in UI
  }
}
☕ Java 1.6🖥️ Swing GUI🗄️ MySQL🔌 JDBC
2025
Spring Boot
// 2025 — Clean separation
@RestController
@RequestMapping("/api/v1/deeds")
public class DeedController {

  @Autowired
  DeedService service;

  @PostMapping
  public ResponseEntity<DtoDeed> create(
      @RequestBody @Valid DtoDeed dto) {
    return ResponseEntity.ok(service.save(dto));
  }
}
☕ Java 21🌱 Spring Boot 4🐘 PostgreSQL 16🐳 Docker
2026
AI-Powered
// 2026 — AI-accelerated development
// Claude AI generates tests, reviews code,
// writes E2E tests, updates documentation

const procedure = await page.getByRole(
  'link', { name: 'New procedure' }
);
await expect(procedure).toBeVisible();
await procedure.click();

// 200+ Playwright E2E tests
// 84% JaCoCo line coverage
// Grafana + Loki observability
▲ Next.js 15🤖 Claude AI🎭 Playwright📊 Grafana

The AI Era

Built with Artificial Intelligence

In 2026, Claude AI became the primary co-developer, then Cursor Cloud agents closed the loop on remote VMs—OpenSpec specs, TDD, documentation, Bruno, Playwright, and heavy-CI merges.

GitHub Issue→Use Case (CU-XX)→OpenSpec Gate 1→Feature Branch→TDD→Implementation→E2E + Bruno→Heavy-CI→Merged
🧠

AI-Driven TDD

Claude AI writes failing tests first, implements to pass them, then refactors. Enforced by mandatory workflow rules.

🎭

Playwright E2E

200+ automated end-to-end tests covering every user flow, form, and edge case. Every PR requires passing E2E coverage.

📊

Full Observability

Prometheus metrics, Grafana dashboards, Loki log aggregation, and SonarQube quality gates. Production-grade from day one.

🔐

Security-First

OWASP Top 10 guides, JWT authentication, SQL injection prevention, Trivy vulnerability scanning in CI/CD.

📖

Living Documentation

Use cases, functional and non-functional requirements, and ADRs live in docs/ and change in the same PR as the code. The AI Factory section counts them live.

⚡

Accelerated Delivery

786 commits in 2026 alone with AI pairing. What took years of manual work now happens in sprints.

AI Arsenal

The AI Tools That Built It

Five AI tools, one codebase. Each played a different role in accelerating from idea to production.

🧠
Claude CodeCore
Anthropic

Primary AI agent — TDD, code review, E2E tests, docs, architecture decisions

~80% of AI work
☁️
Cursor CloudFleet
Cursor

Autonomous cloud fleet — foreman + specialists run Issue → OpenSpec → PR → heavy-CI on remote VMs

Cloud SDLC loop
⌨️
OpenCodeShell
OpenCode

Terminal-native AI coding agent, integrated directly into the shell workflow

RTK token proxy
✈️
GitHub CopilotIDE
Microsoft / GitHub

VS Code inline completions, chat, and PR summaries for rapid in-editor development

Inline completions
💎
Gemini CLIResearch
Google

Command-line Gemini access for research, alternative perspectives, and cross-validation

Cross-validation

System Architecture

Modern Microservices

From a single Java Swing file to a multi-layer containerized platform.

🌐
Frontend
Next.js 15React 19TypeScriptTailwind CSSZustand
⚙️
API Gateway
Spring Boot 4REST ControllersJWT AuthOpenAPI / Swagger
🧩
Services
Business LogicAudit AspectPDF ReportsEmail Service
🗄️
Persistence
PostgreSQL 16Spring Data JPAFlyway MigrationsHikariCP
📡
Observability
PrometheusGrafanaLokiSonarQube

All layers run in Docker containers. One command to start everything.

$ bash workspace/stack/start-all.sh

Infrastructure

DevSecOps Platform

10 containerized services. Two Docker Compose stacks. One command to run everything. From a university project with no infrastructure to a full observability platform.

🏠
Homer:8888

DevSecOps Hub — single-page dashboard linking every service

▲
Next.js Frontend:3000

React 19 + TypeScript UI. Notarial forms, dashboards, audit trail

🌱
Spring Boot API:8080

REST API + Swagger UI. JWT auth, PDF reports, audit aspect

🐘
PostgreSQL 16:5432

Primary database. Managed by Flyway migrations + init-db scripts

🗄️
pgAdmin:5050

Database management UI for schema inspection and query execution

🔥
Prometheus:9090

Scrapes Spring Boot Actuator + PostgreSQL exporter every 10–15 s

📊
Grafana:3001

4 custom dashboards: backend, postgres, logs, auth. Real-time alerts

📋
Loki + Promtail:3100

Structured JSON log aggregation via Logback LogstashEncoder

🛡️
SonarQube:9000

SAST, code smells, coverage gating. Community Edition, auto-provisioned

📡
PostgreSQL Exporter:9187

Translates pg_stat_* to Prometheus metrics for Grafana's DB dashboard

🚀 Start Everything

$ bash workspace/stack/start.sh

App stack (Backend + Postgres + pgAdmin)

$ bash scripts/start-infra.sh

Infra stack (Prometheus + Grafana + Loki + SonarQube)

$ bash workspace/stack/start-all.sh

Everything at once

🔔 Active Alert Rules

HighLoginFailureRate
>50% login failures for 2 min
warning
SuspiciousLoginActivity
Brute-force: >30 bad creds/min
critical
BackendDown
API unreachable for >1 min
critical
HighJvmHeapUsage
JVM heap >85% for 5 min
warning

Trivia

Fun Facts

Numbers and moments that make this project unique.

😴

3 Years of Sleep

The project was dormant from mid-2015 to late 2018. Not a single commit. Then life happened, then AI happened.

🤯

786 commits in 2026

One calendar year of AI-paired development outpaced the previous decade combined. Agents wrote tests, reviewed code, and updated docs continuously.

🏆

983+ Pull Requests Merged

A steady, ongoing stream of merged PRs — thanks to mandatory TDD, E2E coverage, and automated quality gates that never let a red build through.

📚

3164 Markdown Files

Documentation grew from zero to hundreds of .md files. Use cases, ADRs, guides, runbooks, API references — all kept in sync by AI.

☕

Java 1.6 → Java 21

15 major Java versions. From brittle Swing event handlers to records, sealed classes, and virtual threads.

🧪

Zero Tests → JaCoCo-Enforced

The original project had no tests at all. Today, JaCoCo enforces a rising coverage ratchet and CI fails if it drops.

Battle Scars

Major Challenges

Real production incidents and architectural hurdles that shaped how the project works today.

HIGH

Schema Dual-Source Drift

Docker once built from init-db/*.sql while Flyway ran db/migration/V*.sql, so Hibernate entities could drift from both and produce recurring 500s until an integration test guard landed. Resolved: Flyway is now the sole schema source; the old init-db scripts are archived.

MED

Legacy JPA Controllers

The original monolith had massive JpaController classes (not REST controllers!) with Hibernate sessions and EntityManager leaks directly from the Swing era. Still being migrated to Spring Data repos.

MED

Hibernate Proxy & Jackson

@JsonIgnore silently fails on Hibernate proxy subclasses, causing infinite recursion in JSON serialization. Fix: use Maps/DTOs, never serialize JPA entities directly.

LOW

131 Issues Missing Use Cases

Workflow rule: every GitHub issue must reference a Use Case (CU-XX). After auditing all 233 open issues, 131 were missing this link. Batch-fixed via gh CLI scripting.

MED

The Autonomous Loop Corrupted Its Own Memory

Two scheduled AI agent Routines ran against the repo in parallel, both writing to the same loop-state.md with no locking — it got corrupted, and a stale pointer claimed an already-merged PR was still open two days later. Fixed by making the loop verify its own memory against live GitHub state before trusting it, instead of assuming the file is always right.

Quality Metrics

Test Coverage Dashboard

Real-time coverage metrics across backend, frontend, E2E, and API layers. Updated on every merge to main.

Backend (JaCoCo)
Instruction Coverage
↑ Increasing
Coverage0%
Updated: unknown
Backend (JaCoCo)
Branch Coverage
↑ Increasing
Coverage0%
Updated: unknown
Frontend (Jest)
Component Coverage
→ Stable
Coverage82%
Updated: unknown
E2E (Playwright)
Test Coverage
↑ Increasing
Coverage0%
Updated: unknown
API (Bruno)
Endpoint Coverage
↑ Increasing
Coverage0%
Updated: unknown

📊 Coverage by Test Type

Backend Testing

  • Unit + Integration (JUnit 5)352 classes
  • Integration TestsH2 + Postgres
  • JaCoCo Enforcement70% line / 25% branch floor
  • Target Coverage80%

Frontend Testing

  • Component Coverage (Vitest)82%
  • E2E Suites (Playwright)102 spec files
  • API Tests385 request files

By The Numbers

A Decade of Progress

Every metric tells a story. From zero to production-grade in the AI era.

⚡
2192+
Total Commits
Since Mar 2014
🔀
983
Pull Requests
100% merge rate
📋
88
Use Cases
CU-01 → CU-88
📌
120
Functional Requirements
RF-01 → RF-120
🎯
0%
Test Coverage
JaCoCo enforced
📚
3164
Docs (Markdown files)
Living documentation
🧪
454
Test Classes
Unit + Integration + E2E
🐳
19
Docker Services
App + Infra stacks
📊
12
Grafana Dashboards
Custom provisioned
🤖
4
AI Tools
Claude, Copilot, Gemini, OpenCode
🏛️
31
Architecture Decisions
ADR-001 → ADR-031
👥
7
Contributors
Active development