AOMaster

Veille intelligente sur les marchés publics français et européens.

live OSS

En production, disponible aujourd'hui

À quoi ça sert

Le problème, la solution.

AOMaster centralise les appels d'offre publiés sur BOAMP (France) et TED (Union européenne) dans une interface unique. Recherche full-text avec filtres avancés (CPV, montant, lieu d'exécution, dates), alertes email personnalisées, suivi des favoris, dashboards de synthèse. Pensé pour les structures qui n'ont ni le temps ni les outils pour faire de la veille manuelle quotidienne. Une version simplifiée open-source est disponible sur GitHub.

Fonctionnalités

Ce qu'on trouve dedans.

  • Agrégation BOAMP (France) + TED (UE)
  • Recherche full-text + filtres avancés (CPV, montant, lieu, dates)
  • Alertes email personnalisées
  • Favoris et suivi de dossiers
  • Dashboards de synthèse
  • Version OSS simplifiée sur GitHub (Neon + Better Auth)

Pour qui

À qui ça s'adresse.

Indépendants, PME et bureaux d'études qui répondent régulièrement aux marchés publics et veulent automatiser leur veille pour ne plus passer à côté des opportunités pertinentes.

README du projet

Documentation officielle

Synchronisée depuis Flavien-Dragamig/AOMaster-oss au moment du build.

AOMaster

Veille open-source des marchés publics français — BOAMP & TED.

License Stack Status

FonctionnalitésDémarrageDéploiementArchitectureSourcesContribuer


AOMaster est une application web qui agrège les avis de marchés publics français (BOAMP) et européens (TED) dans une interface unique de recherche, alertes et suivi. Cette version open-source est extraite du SaaS exploité par Dragamig SAS — code complet, branding et données prod retirés.

Pour qui ? PME, indépendants, bureaux d'études et associations qui répondent à des appels d'offres et veulent une alternative libre, auto-hébergeable, aux outils propriétaires de veille.

Aperçu

Accueil Recherche
Page d'accueil Page de recherche
Connexion Inscription
Page de connexion Page d'inscription

Fonctionnalités

Recherche & exploration

  • Recherche full-text sur les avis BOAMP et TED, par mots-clés, CPV, département, type de marché, montant estimé, date de publication / date limite.
  • Filtres combinables persistés dans l'URL (partageables).
  • Fiche détaillée par marché avec téléchargement du DCE (Dossier de Consultation des Entreprises) quand le profil acheteur le fournit (place, achatpublic).

Veille active

  • Alertes personnalisées : un utilisateur crée une recherche, la sauvegarde comme alerte, reçoit les nouveaux avis par email selon une cadence (quotidienne / hebdo).
  • Favoris & suivi : marquer un marché, suivre son statut (à étudier / en cours / déposé / gagné / perdu) avec notes privées.

Comptes & équipes

  • Authentification email + magic link via Supabase Auth.
  • Rôles utilisateur (user, admin) avec espace admin séparé.
  • Invitations par email, force-password-change au premier login, reset password.
  • Tracking des pages vues (anonymisable, désactivable côté config).

Administration

  • Tableau de bord admin : utilisateurs, messages support, métriques d'usage.
  • Edge Functions Supabase pour la gestion d'utilisateurs et l'envoi d'invitations.

Architecture

┌──────────────────────────────────────────┐
│   Navigateur (React 18 + Vite)            │
│   ─ TanStack Query (cache)                │
│   ─ React Router 6                        │
│   ─ TailwindCSS                           │
└─────────────┬────────────────────────────┘
              │ HTTPS
              ▼
┌──────────────────────────────────────────┐
│   Supabase                                │
│   ├─ PostgreSQL (RLS strict)              │
│   ├─ Auth (JWT)                           │
│   └─ Edge Functions (Deno)                │
│      ─ create-users / invite-user         │
│      ─ force-password-change              │
│      ─ fetch-rc-achatpublic               │
│      ─ download-dce / search-place-dce    │
└─────────────┬────────────────────────────┘
              │ REST / scraping
              ▼
