← Back to projects

Full-Stack & Applied AI

PixiEstim

An intelligent software project estimation platform that transforms heterogeneous project documents into structured, AI-assisted software estimations through controlled LLM workflows, historical RAG context, deterministic business rules, and human validation.

PixiEstim project

Role

Software Engineer — Full-Stack & Applied AI

Technologies

Next.js React TypeScript Tailwind CSS NestJS FastAPI Python PostgreSQL Prisma Redis BullMQ MinIO Qdrant Ollama OpenDataLoader RAG Prompt Engineering Human-in-the-Loop Langfuse Docker Docker Compose Jenkins CI/CD

The problem

Software project estimation at PixiMind relied heavily on manually reading heterogeneous requirements documents, identifying functional requirements, selecting the appropriate estimation scales, evaluating implementation complexity, and consolidating effort estimates. The process could become time-consuming, difficult to standardize, and strongly dependent on the experience of the people involved, especially when documents were large, incomplete, or ambiguous.

The solution

PixiEstim centralizes the software estimation workflow in a single platform. Project documents are uploaded and processed asynchronously, converted into structured and context-preserving segments, and analyzed through specialized AI workflows. The system proposes software features, associates validated features with internal estimation scales, evaluates their complexity, enriches decisions with similar historical cases through RAG, converts complexity levels into deterministic effort values, and keeps Sales and Production users in control through explicit human validation stages.

System Architecture

PixiEstim follows a distributed architecture composed of a Next.js frontend, a NestJS backend responsible for business logic, authorization, workflow coordination, and persistence, and a dedicated FastAPI service responsible for document processing and AI orchestration. PostgreSQL and Prisma manage structured business data. Redis and BullMQ support asynchronous processing, MinIO stores uploaded project documents, Qdrant stores and retrieves historical estimation knowledge through vector search, and Ollama provides local LLM inference. The application components are containerized with Docker and integrated into Jenkins-based CI/CD workflows.

PixiEstim system architecture
System architecture illustrating the main services, infrastructure components, and communication flows.

Applied AI

AI Engineering

PixiEstim implements a controlled AI workflow rather than delegating the full estimation process to a language model. Each intelligent stage has a specific responsibility, limited context, specialized prompt, expected structured output, application-level validation, fallback rules, traceability, and human validation where required.

PixiEstim AI pipeline
Controlled AI workflow from document preparation to human-validated software estimation.

AI Pipeline

The workflow is decomposed into specialized and independently controlled stages instead of relying on a single end-to-end prompt.

01

Document ingestion

Project documents are uploaded, stored in MinIO, and submitted to an asynchronous processing workflow instead of being processed directly inside the request lifecycle.

02

Document extraction

FastAPI retrieves the document, detects its format, selects the appropriate extractor, and converts PDF, DOCX, or TXT content into a common internal representation.

03

Normalization and reconstruction

Formatting noise and redundant visual information are removed while preserving section hierarchy, reading order, titles, paragraphs, lists, tables, and source provenance.

04

Contextual segmentation

Large documents are divided along natural document boundaries into context-preserving segments compatible with the local model context window.

05

Project synthesis

A specialized LLM call creates a global project context from the project name, main document sections, and relevant metadata before detailed feature extraction begins.

06

Progressive feature extraction

Document segments are processed progressively in batches. Each batch receives the global project context and previously extracted feature titles to preserve coherence and reduce duplication.

07

Structured output validation

Generated outputs are parsed as JSON and validated against expected fields, formatting rules, closed candidate lists, and application-level constraints before persistence.

08

Feature deduplication

Generated feature titles are normalized and compared using a configurable similarity mechanism so strongly similar proposals can be consolidated before validation.

09

Human feature validation

Generated features remain proposals. Authorized users can modify, remove, reorder, correct, or validate them, and only validated features can proceed to estimation.

10

Estimation-scale association

Validated features are associated with one or more estimation scales selected for the current project. The model can only choose from the closed list of configured scales.

11

Historical RAG retrieval

For each feature-scale pair, PixiEstim retrieves semantically similar historical estimation cases from Qdrant while applying metadata filtering and relevance controls.

12

Complexity classification

The model evaluates each feature-scale pair using the current requirement, estimation scale, allowed complexity levels, and retrieved historical references.

13

Deterministic effort calculation

The LLM does not generate arbitrary effort values. It selects a complexity level, and PixiEstim converts that level into effort using internally configured estimation values.

14

Human estimation validation

Production users review scale associations, complexity levels, calculated effort, fallback cases, and unassigned features before validating the final estimation.

Prompt Engineering

Task-specific prompts with constrained context, closed candidate sets, explicit rules, and structured outputs.

Project synthesis

Build a global project understanding before detailed analysis.

