A high-performance web platform for a construction firm specializing in ETICS insulation. Built to bridge modern frontend development with real-world business needs, focusing on SEO and lead generation.
A real website for a real business — currently live and operating.
A professional ETICS insulation firm needed a complete digital presence. No logo, no social media, and no website. I took total ownership of their digital identity, delivering a "0 to 1" solution:
- Brand Identity: Created a professional logo and visual style from scratch
- Social Strategy: Launched their Facebook page and optimized their Instagram presence
- The Platform: Developed a clean, SEO-optimized React site to bridge the gap between their craftsmanship and modern web standards
Netlify Forms handles contact submissions, eliminating backend complexity given there's no heavy business logic or database requirements involved.
| Category | Technology |
|---|---|
| Framework | React |
| Language | JavaScript |
| Styling | Tailwind CSS |
| UI Components | Shadcn UI |
| Testing | Vitest |
| Code Quality | SonarQube Cloud (main) + SonarQube Server (dev) |
| Staging | GitHub Pages |
| Production | Netlify |
| Forms | Netlify Forms |
- Node.js (v24 or higher)
# Install dependencies
npm install
# Run development server
npm run dev
# Run dev server accessible from other devices (e.g., mobile)
npm run dev -- --host
# Build for production
npm run build
# Run tests
npm run test
# Run tests with coverage report
npm run test:coverage
# Preview production build
npm run preview- Production: https://chrisert.pt
- Staging: https://fernandotonacoder.github.io/chrisert/
| Branch | Environment | Required Status Checks |
|---|---|---|
dev |
GitHub Pages (Staging) | Tests + Build, Lint, Security Audit, SonarCloud Analysis |
main |
Netlify (Production) | Tests + Build, Lint, Security Audit, SonarCloud Analysis, Enforce Dev-to-Main |
- Branch Protection: Both
mainanddevare protected with linear history required; all changes must go through PRs - Enforce Dev-to-Main: A required check on
mainblocks any PR not originating fromdev, ensuring all code goes through staging first - Automated Testing: Vitest + build verification runs on every PR to
devandmain - Security: Four complementary layers —
npm audit(dependency vulnerabilities, runs weekly and on every PR), Dependabot alerts (continuous dependency monitoring at the repo level), CodeQL (static analysis for code-level vulnerabilities), and SonarQube (security ratings, hotspots, and vulnerability scanning on bothmainanddev) - Deployments: Manually approved after push to respective branches; can also be triggered manually via Actions → Run workflow
- SonarQube: SonarQube Server (self-hosted) scans on every push to
devand can be triggered manually — it runs tests with coverage before sending results; SonarQube Cloud automatically analyzesmainand decorates PRs with quality feedback (SQ Server Community edition limitation: server does not support PR analysis) - Auto-Sync: After each push to
main, changes are automatically rebased ontodevto keep branches in sync
This project uses two SonarQube instances with complementary roles:
| Instance | Branch | Role |
|---|---|---|
| SonarQube Cloud | main |
Automatic analysis of production code; decorates PRs with quality feedback before merge |
| SonarQube Server (self-hosted on Azure) | dev |
Continuous analysis of active development; monitors code quality before it reaches main |
SonarQube Cloud handles PR decoration automatically via GitHub App. The self-hosted server runs via GitHub Actions on every push to dev. See docs/sonarqube-admin.md for administration notes.
The source code of this project is licensed under the MIT License.
Note: All branding, logos, images, and business-specific content are proprietary and belong to the client. Feel free to use this codebase as a learning resource or as inspiration for your own projects!
Fernando Tona
- GitHub: @fernandotonacoder
- LinkedIn: Fernando Tona
- Website: fernandotonacoder.github.io
Built with ❤️ for real-world business needs