Full-Stack & Applied AI
PixiEstim
An intelligent software project estimation platform that automates document processing, feature extraction, complexity classification, and effort estimation using AI and RAG while keeping human validation at the core of the workflow.
Role
Software Engineer — Full-Stack & Applied AI
Technologies
The problem
Software project estimation requires teams to manually analyse project documents, identify functional requirements, associate those requirements with estimation scales, evaluate complexity, and consolidate the resulting estimates. This process can become repetitive, time-consuming, and difficult to standardize when several projects and stakeholders are involved.
The solution
PixiEstim centralizes the complete estimation workflow in a single platform. Project documents are uploaded and processed asynchronously, functional features are automatically extracted, historical estimation knowledge can be retrieved through a RAG pipeline, and AI-assisted complexity estimations are generated while keeping Sales and Production teams in control through explicit validation steps.
System Architecture
PixiEstim uses a distributed architecture composed of a Next.js frontend, a NestJS backend responsible for business logic, and a dedicated FastAPI service for document processing and AI workloads. PostgreSQL and Prisma manage structured business data. Redis and BullMQ handle asynchronous jobs, MinIO stores uploaded project documents, Qdrant provides vector search over historical estimation knowledge, and Ollama hosts the local language and embedding models. The services are containerized with Docker and integrated into a Jenkins-based CI/CD workflow.
Technical challenges
- → Processing project documents without blocking requests handled by the main backend.
- → Extracting structured software features from heterogeneous specifications and uploaded documents.
- → Maintaining a reliable project state across document processing, feature extraction, validation, and estimation stages.
- → Retrieving useful historical estimations while avoiding irrelevant contextual information.
- → Combining AI-generated recommendations with deterministic business rules and estimation scales.
- → Keeping human validation at the center of the workflow instead of automatically accepting AI-generated results.
- → Coordinating frontend, backend, AI services, databases, object storage, queues, and vector search within a single workflow.
Key engineering decisions
- → Separated AI and document-processing workloads into a dedicated FastAPI microservice instead of adding them directly to the NestJS backend.
- → Used Redis and BullMQ for long-running asynchronous processing so document analysis does not block the main API.
- → Used MinIO object storage for project files instead of storing binary documents directly in PostgreSQL.
- → Used PostgreSQL and Prisma for strongly structured business entities such as projects, users, clients, services, features, and estimations.
- → Used Qdrant to perform semantic retrieval over historical estimation knowledge.
- → Used locally hosted models through Ollama to keep control over the AI execution environment.
- → Introduced explicit validation stages for extracted features and generated estimations before they become part of the final project estimate.
- → Used project status transitions to expose asynchronous pipeline progress clearly to the frontend.
Results
- ✓ Built an end-to-end estimation workflow from document upload to validated software effort estimation.
- ✓ Automated the extraction and structuring of functional requirements from project documents.
- ✓ Integrated historical estimation knowledge into the estimation process through a RAG pipeline.
- ✓ Implemented asynchronous document processing to keep the application responsive during long-running AI operations.
- ✓ Provided Sales and Production teams with a shared workflow for reviewing features and estimations.
- ✓ Designed a modular architecture where business logic, AI workloads, storage, queues, and vector retrieval remain clearly separated.