Skip to content

Releases: NodeByteHosting/website

v3.6.0

Choose a tag to compare

@NodeByteLTD NodeByteLTD released this 05 Jul 05:46

Added

  • Dedicated Server Hosting — new /dedicated product category backed by live Paymenter billing data

    • packages/core/types/servers/dedicated.tsDedicatedPlanSpec interface; cores is optional (physical cores, not vCPU), storageDescription holds the raw drive label (e.g. "2 × 1 TB NVMe SSD (RAID 1)") for multi-drive configurations
    • packages/core/products/billing-service.tsgetDedicatedPlans(categorySlug) function following the same billing-service pattern as VPS and game plans
    • packages/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 CTA
    • app/dedicated/page.tsx — server component fetching from the dedicated-servers billing 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 to SERVICE_CATEGORIES for the homepage service cards (amber palette, Cpu icon)
    • translations/templates/en.jsonservices.dedicated.* and footer.services.dedicatedServers translation keys added
  • Knowledge Base Subcategory Support — the KB now supports arbitrary nesting (e.g. games → minecraft → troubleshooting) driven entirely by the filesystem

    • app/kb/[...path]/page.tsx — unified catch-all route replacing the old fixed [category] and [category]/[article] routes; calls resolvePath() to decide whether to render a category page or an article page
    • packages/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 for generateStaticParams
    • packages/kb/components/kb-sidebar.tsx — recursive SidebarNode component with depth-aware indentation; auto-expands the branch matching the current pathname
    • packages/kb/components/kb-category-card.tsxhref now uses the full category path; badge shows recursive totalCount
    • packages/kb/components/kb-article-card.tsxhref uses categoryPath (full relative path)
    • packages/kb/components/kb-article.tsx — prev/next links use full categoryPath
    • packages/kb/components/kb-search.tsx — search result links use full categoryPath
    • KB content restructured under packages/kb/content/games/minecraft/ and packages/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.tsgetPricesMap(product) returns Record<string, number> mapping every currency code to its monthly price from the product's recurring plan
    • packages/ui/components/ui/price.tsxPrice component accepts an optional prices prop; uses format(prices[currency]) (exact billing price) when available, falls back to convertAndFormat(amountGBP) (exchange rate)
    • packages/core/types/servers/game.ts, vps.ts, dedicated.tsprices?: Record<string, number> field added to all plan spec interfaces
    • billing-service.ts — all three plan fetchers (getGamePlans, getVpsPlans, getDedicatedPlans) populate prices from getPricesMap()
    • VPS Hub, all game pages — prices prop 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

Choose a tag to compare

@CodeMeAPixel CodeMeAPixel released this 30 May 20:15
705c583

Added

  • Google Ads Integration — Google tag (AW-16740819749) installed via next/script with strategy="afterInteractive" in the root layout; fires after hydration without blocking render
    • packages/core/lib/gtag.ts — central utility exporting GOOGLE_ADS_ID, CONVERSION_IDS map, and ready-to-call conversions.*() 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 via usePathname

