Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
6573f41
Merge pull request #111 from NodeByteHosting/development
CodeMeAPixel Jun 16, 2026
d3c8294
Merge pull request #112 from NodeByteHosting/development
CodeMeAPixel Jun 16, 2026
9b50c99
Merge pull request #113 from NodeByteHosting/development
CodeMeAPixel Jun 16, 2026
2eda024
Merge pull request #114 from NodeByteHosting/development
CodeMeAPixel Jun 17, 2026
01d3f60
Update vps-hub.tsx
NodeByteLTD Jun 19, 2026
69cea92
Update amd.ts
NodeByteLTD Jun 19, 2026
af0094a
Merge pull request #118 from NodeByteHosting/nightly
github-actions[bot] Jun 28, 2026
a12894e
fix: knowledgebase and more
CodeMeAPixel Jul 5, 2026
791da5c
fix: update changelog
CodeMeAPixel Jul 5, 2026
3034886
fix: translations
CodeMeAPixel Jul 5, 2026
3fcc57e
fix: more billing stuff
CodeMeAPixel Jul 6, 2026
24247b9
fix: merge conflicts
CodeMeAPixel Jul 6, 2026
fc1052c
Merge pull request #123 from NodeByteHosting/development
CodeMeAPixel Jul 6, 2026
eaff18b
fix: product handling
CodeMeAPixel Jul 7, 2026
9e44898
fix: product handling
CodeMeAPixel Jul 7, 2026
90157eb
fix: more product handling
CodeMeAPixel Jul 7, 2026
23de3d4
Merge branch 'production' into development
CodeMeAPixel Jul 7, 2026
61a8f6f
Merge pull request #125 from NodeByteHosting/development
CodeMeAPixel Jul 7, 2026
4ac81ca
add: sponsored node
CodeMeAPixel Jul 7, 2026
f437c0b
Merge branch 'development' of https://github.com/NodeByteHosting/webs…
CodeMeAPixel Jul 7, 2026
e0340a7
add: sponsored node
CodeMeAPixel Jul 7, 2026
18692c0
Update client-portal.md
CodeMeAPixel Jul 8, 2026
6fe3764
Create PayPal cancellations guide
CodeMeAPixel Jul 8, 2026
6fac035
Change title to 'PayPal Cancellations'
CodeMeAPixel Jul 8, 2026
8fea201
Update client-portal.md
CodeMeAPixel Jul 8, 2026
12ea8dd
Create PayPal cancellations guide
CodeMeAPixel Jul 8, 2026
d8745f0
Change title to 'PayPal Cancellations'
CodeMeAPixel Jul 8, 2026
f172de9
Create account-credits.md for billing documentation
CodeMeAPixel Jul 9, 2026
a36cc2c
Create service-suspensions.md for billing and compliance
CodeMeAPixel Jul 9, 2026
2755d14
Add payment methods management documentation
CodeMeAPixel Jul 9, 2026
6f6ae1d
Add subscriptions.md for billing lifecycle documentation
CodeMeAPixel Jul 9, 2026
68136be
Merge pull request #131 from NodeByteHosting/development
CodeMeAPixel Jul 9, 2026
29c9977
Create server-management.md
CodeMeAPixel Jul 9, 2026
6c208b8
Revise VPS Server Management title and header
CodeMeAPixel Jul 9, 2026
3fb1c84
Change title from 'Managing your VPS/VDS Server' to 'Managing your Se…
CodeMeAPixel Jul 9, 2026
318e253
Revise service management details in service-types.md
CodeMeAPixel Jul 9, 2026
3ef1a42
Add VirtFusion Management Console documentation
CodeMeAPixel Jul 9, 2026
ca3c290
Change order of service-types.md to 2
CodeMeAPixel Jul 9, 2026
41a7e29
Rename service-types.md to server-types.md
CodeMeAPixel Jul 9, 2026
51dd31d
Change order of VirtFusion documentation to 3
CodeMeAPixel Jul 9, 2026
fcbde3f
Create using-novnc.md
CodeMeAPixel Jul 9, 2026
50ddd43
Remove Go badge from README
CodeMeAPixel Jul 9, 2026
1e2bef4
Revise README to clarify project purpose
CodeMeAPixel Jul 9, 2026
1773c6c
Clean up README by removing features and authors
CodeMeAPixel Jul 9, 2026
a0dde70
Merge pull request #132 from NodeByteHosting/development
CodeMeAPixel Jul 9, 2026
144ee40
Merge pull request #133 from NodeByteHosting/production
CodeMeAPixel Jul 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,9 @@ JWT_SECRET=""

