Context
Vigie is a product I designed and built on my own: a SaaS for automated regulatory monitoring of the French Journal Officiel (JORF). It does one thing well, watch the JORF, filter it and summarize it, as an accessible alternative to the heavy, expensive legal-watch platforms.
The problem
Regulatory monitoring in France is tedious and time-consuming.
- The JORF publishes dozens to hundreds of texts every working day; nobody can read all of it.
- Professionals with compliance obligations spend hours combing through it by hand, and missing a single critical text can have serious legal or financial consequences.
- Legal language is dense, technical and full of cross-references, so understanding a text's real impact is slow even for experts.
- There's no native way to say "only show me what concerns taxation and healthcare", and the established tools are expensive and generalist.
Objectives
- Monitor the JORF automatically, every day.
- Let each user filter by theme and text type, so they only see what matters to them.
- Turn dense legal prose into a summary anyone can act on in 30 seconds.
- Deliver it where people already are: a short email, every morning.
My approach
Vigie runs a daily three-phase pipeline, built on Django: ingest the official source, analyze each text with an LLM, then distribute a personalized digest. The whole product, pipeline, dashboard and billing, is one codebase.
Ingestion & the AI core
Each morning the pipeline downloads the day's JORF archives from the DILA (the official source) as compressed tarballs, and parses the full XML of every text: nature, identifiers, title, ministry, dates, the legal references it builds on (the visas), each article, and the signatories. All of it is flattened into clean plain text, ready for analysis.
Each text is then sent to Claude with a tightly structured prompt. The model must return strict JSON, nothing else: a set of thematic keywords drawn only from a fixed taxonomy of 27 themes (no invented values, copied exactly), plus a four-part summary written for a non-lawyer. Locking the model to a known taxonomy and a known JSON shape is what makes the output reliable enough to filter, store and act on, rather than free-form prose.
[ Title of the text, with its subject ]
- What changes
- What the text introduces or modifies, in two or three plain sentences.
- Who is affected
- The organizations or people impacted by it.
- Effective date
- A precise date, or "Not specified".
- Action required
- What the concerned parties must concretely do.
The product around it
Vigie is a complete SaaS, not just a pipeline. On top of the Django and PostgreSQL backend:
- Personalized digests: each active user gets a morning email (via Resend) with only the texts matching their filters, 7 text types and 27 themes, persisted per account.
- Dashboard: history by publication date, a per-day detail view with client-side filtering (HTMX), synthesis cards and a one-click link to the full text on Légifrance.
- Accounts: sign-up with email verification, profile management (with re-verification on email change), password reset.
- Billing: full Stripe integration, checkout, customer portal and webhooks, for a 14-day free trial and a single flat subscription.
Results
- A complete, working SaaS, designed and built entirely on my own: pipeline, applied AI, dashboard and billing.
- Hundreds of daily legal texts turned into a short, personalized, actionable digest.
- Dense legal prose made readable in seconds, and filterable down to the themes each professional cares about.
Key takeaways
The hard part of applied AI here was not calling the model, it was constraining it: locking the output to a fixed taxonomy and a strict JSON shape so the rest of the system can trust it. And as a product, doing one thing well, the JORF, filtered and summarized, is exactly what makes it useful where a generalist platform would not be.