Changed

  • About, Features, Services converted 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 cacheCurrencyProvider now checks localStorage for a cached rates response before fetching /api/currency/rates; cache TTL is 1 hour (matching the API's s-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.tsx was 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-entry DOT_ALPHA_TABLE lookup built once at module load time

What's Changed

New Contributors

Full Changelog: v3.5.3...v3.5.4

v3.5.3

Choose a tag to compare

@CodeMeAPixel CodeMeAPixel released this 18 Apr 05:54
1f9f786

Added

  • Contact Page — Support Ticket Channel — third support channel card added to contact.tsx pointing to https://billing.nodebyte.host/tickets/create
    • Uses Headphones icon with bg-accent/10 text-accent colour scheme
    • Grid widened from md:grid-cols-2 max-w-4xl to md:grid-cols-3 max-w-5xl
    • contact.ticket.features translation keys added to translations/messages/en-US.json and translations/templates/en.json

Changed

  • Contact Page — Card Button Alignment — support channel card inner div converted to flex flex-col h-full; feature list gains flex-1 so 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-foreground to bg-foreground/10 text-foreground to match the bg-color/10 text-color pattern used by all other channel cards
  • Navigation — Dropdown Hover Colours — row hover background changed from hover:bg-accent/10 to hover:bg-muted/60 across all three desktop dropdowns (Company, Services, Resources); icon box hover changed from solid group-hover:bg-primary group-hover:text-primary-foreground to a subtle group-hover:bg-primary/20; title text given explicit text-foreground to prevent blending on saturated themes
  • Navigation — modal={false} — all three desktop DropdownMenu components now render with modal={false} so the Radix invisible overlay no longer blocks mouseEnter events on sibling nav items, fixing the hover-jump bug between dropdowns
  • Navigation — ExternalLink IconExternalLink indicator in the Resources dropdown is now conditionally rendered based on resource.external instead 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--primary and --accent lightness values were too high (0.58–0.68) while --primary-foreground / --accent-foreground remained near-black (0.10–0.12), producing illegible black-on-dark text on buttons and icon boxes
    • Emerald: --primary 0.58 → 0.42, --accent 0.62 → 0.48, foregrounds 0.10 → 0.98
    • Amber: --primary 0.62 → 0.46, --accent 0.68 → 0.52, foregrounds 0.12 → 0.98
    • Teal: --primary 0.60 → 0.44, --accent 0.64 → 0.50, foregrounds 0.10 → 0.98
  • Translations — Rust premium Plan Keysgames.rust.plans.premium.name and games.rust.plans.premium.description were missing from en-US.json and en.json, causing MISSING_MESSAGE errors at runtime; both files updated

Patch | v3.5.2

Choose a tag to compare

@CodeMeAPixel CodeMeAPixel released this 19 Mar 10:51
e011194

Added

  • 17 New Themes — CSS variable definitions added to app/globals.css for 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)
  • Theme Toggle Redesignpackages/ui/components/theme-toggle.tsx fully rewritten
    • New THEMES registry with {value, label, bg, accent} per entry
    • ThemeSwatch component: 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-5 layout)
    • Header displays the currently active theme name
  • ScrollToHash Utility Component — replaces the useEffect-based hash scroll in app/page.tsx; allows the home page to be a Server Component while still supporting #section anchor navigation
  • GitHub Releases APINodeByteHosting/backend and NodeByteHosting/Game-Panel added to DEFAULT_REPOSITORIES in app/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.png with Next.js file-based opengraph-image.tsx / twitter-image.tsx generated at the edge via ImageResponse
    • Root (/) — "Game Servers & VPS Hosting." card; default for all pages without their own image
    • /vps subtree — "AMD & Intel VPS Hosting." card with KVM/root-access copy
    • /games subtree — "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 #040d1a background with blue/purple radial glows
    • Static images: ["/og.png"] entries removed from root layout openGraph and twitter metadata

