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).