tendr

Four production systems, prototype to revenue in five months.

  • Independent Engagement
  • Sole-authored
  • Nov 25 - May 2026
  • Remote, Dublin

The problem

An early-stage AI procurement startup targeting Irish public procurement. Small organisations do not bid for public contracts they never see, and the notices that would tell them are scattered across a government portal in formats built for lawyers rather than for machines.

The constraints

  • A domain I had not worked in. I learned the notice formats and tender structures from the source data.
  • Public-sector-adjacent data, so no egress to third-party AI providers. That ruled out the hosted-API route on day one and made self-hosted inference the architecture rather than an optimisation.
  • Four systems to production within two quarters.
  • A fragmented public data source that would break the pipeline if it was scraped naively.

What I built

  • Data acquisition: Playwright browser automation ingesting Irish public procurement notices into a normalised PostgreSQL schema, with field-level change tracking, versioned document archiving, circuit breakers, and dead-letter isolation so a single bad document cannot take the batch down.
  • Inference engine: Haystack 2 with locally hosted LLMs via Ollama for document understanding, hierarchical summarisation and tender-to-organisation matching, with embedding-based deduplication, staleness detection and automated regeneration as source documents change.
  • Platform: a multi-tenant Flask and SQLAlchemy SaaS with defence in depth on tenancy, application-layer context plus PostgreSQL row-level security, JWT-based RBAC and Stripe billing. Cross-tenant leaks are structurally impossible rather than procedurally unlikely.
  • Infrastructure: four Terraform stacks, including a self-hosted 24B-parameter LLM on GPU EC2 with a Lambda bridge that translates queue depth into a CloudWatch metric to drive auto-scaling, and workers that scale to zero.
  • Asynchronous orchestration across 15+ Celery and Valkey queues with distributed locking and dead-letter handling, and engineering standards from day one: type checking, linting, AAA-pattern testing, versioned migrations, Conventional Commits.

The outcome

Sole author of all four production systems: 1,264 commits over 156 days, 24 November 2025 to 29 April 2026, across 93 tagged releases.

Per system, first commit to first production tag: data acquisition 57 days, inference engine 9 days, infrastructure 4 days, platform 100 days. Prototype to live, subscription-billed product in five months.

What was handed over

Four independently deployable systems with their own release histories, and an infrastructure definition that reproduces the whole estate from source. The code and everything in it belongs to the client and stayed with them at the end of the engagement. The figures above are my own delivery record of what I shipped and when, kept as I worked rather than reconstructed afterwards, and they describe my contribution rather than the client's codebase.

Get in touch