Changed

  • Dynamic Imports Removednext/dynamic replaced with static import across all page-level components; eliminates unnecessary client-side code splitting for SSR-compatible components
    • app/games/minecraft/page.tsx, app/games/rust/page.tsx, app/games/hytale/page.tsxGamePricing now statically imported
    • app/vps/amd/page.tsx, app/vps/intel/page.tsxVpsPricing now statically imported
  • Home Page converted to Server Componentapp/page.tsx was "use client" solely for hash-scroll useEffect; now a pure Server Component using <ScrollToHash />
  • LayoutChrome hydration guard removedmounted/useEffect that 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" → /vps entry
  • 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?" → /contact CTA
  • VPS Hub Sort Dropdown — native <select> replaced with shadcn Select / SelectTrigger / SelectContent for theme consistency
  • Logo Componentpackages/ui/components/logo.tsx rewritten 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
  • Trustpilot API — added export const revalidate = 3600 and next: { 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 mapRadio and Mountain icons replaced with Pickaxe and Wrench to 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 index comingSoon state 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 Name4thofjuly renamed to fourthjuly throughout toggle registry and CSS; CSS class names cannot begin with a digit

Patch | v3.5.1 - Auth Flow Crash

Choose a tag to compare

@CodeMeAPixel CodeMeAPixel released this 17 Mar 08:46
095c1a8

Fixed

  • Login Page CrashArrowLeft (Lucide) was removed from login-form-multistep.tsx imports when magic links were disabled, but is still used by the "Back" button in the password step; import restored to fix ReferenceError: ArrowLeft is not defined at 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

Choose a tag to compare

@CodeMeAPixel CodeMeAPixel released this 17 Mar 08:40
567d6c0

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 comingSoon hero and disabled pricing section until plans are added
  • Centralised Game Constants (packages/core/constants/game/) — single source of truth for all game hosting data
    • minecraft.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.ts exports GAME_OPTIONS array used by the games index page; dynamically derives starting prices and comingSoon flag from plan arrays
  • Shared Type System (packages/core/types/servers/) — extracted shared spec interfaces
    • GamePlanSpec — 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 from vps/amd.ts to the shared types module
  • Product Service (packages/core/products/) — unified product catalogue with admin override support
    • service.tsgetAllProducts(), getProductsByType(), getProductsByCategory(), isCategoryOutOfStock(), getCategoryStartingPrice()
    • server.tsapplyGamePlanOverrides() and applyVpsPlanOverrides() apply in-memory stock/enabled overrides at render time
    • override-store.ts — module-level Map store; supports per-plan stock and enabled overrides without a database (reset on server restart)
    • types.tsProductEntry, ProductType, StockStatus shared types for the admin catalogue
  • Nodes Page (/nodes) — new public page showing live node status and all available data centre locations
    • NodesClient component 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 hydrated guard
    • usePublicNodes() hook added to use-public-api.ts; PublicNode interface exported
  • Navigation: Network Link — "Network" entry added to the Company dropdown pointing to /nodes
    • Uses Network (Lucide) icon and company.network.* translation keys
  • 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-70 and a disabled CTA button instead of a broken order link
    • Enriched spec list: uplink (port speed) and ddos (layer list + always-on flag) rows shown when present on a plan
    • Location badge row on plan cards for plans with a location field
    • Promo banner above pricing grid: VPSLAUNCH code with click-to-copy; valid date shown inline
    • AMD and Intel VPS plans now carry uplink and ddos fields
    • AMD_SPECS processor 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); fallback Check
    • Location badge displayed below plan description when a location field is present on a plan
    • "Starting at" label removed from individual plan cards (price shown without prefix)
    • location and stock fields added to PricingPlan interface
  • 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 comingSoon field on GAME_OPTIONS entries
  • 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_KEYS arrays mapped against translations
    • GamePricing now loaded via next/dynamic on game pages to reduce initial JS bundle
    • Hero props (name, description, banner, icon, tag, tagColor) sourced from *_CONFIG constants
  • Games Index — plan data now sourced from GAME_OPTIONS instead of an inline array; ICON_MAP converts icon name strings to Lucide components at render
  • Navigation — Discord IconMessageCircle replaced with SiDiscord (Simple Icons) for the Discord CTA button in both desktop and mobile nav
  • Hero Promo Code — hardcoded WELCOME10 replaced with t("hero.promo.highlight") translation key for easier updates without code changes
  • Theme Toggle — SSR Hydration Fix — removed early if (!mounted) return path; icon falls back to Palette before hydration; DropdownMenuContent suppressed until mounted to avoid SSR mismatch
  • LINKS.status — updated from https://status.nodebyte.host to https://nodebytestat.us
  • LINKS.contact/contact added as a named constant
  • LINKS.billingfivemHosting, redmHosting, palworldHosting URLs 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 form
  • packages/core/constants/minecraft/ — old standalone Minecraft constants folder (plans.ts, features.ts, faqs.ts) removed; replaced by packages/core/constants/game/minecraft.ts
  • packages/core/constants/rust/ — old standalone Rust constants folder removed; replaced by packages/core/constants/game/rust.ts
  • packages/core/middleware/setup.ts — disabled setup middleware stub removed; setup is handled entirely by the Go backend
  • packages/ui/components/ui/use-mobile.tsx — unused useIsMobile hook removed
  • packages/ui/components/ui/use-toast.ts — unused useToast / toast implementation 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

Choose a tag to compare

@CodeMeAPixel CodeMeAPixel released this 17 Mar 02:24
74bdbfb