# DeepL API key for automated translation (https://www.deepl.com/pro-api)
# Free tier: use a key ending in :fx | Paid tier: standard key
DEEPL_API_KEY=""
DEEPL_API_KEY=""

# status.nodebyte.host public status API — admin token unlocks hidden monitors
# and bypasses the shared CDN cache for fresher data.
STATUS_API_URL="https://status.nodebyte.host"
STATUS_TOKEN=""
62 changes: 62 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,67 @@ All notable changes to the NodeByte Hosting website will be documented in this f
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [3.6.0] - 2026-07-04

### Added

- **Dedicated Server Hosting** — new `/dedicated` product category backed by live Paymenter billing data
- `packages/core/types/servers/dedicated.ts` — `DedicatedPlanSpec` 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.ts` — `getDedicatedPlans(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.json` — `services.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.tsx` — `href` now uses the full category path; badge shows recursive `totalCount`
- `packages/kb/components/kb-article-card.tsx` — `href` 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.ts` — `getPricesMap(product)` returns `Record<string, number>` mapping every currency code to its monthly price from the product's recurring plan
- `packages/ui/components/ui/price.tsx` — `Price` 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.ts` — `prices?: 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

### Changed

- **Spec Parser Improvements** (`packages/core/lib/spec-parser.ts`) — backward-compatible improvements that benefit VPS, game, and dedicated server parsing
- **CPU core count** — now falls back to inline patterns: `"8 cores and 16 threads"` (any position in text) and named multipliers (`"Octa-Core"` → 8, `"Quad-Core"` → 4, `"Dual-Core"` → 2, etc.)
- **Storage** — handles TB drives: `"2 x 1 TB NVMe SSD"` → `storageGB = 1024`; extracts `storageDescription` (the raw drive label before the colon, e.g. `"2 × 512 GB NVMe SSD (Gen 4)"`) for use in place of a bare number on dedicated server cards
- **Bandwidth detection** — no longer false-matches storage descriptions; TB references are only counted as bandwidth when paired with `outbound`, `traffic`, or `bandwidth` keywords; `"Unlimited Outbound Bandwidth"` correctly resolves to `null` (unmetered)
- **Intel CPU model** — regex expanded from Xeon-only to also match `"Intel® Core™ Ultra 7 265"` and `"Intel® Core™ i9"` families
- **AMD Ryzen model** — regex extended to capture PRO variants (`"Ryzen 7 PRO 8700GE"`)

### Performance

- **Decorative blur orbs replaced with CSS radial-gradients** — all `blur-[120px]`/`blur-[100px]` divs with `animate-pulse` replaced by a single `<div style={{ background: "radial-gradient(...)" }}>` across every affected component; eliminates GPU compositing layers and per-frame repaints that were causing slow load times on Apple WebKit/Safari
- `packages/ui/components/Layouts/Home/hero.tsx`
- `packages/ui/components/Layouts/About/about-page.tsx`
- `packages/ui/components/Layouts/Contact/contact.tsx`
- `packages/ui/components/Layouts/Error/error-page.tsx`
- `packages/ui/components/Layouts/Error/not-found-page.tsx`
- `packages/ui/components/Layouts/Nodes/nodes-client.tsx`
- `packages/ui/components/Layouts/VPS/vps-hub.tsx`
- `packages/ui/components/Layouts/VPS/vps-hero.tsx` (conditional AMD/Intel colour palette preserved via inline style)
- **Navbar `backdrop-blur-xl` → `backdrop-blur-md`** — reduces the full-width blur filter cost on the scrolled navbar state without a visible quality difference
- **Theme toggle mobile cutoff fixed** — `DropdownMenuContent` now has `max-h-[85svh] flex flex-col`; inner theme scroll container changed to `flex-1 min-h-0 overflow-y-auto` so all themes are reachable on small screens

### Fixed

- **`packages/kb/content/billing/_meta.json` SyntaxError** — file ended with a stray `0` instead of `}`; fixed to valid JSON
- **Stale `.next/types` build cache** — after deleting the old `[category]` and `[category]/[article]` KB routes the build cache still referenced them; resolved by deleting `.next/types` before the next build

---

## [3.5.4] - 2026-05-30

### Added
Expand Down Expand Up @@ -644,5 +705,6 @@ Initial Next.js 15 website with App Router, shadcn/ui components, and multi-them

---

[3.6.0]: https://github.com/NodeByteHosting/website/compare/v3.5.4...v3.6.0
[3.1.0]: https://github.com/NodeByteHosting/website/compare/v3.0.0...v3.1.0
[3.0.0]: https://github.com/NodeByteHosting/website/releases/tag/v3.0.0
224 changes: 3 additions & 221 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,217 +1,20 @@
# NodeByte Hosting Platform

A modern hosting management platform built with **Next.js** and a **Go (Fiber) backend**. Manage game servers (Minecraft, Rust, Hytale), VPS nodes, and billing from a unified admin dashboard.
A modern hosting website built with **Next.js**.

[![License: AGPL-3.0-only](https://img.shields.io/badge/License-AGPL%203.0%20only-blue.svg)](LICENSE)
[![Next.js](https://img.shields.io/badge/Next.js-16+-black?logo=next.js)](https://nextjs.org/)
[![TypeScript](https://img.shields.io/badge/TypeScript-5+-blue?logo=typescript)](https://www.typescriptlang.org/)
[![Go](https://img.shields.io/badge/Go-Fiber_Backend-00ADD8?logo=go)](https://gofiber.io/)

## Features

### Multi-Panel Game Server Hosting
- **Pterodactyl Panel** support for game servers (Minecraft, Rust, Hytale, etc.)
- **Virtfusion Panel** support for VPS management
- Multi-panel architecture -- manage multiple panels from a single dashboard
- Real-time server status monitoring across all panels
- Automatic panel API integration and connection testing
- Resource allocation and limits management

### Admin Dashboard
- **User Management** -- user listing with pagination, filtering, sorting, and role management
- **Server Management** -- browse, filter, and manage all hosted servers
- **Node Management** -- monitor and configure hosting nodes
- **Location Management** -- view and sync Pterodactyl panel locations
- **Allocation Management** -- view allocations across nodes with server assignments
- **Egg Management** -- browse synced server types and configurations
- **Sync Operations** -- real-time sync logs with terminal-style output, cancellation support, and auto-sync scheduling
- **Settings Management** -- system configuration with connection testing across four tabs (Connections, Features, Notifications, Advanced)
- **Panel Configuration** -- built-in setup wizard for connecting multiple game panels

### Webhook Notification System
Automatic Discord webhook notifications for system events, server state changes, sync operations, billing events, security alerts, and support tickets. Webhooks are managed through the admin settings panel with per-webhook type and scope configuration.

### Internationalization
- 30+ languages supported
- Translation management via Crowdin
- Modular translation file structure (`templates/en/*.json`)
- Language and currency selectors in navigation
- Region-specific pricing with multi-currency support (GBP, USD, EUR, CAD, AUD)

### Knowledge Base
- Markdown-based documentation system
- Full-text search across articles
- Category organization with sidebar navigation
- Table of contents with scroll spy
- Syntax highlighting for code blocks

### Authentication
- JWT-based authentication via Go backend
- Email/password registration and login
- Forgot password and email verification flows
- Session management with secure token handling
- Admin-only access control via middleware
- User profile management with email change and verification

### Billing
- Multi-currency support (GBP, USD, EUR, CAD, AUD)
- Pricing configuration
- Invoice management (WHMCS integration)
- Subscription tracking

## Quick Start

### Prerequisites
- Node.js 22+ or Bun
- Go backend service (see backend repository)
- Pterodactyl Game Panel (for game server hosting)
- Discord Server (for webhooks, optional)

### Installation

1. **Clone the repository**
```bash
git clone --recursive https://github.com/NodeByteHosting/website.git
cd website
```

Alternatively, if you've already cloned without `--recursive`, initialize the submodule:
```bash
git submodule update --init --recursive --remote
```

2. **Install dependencies**
```bash
npm install
# or
bun install
```

3. **Set up environment variables**
```bash
cp .env.example .env.local
```
Configure the following variables:
```bash
NEXT_PUBLIC_GO_API_URL="http://localhost:8080" # Go backend URL
BACKEND_API_KEY="" # API key for backend communication
JWT_SECRET="" # JWT signing secret
```

4. **Start development server**
```bash
npm run dev
# or
bun dev
```

Open [http://localhost:3000](http://localhost:3000) in your browser.

> **Note:** The Go backend must be running for authentication, admin operations, and panel sync to function. The Next.js frontend communicates with the backend via the `NEXT_PUBLIC_GO_API_URL`.

## Architecture

This repository contains the **Next.js frontend**. All business logic, database access, authentication, and panel sync operations are handled by a separate **Go (Fiber) backend**. The frontend acts as a client, making API calls to the backend for all data operations.

- **Frontend (this repo):** Next.js 16 with App Router, React 19, TanStack React Query for data fetching, shadcn/ui components, and Tailwind CSS v4
- **Backend (separate service):** Go Fiber API server handling database, auth, panel integrations, sync, webhooks, and admin operations

### API Communication

The frontend uses a centralized API client (`packages/core/lib/api.ts`) that routes all requests to the Go backend. Admin hooks in `packages/core/hooks/use-admin-api.ts` provide React Query wrappers for admin operations. Public data hooks are in `packages/core/hooks/use-public-api.ts`.

A small set of lightweight API routes remain in the Next.js app for public-facing proxy endpoints:
- `/api/github/releases` -- GitHub release data
- `/api/instatus` -- Status page integration
- `/api/panel/*` -- Public panel data (counts, nodes, servers, stats, users)
- `/api/trustpilot` -- Trustpilot review data
- Discord Server (for webhooks, optional.

## Project Structure

```
.
├── app/ # Next.js App Router
│ ├── admin/ # Admin dashboard pages
│ │ ├── allocations/ # Allocation management
│ │ ├── eggs/ # Egg management
│ │ ├── locations/ # Location management
│ │ ├── nodes/ # Node management
│ │ ├── servers/ # Server management
│ │ ├── settings/ # System settings
│ │ ├── sync/ # Sync operations and logs
│ │ └── users/ # User management
│ ├── api/ # Lightweight proxy routes
│ │ ├── github/releases/ # GitHub releases proxy
│ │ ├── instatus/ # Status page proxy
│ │ ├── panel/ # Public panel data
│ │ └── trustpilot/ # Trustpilot proxy
│ ├── auth/ # Authentication pages
│ ├── changelog/ # Changelog page
│ ├── contact/ # Contact page
│ ├── dashboard/ # User dashboard
│ │ ├── account/ # Profile and security settings
│ │ └── servers/ # User server management
│ ├── games/ # Game-specific pages
│ ├── kb/ # Knowledge base
│ ├── maintenance/ # Maintenance mode page
│ ├── setup/ # Initial setup wizard
│ └── layout.tsx # Root layout
├── packages/ # Shared packages
│ ├── auth/ # Auth components and utilities
│ │ ├── components/ # Login, register, forgot-password forms
│ │ └── lib/ # Auth client, context, server helpers
│ ├── core/ # Core logic and hooks
│ │ ├── constants/ # Game-specific constants
│ │ ├── hooks/ # React hooks (admin API, public API, currency, locale, etc.)
│ │ ├── lib/ # API client, currency, query client, translations, utilities
│ │ └── middleware/ # Route middleware
│ ├── changelog/ # Changelog components and hooks
│ ├── i18n/ # Internationalization (next-intl config)
│ ├── kb/ # Knowledge base components, content, and utilities
│ └── ui/ # UI components (layouts, shadcn/ui primitives)
├── public/ # Static assets
├── translations/ # Localization
│ ├── messages/ # 30+ language files
│ └── templates/ # Source translation templates (modular)
└── [config files] # next.config.mjs, tsconfig.json, etc.
```

## Panel Integration

NodeByte supports multiple hosting control panels, allowing you to manage different types of infrastructure from a single dashboard.

### Supported Panels

**Pterodactyl Panel** -- Game server management (Minecraft, Rust, Hytale, etc.)
- API-based authentication via token
- Sync support for nodes, locations, allocations, eggs, servers, and users

**Virtfusion Panel** -- VPS and virtual machine management
- API key-based authentication
- Infrastructure provisioning and monitoring

### Setup Wizard

The platform includes an interactive setup wizard at `/setup` that guides you through:

1. **Site Information** -- site name, URL, and optional favicon
2. **Game Panels** -- Pterodactyl panel credentials with connection testing
3. **Infrastructure Panels** -- Virtfusion panel credentials with connection testing

The setup supports incremental configuration. You can configure components in any order and add panels later from the admin settings.

### Panel Data Synchronization

The backend automatically syncs data from configured panels:

- **Nodes** -- hosting nodes and their resources
- **Locations** -- geographic regions
- **Eggs** -- server types and configurations
- **Servers** -- active server instances
- **Allocations** -- IP/port assignments
- **Users** -- panel user accounts for registration verification

Sync frequency is configurable in admin settings. Auto-sync can be enabled or disabled, and manual sync can be triggered from the admin panel. Sync operations support cancellation and emit real-time progress logs.

## Development

Expand Down Expand Up @@ -266,30 +69,9 @@ You are free to use, modify, and distribute this software, provided that:
- [Knowledge Base](https://nodebyte.host/kb)

### Community
- [Discord Server](https://discord.gg/wN58bTzzpW)
- [Discord Server](https://discord.gg/nodebyte)
- [Twitter/X](https://x.com/NodeByteHosting)
- [Email Support](mailto:support@nodebyte.host)

### Issue Tracking
Report bugs and feature requests on [GitHub Issues](https://github.com/NodeByteHosting/website/issues).

## Authors

**NodeByte Hosting Team**
- Website: https://nodebyte.host
- Email: hello@nodebyte.host

## Built With

- [Next.js](https://nextjs.org/) -- React framework with App Router
- [React](https://react.dev/) -- UI library (v19)
- [TypeScript](https://www.typescriptlang.org/) -- Type-safe JavaScript
- [Tailwind CSS](https://tailwindcss.com/) -- Utility-first CSS (v4)
- [shadcn/ui](https://ui.shadcn.com/) -- Radix-based UI components
- [TanStack React Query](https://tanstack.com/query) -- Data fetching and caching
- [next-intl](https://next-intl.dev/) -- Internationalization
- [Go Fiber](https://gofiber.io/) -- Backend API framework (separate service)

---

**Last Updated:** March 1, 2026
Loading