┌──────────────────────────────────────────┐
│   Sources publiques                       │
│   ─ BOAMP (data.gouv.fr / API officielle) │
│   ─ TED (ted.europa.eu)                   │
│   ─ Profils acheteurs (place, etc.)       │
└──────────────────────────────────────────┘

Stack technique & dépendances OSS

L'intégralité de la stack est libre. Chaque outil est listé avec sa licence d'origine, conformément à l'esprit OSS.

Frontend

Outil Version Licence Rôle
React 18 MIT UI déclarative
Vite 8 MIT Build & dev server
TypeScript 5 Apache-2.0 Typage statique
TailwindCSS 3 MIT Styling utility-first
TanStack Query 5 MIT Cache & data fetching
React Router 6 MIT Routing client
Zod 3 MIT Validation de schémas
DOMPurify 3 (Apache-2.0 OR MPL-2.0) Sanitization HTML

Backend

Outil Licence Rôle
Supabase Apache-2.0 Postgres + Auth + Edge Functions
PostgreSQL PostgreSQL License Base de données
Deno MIT Runtime des Edge Functions

Qualité & tests

Outil Licence Rôle
Vitest MIT Test runner
Testing Library MIT Tests composants React
ESLint MIT Lint
jsdom MIT DOM headless pour tests

Infrastructure

Outil Licence Rôle
nginx BSD-2-Clause Serveur statique en prod
Docker Apache-2.0 Conteneurisation

Démarrage rapide

Prérequis

  • Node.js ≥ 18 (testé sur 20 LTS)
  • npm (ou pnpm)
  • Un projet Supabase (offre gratuite suffisante)

Installation

git clone https://github.com/Flavien-Dragamig/AOMaster-oss.git
cd AOMaster-oss
cp .env.example .env
npm install
npm run dev

L'application est servie sur http://localhost:5173.

Configuration

Toutes les variables nécessaires sont documentées dans .env.example. Les principales :

