- Form is on the home page in the `#contact` section.
- Submits to `POST /api/contact` (JSON response).
- Server sends the email via [Resend](https://resend.com). Configure:
-`RESEND_API_KEY` — your Resend API key.
-`CONTACT_TO` — where enquiries are sent.
-`CONTACT_FROM` — must be on a domain you've verified in Resend.
- Honeypot field (`website`) silently drops bots.
The "Let's Talk" buttons on service pages link back to the home `#contact` section, where the real form lives.
## Deployment
`Deploy.ps1` runs from your laptop. It tars the repo, scps it to the droplet, and runs `docker compose up --build` over SSH. Host nginx on the droplet terminates TLS for `www.lean-101.com.au` and proxies to `127.0.0.1:WEBSITE_APP_PORT` (default 8083) where this container binds.
First deploy:
```powershell
copy .env.production.example.env.production# then edit and set RESEND_API_KEY
./Deploy.ps1-RemoteHost<droplet-ip>
```
Subsequent deploys: same command. Add `-Logs` to tail logs after, `-SkipBuild` if only the env changed.
### Cutover (first deploy only)
The script deploys to `/srv/lean-101-website-flask` with container `lean101-website-flask` on port 8083, deliberately leaving the old SvelteKit container (`/srv/lean101-website`, port 8091) running. After verifying the new container is healthy, swap the nginx vhost on the droplet:
The droplet runs host nginx → localhost ports → docker containers. The clients app at `clients.lean-101.com.au` proxies to `127.0.0.1:8082`, this site to `127.0.0.1:8083`. Each app has its own compose project and bridge network; they don't share anything.
- The SvelteKit + Mongo stack was removed in favour of plain HTML so edits land directly. If you need anything from the prior stack, recover it from git history before this commit.
- During the restructure the v3.11 service pages were lost (they were never committed) and restored from the older `html-v3` versions in HEAD. The v3.11 service-page tweaks (e.g. CTA copy rebranded to "Let's Talk") will need to be re-applied.