Address
Utrecht, Veenendaal

Work Hours
Monday to Friday: 9am to 5pm
Weekend: 10am to 5pm

The second phase of QIntelligence at Qfact: an automated content analysis system that turns the documents users already upload into project recommendations, built on the indexing foundation from phase one.

  • ClientQfact, a SaaS platform for complex analysis
  • Period2023 to 2025
  • RoleLed the initiative end to end
  • Built onThe QIntelligence indexing foundation
  • Built inside the platform as a service among services, behind the same API layer as everything else.
  • Less administrative load on the users who had been doing this reading themselves.
  • Recommendations that do not change depending on who did the reading that week.

Context

Phase one made the documents searchable. The value was in what they say. Qfact users were reading their own uploads to work out what a project needed, which is careful work, slow work, and work that produces a different answer depending on who does it that week.

The challenge

A recommendation the user does not trust is worse than no recommendation, because they check it by hand and pay for both. So it had to be good enough on real customer documents rather than on a curated sample. It also had to live inside the platform as a service among services, not as a demonstration beside it.

What I did

  • Led the initiative end to end, from the indexing foundations in phase one through to this system, as one arc rather than two projects that happened to follow each other.
  • Built the analysis service in Python with Flask, inside the existing microservices landscape, reading from the indexed content phase one had made available.
  • Turned analysis output into recommendations, so what the system produces is a usable answer for the user in front of it, not a report about the document.
  • Validated it against real documents, iterating on what customers actually upload, because that is the only sample that settles whether it works.
  • Delivered it as platform capability, behind the same API layer as everything else, so the rest of the platform could use it without knowing what sits behind it.

The outcome

  • Automated content analysis delivered and in use, not a proof of concept left on a branch.
  • The document reading that used to sit with the user is done by the platform.
  • Better quality project recommendations, and one arc from the indexing foundations to the analysis on top of them.

Technologies used

  • Python: The analysis service.
  • Flask: The service framework.
  • Elasticsearch: The indexed document content the analysis reads.
  • Microservices: The architecture the service was built into.
  • GraphQL: The API layer over the platform.
  • OAuth 2.0: Authorisation on the platform APIs the analysis service is reached through.
  • Large language models: The models behind the content analysis.
  • OpenAI: One of the model providers used.
  • Llama 2: One of the models used.
  • RAG: Retrieval over the indexed documents feeding the analysis.
  • Playwright: End to end coverage of the analysis flows.
  • Jest: Automated tests around the service.

The foundation under this one is written up in the document indexing and search platform.