Releases: NodeByteHosting/website
Release list
Object Storage and QOL
Added
- Object Storage Hosting — new
/object-storageproduct category backed by live Client Portal data, following the same hub pattern as VPS/Dedicatedpackages/core/types/servers/object-storage.ts—ObjectStoragePlanSpecinterface (storage limit, access keys, egress, API requests, auto-archive policy, feature bullets)packages/core/lib/spec-parser.ts—parseObjectStorageSpecs(), a label/value bullet parser distinct from the CPU/RAM-orientedparseDescriptionSpecs()used by Game/VPS/Dedicatedpackages/core/products/billing-service.ts—getObjectStoragePlans(categorySlug)packages/ui/components/Layouts/ObjectStorage/object-storage-hub.tsx— search/sort/filter listing with storage, access key, egress, and archive policy rowspackages/core/constants/catalog-hubs.ts—OBJECT_STORAGE_HUB_SLUGS- Navigation, footer, sitemap, and homepage service cards all updated to include Object Storage alongside Game/VPS/Dedicated
- Status page migrated to our own status platform — the site's live status integration (
/nodes, footer status badge) now reads from our self-hosted status API (nodebytestat.us/api/status) instead of the previous third-party-hosted status page, with no auth requiredpackages/core/lib/status.ts— rewritten around the new API'sComponentStatus/Indicatorshape; node discovery now walks the API's recursivegroupstree instead of a hardcoded monitor mappackages/core/constants/status-mapping.ts—NODE_DISPLAY_OVERRIDES/LOCATION_MONITOR_MAPkeep location metadata the new API doesn't carry
- Brand & Press Kit page (
/brand) — logo downloads (SVG/PNG) with usage guidelines, the full color palette across all 47 themes (click-to-copy hex values), typography specimen, and official name/voice reference for partners, advertisers, and press- Downloadable background template (
/brand/background) reusing the site's existing OG-image generator (app/_og/image-generator.tsx) so the template always matches our real social preview cards
- Downloadable background template (
- Footer reorganized — Services now lists every live product (including Object Storage and Network & Nodes); Resources gained a genuine System Status link (previously only a small badge); Company gained the new Brand & Press page; the old link mislabeled "System Status" that actually pointed at the network looking-glass tool was corrected
Changed
- Homepage service cards switched from a cramped 4-column grid back to 3 columns, giving each card more room to breathe
- VPS/Dedicated/Object Storage "no results" empty states now distinguish "nothing in stock" (destructive styling, no Clear Filters button) from "your filters excluded everything" (neutral styling, Clear Filters button) — previously both cases showed the same generic "no matches" message even when a category was genuinely empty
Fixed
- Plan count duplication — VPS, Dedicated, and Object Storage were double-counting the hub category against itself (
getCategoryHub()already includes the hub as a leaf insidehub.children; page-level code was additionally prependinghub.slug), showing e.g. "8 of 8 plans" for 4 real products. Fixed across all three hub pages and the homepage's live starting-price resolver - Object Storage plan sizes displaying as long floats (e.g. "1.953125 TB") — the display formatter divided by 1024 against plan sizes that were defined in round decimal GB (2000 GB, 2500 GB); switched to a 1000-based conversion so these render as clean "2 TB" / "2.5 TB"
- Mobile nav "Company" section cut off items — its expand animation was capped at a fixed
max-h-[300px], too short for 5 menu items; raised to match the other sections - VPS hub category discovery —
VPS_HUB_SLUGSdidn't include the live billing panel category's actual slug (vps-servers), so/vpsrendered empty despite correctly configured billing data
Unified Catalog & Partners
Added
-
Unified Game Server Hosting —
/gamesnow shows one flat plan grid for every supported game instead of a separate curated page per game; game selection moves to a Paymenter checkout config optionpackages/ui/components/Layouts/Games/game-hub.tsx— new hub component (search, sort, plan grid) matching the VPS/Dedicated hub patternapp/games/page.tsx— rewritten to flattengetGamePlans()across every child of the Game Servers hub instead of rendering one curated card per categoryGamePlanSpec.categoryfield added (which Paymenter category a plan came from, for search/de-dup — not used for grouping)packages/core/constants/supported-games.ts— manually maintainedSUPPORTED_GAMESlist shown as badges on the/gameshero; there's no admin API to read Paymenter's config-option choices live, so this is hand-kept in sync with the checkout dropdown- Removed:
/games/[slug]dynamic route,packages/core/products/catalog-config.ts,packages/core/constants/game/*curated per-game content, and the 4 now-unusedGameslayout components (game-hero,game-features,game-pricing,game-faq)
-
Partners & Sponsors Page — new
/partnerspagepackages/core/constants/partners.ts— maintainable data file; entries have asponsor/partner/communitytier and an optionalcategorybadge (e.g. "Minecraft Server", "FiveM Community")packages/ui/components/Layouts/Partners/partners-page.tsx— hero, one section per tier (a tier with zero entries doesn't render at all rather than showing an empty state), CTA linking to the existing KB partner program docs- Nav "Company" dropdown, footer "Company" column, and
sitemap.tsall link to/partners
-
Expandable "Server Info" panel on every Game/VPS/Dedicated plan card — a "View Server Info" toggle reveals Setup Fee, CPU Model, Uplink, DDoS layers, Location, Databases, and Backups, all parsed live from the Paymenter product description
packages/ui/components/ui/plan-info-row.tsx— shared label/value row, built on the existing RadixCollapsibleprimitivegetSetupFeeGBP/getSetupFeesMap(bytepay.ts) — one-time setup fee per plan, mirroring the existing price helperslocation/databases/backupsextraction (spec-parser.ts) — e.g. "3x MySQL Databases", "Newcastle, UK or New York, US", "Automatic Daily Backups"
-
VPS/Dedicated Hub — richer filtering & sorting
- RAM tier filter chips, built live from the RAM values actually present in the plan list (reliable regardless of naming convention)
- Price range (min/max) filter
- Sort extended from price-only to price / RAM / storage / CPU cores, each ascending or descending; default sort is now price ascending on Games, VPS, and Dedicated
packages/ui/components/ui/filter-chip.tsx— sharedFilterChipRow/FilterChip, replacing duplicated chip markup in both hubs- Filter bar redesigned: Search + Sort + a "Filters" toggle (with an active-filter-count badge) in one compact row; the actual filter chips live in a collapsible panel grouped into labeled rows (Price / RAM / Hardware / Lineup / Series) instead of one long wrapped cluster — considerably shorter on mobile
-
Live node discovery —
/nodesnow reads its node list from status.nodebyte.host's "Nodes" monitor group instead of a hardcoded array, so adding a node to the status page is enough for it to appear on the sitegetNodeMonitorNames()(lib/status.ts) — filters the status snapshot to the "Nodes" group, excluding aggregate "group"-type rollupsNODE_DISPLAY_OVERRIDES(constants/status-mapping.ts) replacesNODE_MONITOR_MAP— a small optional table for location/hardware details the status API doesn't carry, keyed by monitor name
Changed
-
Category hub discovery hardened (
bytepay.ts)getCategoryHubnow falls back to substring matching (with a console warning) if no exact alias match is found, so a category rename in Paymenter degrades gracefully instead of silently emptying a whole section- A hub always includes itself as a leaf alongside its real sub-categories, not only when it has none — fixes products filed directly on a hub (e.g. the new generic
GAME-BASE/GAME-PLUStiers, filed on "Game Servers" itself alongside its Minecraft/Rust/Hytale children) being invisible on the site fetchWithRetry— every billing panel request now has a 10s timeout and retries transient failures (429/5xx/network errors) with backoff, honouringRetry-After;per_pageincreased to reduce pagination round-trips; missingBYTEPAY_HOST/BYTEPAY_TOKENnow throws a clear error instead of building a URL likeundefined/api/...
-
spec-parser.tsrewritten to classify description lines by topic instead of matching one exact phrase shape — tolerates much more variation in how a product description is worded- Fixed a real bug along the way:
bulletLines()wasn't splitting on<li>boundaries, so line-based extraction was silently reading across bullet points in Paymenter's default<ul><li>description format - CPU brand detection broadened: "Ryzen" no longer requires an "AMD" prefix, "Intel i9-9900K" no longer requires the word "Core"
- CPU core count now also catches "8 Dedicated/Pinned Physical Cores" (number not at the start of the bullet) via a bounded per-line pattern, without guessing wrong on CPU model numbers like "Ryzen™ 9 5900X"
- Storage detection catches "Local NVMe Storage" and similar phrasing lacking an explicit SSD/HDD/Disk keyword
- Location extraction handles both "Newcastle, UK" (short code) and "Falkenstein, Germany" (full country name) styles, triggered by a wider set of keywords (location/region/infrastructure/provisioned/hosted/data centre)
- Fixed a real bug along the way:
-
Nav Services dropdown simplified to 3 flat links (Game Servers / VPS Servers / Dedicated Servers), replacing the old sectioned mega-menu with a per-game submenu; the now-dead
gamesNavprop chain (app/layout.tsx→layout-chrome.tsx→navigation.tsx) was removed along with the billing-panel fetch it required on every page load -
Dropped-product alerting —
getGamePlans/getVpsPlans/getDedicatedPlansnow log a warning when a live, non-hidden product fails to parse its required specs (instead of silently vanishing from the site), and the dev-only/api/billing-debugroute lists every such product with its missing fields
Fixed
- Plan card layout bug —
h-fullon plan cards was silently fighting the grid'sitems-startsizing, clipping the "Order Now" button on a collapsed sibling card whenever another card's Server Info panel was expanded; removed, cards now size purely to their own content - Card grids no longer visually stretch every card in a row to match the tallest (expanded) one —
items-startadded to the Game/VPS/Dedicated plan grids
Security
- Double-unescaping in
spec-parser.ts's HTML entity decoding (CodeQLjs/double-escaping) —bulletLines()unescaped&→&before>/</"/', so a properly double-escaped literal like&gt;(meant to render as the text>) was silently corrupted into>instead. Fixed by unescaping&last, matching the standard safe-unescaping order — the escape character itself must always be resolved after every other entity that depends on it.
What's Changed
- Development by @NodeByteLTD in #121
- Development by @CodeMeAPixel in #123
- fix: product handling by @CodeMeAPixel in #124
- Development by @CodeMeAPixel in #125
- Development by @CodeMeAPixel in #127
- Development by @CodeMeAPixel in #129
- Development by @CodeMeAPixel in #131
- Development by @CodeMeAPixel in #132
- Prod -> Dev by @CodeMeAPixel in #133
- Development by @CodeMeAPixel in #136
- fix: translations by @CodeMeAPixel in #137
- Development by @CodeMeAPixel in #138
- Update partners.ts by @CodeMeAPixel in #139
- Development by @CodeMeAPixel in #140
- add: new partners stuff by @CodeMeAPixel in #141
- Development by @CodeMeAPixel in #142
- Development by @CodeMeAPixel in #143
- add: supported games by @CodeMeAPixel in #144
- fix: plan structures by @CodeMeAPixel in #146
- feat: more product stucture fixes by @CodeMeAPixel in #147
- Development by @CodeMeAPixel in #149
Full Changelog: v3.6.0...v3.7.0
v3.6.0
Added
-
Dedicated Server Hosting — new
/dedicatedproduct category backed by live Paymenter billing datapackages/core/types/servers/dedicated.ts—DedicatedPlanSpecinterface;coresis optional (physical cores, not vCPU),storageDescriptionholds the raw drive label (e.g."2 × 1 TB NVMe SSD (RAID 1)") for multi-drive configurationspackages/core/products/billing-service.ts—getDedicatedPlans(categorySlug)function following the same billing-service pattern as VPS and game planspackages/ui/components/Layouts/Dedicated/dedicated-hub.tsx— listing page with AMD/Intel hardware filter, price sort, "Bare Metal" and hardware badges, IPMI/dedicated feature callouts, and a custom/enterprise CTAapp/dedicated/page.tsx— server component fetching from thededicated-serversbilling category- Navigation — Dedicated Servers section added to both desktop and mobile Services dropdowns, below VPS Servers
- Footer — Dedicated Servers link added to the Services column
packages/core/constants/services.ts— Dedicated Servers entry added toSERVICE_CATEGORIESfor the homepage service cards (amber palette, Cpu icon)translations/templates/en.json—services.dedicated.*andfooter.services.dedicatedServerstranslation keys added
-
Knowledge Base Subcategory Support — the KB now supports arbitrary nesting (e.g.
games → minecraft → troubleshooting) driven entirely by the filesystemapp/kb/[...path]/page.tsx— unified catch-all route replacing the old fixed[category]and[category]/[article]routes; callsresolvePath()to decide whether to render a category page or an article pagepackages/kb/lib/kb.ts— full rewrite:getCategories(parentPath?)recurses into subdirectories,getCategoryAtPath()traverses the tree,getSidebarTree()/buildSidebarItem()build the full nested sidebar,getAllPaths()returns every valid path array forgenerateStaticParamspackages/kb/components/kb-sidebar.tsx— recursiveSidebarNodecomponent with depth-aware indentation; auto-expands the branch matching the current pathnamepackages/kb/components/kb-category-card.tsx—hrefnow uses the full category path; badge shows recursivetotalCountpackages/kb/components/kb-article-card.tsx—hrefusescategoryPath(full relative path)packages/kb/components/kb-article.tsx— prev/next links use fullcategoryPathpackages/kb/components/kb-search.tsx— search result links use fullcategoryPath- KB content restructured under
packages/kb/content/games/minecraft/andpackages/kb/content/games/hytale/subdirectories
-
Billing-Native Currency Prices — the website now uses exact prices from the Paymenter billing panel per currency instead of converting from a GBP exchange rate
packages/core/lib/bytepay.ts—getPricesMap(product)returnsRecord<string, number>mapping every currency code to its monthly price from the product's recurring planpackages/ui/components/ui/price.tsx—Pricecomponent accepts an optionalpricesprop; usesformat(prices[currency])(exact billing price) when available, falls back toconvertAndFormat(amountGBP)(exchange rate)packages/core/types/servers/game.ts,vps.ts,dedicated.ts—prices?: Record<string, number>field added to all plan spec interfacesbilling-service.ts— all three plan fetchers (getGamePlans,getVpsPlans,getDedicatedPlans) populatepricesfromgetPricesMap()- VPS Hub, all game pages —
pricesprop threaded through to<Price>components
What's Changed
- chore: sync development → nightly (2026-06-07) by @github-actions[bot] in #103
- chore: sync nightly → production (2026-06-07) by @github-actions[bot] in #104
- feat(fix): safari issues, optimization, react issues, visual bugs by @ranveersoni98 in #105
- feat(fix): safari issues, optimization, react issues, visual bugs by @NodeByteLTD in #106
- chore: sync development → nightly (2026-06-10) by @github-actions[bot] in #107
- chore: sync development → nightly (2026-06-13) by @github-actions[bot] in #108
- chore: sync nightly → production (2026-06-13) by @github-actions[bot] in #109
- Sync? by @CodeMeAPixel in #110
- Development by @CodeMeAPixel in #111
- Update eligibility.md by @CodeMeAPixel in #112
- Update eligibility.md by @CodeMeAPixel in #113
- Development by @CodeMeAPixel in #114
- chore: sync development → nightly (2026-06-17) by @github-actions[bot] in #115
- Development by @NodeByteLTD in #116
- chore: sync development → nightly (2026-06-20) by @github-actions[bot] in #117
- chore: sync development → nightly (2026-06-27) by @github-actions[bot] in #119
- chore: sync nightly → production (2026-06-21) by @github-actions[bot] in #118
- Development by @NodeByteLTD in #120
Full Changelog: v3.5.4...v3.6.0
v3.5.4
Added
- Google Ads Integration — Google tag (
AW-16740819749) installed vianext/scriptwithstrategy="afterInteractive"in the root layout; fires after hydration without blocking renderpackages/core/lib/gtag.ts— central utility exportingGOOGLE_ADS_ID,CONVERSION_IDSmap, and ready-to-callconversions.*()helpers for all 10 goals (begin checkout, subscribe, purchase, submit lead form, page view, sign-up, get directions, request quote, outbound click, contact)packages/ui/components/google-ads-pageview.tsx— client component that re-fires the page-view conversion on every App Router route change viausePathname
Changed
About,Features,Servicesconverted to Server Components —"use client"directive removed from all three home page sections; none use client-only APIs, state, or effects, so they now render as HTML on the server, reducing the client JS bundle and improving TTI- Currency rates — localStorage TTL cache —
CurrencyProvidernow checkslocalStoragefor a cached rates response before fetching/api/currency/rates; cache TTL is 1 hour (matching the API'ss-maxage), so repeat page loads within the hour skip the network request entirely
Fixed
- Canvas globe — per-frame string allocation — the dot-grid draw loop in
hero-graphic.tsxwas creating a new`rgba(150,175,215,${a})`string for every dot on every 60 fps frame (~500+ allocations/frame); replaced with a precomputed 32-entryDOT_ALPHA_TABLElookup built once at module load time
What's Changed
- chore: sync development → nightly (2026-03-30) by @github-actions[bot] in #87
- Development by @CodeMeAPixel in #90
- Remove blank target from internal links. by @CodeMeAPixel in #91
- chore: sync development → nightly (2026-04-12) by @github-actions[bot] in #92
- Update URL for AMD VPS configuration by @CodeMeAPixel in #95
- Development by @ranveersoni98 in #96
- Development by @CodeMeAPixel in #97
- Nightly by @CodeMeAPixel in #98
- chore: sync development → nightly (2026-04-19) by @github-actions[bot] in #99
- chore: sync nightly → production (2026-04-19) by @github-actions[bot] in #100
- Development by @NodeByteLTD in #101
- fix(ui): optimizations and google ads support by @CodeMeAPixel in #102
New Contributors
- @ranveersoni98 made their first contribution in #96
- @NodeByteLTD made their first contribution in #101
Full Changelog: v3.5.3...v3.5.4
v3.5.3
Added
- Contact Page — Support Ticket Channel — third support channel card added to
contact.tsxpointing tohttps://billing.nodebyte.host/tickets/create- Uses
Headphonesicon withbg-accent/10 text-accentcolour scheme - Grid widened from
md:grid-cols-2 max-w-4xltomd:grid-cols-3 max-w-5xl contact.ticket.featurestranslation keys added totranslations/messages/en-US.jsonandtranslations/templates/en.json
- Uses
Changed
- Contact Page — Card Button Alignment — support channel card inner div converted to
flex flex-col h-full; feature list gainsflex-1so the CTA button is always pinned to the bottom of every card regardless of content height - Contact Page — GitHub Card Icon Colour — icon box class corrected from
bg-muted text-foregroundtobg-foreground/10 text-foregroundto match thebg-color/10 text-colorpattern used by all other channel cards - Navigation — Dropdown Hover Colours — row hover background changed from
hover:bg-accent/10tohover:bg-muted/60across all three desktop dropdowns (Company, Services, Resources); icon box hover changed from solidgroup-hover:bg-primary group-hover:text-primary-foregroundto a subtlegroup-hover:bg-primary/20; title text given explicittext-foregroundto prevent blending on saturated themes - Navigation —
modal={false}— all three desktopDropdownMenucomponents now render withmodal={false}so the Radix invisible overlay no longer blocksmouseEnterevents on sibling nav items, fixing the hover-jump bug between dropdowns - Navigation — ExternalLink Icon —
ExternalLinkindicator in the Resources dropdown is now conditionally rendered based onresource.externalinstead of always showing - Navigation — Mobile Resources Links — mobile Resources items now render as
<Link>for internal routes and<a target="_blank">for external ones instead of always using<a target="_blank">
Fixed
- Theme Colour Contrast — Emerald / Amber / Teal —
--primaryand--accentlightness values were too high (0.58–0.68) while--primary-foreground/--accent-foregroundremained near-black (0.10–0.12), producing illegible black-on-dark text on buttons and icon boxes- Emerald:
--primary0.58 → 0.42,--accent0.62 → 0.48, foregrounds0.10 → 0.98 - Amber:
--primary0.62 → 0.46,--accent0.68 → 0.52, foregrounds0.12 → 0.98 - Teal:
--primary0.60 → 0.44,--accent0.64 → 0.50, foregrounds0.10 → 0.98
- Emerald:
- Translations — Rust
premiumPlan Keys —games.rust.plans.premium.nameandgames.rust.plans.premium.descriptionwere missing fromen-US.jsonanden.json, causingMISSING_MESSAGEerrors at runtime; both files updated
Patch | v3.5.2
Added
- 17 New Themes — CSS variable definitions added to
app/globals.cssfor all new theme entries- Popular:
kanagawa(Kanagawa dark, blue/red),everforest(green earth tones),monokai(classic editor dark) - Palette:
cobalt(deep navy/blue),sakura(dark pink/rose),copper(warm amber/brown),abyss(near-black deep ocean) - Seasonal:
winter(icy blue),stpatricks(emerald green),easter(pastel purple/mint),spring(fresh light green),summer(navy/yellow),fourthjuly(dark navy/red/blue),halloween(black/orange),autumn(dark orange/amber),thanksgiving(warm amber),valentines(deep rose/pink)
- Popular:
- Theme Toggle Redesign —
packages/ui/components/theme-toggle.tsxfully rewritten- New
THEMESregistry with{value, label, bg, accent}per entry ThemeSwatchcomponent: two-tone swatch (background fill + accent strip) with checkmark overlay when selected- Quick mode row: Light / Dark / System as bordered chip buttons above the theme grid
- Organised sections: Catppuccin · Popular · Palette · Seasonal (
grid-cols-5layout) - Header displays the currently active theme name
- New
ScrollToHashUtility Component — replaces theuseEffect-based hash scroll inapp/page.tsx; allows the home page to be a Server Component while still supporting#sectionanchor navigation- GitHub Releases API —
NodeByteHosting/backendandNodeByteHosting/Game-Paneladded toDEFAULT_REPOSITORIESinapp/api/github/releases/route.ts - Nodes Page — VPS CTA — "VPS Hosting" button added alongside the existing "Game Hosting" button in the nodes page footer CTA
- Dynamic Open Graph & Twitter Images — replaced static
public/og.pngwith Next.js file-basedopengraph-image.tsx/twitter-image.tsxgenerated at the edge viaImageResponse- Root (
/) — "Game Servers & VPS Hosting." card; default for all pages without their own image /vpssubtree — "AMD & Intel VPS Hosting." card with KVM/root-access copy/gamessubtree — "Game Server Hosting." card with per-game feature row- Shared generator in
app/_og/image-generator.tsx: actual 3-layer SVG logo mark, ghost watermark, motto "Built for Humans. Powered by Bytes.", dot-separated feature row (no emojis), thin gradient top bar, navy#040d1abackground with blue/purple radial glows - Static
images: ["/og.png"]entries removed from root layoutopenGraphandtwittermetadata
- Root (
Changed
- Dynamic Imports Removed —
next/dynamicreplaced with staticimportacross all page-level components; eliminates unnecessary client-side code splitting for SSR-compatible componentsapp/games/minecraft/page.tsx,app/games/rust/page.tsx,app/games/hytale/page.tsx—GamePricingnow statically importedapp/vps/amd/page.tsx,app/vps/intel/page.tsx—VpsPricingnow statically imported
- Home Page converted to Server Component —
app/page.tsxwas"use client"solely for hash-scrolluseEffect; now a pure Server Component using<ScrollToHash /> LayoutChromehydration guard removed —mounted/useEffectthat deferred<Navigation />and<Footer />rendering to avoid Radix ID mismatch is no longer needed; components now render on first pass, eliminating the layout shift- Navigation Simplified
- Removed Discord link from the Company dropdown (redundant with the Discord CTA button)
- Removed individual AMD VPS and Intel VPS links from Services dropdown; replaced by a single "All VPS" →
/vpsentry
- VPS Hub Filter Row — lineup legend cards (BASE/COMP/GAME/ELITE) moved inline into the filter chips row as coloured chip buttons with dot indicators; removed the separate legend grid
- VPS Hub Bottom CTA — AMD/Intel page links replaced with a "Need a custom configuration?" →
/contactCTA - VPS Hub Sort Dropdown — native
<select>replaced with shadcnSelect/SelectTrigger/SelectContentfor theme consistency - Logo Component —
packages/ui/components/logo.tsxrewritten to match updated 3-layer SVG logo- Layer 1 (diamonds):
fill-primary - Layer 2 (N body, clipped):
fill-foreground - Layer 3 (diagonal arm strokes):
fill-primary/65
- Layer 1 (diamonds):
- Trustpilot API — added
export const revalidate = 3600andnext: { revalidate: 3600 }fetch option so the response is ISR-cached for 1 hour instead of fetched on every request - Nodes Page — Language generalised — "Game Server Nodes" badge renamed "Hosting Infrastructure"; FAQ questions and CTA copy updated to cover both game servers and VPS (removed game-server-only framing)
- Game Hero / Games Index icon map —
RadioandMountainicons replaced withPickaxeandWrenchto match updated FiveM/RedM config icons
Removed
- FiveM & RedM standalone pages (
app/games/fivem/page.tsx,app/games/redm/page.tsx) — removed; these games are surfaced via the indexcomingSoonstate without individual pages until plans are live and can not be offered via pre-made solutions. Will offer game tier vps plans instead!
Fixed
- Theme CSS Class Name —
4thofjulyrenamed tofourthjulythroughout toggle registry and CSS; CSS class names cannot begin with a digit
Patch | v3.5.1 - Auth Flow Crash
Fixed
- Login Page Crash —
ArrowLeft(Lucide) was removed fromlogin-form-multistep.tsximports when magic links were disabled, but is still used by the "Back" button in the password step; import restored to fixReferenceError: ArrowLeft is not definedat runtime
Removed
- v3.4.2 Changelog Reference: changes were sufficient enough to do a major bump to v3.5.0 instead.
Release | v3.5.0
Added
- New Game Pages: FiveM, RedM, Palworld — Three new hosting pages, all in "Coming Soon" state
/games/fivem— FiveM GTA roleplay hosting; features txAdmin, OneSync Infinity, custom script/MLO support/games/redm— RedM RDR2 roleplay hosting; features VORP/RedEM:R framework support, custom map streaming/games/palworld— Palworld hosting; features world configuration, mod support, automated backups- All three show a
comingSoonhero and disabled pricing section until plans are added
- Centralised Game Constants (
packages/core/constants/game/) — single source of truth for all game hosting dataminecraft.ts,rust.ts,hytale.ts,fivem.ts,redm.ts,palworld.ts— per-game plan specs, feature keys, FAQ keys, hero features, and display config (*_CONFIG)index.tsexportsGAME_OPTIONSarray used by the games index page; dynamically derives starting prices andcomingSoonflag from plan arrays
- Shared Type System (
packages/core/types/servers/) — extracted shared spec interfacesGamePlanSpec— unified plan type for all game products (id, priceGBP, ramGB, storageGB, bandwidth, uplink, ddos, stock, location, url)VpsPlanSpec— unified plan type for VPS products; moved fromvps/amd.tsto the shared types module
- Product Service (
packages/core/products/) — unified product catalogue with admin override supportservice.ts—getAllProducts(),getProductsByType(),getProductsByCategory(),isCategoryOutOfStock(),getCategoryStartingPrice()server.ts—applyGamePlanOverrides()andapplyVpsPlanOverrides()apply in-memory stock/enabled overrides at render timeoverride-store.ts— module-level Map store; supports per-plan stock and enabled overrides without a database (reset on server restart)types.ts—ProductEntry,ProductType,StockStatusshared types for the admin catalogue
- Nodes Page (
/nodes) — new public page showing live node status and all available data centre locationsNodesClientcomponent with static node data (NB-GNODE-NC1 in Newcastle, NB-VNODE-HEL1 in Helsinki)- Per-node cards showing CPU model, RAM type, and colour-coded uptime %
- 22 data centre locations grouped by region (Europe, Americas, Asia-Pacific) and country
- Newcastle and Helsinki marked as
primary: true(active, highlighted pill) - Location FAQ and CTA section; Radix Accordion hydration error fixed with
hydratedguard usePublicNodes()hook added touse-public-api.ts;PublicNodeinterface exported
- Navigation: Network Link — "Network" entry added to the Company dropdown pointing to
/nodes- Uses
Network(Lucide) icon andcompany.network.*translation keys
- Uses
- VPS Pricing Improvements
- Per-plan stock status badges: "Out of Stock" (destructive) and "Coming Soon" (muted) shown in plan card header
- Out-of-stock plans rendered with
opacity-70and a disabled CTA button instead of a broken order link - Enriched spec list:
uplink(port speed) andddos(layer list + always-on flag) rows shown when present on a plan - Location badge row on plan cards for plans with a
locationfield - Promo banner above pricing grid:
VPSLAUNCHcode with click-to-copy; valid date shown inline - AMD and Intel VPS plans now carry
uplinkandddosfields AMD_SPECSprocessor label updated to"Enterprise AMD™"AMD_FAQ_KEYS/INTEL_FAQ_KEYS— added"location"FAQ key
- Game Pricing Improvements
- Per-plan stock status badges mirroring VPS pricing
- Smart feature icons: RAM (
MemoryStick), storage (HardDrive), CPU (Cpu), DDoS (Shield), database (Database), panel (Monitor), jars/plugins (Package), uptime (Activity); fallbackCheck - Location badge displayed below plan description when a
locationfield is present on a plan "Starting at"label removed from individual plan cards (price shown without prefix)locationandstockfields added toPricingPlaninterface
- Language Selector — Contribute Links — Crowdin project link and GitHub translations repo link added to the dropdown footer so users can contribute translations directly
- Games Index — Coming Soon Badge — plans with no active pricing show a "Coming Soon" pill instead of a price; driven by
comingSoonfield onGAME_OPTIONSentries - VPS Knowledge Base Category (
packages/kb/content/vps/_meta.json) — new KB category for VPS guides
Changed
- Game Pages Refactored — Minecraft, Rust, and Hytale pages rewritten to consume shared constants
- Inline plan/feature/FAQ arrays replaced with
MINECRAFT_PLANS/RUST_PLANS/HYTALE_PLANS+applyGamePlanOverrides() - Feature and FAQ data driven from
*_FEATURE_KEYS/*_FAQ_KEYSarrays mapped against translations GamePricingnow loaded vianext/dynamicon game pages to reduce initial JS bundle- Hero props (
name,description,banner,icon,tag,tagColor) sourced from*_CONFIGconstants
- Inline plan/feature/FAQ arrays replaced with
- Games Index — plan data now sourced from
GAME_OPTIONSinstead of an inline array;ICON_MAPconverts icon name strings to Lucide components at render - Navigation — Discord Icon —
MessageCirclereplaced withSiDiscord(Simple Icons) for the Discord CTA button in both desktop and mobile nav - Hero Promo Code — hardcoded
WELCOME10replaced witht("hero.promo.highlight")translation key for easier updates without code changes - Theme Toggle — SSR Hydration Fix — removed early
if (!mounted) returnpath; icon falls back toPalettebefore hydration;DropdownMenuContentsuppressed until mounted to avoid SSR mismatch LINKS.status— updated fromhttps://status.nodebyte.hosttohttps://nodebytestat.usLINKS.contact—/contactadded as a named constantLINKS.billing—fivemHosting,redmHosting,palworldHostingURLs added- Hytale KB description — removed mention of bugs/performance issues since Hytale is no longer described as actively in-development
- About / About Page stats — "9+ locations" value updated to "3+" with label
"Data Center Partners" - Hero Graphic —
"Global Network · 9+ Locations"updated to"Global Network · 3+ Data Center Partners"
Removed
packages/auth/components/login-form.tsx— legacy single-step login form removed; multi-step form (LoginFormMultiStep) is the only login formpackages/core/constants/minecraft/— old standalone Minecraft constants folder (plans.ts,features.ts,faqs.ts) removed; replaced bypackages/core/constants/game/minecraft.tspackages/core/constants/rust/— old standalone Rust constants folder removed; replaced bypackages/core/constants/game/rust.tspackages/core/middleware/setup.ts— disabled setup middleware stub removed; setup is handled entirely by the Go backendpackages/ui/components/ui/use-mobile.tsx— unuseduseIsMobilehook removedpackages/ui/components/ui/use-toast.ts— unuseduseToast/toastimplementation removed- Nixpacks Config (nixpacks.toml - This configuration file was used while we hosted our website on services like Dokploy but it is no longer needed
Release | v3.4.1
Added
- Progressive Web App (PWA) Support - Full PWA implementation via
@serwist/next+serwistapp/sw.tsservice worker with precaching of all static pages/assets at build time- Runtime caching via Serwist
defaultCache(covers API responses, images, fonts with best-practice strategies) skipWaiting+clientsClaimfor instant SW activation with no user-facing reload prompt- Navigation preload enabled for faster page loads under SW interception
app/offline/page.tsx— offline fallback page shown for uncached navigations; styled to match site with "Try Again" and "Go Home" actions- SW build disabled in development to avoid stale-cache issues during local dev
- SW build artifacts (
public/sw.js,public/sw.js.map,public/worker-*.js,public/fallback-*.js) added to.gitignore
- Web App Manifest (
app/manifest.ts) — file-based PWA manifest via Next.js metadata APIdisplay_override: ["standalone", "window-controls-overlay", "minimal-ui"]for progressive desktop enhancementprefer_related_applications: falseso browsers prioritise the PWA install prompt- App shortcuts to
/games,/vps, and/dashboard
- AI Crawler Policy (
app/robots.ts) — three-tier bot rules- AI training scrapers fully disallowed:
GPTBot,anthropic-ai,CCBot,Google-Extended,Meta-ExternalAgent,cohere-ai,Bytespider,Diffbot,PetalBot,omgilibot,AI2Bot,img2dataset,Scrapy - AI browsing/answer agents allowed on public content:
ChatGPT-User,Claude-Web,PerplexityBot,Applebot,YouBot - Default
*rule unchanged — allow/, block private paths
- AI training scrapers fully disallowed:
llms.txt(public/llms.txt) — llmstxt.org standard for AI systems- Structured Markdown describing site sections, services, pricing currency (GBP), and scope (no domains / shared hosting / dedicated)
- Direct links to all major product pages with concise descriptions for LLM context
sitemap.xml(app/sitemap.ts) — Next.js file-based sitemap with 12 static routes, correct priorities, and change frequenciessecurity.txt(public/.well-known/security.txt) — RFC 9116 security disclosure file- JSON-LD Structured Data —
OrganizationandWebSiteschemas injected in root layout<head>Organization: name, logo, description, contact point,sameAs(Twitter)WebSite: includesSearchActionpointing to/kb?q=for Google Sitelinks Searchbox eligibility
- Security Headers — applied site-wide via
next.config.mjsX-Content-Type-Options: nosniffX-Frame-Options: DENYReferrer-Policy: strict-origin-when-cross-originPermissions-Policyblocking camera, microphone, geolocation, and FLoC (interest-cohort)Strict-Transport-Securitywith 2-yearmax-age,includeSubDomains, andpreloadX-DNS-Prefetch-Control: on
- Page Metadata —
title,description,openGraph,twitteradded or improved across all public pagesapp/about/page.tsx,app/contact/page.tsx(previously had no metadata),app/auth/register/page.tsxapp/games/minecraft/page.tsx,app/games/rust/page.tsx,app/games/hytale/page.tsxapp/vps/amd/page.tsx,app/vps/intel/page.tsx
- Canonical URL —
alternates: { canonical: "/" }added to root layout metadata
Changed
next.config.mjs— Serwist plugin wraps the config chain (withSerwist(withNextIntl(nextConfig)))next.config.mjs— Fixed silent bug:imageskey was defined twice; redundantremotePatternsblock removed (superseded byunoptimized: true)- Root Layout Keywords — expanded to include VPS-specific terms:
amd vps,intel vps,kvm vps,nvme ssd,root access vps,nodebyte
Release | v3.4.0
Added
- VPS Pricing Component - New
VpsPricingcomponent atpackages/ui/components/Layouts/VPS/vps-pricing.tsx- Gradient header cards with AMD (red) and Intel (blue) variant colour schemes matching the VPS index page style
- Plan cards show: gradient icon header, plan name + starting price, description, CPU model chip, Check-icon spec list, and CTA button
- Out-of-stock state with Discord link CTA
- Footer CTA with contact and "View All Plans" links
- VPS Plan Filter Panel - Dynamic range slider filters on the AMD/Intel VPS pricing sections
- Price, CPU cores, RAM, and Storage sliders — all ranges computed dynamically from plan data at runtime
- Search by plan name and sort (Default / Low–High / High–Low)
- "Clear Filters" button shown only when filters are active
- "No plans match" empty state with clear button
- Gradient Header Pricing Cards for Game Servers -
GamePricingcards redesigned to match VPS card style- Per-game customisable
headerIcon,headerGradient, andheaderIconBgprops with sensible defaults - Minecraft:
Blocksicon, primary gradient; Rust:Gamepad2icon, accent gradient; Hytale:Sparklesicon, amber gradient - Most popular badge moved to header top-right (rounded pill); name + "Starting at £X/mo" row;
Checkicon feature list
- Per-game customisable
- Game Pricing Filters - Search and sort filter bar added to
GamePricingcomponent- Search by plan name, sort by price (ascending / descending / default)
- "Clear Filters" and "No results" empty state
- Bandwidth Unit Support -
VpsPlanSpec.bandwidthnow supportsMB,GB, andTBunits- Replaces the previous
bandwidthTB: number | nullfield - Format:
{ amount: number; unit: "MB" | "GB" | "TB" } | null(null = unmetered)
- Replaces the previous
- VPS Plan
descriptionField - Short description per plan shown under the plan name on pricing cards - VPS Translation Keys - Added
vps.pricing.*namespace:badge,title,description,mostPopular,getStarted,viewAllPlans,contactUs,customSolution,unmetered,poweredByvps.pricing.filters.*:search,price,cpu,ram,storage,sortDefault,sortAsc,sortDesc,clearFilters,noResults,noResultsDescgamePage.pricing.filters.*: same filter keys for game pricing
Changed
- VPS AMD & Intel Pages Restructured - Both pages rewritten as thin ~48-line server components
- Now use
VpsHero+VpsPricing+GameFeatures+GameFAQlayout pattern (consistent with game pages) - All plan data, feature keys, FAQ keys, and spec data driven from
packages/core/constants/vps/
- Now use
- Pricing Section Order - Pricing/Plans section moved above Features on all server pages
- Affected: AMD VPS, Intel VPS, Minecraft, Rust, Hytale
- Rationale: visitors want pricing up-front; features serve as supporting detail below
- VPS Pricing Grid - Widened from
max-w-5xltomax-w-6xl, capped at 3 columns (lg:grid-cols-3) for readability AMD_FEATURE_KEYS- Changed from plain string array to{ key, icon }object array for direct use inGameFeaturesAMD_FAQ_KEYS/INTEL_FAQ_KEYS- Added"windows"FAQ keyVpsHeroOOS CTA - Replaced disabled button with an active Discord link (ExternalLinkicon)- Navigation
extrasSection Removed - All "Extra links" state, toggles, desktopDropdownMenu, and mobile dropdown fully excised fromnavigation.tsx LINKS.billing.amdVps- Corrected tohttps://billing.nodebyte.host/store/vps-hosting
Fixed
- Pre-existing Tailwind v4 class warnings in
game-pricing.tsx— replacedbg-gradient-to-b/rwithbg-linear-to-b/randvia-primary/[0.02]withvia-primary/2