Skip to main content

Build process

The client is built with Vue CLI (Webpack) and served as static files via Nginx.
Build output goes to dist/ — ~40 CSS chunks + ~44 JS chunks with content hashing for cache busting.

Docker

File: Dockerfile Multi-stage build:
Build with:

Nginx configurations

Six environment-specific Nginx configs:

Common Nginx settings

All configs share:
  • worker_connections: 1024
  • sendfile: on
  • keepalive_timeout: 65
  • resolver: 127.0.0.11 (Docker DNS)
  • SPA routing: try_files $uri $uri/ /index.html

API proxy (staging/testing/dev)

In non-production environments, Nginx proxies /api requests to the backend:
In production, the API lives on the same domain (tutorbloc.com/api) but is handled by a separate server/load balancer, not the client Nginx. The production Nginx config has no proxy rules.

SSL certificates

Let’s Encrypt certificates at:
The -initialise configs are used during first deployment to serve the ACME challenge before SSL is set up.

CI/CD

No CI/CD pipeline found. No Bitbucket Pipelines, GitHub Actions, or any other CI config exists in the client repo. Deployment appears to be manual Docker builds.

Testing

No test framework configured. No Jest, Cypress, Playwright, or any test files exist. The package.json has no test script.

Static assets

Public directory

index.html integrations

The HTML template loads several third-party scripts:

Open Graph tags

Twitter Card and Schema.org microdata also configured.