openvibers/openvibe.domains STATUS.json
STATUS.json
| 1 | { |
| 2 | "repository": "OpenVibers/OpenVibe.Domains", |
| 3 | "version": "0.2.0", |
| 4 | "stage": "product", |
| 5 | "code": true, |
| 6 | "wave": "v1", |
| 7 | "plan": "OpenVibe.Domains v1: a stateless read-only front over OpenVibe.Host's domain price catalog and OpenVibe.Tools' public domain history — name checks, one page per ending, one page per domain, a JSON API, and the service skeleton (deploy, discovery, readiness, tests)", |
| 8 | "runtime": "node 22, express 4", |
| 9 | "port": "5070", |
| 10 | "domain": "openvibe.domains", |
| 11 | "contracts": "openvibe-contracts v0.419.0", |
| 12 | "sdk": "openvibe-sdk v0.161.0", |
| 13 | "shared": "openvibe-shared v4.238.0", |
| 14 | "packages": [ |
| 15 | "openvibe-contracts v0.419.0", |
| 16 | "openvibe-sdk v0.161.0", |
| 17 | "openvibe-shared v4.238.0" |
| 18 | ], |
| 19 | "summary": "OpenVibe.Domains is a stateless front: no database, no sign-in, no events. It reads OpenVibe.Host's internal catalog (GET /api/v1/catalog/domains, /domains/check?name=, /domains/:tld) and OpenVibe.Tools' public history (GET /api/v1/domains, /domains/:domain) through small in-process caches, prices every registrar row into one-, three- and five-year totals with the cheap-first-year renewal trap, and serves server-rendered pages (home, name search, one ending, one domain) plus a read-only JSON API. It has the service plumbing the other OpenVibe sites have: helmet/CSP, health and truthful readiness (degraded, never 503, when either upstream is down), release.json and /release-metrics, /shared, robots/sitemap/llms, a per-IP limit on /api/v1 and /search, graceful stop, deploy files and tests.", |
| 20 | "works": [ |
| 21 | "Name parsing (server/names.js): URLs, ports, a leading www., spaces and underscores in the label, IDNs via url.domainToASCII, co.uk endings, 1-63 character labels and the 253-character limit; display keeps Unicode", |
| 22 | "Pricing (server/pricing.js): y1 = register, y3 = register + 2 renew, y5 = five_year or register + 4 renew, the renewal trap, cents rounding, USD rows compared and sorted by y3 with non-USD rows flagged and kept after them", |
| 23 | "Two cached data clients (server/data/): injectable fetchImpl, 8 s timeouts, a 2,000-entry expiry Map, 10/10/2/10-minute TTLs, a failure is null and one short log line", |
| 24 | "Pages (server/http/pages.js, server/views/index.js): / with the popular catalog and Tools lists, /search?q= (noindex), /tld/:tld, /.dev 301, /d/:domain and a 404; plain placeholder views on the shared Frame with the service id domains", |
| 25 | "Read-only JSON API at /api/v1: search, tlds, one tld, one domain; CORS-open; 400 problem+json for a bad name and 404 for an unknown ending; 120/min per IP shared with /search", |
| 26 | "Service plumbing: helmet with Help's CSP, /api/health, /api/ready (Host and Tools optional, so a failure is degraded not 503), release.json and /release-metrics, /shared, /robots.txt, /sitemap.xml (every catalog ending, lastmod from the release), /llms.txt, /metrics on loopback, graceful stop", |
| 27 | "Deploy files: systemd unit on /opt/openvibe.domains, nginx vhost with www -> apex, TLS, security headers, GET-only /api/v1 and loopback-only /metrics", |
| 28 | "Tests: names, pricing, the data clients' cache/expiry/failure/timeout, and the booted app's pages, redirects, API shapes, CORS, discovery and degraded readiness", |
| 29 | "Control panel (DOM-2): sign-in with OpenVibe.Network (client domains); connect Cloudflare (token verified, stored as a secret in the person's own Network project granted for reveal to api.cloudflare.com only); zones synced; records read live; every change a domains.proposal@1 approved on its page or in the Action Center (domains.actions.read, domains.proposal.decide), applied in order with a stale check, rolled back in one step; audit; account export and deletion" |
| 30 | ], |
| 31 | "notYet": [ |
| 32 | "The pages are plain placeholders (server/views/index.js) written for v1's plumbing; the main session replaces server/views/ with the real design", |
| 33 | "No service manifest in openvibe-contracts yet: no domains.* capability is registered and no other service calls this one", |
| 34 | "No database, no sign-in, no sessions, no event subscriptions and no stored data (v1 is deliberately stateless)", |
| 35 | "No registrar links or affiliate handling: prices are shown with the registrar's name, not linked out yet", |
| 36 | "Only /api/v1 and /search are rate limited; the HTML pages are served to everyone", |
| 37 | "Porkbun, Namecheap and Spaceship connections; DNSSEC DS at the registrar; bulk nameserver changes; agents proposing through MCP" |
| 38 | ], |
| 39 | "capabilitiesRegistered": false, |
| 40 | "serviceManifestRegistered": false, |
| 41 | "deployed": false, |
| 42 | "placeholderInSites": true, |
| 43 | "features": [ |
| 44 | "name parsing", |
| 45 | "registry availability check", |
| 46 | "three- and five-year price totals", |
| 47 | "renewal trap", |
| 48 | "one page per ending", |
| 49 | "one page per domain with public history", |
| 50 | "read-only JSON API", |
| 51 | "cached upstream clients", |
| 52 | "truthful readiness", |
| 53 | "discovery", |
| 54 | "deploy files" |
| 55 | ], |
| 56 | "deployment": "Not deployed yet. Reference unit deploy/systemd/openvibe-domains.service (127.0.0.1:5070, /opt/openvibe.domains, /etc/openvibe/domains.env, user ubuntu) and vhost deploy/nginx/openvibe.domains.conf (openvibe.domains and www, certs under /etc/letsencrypt/live/openvibe.domains/).", |
| 57 | "updated": "2026-11-13" |
| 58 | } |
| 59 |