Variable Côté Description
VITE_SUPABASE_URL client URL du projet Supabase (https://xxx.supabase.co)
VITE_SUPABASE_ANON_KEY client Clé anon publique du projet
SUPABASE_SERVICE_ROLE_KEY server Clé service-role (Edge Functions uniquement)
SITE_URL server URL canonique de l'app (pour les emails)
ADMIN_EMAIL / ADMIN_PASSWORD server Compte admin bootstrap (Edge Function create-admin)

⚠️ Ne jamais committer un .env rempli. Seul .env.example doit être versionné.

Mise en place de Supabase

  1. Créer un projet sur supabase.com.

  2. Renseigner VITE_SUPABASE_URL et VITE_SUPABASE_ANON_KEY dans .env.

  3. Appliquer le schéma :

    npx supabase login
    npx supabase link --project-ref VOTRE_REF
    npx supabase db push
    
  4. Déployer les Edge Functions :

    npx supabase functions deploy
    
  5. Définir les secrets côté Edge Functions :

    npx supabase secrets set SITE_URL=http://localhost:5173
    npx supabase secrets set ADMIN_EMAIL=admin@example.com
    npx supabase secrets set ADMIN_PASSWORD='ChangezMoi!2026'
    

Déploiement

Build de production

npm run build      # génère dist/
npm run preview    # sert dist/ localement pour validation

Docker (nginx)

Un Dockerfile multi-stage est fourni à la racine :

docker build -t aomaster .
docker run -p 8080:80 --env-file .env aomaster

L'image finale est basée sur nginx:alpine et sert le bundle statique avec la configuration nginx.conf incluse (gzip, fallback SPA).

Cibles compatibles

Le bundle étant 100 % statique, n'importe quel hébergeur de fichiers statiques convient : Cloudflare Pages, Vercel, Netlify, OVH, Scaleway, serveur dédié + nginx, etc. Seul prérequis : pouvoir injecter les variables VITE_* au moment du build.

Scripts npm

Commande Effet
npm run dev Serveur de dev Vite (hot reload)
npm run build Build de production (dist/)
npm run preview Sert le build localement
npm run lint ESLint sur tout le projet
npm test Suite Vitest (run unique)
npm run test:watch Vitest en mode watch

Structure du projet

.
├── src/
│   ├── components/     # composants UI réutilisables
│   ├── pages/          # routes (React Router)
│   ├── contexts/       # contextes React (auth, tracking, toast)
│   ├── hooks/          # hooks custom
│   ├── lib/            # client Supabase, utils
│   ├── services/       # appels API métier (BOAMP, TED)
│   ├── data/           # référentiels statiques (départements, CPV)
│   └── tests/          # setup et fixtures de tests
├── supabase/
│   ├── migrations/     # schéma Postgres versionné
│   ├── functions/      # Edge Functions Deno
│   ├── config.toml
│   └── seed.sql
├── scripts/            # scripts utilitaires (setup, fixtures)
├── docs/screenshots/   # captures du README
├── Dockerfile          # image nginx multi-stage
└── nginx.conf          # config nginx pour le SPA

Sources de données

AOMaster s'appuie exclusivement sur des sources publiques ouvertes :

Source URL Licence des données
BOAMP — Bulletin officiel des annonces des marchés publics boamp.fr / data.gouv.fr Licence Ouverte 2.0 (Etalab)
TED — Tenders Electronic Daily (UE) ted.europa.eu Réutilisation libre — conditions TED
place — Plateforme des achats de l'État place.marches-publics.gouv.fr DCE publics, lecture seule

Tous les accès se font dans le respect des conditions de réutilisation publiées par chaque source. AOMaster ne stocke pas les DCE — il les relaie vers le profil acheteur officiel.

Tests & qualité

npm test

81 tests Vitest + Testing Library, couvrant les transformateurs BOAMP, le cache TanStack Query, les utilitaires de département, et les schémas Zod côté API.

npm run lint exécute ESLint avec la configuration TypeScript stricte fournie.

Contribuer

Les contributions sont bienvenues. Lire d'abord CONTRIBUTING.md pour le workflow (issues, branches, Conventional Commits, revue de PR).

Pour signaler un bug ou proposer une évolution : ouvrir une issue sur github.com/Flavien-Dragamig/AOMaster-oss/issues.

Sécurité

Si vous identifiez une faille, ne pas ouvrir d'issue publique. Contacter directement : security@dragamig.fr. Une réponse est faite sous 72 h ouvrées.

Changelog

Voir CHANGELOG.md. Le projet suit SemVer et Conventional Commits.

À propos

Créé par Studio Dragamig avec l'aide de Claude d'Anthropic.

Studio Dragamig est un studio de Vibe Coding indépendant qui conçoit des outils web sur mesure pour PME et associations. Une partie significative du code, de la documentation et de l'extraction open-source de ce projet a été produite avec l'assistance d'un agent LLM (Claude, Anthropic) sous supervision humaine. Les choix d'architecture, les revues et la validation finale restent de la responsabilité de Dragamig SAS.

Remerciements

  • L'équipe Etalab et l'écosystème data.gouv.fr pour la mise à disposition ouverte du BOAMP.
  • L'Office des publications de l'Union européenne pour la réutilisation libre de TED.
  • Les mainteneurs des projets OSS listés ci-dessus, sans qui AOMaster n'existerait pas.
  • Pexels pour les images d'illustration de la page d'accueil (licence permissive).

Licence

MIT — Copyright © 2026 Dragamig SAS.

Vous êtes libre d'utiliser, modifier, redistribuer ce code, y compris à des fins commerciales, à condition de conserver l'avis de copyright et la licence. Aucune garantie n'est fournie.

Un projet en tête autour de AOMaster ?

Studio, intégration, déploiement sur mesure : parlons-en.