Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions dev2/dev2-site
Original file line number Diff line number Diff line change
Expand Up @@ -1569,7 +1569,59 @@ def proxy_tuned(text, p):
mb = p.get("max_body", "512m")
return text.replace("__MAX_BODY__", mb).replace("proxy_read_timeout 300s;", "proxy_read_timeout 3600s;\n proxy_send_timeout 3600s;").replace("client_max_body_size " + mb + ";", "client_max_body_size " + mb + ";\n large_client_header_buffers 8 64k;")

def render_redirect_vhost(s, redirect_to):
"""A retired site (sites.d "redirect_to"): every host 308s to its new home, path and query kept.
redirect_to maps a host to its target origin, with "default" for the rest; "redirect_paths"
sends a path prefix elsewhere (c0upons.com/bbs). 308 keeps POST a POST (forms, webhooks).
Port 80 keeps the ACME location so the old certificate renews while the domain lasts."""
if "default" not in redirect_to: die(f"{s['site']}: redirect_to needs a \"default\" target")
hosts = site_domains(s) + [p["host"] for p in (s.get("proxies") or []) if p["host"] not in site_domains(s)]
groups = {}
for h in hosts:
groups.setdefault(redirect_to.get(h, redirect_to["default"]).rstrip("/"), []).append(h)
paths = "".join(f" location ^~ {pre.rstrip('/')} {{\n return 308 {to.rstrip('/')}$request_uri;\n }}\n"
for pre, to in (s.get("redirect_paths") or {}).items())
conf = (f"# {s['site']}: managed by cli-tools/dev2/dev2-site vhost. Do not hand-edit; re-run\n"
f"# `dev2-site vhost {s['site']}` after changing sites.d/{s['site']}.json.\n"
f"# Retired: the app lives on elsewhere; this domain only redirects (redirect_to).\n")
for to, hs in groups.items():
names = " ".join(hs)
conf += f"""
server {{
listen 80;
listen [::]:80;
server_name {names};

location ^~ /.well-known/acme-challenge/ {{
root /var/www/acme;
default_type "text/plain";
}}
{paths} location / {{
return 308 {to}$request_uri;
}}
}}

server {{
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name {names};

ssl_certificate /etc/nginx/ssl/{s['site']}/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/{s['site']}/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;

{paths} location / {{
return 308 {to}$request_uri;
}}
}}
"""
return conf, hosts

