Archived
d79a7a9708
Serve a single self-contained page from nginx while the marketing site is rebuilt, so the domain shows the Neuron brand rather than a stale product site. Inline the real wordmark and favicon as data URIs to keep the page free of external requests and safe under a strict CSP.
92 lines
3.5 KiB
Markdown
92 lines
3.5 KiB
Markdown
# coming-soon
|
|
|
|
Static placeholder page served at `neurontechnologies.ai` while the site is rebuilt.
|
|
|
|
## What it is
|
|
|
|
A single self-contained `index.html` — inline CSS, no frameworks, no build step, and
|
|
zero external network requests. The Neuron wordmark and favicon are inlined as
|
|
`data:` URIs, so the page renders identically offline and under a strict CSP.
|
|
|
|
Brand assets are the real masters from `neuron-technologies/assets`:
|
|
|
|
| Asset | Source |
|
|
| --- | --- |
|
|
| Light wordmark | `branding/wordmarks/neuron-wordmark-on-light@2x.png` |
|
|
| Dark wordmark | `branding/wordmarks/neuron-wordmark-on-dark@2x.png` |
|
|
| Favicon | `branding/icons/neuron-icon-32.png` |
|
|
|
|
Brand blue is `#2996F8`, sampled from the icon master.
|
|
|
|
## Regenerating index.html
|
|
|
|
`index.html` is committed and is the file that ships. To rebuild it from updated
|
|
brand assets, re-inline the three images above as base64 `data:` URIs. There is no
|
|
build tooling and none is wanted — keep it a single file.
|
|
|
|
## Container
|
|
|
|
`nginx:alpine`. Cloud Run injects `PORT` (8080); the nginx entrypoint runs
|
|
`envsubst` over `/etc/nginx/templates/default.conf.template` before starting, which
|
|
is how `listen ${PORT}` resolves. `/healthz` returns `200 ok`. Every other path
|
|
falls through to `index.html`.
|
|
|
|
```sh
|
|
docker build --platform linux/amd64 -t coming-soon:local .
|
|
docker run --rm -p 8080:8080 -e PORT=8080 coming-soon:local
|
|
curl -sI http://localhost:8080/
|
|
```
|
|
|
|
## Deploy
|
|
|
|
The image lives in Artifact Registry:
|
|
|
|
```
|
|
us-central1-docker.pkg.dev/neuron-785695/neuron-marketing/coming-soon:v1
|
|
```
|
|
|
|
`neurontechnologies.ai` is fronted by Cloudflare, then a GCP global load balancer
|
|
(`marketing-backend-prod`) with serverless NEGs pointing at three Cloud Run
|
|
services. Deploy to all three or the regions will serve different pages:
|
|
|
|
| Service | Region | NEG |
|
|
| --- | --- | --- |
|
|
| `marketing-prod-us` | `us-central1` | `marketing-neg-us` |
|
|
| `marketing-prod-eu` | `europe-west1` | `marketing-neg-eu` |
|
|
| `marketing-prod-apac` | `asia-northeast1` | `marketing-neg-apac` |
|
|
|
|
```sh
|
|
IMG=us-central1-docker.pkg.dev/neuron-785695/neuron-marketing/coming-soon:v1
|
|
for pair in us-central1:marketing-prod-us europe-west1:marketing-prod-eu asia-northeast1:marketing-prod-apac; do
|
|
gcloud run deploy "${pair##*:}" --project=neuron-785695 --region="${pair%%:*}" \
|
|
--image="$IMG" --platform=managed --port=8080 --allow-unauthenticated \
|
|
--clear-env-vars --clear-secrets \
|
|
--cpu=1 --memory=512Mi --min-instances=1 --max-instances=10
|
|
done
|
|
```
|
|
|
|
`--clear-env-vars --clear-secrets` is deliberate: a static nginx has no business
|
|
holding live Stripe, Supabase, or Anthropic credentials. Memory must be at least
|
|
512Mi because these services run with CPU always allocated.
|
|
|
|
No DNS record or domain mapping was touched to put this page up, and none needs to
|
|
be touched to take it down.
|
|
|
|
## Rollback
|
|
|
|
Cloud Run revisions are immutable, so the previous application revisions still
|
|
carry their own image, env vars, and secret bindings. Rolling back is a pure
|
|
traffic change:
|
|
|
|
```sh
|
|
gcloud run services update-traffic marketing-prod-us --project=neuron-785695 \
|
|
--region=us-central1 --to-revisions=marketing-prod-us-00101-98x=100
|
|
gcloud run services update-traffic marketing-prod-eu --project=neuron-785695 \
|
|
--region=europe-west1 --to-revisions=marketing-prod-eu-00099-4tz=100
|
|
gcloud run services update-traffic marketing-prod-apac --project=neuron-785695 \
|
|
--region=asia-northeast1 --to-revisions=marketing-prod-apac-00077-jp8=100
|
|
```
|
|
|
|
Those three revisions ran image `marketing:ci-047be5ae` and were serving 100% of
|
|
traffic immediately before this placeholder went live.
|