Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 5 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,8 @@ NEXT_PUBLIC_GO_API_URL="http://localhost:8080"

BACKEND_API_KEY=""

JWT_SECRET=""
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=""
46 changes: 46 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,52 @@ 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.4.0] - 2026-03-16

### 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`

## [3.3.0] - 2026-03-01

### Added
Expand Down
2 changes: 1 addition & 1 deletion app/about/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import type { Metadata } from "next"

export const metadata: Metadata = {
title: "About Us",
description: "Learn about NodeByte Hosting - Built by gamers, for gamers. Our mission is to provide fast, reliable, and affordable game server hosting.",
description: "Learn about NodeByte Hosting - Fast, reliable, and affordable game server and VPS hosting built for communities and businesses.",
}

export default function About() {
Expand Down
2 changes: 2 additions & 0 deletions app/admin/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import {
Layers,
Network,
MapPin,
Package,
} from "lucide-react"
import { cn } from "@/packages/core/lib/utils"
import { Button } from "@/packages/ui/components/ui/button"
Expand Down Expand Up @@ -119,6 +120,7 @@ export default function AdminLayout({
{ title: t("nav.dashboard"), href: "/admin", icon: LayoutDashboard },
{ title: t("nav.users"), href: "/admin/users", icon: Users },
{ title: t("nav.servers"), href: "/admin/servers", icon: Server },
{ title: "Products", href: "/admin/products", icon: Package },
{ title: t("nav.nodes"), href: "/admin/nodes", icon: HardDrive },
{ title: t("nav.locations"), href: "/admin/locations", icon: MapPin },
{ title: t("nav.allocations"), href: "/admin/allocations", icon: Network },
Expand Down
Loading
Loading