def render_vhost(s):
if s.get("redirect_to"):
return render_redirect_vhost(s, s["redirect_to"])
proxies = s.get("proxies") or []
domains = [d for d in site_domains(s) if d not in {p["host"] for p in proxies}]
if s.get("nginx_app") is False: # the app runs elsewhere (bittorrented.com); only its proxies live here
Expand Down
11 changes: 10 additions & 1 deletion dev2/sites.d/advis0r.com.json
Original file line number Diff line number Diff line change
@@ -1 +1,10 @@
{ "branch": "main", "env_remove": ["DATABASE_AUTH_TOKEN"] }
{
"branch": "main",
"env_remove": [
"DATABASE_AUTH_TOKEN"
],
"redirect_to": {
"default": "https://advis0r.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
6 changes: 5 additions & 1 deletion dev2/sites.d/agenticjobs.work.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,9 @@
"env_overrides": {
"OBSCURA_MCP_URL": "",
"PGSSLMODE": "require"
}
},
"redirect_to": {
"default": "https://agenticjobs.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
15 changes: 14 additions & 1 deletion dev2/sites.d/aiornot.vote.json
Original file line number Diff line number Diff line change
@@ -1 +1,14 @@
{"branch": "master", "env_remove": ["TURSO_DATABASE_URL", "TURSO_AUTH_TOKEN"], "mem_limit": "2g", "node_heap_mb": 1024, "mem_note": "2026-10-01: next + media daemon, 530 MB steady"}
{
"branch": "master",
"env_remove": [
"TURSO_DATABASE_URL",
"TURSO_AUTH_TOKEN"
],
"mem_limit": "2g",
"node_heap_mb": 1024,
"mem_note": "2026-10-01: next + media daemon, 530 MB steady",
"redirect_to": {
"default": "https://aiornot.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
6 changes: 6 additions & 0 deletions dev2/sites.d/avenasea.com.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"redirect_to": {
"default": "https://avenasea.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
6 changes: 5 additions & 1 deletion dev2/sites.d/bg0ne.com.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
{
"mem_limit": "3g",
"mem_note": "2026-10-01: rembg model loads peak at 1.25 GB"
"mem_note": "2026-10-01: rembg model loads peak at 1.25 GB",
"redirect_to": {
"default": "https://bg0ne.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
9 changes: 7 additions & 2 deletions dev2/sites.d/brisk.news.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,14 @@
"env_overrides": {
"NEXT_PUBLIC_SUPABASE_ANON_KEY": "secret:NEXT_PUBLIC_SUPABASE_ANON_KEY",
"SUPABASE_SERVICE_ROLE_KEY": "secret:SUPABASE_SERVICE_ROLE_KEY",
"NEXT_PUBLIC_SUPABASE_URL": "https://supabase.brisk.news"
"NEXT_PUBLIC_SUPABASE_URL": "https://brisk-supabase.pwa.pit.world"
},
"mem_limit": "3g",
"node_heap_mb": 1536,
"mem_note": "2026-10-01: ~1 GB steady (apps/notify ~900 MB) beside next-server"
"mem_note": "2026-10-01: ~1 GB steady (apps/notify ~900 MB) beside next-server",
"redirect_to": {
"default": "https://brisk.pwa.pit.world",
"supabase.brisk.news": "https://brisk-supabase.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
9 changes: 7 additions & 2 deletions dev2/sites.d/c0ncerts.com.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,14 @@
}
],
"env_overrides": {
"NEXT_PUBLIC_SUPABASE_URL": "https://supabase.c0ncerts.com",
"NEXT_PUBLIC_SUPABASE_URL": "https://c0ncerts-supabase.pwa.pit.world",
"NEXT_PUBLIC_SUPABASE_ANON_KEY": "secret:NEXT_PUBLIC_SUPABASE_ANON_KEY",
"SUPABASE_SERVICE_ROLE_KEY": "secret:SUPABASE_SERVICE_ROLE_KEY"
},
"subnet_octet": 178
"subnet_octet": 178,
"redirect_to": {
"default": "https://c0ncerts.pwa.pit.world",
"supabase.c0ncerts.com": "https://c0ncerts-supabase.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
25 changes: 24 additions & 1 deletion dev2/sites.d/c0upons.com.json
Original file line number Diff line number Diff line change
@@ -1 +1,24 @@
{"branch": "master", "env_remove": ["TURSO_DATABASE_URL", "TURSO_AUTH_TOKEN", "SQLITECLOUD_URL"], "mem_limit": "2g", "mem_note": "2026-10-01: 530 MB steady, 910 MB peak", "nginx_locations": " # c0upons.com/bbs: the tsbb board in ~/www/c0upons.com-bbs (TSBB_BASE_URL=https://c0upons.com/bbs).\n # The path is passed through unstripped: tsbb (>= 0.9.0) mounts itself under it.\n location ~ ^/bbs(/|$) {\n proxy_pass http://127.0.0.1:3293;\n proxy_http_version 1.1;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto $scheme;\n proxy_set_header X-Forwarded-Host $host;\n proxy_read_timeout 300s;\n }\n", "bbs_note": "2026-10-06: /bbs is a tsbb board in ~/www/c0upons.com-bbs (port 3293, vault c0upons-bbs--prod), not part of this repo's deploy; it follows tsbb GitHub releases", "redis": true, "env_overrides": {"REDIS_URL": "redis://redis:6379"}, "redis_note": "2026-11-02: own redis for @profullstack/scraper-daemon (BullMQ; daily peerpush.com/deals job, c0upons PR #100)"}
{
"branch": "master",
"env_remove": [
"TURSO_DATABASE_URL",
"TURSO_AUTH_TOKEN",
"SQLITECLOUD_URL"
],
"mem_limit": "2g",
"mem_note": "2026-10-01: 530 MB steady, 910 MB peak",
"nginx_locations": " # c0upons.com/bbs: the tsbb board in ~/www/c0upons.com-bbs (TSBB_BASE_URL=https://c0upons.com/bbs).\n # The path is passed through unstripped: tsbb (>= 0.9.0) mounts itself under it.\n location ~ ^/bbs(/|$) {\n proxy_pass http://127.0.0.1:3293;\n proxy_http_version 1.1;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto $scheme;\n proxy_set_header X-Forwarded-Host $host;\n proxy_read_timeout 300s;\n }\n",
"bbs_note": "2026-10-06: /bbs is a tsbb board in ~/www/c0upons.com-bbs (port 3293, vault c0upons-bbs--prod), not part of this repo's deploy; it follows tsbb GitHub releases",
"redis": true,
"env_overrides": {
"REDIS_URL": "redis://redis:6379"
},
"redis_note": "2026-11-02: own redis for @profullstack/scraper-daemon (BullMQ; daily peerpush.com/deals job, c0upons PR #100)",
"redirect_to": {
"default": "https://c0upons.pwa.pit.world"
},
"redirect_paths": {
"/bbs": "https://c0upons-bbs.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
6 changes: 5 additions & 1 deletion dev2/sites.d/cigarunderground.org.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
{
"health_path": "/healthz",
"db_sslparams": "sslmode=require"
"db_sslparams": "sslmode=require",
"redirect_to": {
"default": "https://cigarunderground.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
6 changes: 6 additions & 0 deletions dev2/sites.d/d1sks.com.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"redirect_to": {
"default": "https://d1sks.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
6 changes: 6 additions & 0 deletions dev2/sites.d/d3vices.com.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"redirect_to": {
"default": "https://d3vices.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
6 changes: 5 additions & 1 deletion dev2/sites.d/datamart.help.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,9 @@
"mem_limit": "512m",
"mem_note": "Next.js 16 standalone on Bun (the Datamart web app), server-rendered pages over the mcp.profullstack.com API",
"notes": "Not a Railway site: born on dev2 2026-10-07 as a placeholder; since 2026-10-08 the Datamart web app (Next.js on Bun, pages over the Datamart API at mcp.profullstack.com). No database, no secrets. Deploys on push to main.",
"vault": ""
"vault": "",
"redirect_to": {
"default": "https://datamart.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
6 changes: 6 additions & 0 deletions dev2/sites.d/getprivacycode.com.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"redirect_to": {
"default": "https://getprivacycode.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
12 changes: 10 additions & 2 deletions dev2/sites.d/goingbroke.now.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
{
"branch": "master",
"env_remove": ["TURSO_DATABASE_URL", "TURSO_AUTH_TOKEN", "DATA_DIR"],
"db_sslparams": "sslmode=require"
"env_remove": [
"TURSO_DATABASE_URL",
"TURSO_AUTH_TOKEN",
"DATA_DIR"
],
"db_sslparams": "sslmode=require",
"redirect_to": {
"default": "https://goingbroke.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
9 changes: 7 additions & 2 deletions dev2/sites.d/icemap.app.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,14 @@
],
"env_overrides": {
"SUPABASE_SERVICE_ROLE_KEY": "secret:SUPABASE_SERVICE_ROLE_KEY",
"SUPABASE_URL": "https://supabase.icemap.app"
"SUPABASE_URL": "https://icemap-supabase.pwa.pit.world"
},
"extensions": [
"postgis"
]
],
"redirect_to": {
"default": "https://icemap.pwa.pit.world",
"supabase.icemap.app": "https://icemap-supabase.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
9 changes: 8 additions & 1 deletion dev2/sites.d/media2markdown.com.json
Original file line number Diff line number Diff line change
@@ -1 +1,8 @@
{"repo": "profullstack/media2markdown", "notes": "deployed to Railway with `railway up`, so the registry saw no repo; the GitHub repo is private"}
{
"repo": "profullstack/media2markdown",
"notes": "deployed to Railway with `railway up`, so the registry saw no repo; the GitHub repo is private",
"redirect_to": {
"default": "https://media2markdown.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
6 changes: 6 additions & 0 deletions dev2/sites.d/naallo.com.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"redirect_to": {
"default": "https://naallo.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
8 changes: 6 additions & 2 deletions dev2/sites.d/opensocial.chat.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,9 @@
"API_INTERNAL_ORIGIN": "http://opensocial-api:3101",
"API_HOST": "0.0.0.0"
},
"health_path": "/"
}
"health_path": "/",
"redirect_to": {
"default": "https://opensocial.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
11 changes: 9 additions & 2 deletions dev2/sites.d/opensourcelegends.com.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
{
"branch": "master",
"env_remove": ["TURSO_DATABASE_URL", "TURSO_AUTH_TOKEN"],
"db_sslparams": "sslmode=require"
"env_remove": [
"TURSO_DATABASE_URL",
"TURSO_AUTH_TOKEN"
],
"db_sslparams": "sslmode=require",
"redirect_to": {
"default": "https://opensourcelegends.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
6 changes: 6 additions & 0 deletions dev2/sites.d/recipepdfs.com.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"redirect_to": {
"default": "https://recipepdfs.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
12 changes: 11 additions & 1 deletion dev2/sites.d/ringhuman.com.json
Original file line number Diff line number Diff line change
@@ -1 +1,11 @@
{ "branch": "master", "env_remove": ["TURSO_DATABASE_URL", "TURSO_AUTH_TOKEN"] }
{
"branch": "master",
"env_remove": [
"TURSO_DATABASE_URL",
"TURSO_AUTH_TOKEN"
],
"redirect_to": {
"default": "https://ringhuman.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
7 changes: 6 additions & 1 deletion dev2/sites.d/saasrow.com.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,10 @@
},
"keep_services": [
"functions"
]
],
"redirect_to": {
"default": "https://saasrow.pwa.pit.world",
"supabase.saasrow.com": "https://saasrow-supabase.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
6 changes: 5 additions & 1 deletion dev2/sites.d/submitfleet.com.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,9 @@
"max_body": "8m",
"mem_limit": "384m",
"mem_note": "Node 24, Hono API + MCP + dashboard + worker in one process, SQLite file in volumes/data",
"notes": "Not a Railway site: born on dev2 2026-10-14. SubmitFleet engine (launch/directory submissions). SQLite at /data/submitfleet.db (volumes/data). SUBMITFLEET_SECRET_KEY from vault submitfleet--prod. Deploys on push to main."
"notes": "Not a Railway site: born on dev2 2026-10-14. SubmitFleet engine (launch/directory submissions). SQLite at /data/submitfleet.db (volumes/data). SUBMITFLEET_SECRET_KEY from vault submitfleet--prod. Deploys on push to main.",
"redirect_to": {
"default": "https://submitfleet.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
6 changes: 5 additions & 1 deletion dev2/sites.d/sysops.ceo.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,9 @@
"max_body": "1m",
"mem_limit": "64m",
"mem_note": "nginx:alpine-slim serving one static index.html",
"notes": "Not a Railway site: born on dev2 2026-10-07. Placeholder page (index.html with <h1>sysops.ceo</h1>) served by nginx in the container. No database, no secrets. Not a node app: skip `healthchecks`. Deploys on push to main."
"notes": "Not a Railway site: born on dev2 2026-10-07. Placeholder page (index.html with <h1>sysops.ceo</h1>) served by nginx in the container. No database, no secrets. Not a node app: skip `healthchecks`. Deploys on push to main.",
"redirect_to": {
"default": "https://sysops.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
8 changes: 6 additions & 2 deletions dev2/sites.d/tleehealth.com.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,13 @@
"mem_limit": "512m",
"mem_note": "Bun + Hono web and API; no workers yet",
"env_overrides": {
"SITE_URL": "https://tleehealth.com",
"SITE_URL": "https://tleehealth.pwa.pit.world",
"NODE_ENV": "production"
},
"notes": "Not a Railway site: born on dev2 2026-10-06. Telehealth + practice management. Database via db-create (migrations run on app boot). Secrets in vault tleehealth--prod. Deploys on push to master.",
"vault": "tleehealth--prod"
"vault": "tleehealth--prod",
"redirect_to": {
"default": "https://tleehealth.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
11 changes: 10 additions & 1 deletion dev2/sites.d/tsbb.dev.json
Original file line number Diff line number Diff line change
@@ -1 +1,10 @@
{ "env_remove": ["TSBB_DATABASE_AUTH_TOKEN"], "notes": "Turso -> shared Postgres 2026-09-25 (profullstack/tsbb#28); TSBB_DATABASE_URL is rewritten to the cluster URL by provision" }
{
"env_remove": [
"TSBB_DATABASE_AUTH_TOKEN"
],
"notes": "Turso -> shared Postgres 2026-09-25 (profullstack/tsbb#28); TSBB_DATABASE_URL is rewritten to the cluster URL by provision",
"redirect_to": {
"default": "https://tsbb.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
8 changes: 6 additions & 2 deletions dev2/sites.d/typeheard.com.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,14 @@
"mem_limit": "3g",
"mem_note": "whisper.cpp base model ~400 MB per transcription, CONCURRENCY=2",
"env_overrides": {
"SITE_URL": "https://typeheard.com",
"SITE_URL": "https://typeheard.pwa.pit.world",
"DATA_DIR": "/data",
"CONCURRENCY": "2",
"NODE_ENV": "production"
},
"notes": "Not a Railway site: born on dev2 2026-10-06. Transcription SaaS (whisper.cpp in the image). Database via db-create; uploads wait in volumes/data until transcribed. Domain not registered yet (Porkbun credit $0), so cert/vhost/dns wait for it."
"notes": "Not a Railway site: born on dev2 2026-10-06. Transcription SaaS (whisper.cpp in the image). Database via db-create; uploads wait in volumes/data until transcribed. Domain not registered yet (Porkbun credit $0), so cert/vhost/dns wait for it.",
"redirect_to": {
"default": "https://typeheard.pwa.pit.world"
},
"redirect_note": "2026-11-08: domain retired; the app runs on as <name>.pwa.pit.world (dev2/edge/edge.json). This vhost only 308s there until the domain lapses."
}
Loading
Loading