logicsrc/apps/logicsrc-web/src/app/openbandwidth/page.tsx
Anthony Ettinger 66ef39cda6 docs: OpenCPU, OpenMemory, OpenGPU and OpenBandwidth, the resources of a server purchase
Four resource specifications under OpenServer, one per thing that is
negotiable when a server is bought. Each is the block of an OpenServer
offer (compute, memory, gpu, network) written down on its own, with the
units OpenServer 0.1 already uses (vcpu, cores, ram_mb, vram_mb,
bandwidth_mbps, transfer_gb, ipv4, ipv6) and one new shape shared by all
four: `range`, the field a buyer can dial at checkout, its bounds, the
step and what a step costs on top of the base price.

- OpenCPU: threads against cores, the processor by its vendor name,
  dedicated, shared or burstable allocation.
- OpenMemory: mebibytes, DDR generation, ECC as three states, reserved,
  balloonable or shared; wins over compute.ram_mb when both are present.
- OpenGPU: the card by its vendor name, count and VRAM per device,
  interconnect, passthrough, MIG, vGPU or shared access.
- OpenBandwidth: port, four meters (transfer, unmetered, percentile,
  flat), overage, IPv4 and IPv6 addresses as a priced resource.

A provider that sells only one resource lists it as an OpenServer offer
and may serve the same document at /.well-known/<slug>.json. Landing
pages share one component (resource-spec-page.tsx). Registered in
DOC_SLUGS, NAV, STATIC_ROUTES and llms.txt. OpenServer, OpenFile and
OpenDisk arrive in sibling PRs.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014cmNRtR2vL1p89dbVQ7FZJ
2026-09-13 01:38:19 +00:00

63 lines
3.8 KiB
TypeScript

import type { ReactNode } from "react";
import type { Metadata } from "next";
import { ResourceSpecPage, type ResourceSpec } from "@/components/resource-spec-page";
export const metadata: Metadata = {
title: "OpenBandwidth · LogicSRC",
description:
"OpenBandwidth is the network block of an OpenServer offer: port speed, how traffic is metered (transfer, unmetered, 95th percentile, flat), what overage costs, IPv4 and IPv6 addresses as a priced resource, DDoS scrubbing, and a range that says what a buyer can add at checkout and for how much.",
alternates: { canonical: "/openbandwidth" }
};
const SPEC: ResourceSpec = {
name: "OpenBandwidth",
slug: "openbandwidth",
block: "network",
tagline:
"The network line of a server purchase, with the words fixed: the port, the meter, the overage, the addresses, and what more of any of them costs.",
problem:
"Unmetered 1 Gbps, 1 Gbps with 20 TB, and 1 Gbps at the 95th percentile with 100 Mbps committed are three products that every comparison site shows as 1 Gbps. The surprise on the invoice is always the network line: overage at a cent a gigabyte here and nine there, ingress free or billed, a second IPv4 address at two a month or unavailable at any price. IPv4 is now a market of its own, leased by the /24, and no catalog format has a place for it.",
sample: `{
"network": {
"bandwidth_mbps": 1000,
"metering": "transfer",
"transfer_gb": 20000,
"counts": "egress",
"overage": { "amount": 0.01, "currency": "USD", "per_gb": 1 },
"ipv4": 1,
"ipv4_price": { "amount": 2, "currency": "USD", "interval": "month", "per": 1 },
"ipv4_max": 8,
"ipv6": "/64",
"ddos": "always-on",
"range": {
"key": "bandwidth_mbps", "min": 1000, "max": 10000, "step": 1000,
"price": { "amount": 15, "currency": "USD", "interval": "month", "per": 1000 }
}
}
}`,
smallest: `{ "network": { "bandwidth_mbps": 1000 } }`,
fields: [
["bandwidth_mbps", "integer, required", "The port speed sold. A shaped link states the shaped rate."],
["metering", "transfer, unmetered, percentile, flat", "Gigabytes against transfer_gb, no cap, 95th percentile with commit_mbps, or a fixed price for the port."],
["transfer_gb, counts", "integer per interval; egress, ingress, both, max", "Included traffic and which direction counts. A reader never assumes egress."],
["overage, over_cap", "amount, currency, per_gb or per_mbps; bill, throttle, suspend", "What traffic past the cap costs, or what happens instead."],
["ipv4, ipv4_price, ipv4_max, ipv6", "integer; price per address; integer; boolean or prefix", "Addresses as a resource: included, the price of more, the ceiling, and the IPv6 assignment."],
["ddos, private_network, uplinks", "always-on, on-demand, none; boolean; integer", "That mitigation exists, a private LAN, physical links on a dedicated box."],
["range", "key bandwidth_mbps, transfer_gb or ipv4; min, max, step, price", "What the buyer can dial and what a step costs."]
],
directory: [
["Meter beside the port", "1 Gbps unmetered and 1 Gbps with 20 TB are two rows with two words."],
["Price a month of traffic", "Base plus overage at a stated volume, with the volume shown."],
["Addresses as a resource", "Included count, price of more, ceiling. Zero with no price is unstated, not free."],
["Never assume direction", "A cap with no counts is a cap with the direction unstated."]
],
absent: [
["No speed test", "bandwidth_mbps is the port sold. Achieved throughput is a measurement."],
["No carriers or peering", "Upstreams and exchanges are the provider's network page. An ASN goes under the provider's own key."],
["No SLA", "Uptime percentages and credits are the provider's terms, linked from the offer's url."]
]
};
export default function OpenBandwidthPage(): ReactNode {
return <ResourceSpecPage spec={SPEC} />;
}