Output

Structured project summary

Feature extraction

Identify functional requirements from document segments.

Output

Structured JSON list of software features

Scale association

Determine which configured technical estimation scales apply to each validated feature.

Output

JSON associations restricted to authorized project scales

Complexity evaluation

Classify each feature-scale pair according to the allowed complexity scale.

Output

One value from the predefined complexity levels

Explicit model role for each AI task Task-specific and limited context Structured JSON output requirements Closed lists of authorized estimation scales Closed complexity scale Explicit forbidden outputs Application-level schema validation Previously extracted feature titles included during progressive extraction

RAG Engineering

Ground complexity evaluation with comparable historical software estimation cases without treating historical decisions as automatic answers.

Vector DB

Qdrant

Top K

2

Similarity threshold

≥ 0.55

Context

Historical cases

Embedded context

  • → Feature name
  • → Estimation scale
  • → Associated service
  • → Concerned part

Stored metadata

  • → Historical complexity
  • → Reference identifier
  • → Estimation scale
  • → Associated service
  • → Concerned part
  • → Embedding/index version

Key RAG decisions

  • ✓ Historical complexity is stored as metadata but excluded from the semantic text used to build the search vector.
  • ✓ The same embedding configuration and preprocessing are used for indexing and retrieval.
  • ✓ References are filtered according to the relevant estimation scale before being added to the prompt.
  • ✓ Only references meeting the configured similarity threshold are retained.
  • ✓ Historical references are presented to the model as comparison cases rather than answers to reproduce.

Human-in-the-Loop

Human validation is used as a control mechanism at two critical stages of the AI workflow.

1

Feature validation

Production or authorized users can edit, remove, reorder, deduplicate, and validate generated functional requirements. Only validated features enter the estimation pipeline.

2

Estimation validation

Users review associated scales, complexity classifications, calculated effort, fallback values, and unassigned features before approving the final estimation.

AI Reliability & Guardrails

Model outputs and retrieved context are validated before they can influence the business workflow.

Risk

Unparsable model response

Control

JSON syntax validation

Behavior

The response is rejected or retried before persistence.

Risk

Incomplete generated element

Control

Schema and required-field validation

Behavior

An invalid element can be discarded while keeping the remaining usable output.

Risk

Duplicate generated features

Control

Normalization and similarity comparison

Behavior

Strongly similar proposals are consolidated before human validation.

Risk

Unknown estimation scale

Control

Closed-list validation against project scales

Behavior

The association is rejected and the affected feature is flagged.

Risk

Invalid or missing complexity

Control

Validation against the predefined five-level complexity scale

Behavior

A technical fallback is applied and the result is explicitly marked for human review.

Risk

Out-of-domain historical reference

Control

Metadata filtering using the estimation scale

Behavior

The reference is excluded before augmented-context construction.

Risk

Low-relevance historical reference

Control

Configurable similarity threshold

Behavior

The reference is not injected into the prompt and its absence remains traceable.

Risk

Excessive RAG context

Control

Top-K result limitation

Behavior

Only the highest-ranked historical references are retained.

Risk

No reliable historical reference

Control

Validation of retrieved-result count

Behavior

The estimation continues without historical context and this execution mode is reported.

Risk

Blind reproduction of a historical estimate

Control

Explicit prompt instruction

Behavior

The model must reason from the current requirement and use historical cases only as comparison evidence.

LLM Observability

Instrumented around the FastAPI orchestration layer.

Langfuse
Project and execution identifier Model Prompt version Constructed input Raw model response Validated application result Execution duration Token consumption when available Retrieved RAG references Retrieval similarity scores Parsing errors Validation errors Fallback usage

Support debugging, compare prompt variants, identify slow AI workflow stages, examine retrieval context, detect recurrent failures, and distinguish raw LLM output from data accepted by the application.

Evaluation

No invented metrics

Operational observability is implemented, while a formal offline retrieval-quality benchmark is not reported as a completed result.

Currently observable

  • ✓ Execution duration
  • ✓ Prompt version
  • ✓ Model information
  • ✓ Raw output versus validated output
  • ✓ Retrieved references
  • ✓ Retrieval similarity scores
  • ✓ Parsing failures
  • ✓ Validation failures
  • ✓ Fallback usage
  • ✓ Token consumption when available

Offline benchmark targets

  • → Recall@K
  • → MRR
  • → RAG versus non-RAG estimation comparison
  • → Exact complexity agreement with human validation
  • → Within-one-level complexity agreement
  • → Structured-output validity rate
  • → Fallback rate
  • → p50 inference latency
  • → p95 inference latency

Technical challenges

Key engineering decisions

Results

Logo

Yessine

Eleuchi

© 2026

LinkedIn GitHub Email WhatsApp