Releases: NodeByteHosting/website
Release list
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
Release | v3.3.0
Added
- Admin Locations Page - View and sync Pterodactyl panel locations
- Stats cards showing total locations, descriptions, and node counts
- Searchable data table with short code, long name, and associated nodes
- Individual sync button for locations data
- Navigation item added to admin sidebar with MapPin icon
- Admin Allocations Page - View and manage server allocations across nodes
- Stats cards for total allocations, assigned/unassigned counts, and unique ports
- Filterable table by node with IP, port, alias, assigned server, and node columns
- Server name column now correctly populated from synced allocation data
- Admin Nodes Page - Navigation and routing for server nodes management
- User Account Profile Management - Full profile editing on dashboard account page
- Editable fields: first name, last name, username, phone number, company name, billing email
- Email verification status badge with resend verification button
- Email change request form with new email input and confirmation
- Security tab with password change form
- Account information section showing creation date, last login, and account ID
- Translation Keys - Added missing i18n keys for new features
admin.nav.locations,admin.nav.allocations,admin.nav.nodesnavigation labelsadmin.sync.started,admin.sync.runningtoast message translationsdashboard.accountsection with full profile and security form labels
- API Routes Migration to Go Backend - Consolidated Next.js API routes to centralized Fiber backend
- Removed Next.js API routes from
/app/api/directory - All admin endpoints now served from unified Go Fiber backend with consistent error handling
- Bearer token authentication for all admin routes
- Admin settings endpoints:
GET/POST /api/admin/settings - GitHub repository management:
GET/POST/PUT/DELETE /api/admin/settings/repos - Discord webhook management:
GET/POST/PUT/PATCH/DELETE /api/admin/settings/webhooks - Sync controls:
GET/POST /api/admin/sync,GET /api/admin/sync/logs,GET/POST /api/admin/sync/settings - Server management:
GET /api/admin/servers - Improved API response consistency with backend-driven validation
- Removed Next.js API routes from
- Admin Users Management Enhancements - Improved user listing and filtering capabilities
- Pagination support with configurable page size (25 users per page)
- Sorting by user, email, status, created date, and last login
- Search and filter functionality for user discovery
- User role management dialog for updating admin status
- Statistics cards showing total users, migrated users, admins, and active users
- API Hooks Refactoring - Updated all admin API hooks to work with Go backend
useAdminUsers()- User listing with pagination and filteringuseAdminServers()- Server management queriesuseAdminSettings()- Settings retrieval and updatesuseAdminWebhooks()- Webhook CRUD operations- All hooks now construct proper query parameters for backend endpoints
- Consistent error handling and loading states across all admin operations
Fixed
- Nested Form Hydration Error - Fixed React hydration mismatch on account page
- Converted nested
<form>inside profile form to<div>withonClickhandler - Email change submission now works without triggering DOM nesting warnings
- Converted nested
- Invisible Disabled Email Input - Fixed dark mode styling for disabled inputs
- Added
text-foreground opacity-100classes to ensure disabled email field text is visible - Previously
bg-mutedmade text invisible against dark backgrounds
- Added
- Admin Users Page Data Population - Fixed empty users table in admin panel
- Corrected
useAdminUsers()hook to accept and pass query parameters (page, pageSize, sortField, sortOrder, filter, search) - Fixed data structure extraction from nested API response format (
data.users[]anddata.pagination) - Corrected mutation payload to only send
userIdandrolesfields - User data now properly displays with pagination, sorting, and filtering working correctly
- Backend timestamp handling fixed to properly convert PostgreSQL TIMESTAMP columns to ISO 8601 format
- Corrected
- API Route Organization - Eliminated duplicate API implementations
- Removed redundant Next.js API routes that are now handled by Go backend
- Centralized authentication and authorization in Go middleware
- Consistent response format across all API endpoints