Back to Projects
Developer Tools Quality AI

Fleury

Software Quality & AI Test Intelligence

Fleury helps engineering and QA teams understand what their software does, which behaviors have been tested and what needs attention before release. It brings application exploration, test discovery and execution, behavioral graphs, quality gates and evidence into one workbench. Its AI assistant helps investigate findings, propose links between behavior and tests, recommend and generate tests, and prepare quality briefs for different stakeholders. I conceived the product, its analysis algorithms and distributed architecture, from the interface to enterprise and self-hosted delivery.

Next.js TypeScript Go Rust PostgreSQL Temporal Kafka gRPC AI integration Playwright Appium Docker

Problem

Source code, tests and real application behavior often live in separate tools. A passing test suite does not explain which user journeys remain unexplored, and a failed run can leave teams without enough evidence to diagnose the problem or decide whether a release is ready.

Solution

Fleury turns tests and observed application behavior into a traceable basis for release decisions. Teams can navigate a behavioral graph, inspect a failure, review a quality gate and use AI to identify useful follow-up work. Correlations are tied to the source revision, proposals require review, and generated tests carry execution evidence before they count as completed work.

# What You Can Do

Explore application behavior

Discover web screens, API endpoints and mobile journeys. Follow states and transitions in a graph, inspect captured evidence, and explore stateful or isolated branches.

Discover and run tests

Connect a repository, discover supported test suites, build a selection and follow its execution. Inspect failures and compare results across runs.

Review release readiness

Use quality scores and gates for tests, exploration or their combined evidence. Review risks, record a decision and share the result with a bounded viewer or CI webhook.

Investigate with an AI assistant

Ask about a finding, run or selected graph element. Review proposed behavior-to-test links with supporting evidence, contradictions and confidence before accepting them.

Turn recommendations into tests

Review AI recommendations and generated test diffs, then validate them against an exact source revision in an isolated workspace. Execution results remain attached to the recommendation.

Brief the right stakeholders

Prepare AI-assisted quality briefs for QA, engineering, product, release and compliance. Review cited evidence, publish a version and export it in English or French.

Work across enterprise environments

Manage teams, roles, SSO and provisioning. Use the workbench or CLI with cloud, self-hosted and air-gapped delivery options.

# My Contribution

# Full Stack & Infrastructure

Frontend

Next.js App Router React TypeScript Tailwind CSS TanStack Query next-intl Motion Shared UI package Storybook OpenAPI client generation

Backend & Analysis

Go Rust REST / OpenAPI Protobuf / gRPC pgx Source analysis Behavior analysis

AI & Test Synthesis

LLM gateway Durable AI jobs Evidence manifests Capability policies Provider provenance Human review Isolated synthesis worker Versioned quality briefs

Execution & Events

Temporal Kafka PostgreSQL outbox Go runners Playwright Chrome DevTools Protocol Appium UiAutomator2 XCUITest

Data & Identity

PostgreSQL Row-level security Object storage OIDC Identity broker SCIM Secrets store

Infrastructure & Delivery

Docker Compose OpenTelemetry Prometheus Grafana Self-hosted CLI Air-gap release bundles Signed releases SBOM

# Technical Challenges

Representing meaningful application states without multiplying equivalent screens or losing the provenance of a transition.

Keeping exploration and test intelligence independent while correlating results from the same source revision.

Recovering long-running execution after interruptions without duplicating commands, losing evidence or leaking isolated environments.

Supporting different browser, API and mobile runners while exposing their actual capabilities and limitations.

Grounding AI proposals in execution evidence and keeping human review, generated code, test results and release decisions as distinct steps.

Delivering the same product in cloud and self-hosted environments with consistent identity, access and release contracts.

# System Architecture

Fleury separates product control, durable orchestration, runner execution and the event plane. The Go control plane owns PostgreSQL state and commands; Temporal coordinates long-running work, and separate runner hosts act on web, API and mobile targets. Rust analyzers run across process boundaries. Evidence is stored in object storage, secrets in a secrets store, and reviewed AI jobs use a provider adapter. The views below distinguish this runtime from the Kafka/CDC plane, the self-hosted package and container and Kubernetes deployment variants.

Key Features

  • Web, API and mobile application exploration
  • Behavioral graphs with traceable states and transitions
  • Test discovery, execution and failure investigation
  • Source-revision correlation and evidence inspection
  • Contextual AI assistant and reviewed behavior-to-test correlations
  • AI test recommendations, generation and isolated validation
  • Quality gates, CI webhooks and shareable decisions
  • Evidence-grounded quality briefs in English and French
  • Enterprise access and cloud/self-hosted delivery
100%

The Go control plane owns product state in PostgreSQL. Temporal coordinates long-running work, while separate runner hosts execute application actions and return evidence.