Added

  • Progressive Web App (PWA) Support - Full PWA implementation via @serwist/next + serwist
    • app/sw.ts service 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 + clientsClaim for 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 API
    • display_override: ["standalone", "window-controls-overlay", "minimal-ui"] for progressive desktop enhancement
    • prefer_related_applications: false so 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
  • 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 frequencies
  • security.txt (public/.well-known/security.txt) — RFC 9116 security disclosure file
  • JSON-LD Structured DataOrganization and WebSite schemas injected in root layout <head>
    • Organization: name, logo, description, contact point, sameAs (Twitter)
    • WebSite: includes SearchAction pointing to /kb?q= for Google Sitelinks Searchbox eligibility
  • Security Headers — applied site-wide via next.config.mjs
    • X-Content-Type-Options: nosniff
    • X-Frame-Options: DENY
    • Referrer-Policy: strict-origin-when-cross-origin
    • Permissions-Policy blocking camera, microphone, geolocation, and FLoC (interest-cohort)
    • Strict-Transport-Security with 2-year max-age, includeSubDomains, and preload
    • X-DNS-Prefetch-Control: on
  • Page Metadatatitle, description, openGraph, twitter added or improved across all public pages
    • app/about/page.tsx, app/contact/page.tsx (previously had no metadata), app/auth/register/page.tsx
    • app/games/minecraft/page.tsx, app/games/rust/page.tsx, app/games/hytale/page.tsx
    • app/vps/amd/page.tsx, app/vps/intel/page.tsx
  • Canonical URLalternates: { 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: images key was defined twice; redundant remotePatterns block removed (superseded by unoptimized: 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

Choose a tag to compare

@CodeMeAPixel CodeMeAPixel released this 17 Mar 01:24
5aac173

Added

  • VPS Pricing Component - New VpsPricing component at packages/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 - GamePricing cards redesigned to match VPS card style
    • Per-game customisable headerIcon, headerGradient, and headerIconBg props with sensible defaults
    • Minecraft: Blocks icon, primary gradient; Rust: Gamepad2 icon, accent gradient; Hytale: Sparkles icon, amber gradient
    • Most popular badge moved to header top-right (rounded pill); name + "Starting at £X/mo" row; Check icon feature list
  • Game Pricing Filters - Search and sort filter bar added to GamePricing component
    • Search by plan name, sort by price (ascending / descending / default)
    • "Clear Filters" and "No results" empty state
  • Bandwidth Unit Support - VpsPlanSpec.bandwidth now supports MB, GB, and TB units
    • Replaces the previous bandwidthTB: number | null field
    • Format: { amount: number; unit: "MB" | "GB" | "TB" } | null (null = unmetered)
  • VPS Plan description Field - 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, poweredBy
    • vps.pricing.filters.*: search, price, cpu, ram, storage, sortDefault, sortAsc, sortDesc, clearFilters, noResults, noResultsDesc
    • gamePage.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 + GameFAQ layout pattern (consistent with game pages)
    • All plan data, feature keys, FAQ keys, and spec data driven from packages/core/constants/vps/
  • 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-5xl to max-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 in GameFeatures
  • AMD_FAQ_KEYS / INTEL_FAQ_KEYS - Added "windows" FAQ key
  • VpsHero OOS CTA - Replaced disabled button with an active Discord link (ExternalLink icon)
  • Navigation extras Section Removed - All "Extra links" state, toggles, desktop DropdownMenu, and mobile dropdown fully excised from navigation.tsx
  • LINKS.billing.amdVps - Corrected to https://billing.nodebyte.host/store/vps-hosting

Fixed

  • Pre-existing Tailwind v4 class warnings in game-pricing.tsx — replaced bg-gradient-to-b/r with bg-linear-to-b/r and via-primary/[0.02] with via-primary/2

Release | v3.3.0

Choose a tag to compare

@CodeMeAPixel CodeMeAPixel released this 01 Mar 10:10
d560538

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.nodes navigation labels
    • admin.sync.started, admin.sync.running toast message translations
    • dashboard.account section 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
  • 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 filtering
    • useAdminServers() - Server management queries
    • useAdminSettings() - Settings retrieval and updates
    • useAdminWebhooks() - 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> with onClick handler
    • Email change submission now works without triggering DOM nesting warnings
  • Invisible Disabled Email Input - Fixed dark mode styling for disabled inputs
    • Added text-foreground opacity-100 classes to ensure disabled email field text is visible
    • Previously bg-muted made text invisible against dark backgrounds
  • 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[] and data.pagination)
    • Corrected mutation payload to only send userId and roles fields
    • 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
  • 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

Panel Integrations and More

Choose a tag to compare

@CodeMeAPixel CodeMeAPixel released this 27 Dec 12:23
0cc598f

Added

  • GitHub Token Management: Move GitHub personal access token from environment variables to secure database storage
    • GitHub token section in admin settings with show/hide toggle
    • Token is hidden with asterisks and cannot be viewed once set
    • Warning alert about token protection and immutability
    • Fallback to GITHUB_TOKEN environment variable for backward compatibility
  • SystemSettings Database Table: Extended Prisma model for storing system-wide configuration including credentials and notification settings
  • Admin Settings API: Complete GET/POST endpoints for retrieving and updating all system settings with database fallback support
  • Pterodactyl Configuration Management: Editable Pterodactyl URL, API Key, and API endpoint in admin settings panel
  • Crowdin Integration Settings: Project ID and Personal Token configuration for translation management
  • Email Notifications System: Resend API integration with database-backed credential storage
    • Conditional API key input that appears only when email notifications are enabled
    • Helper functions for common notification templates
  • Discord Webhook Management: Support for multiple Discord webhooks with add/remove functionality
    • Manage webhook names and URLs directly from admin panel
    • Conditional section that displays only when Discord notifications are enabled
    • Separate webhook entries with individual delete buttons
  • Notification Library: Comprehensive notifications module (packages/core/lib/notifications.ts)
    • sendEmailNotification() - Send emails via Resend API
    • sendDiscordNotification() - Send to configured Discord webhooks with embed support
    • sendNotification() - Combined email and Discord notification sender
    • Helper functions for common notification types (server status, sync updates, maintenance, user registration)
  • Maintenance Mode Page: Beautiful /maintenance page with animated UI for when site is under maintenance
    • Accessible by all users; admins can bypass maintenance mode
    • Contact support button with styling
  • Sync Service Database Credentials: Updated sync library to fetch Pterodactyl credentials from database
    • Fallback to environment variables for backward compatibility
    • Respects syncInterval setting from database
  • Middleware Authentication & Access Control:
    • Maintenance mode: Redirects all non-admin users to /maintenance when enabled
    • Registration disabled: Prevents access to /auth/register when registration is disabled
    • All checks performed via database settings with proper fallback
  • System Features Toggle: Enable/disable registration, maintenance mode, and auto-sync from database
  • Notification Settings: Database-backed email and Discord webhook notification configuration with credential storage
  • Advanced Settings: Cache timeout and sync interval configuration with persistent database storage
  • Admin Users Table Responsive Design: Mobile-optimized table layout with email displayed under username on small screens
  • Connection Testing: Updated test endpoint to use database credentials with validation before sending requests
  • Webhook Dispatcher Service: Comprehensive Discord webhook notification system (packages/core/dispatchers/webhooks.ts)
    • Event-specific dispatch functions: dispatchSettingsUpdate(), dispatchServerStateChange(), dispatchSyncCompletion(), dispatchSystemAlert(), dispatchSupportTicket(), dispatchNodeAlert(), dispatchBillingEvent()
    • Non-blocking asynchronous webhook delivery with parallel execution
    • Type-safe webhook routing by event type (GAME_SERVER, VPS, SYSTEM, BILLING, SECURITY, SUPPORT, CUSTOM)
    • Webhook delivery tracking with testSuccessAt timestamp updates
    • Rich Discord embeds with color-coding by event type
    • Automatic webhook selection based on event type and scope (ADMIN, USER, PUBLIC)
    • Per-webhook error reporting and detailed delivery statistics
  • Webhook Integration: Automatic webhook triggers for system events
    • Settings updates automatically send SYSTEM webhooks with changed field names
    • Sync operations automatically send SYSTEM webhooks with sync summary and duration
    • Admin panel webhook management with test functionality
    • Webhook creation, editing, deletion via REST API (/api/admin/settings/webhooks)
  • Webhook Documentation: Complete guides and examples (docs/ folder)
    • WEBHOOK_DISPATCHER_README.md - Architecture and feature overview
    • WEBHOOK_INTEGRATION_GUIDE.md - Integration examples for all event types
    • WEBHOOK_QUICK_REFERENCE.ts - Copy-paste code samples
  • Incremental Sync Progress Logging: Sync functions now emit progress updates to database during operation
    • Real-time item counts: itemsTotal, itemsSynced, itemsFailed updated after each batch
    • Last message updates in metadata.lastMessage for live progress display
    • Implemented for locations, nodes, allocations, nests/eggs, servers, and database syncs
  • Allocation Sync Batching: Prevent long blocking operations by batching allocation processing
    • Configurable batch size via SYNC_ALLOCATION_BATCH_SIZE env variable (default: 100)
    • Progress updates after each batch for real-time feedback
    • Significantly improves sync responsiveness for large node allocations
  • Sync Cancellation Support: Allow admins to cancel running sync operations
    • Sync functions check metadata.cancelRequested flag and abort gracefully
    • New /api/admin/sync/cancel endpoint sets cancellation flag on running sync log
    • Cancelled syncs marked as FAILED with "Cancelled by user" message
  • Sync Logs Endpoint: New /api/admin/sync/logs API endpoint for fetching sync audit history
    • Cursor-based pagination support for efficient browsing of large log histories
    • Returns nextCursor for client-side pagination
    • Configurable limit parameter (max 100 entries)
    • Admin-only access with authentication check
  • Auto-Sync Scheduler: Background scheduler for automatic periodic sync operations
    • Reads auto_sync_enabled and sync_interval from system config
    • Idempotent scheduler prevents duplicate runs if already executing
    • Configurable via admin UI without code changes
    • Scheduler started automatically on server render in app/layout.tsx
  • Sync Logs Admin Page: New dedicated admin page at /admin/sync/logs for sync operation audit
    • Displays recent sync runs with status badges (Running, Completed, Failed, Pending)
    • Real-time scheduler status indicator with last run timestamp
    • Full-text search across sync messages and operation types
    • Configurable result limit (1-100 entries per page)
    • Cursor-based pagination with "Load More" button
    • Mobile-responsive card-based layout
  • Sync Logs Pagination: Server-side cursor-based pagination for sync logs endpoint
    • Efficient pagination using cursor (lastId) approach
    • Next cursor included in response for seamless client-side browsing
    • Prevents N+1 queries and improves performance with large datasets
  • Scheduler Settings API: New /api/admin/sync/settings endpoint for managing auto-sync configuration
    • GET endpoint returns current auto_sync_enabled and sync_interval settings
    • POST endpoint allows updating scheduler configuration with validation
    • Admin-only access with system admin role check
  • Scheduler Controls in Admin UI: Admin users can now configure auto-sync directly from Sync Logs page
    • Toggle switch for enabling/disabling automatic sync
    • Numeric input for configuring sync interval in seconds
    • Save button to persist configuration to database
    • Loading states and error handling with toast notifications
  • Sync Logs Sidebar Navigation: Added "Sync Logs" link to admin panel navigation
    • Appears as separate menu item from main Sync page
    • Accessible to all admin users
  • Sync Logs Translation Keys: Complete internationalization for Sync Logs page
    • Added admin.syncLogs translation section with all UI strings
    • Includes status labels, button text, field labels, and descriptions
    • Supports multiple languages via translation system
  • Servers Admin Panel Schema Fix: Updated servers API and UI to use Prisma schema correctly
    • Changed from non-existent direct fields (memory, disk, cpu) to ServerProperty key-value pairs
    • Servers API now fetches properties array instead of individual fields
    • Server page displays resource info by extracting values from properties
    • Graceful handling of missing properties (shows nothing if not available)

Changed

  • GitHub Release API: Updated to fetch GitHub token from database first, then fallback to environment variable
  • Admin Users Table: Restructured table with fixed layout to prevent content overflow on mobile
  • Admin Users Status Badges: Full badge text now displays on mobile with vertical stacking when multiple badges present
  • Admin Settings Page: Completely redesigned with four tabs (Connections, Features, Notifications, Advanced)
    • Pterodactyl section now includes editable URL and API fields with external link button
    • New Crowdin section for translation management configuration
    • New GitHub section for token management with security warnings
    • Features tab with all toggles (Registration, Maintenance Mode, Auto-sync)
    • Notifications tab with conditional email and Discord sections with proper styling
    • Advanced tab with cache timeout and sync interval selectors
  • Pterodactyl Sync Service: Now reads credentials from database first, then falls back to environment variables
  • API Route Authentication: Settings test endpoint changed from GET to POST to support credential testing with user-provided values
  • Settings Persistence: All configuration now properly persists to database across page ...
Read more