This repository has been archived on 2026-08-20. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
will.anderson d79a7a9708 Add static coming-soon placeholder for neurontechnologies.ai
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.
2026-08-16 23:55:56 -05:00

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.