Request / responseQueued workPersistent dataEvents / callbacksControl / operations
Fleury infrastructure · Control & execution plane The Go control plane owns product state in PostgreSQL. Temporal coordinates long-running work, while separate runner hosts execute application actions and return evidence. The connection table below provides a text equivalent of every arrow. FLEURY RUNTIME · CONTROL PLANE & FOUNDATIONS Containerized services · public REST / OpenAPI boundary RUNNER HOSTS Separately provisioned worker environments ISOLATED WORKSPACE No network · shared Unix socket Browser / Fleury CLI → Next.js dashboard: HTTPS Next.js dashboard → Identity service: OIDC Next.js dashboard → Go control plane: REST / OpenAPI Browser / Fleury CLI → Go control plane: CLI: direct API access Go control plane → PostgreSQL: SQL · product authority Go control plane → Secrets store: Secret resolution PostgreSQL → Command relay: Durable commands Command relay → Temporal server: Workflow dispatch Temporal server → Go execution workers: Temporal task queues Go execution workers → Rust analyzers: Bounded analysis Go control plane → Object storage: Evidence API Go control plane → Governed AI jobs: Policy-checked AI work Go execution workers → Runner control / agents: mTLS · commands / receipts Runner control / agents → Web / API / Mobile: Browser / API / device actions Go control plane → Test synthesis worker: Unix socket + shared workspace Runner control / agents → Go control plane: Evidence receipts → control plane CLIENT Browser / Fleury CLI User and automation clients Authenticated product access SERVICE Next.js dashboard App Router + BFF Generated OpenAPI client EXTERNAL Identity service OIDC authentication / broker SSO · SAML / LDAP via broker SERVICE Go control plane REST / JSON · tenant / RBAC Product + command authority DATA STORE PostgreSQL RLS + canonical outbox Product state / command journal DATA STORE Secrets store Secret references Runner / integration credentials WORKER Command relay Durable dispatch + fencing Leases, replay and recovery SERVICE Temporal server Self-hosted workflows Durable state / task queues DATA STORE Object storage Artifact storage Evidence + checksums SERVICE Rust analyzers Behavior / source analysis Explicit process boundaries WORKER Go execution workers Temporal tasks + activities Runner dispatch / recovery WORKER Governed AI jobs External inference adapter Evidence manifests + review WORKER Test synthesis worker Isolated source workspace Network disabled · test proof WORKER Runner control / agents Go · mTLS / internal gRPC Leases, commands and receipts EXTERNAL Web / API / Mobile Playwright + CDP · Appium Application under inspection HTTPS OIDC REST / OpenAPI CLI: directAPI access SQL · productauthority Secretresolution Durablecommands Workflowdispatch Temporal taskqueues Boundedanalysis Evidence API Policy-checkedAI work mTLS ·commands /receipts Browser / API/ deviceactions Unix socket +sharedworkspace Evidencereceipts →control plane
Scroll inside the canvas to explore. Zoom for detail, or fit the whole diagram.

Authority and transport are different

The Go control plane and PostgreSQL own product state. Event transport and derived read models have separate responsibilities, shown in the second view.

Runner and analysis boundaries

Temporal coordinates durable work. Runner agents act on applications; Playwright performs browser actions and CDP observes. Rust analyzers are process boundaries, not an invented public microservice.

Self-hosted is a distinct deployment profile

The mono-host package dispatches the PostgreSQL command journal directly to Temporal without requiring Kafka. Its runner pools live on dedicated hosts; synthesis uses a shared workspace/socket with network disabled.

Read all connections (16)
FromToProtocol / responsibilityFlow
Browser / Fleury CLINext.js dashboardHTTPSRequest / response
Next.js dashboardIdentity serviceOIDCRequest / response
Next.js dashboardGo control planeREST / OpenAPIRequest / response
Browser / Fleury CLIGo control planeCLI: direct API accessRequest / response
Go control planePostgreSQLSQL · product authorityPersistent data
Go control planeSecrets storeSecret resolutionControl / operations
PostgreSQLCommand relayDurable commandsPersistent data
Command relayTemporal serverWorkflow dispatchQueued work
Temporal serverGo execution workersTemporal task queuesQueued work
Go execution workersRust analyzersBounded analysisRequest / response
Go control planeObject storageEvidence APIPersistent data
Go control planeGoverned AI jobsPolicy-checked AI workQueued work
Go execution workersRunner control / agentsmTLS · commands / receiptsRequest / response
Runner control / agentsWeb / API / MobileBrowser / API / device actionsRequest / response
Go control planeTest synthesis workerUnix socket + shared workspaceControl / operations
Runner control / agentsGo control planeEvidence receipts → control planePersistent data

Explicit ownership

The control plane and PostgreSQL remain authoritative; event transport and derived projections do not silently replace product state.

Independent evidence

Tests and exploration can run separately. Correlation requires matching source revisions, so a missing second run does not become fabricated coverage.

Recoverable execution

Durable commands, Temporal workflows and isolated runners preserve execution context across interruption and recovery.

AI with reviewable evidence

AI proposes correlations, tests and briefs from bounded evidence. Review and actual execution determine what is accepted; the quality engine owns the release decision.

# User Flow & Journey

Select a target

Step 01

Choose a web application, API or mobile build and the relevant source revisions.

Explore or test

Step 02

Launch an exploration or select supported test suites. Each workflow can run independently.

Follow execution

Step 03

Track activity and inspect the states, transitions and evidence produced by the runners.

Investigate & improve

Step 04

Inspect failures and evidence, ask the contextual assistant and review correlations or proposed tests.

Decide & communicate

Step 05

Review the quality gate, validate follow-up tests and publish a stakeholder brief or shared decision.

Flow Analysis

Connect a target or repository, investigate real results, review AI-assisted follow-up work and communicate a release decision.

Discuss this Project
← Back to Projects Contact Me →