Construction · Belgium

Website for a general construction company

In productionSoftware Engineering · DevSecOps

Context

A general construction company in Belgium wants a multilingual website that generates leads: contact form, appointment booking and instant answers to common questions.

Problem and constraints

  • Forms and an assistant that must stay up: every outage costs leads.
  • Repeated incidents caused by the database hosted by a third-party provider.
  • A client who wants to keep control of its data and costs.

Architecture decisions and trade-offs

  • A conversational assistant built into the site, later moved to a self-hosted LLM: data sovereignty and predictable cost, at the price of one more service to operate.
  • E-mail sent over SMTP instead of a SaaS provider, with its own architecture decision.
  • A versioned database schema: 12 migrations, with row-level security (RLS) and triggers.
  • Every incident is tracked in a backlog (over 50 entries) and linked to the decision it led to.

Security and delivery

  • Jenkins pipeline: quality gates, image build and push, automatic opening or update of the PR, re-sync with the main branch and re-verification before merging.
  • Production deployment waits for explicit human approval.
  • SemVer versioning: 11 tagged releases, the latest being v2.4.0.

Results and current state

  • In production, conversational assistant included.
  • A 12-test end-to-end suite run against the production site; 24 test files (Vitest, Playwright).
← All case studies