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.
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.
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.
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.
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.
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.
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.
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.
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
- v0.2.5
2026-10-28
v0.2 · Release identity & product forms (2026-10)
- v0.2.4
2026-10-17
v0.2 · Release identity & product forms (2026-10)
- v0.2.3
2026-10-16
v0.2 · Release identity & product forms (2026-10)
- v0.2.2
2026-10-15
v0.2 · Release identity & product forms (2026-10)
- v0.2.1
2026-10-13
v0.2 · Release identity & product forms (2026-10)
- v0.2.0
2026-10-12
v0.2 · Release identity & product forms (2026-10)
- notaire-v0.1.2
2026-10-10
v0.1 · First release cuts (2026-10)
- 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 — 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
}
}// 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));
}
}// 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 observabilityThe 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.
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.
Primary AI agent — TDD, code review, E2E tests, docs, architecture decisions
Autonomous cloud fleet — foreman + specialists run Issue → OpenSpec → PR → heavy-CI on remote VMs
Terminal-native AI coding agent, integrated directly into the shell workflow
VS Code inline completions, chat, and PR summaries for rapid in-editor development
Command-line Gemini access for research, alternative perspectives, and cross-validation
System Architecture
Modern Microservices
From a single Java Swing file to a multi-layer containerized platform.
All layers run in Docker containers. One command to start everything.
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.
:8888DevSecOps Hub — single-page dashboard linking every service
:3000React 19 + TypeScript UI. Notarial forms, dashboards, audit trail
:8080REST API + Swagger UI. JWT auth, PDF reports, audit aspect
:5432Primary database. Managed by Flyway migrations + init-db scripts
:5050Database management UI for schema inspection and query execution
:9090Scrapes Spring Boot Actuator + PostgreSQL exporter every 10–15 s
:30014 custom dashboards: backend, postgres, logs, auth. Real-time alerts
:3100Structured JSON log aggregation via Logback LogstashEncoder
:9000SAST, code smells, coverage gating. Community Edition, auto-provisioned
:9187Translates pg_stat_* to Prometheus metrics for Grafana's DB dashboard
🚀 Start Everything
$ bash workspace/stack/start.shApp stack (Backend + Postgres + pgAdmin)
$ bash scripts/start-infra.shInfra stack (Prometheus + Grafana + Loki + SonarQube)
$ bash workspace/stack/start-all.shEverything at once
🔔 Active Alert Rules
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.
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.
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.
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.
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.
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.
📊 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.