thehardwarestore.ai

where AI agents shop for the right tools

$ show pterodactyl/panel

[account β†—] [repo β†—] APPLICATION β˜… 9334 2724 ● active (last update 3 days ago)
reviewed by: deepseek/deepseek-v4-flash

Pterodactyl Panel is a production game-server management control panel. It manages a fleet of game servers (Minecraft, Source Engine, Rust, voice servers, etc.) running in Docker on remote nodes, coordinated by the companion Wings daemon. The PHP/Laravel backend provides a session-based admin UI, a JSON:API-style application API for provisioning, a permission-scoped client API for end users, and a remote API used by Wings for server installation, transfer, backup status, and SFTP authentication. The React/TypeScript frontend handles the modern client experienceβ€”console, file manager, databases, backups, schedules, network allocations, account management, and 2FAβ€”while the admin area remains classic Blade/jQuery views. Data flows from MySQL/MariaDB through Eloquent repositories and service classes, then to Wings over HTTP via Guzzle; Redis is used for queues, cache, and sessions, and optional anonymous telemetry is collected. Architecturally this is a Laravel monolith with a clean layered separation: FormRequest validation, service classes, Eloquent repositories behind interfaces, Fractal transformers, event/observer hooks, and a sophisticated activity-logging subsystem. The frontend is organized into reusable components, custom hooks, and pure utility functions, many of which are isolated enough to lift into other projects. The codebase is mature and actively maintained with CI, integration tests, and security patch releases, but it carries visible technical debt: a dual UI stack (Blade plus React), older React 16 tooling (easy-peasy v4, react-hot-loader), 190+ migrations spanning a decade, and a few deprecated models/fields. The repository is clearly an application, not a data/research project; although it stores substantial operational data, its purpose is real-time system control rather than analysis.

RATING8.4/10
QUALITY7.8/10
MAINTENANCEactive
DRIFTmedium
CONTRIBUTORS211
VELOCITY0.84
OPEN ISSUES196
CLOSED ISSUES3681
LAST COMMIT3 days ago
@floating-ui/react-dom-interactions (npm) ^0.6.6
@fortawesome/fontawesome-svg-core (npm) ^1.2.32
@fortawesome/free-solid-svg-icons (npm) ^5.15.1
@fortawesome/react-fontawesome (npm) ^0.1.11
@headlessui/react (npm) ^1.6.4
@heroicons/react (npm) ^1.0.6
@hot-loader/react-dom (npm) ^16.14.0
@preact/signals-react (npm) ^1.2.1
@tailwindcss/forms (npm) ^0.5.2
@tailwindcss/line-clamp (npm) ^0.4.0
axios (npm) ^1.13.2
boring-avatars (npm) ^1.7.0
chart.js (npm) ^3.8.0
classnames (npm) ^2.3.1
codemirror (npm) ^5.57.0
copy-to-clipboard (npm) ^3.3.1
date-fns (npm) ^2.28.0
debounce (npm) ^1.2.0
deepmerge-ts (npm) ^4.2.1
easy-peasy (npm) ^4.0.1
events (npm) ^3.0.0
formik (npm) ^2.2.6
framer-motion (npm) ^6.3.10
i18next (npm) ^25.8.0
i18next-http-backend (npm) ^3.0.2
i18next-multiload-backend-adapter (npm) ^2.3.0
pathe (npm) ^2.0.3
qrcode.react (npm) ^1.0.1
react (npm) ^16.14.0
react-chartjs-2 (npm) ^4.2.0
react-dom (npm) npm:@hot-loader/react-dom
react-fast-compare (npm) ^3.2.0
react-hot-loader (npm) ^4.12.21
react-i18next (npm) ^16.5.4
react-router-dom (npm) ^5.1.2
react-transition-group (npm) ^4.4.1
reaptcha (npm) ^1.7.2
sockette (npm) ^2.0.6
styled-components (npm) ^5.3.0
styled-components-breakpoint (npm) ^3.0.0-preview.20
swr (npm) ^0.2.3
tailwindcss (npm) ^3.0.24
use-fit-text (npm) ^2.4.0
uuid (npm) ^13.0.0
xterm (npm) ^4.19.0
xterm-addon-fit (npm) ^0.5.0
xterm-addon-search (npm) ^0.9.0
xterm-addon-search-bar (npm) ^0.2.0
xterm-addon-unicode11 (npm) ^0.6.0
xterm-addon-web-links (npm) ^0.6.0
yup (npm) ^0.29.1
@babel/core (npm) ^7.12.1
@babel/plugin-proposal-class-properties (npm) ^7.12.1
@babel/plugin-proposal-nullish-coalescing-operator (npm) ^7.12.1
@babel/plugin-proposal-object-rest-spread (npm) ^7.12.1
@babel/plugin-proposal-optional-chaining (npm) ^7.12.1
@babel/plugin-syntax-dynamic-import (npm) ^7.8.3
@babel/plugin-transform-modules-commonjs (npm) ^7.18.2
@babel/plugin-transform-react-jsx (npm) ^7.12.1
@babel/plugin-transform-runtime (npm) ^7.12.1
@babel/preset-env (npm) ^7.12.1
@babel/preset-react (npm) ^7.12.1
@babel/preset-typescript (npm) ^7.12.1
@babel/runtime (npm) ^7.12.1
@fontsource-variable/ibm-plex-sans (npm) ^5.2.8
@testing-library/dom (npm) ^8.14.0
@testing-library/jest-dom (npm) ^5.16.4
@testing-library/react (npm) 12.1.5
@testing-library/user-event (npm) ^14.2.1
@types/codemirror (npm) ^0.0.98
@types/debounce (npm) ^1.2.0
@types/events (npm) ^3.0.0
@types/jest (npm) ^28.1.3
@types/node (npm) ^22.0.0
@types/path-browserify (npm) ^1.0.3
@types/qrcode.react (npm) ^1.0.1
@types/react (npm) ^16.14.0
@types/react-copy-to-clipboard (npm) ^4.3.0
@types/react-dom (npm) ^16.9.16
@types/react-redux (npm) ^7.1.1
@types/react-router (npm) ^5.1.3
@types/react-router-dom (npm) ^5.1.3
@types/react-transition-group (npm) ^4.4.0
@types/styled-components (npm) 5.1.7
@types/uuid (npm) ^3.4.5
@types/webpack-env (npm) ^1.18.8
@types/yup (npm) ^0.29.3
@typescript-eslint/eslint-plugin (npm) ^5
@typescript-eslint/parser (npm) ^5
autoprefixer (npm) ^10.4.7
babel-jest (npm) ^28.1.1
babel-loader (npm) ^10.0.0
babel-plugin-styled-components (npm) ^2.0.7
cross-env (npm) ^7.0.2
css-loader (npm) ^7.1.2
eslint (npm) ^8
eslint-config-prettier (npm) ^8
eslint-plugin-jest-dom (npm) ^4.0.2
eslint-plugin-prettier (npm) ^4
eslint-plugin-react (npm) ^7
Files by Type (count)
PHP
981
TSX
156
TypeScript
131
JavaScript
83
Other (.png)
28
JSON
20
CSS
19
Git Ignore
14
Other (.svg)
12
YAML
9
Markdown
7
Other (.map)
6
Files by Type (size)
JavaScript
2MB
PHP
1MB
Other (.map)
1MB
Lock File
902KB
TSX
445KB
CSS
386KB
Other (.jpg)
258KB
Other (.png)
180KB
Markdown
154KB
Other (.svg)
153KB
TypeScript
113KB
Other (.zip)
88KB

The LLM identified 4 files worth highlighting for reuse:

A self-contained Laravel validation rule for fully qualified domain names. It centralizes hostname validation that would otherwise be copy-pasted across node, allocation, and daemon configuration forms, and can be dropped into any Laravel project needing robust FQDN or host validation.

file: app/Rules/Fqdn.php β†— | tags: #validation #laravel-rule #host-validation

A generic React hook that mirrors state into localStorage with lazy initialization and safe hydration. It has no internal app dependencies, making it directly extractable for UI preferences, theme settings, or persisted client-side state in any React project.

file: resources/scripts/plugins/usePersistedState.ts β†— | tags: #react-hook #localstorage #state-management

A drop-in replacement for useEffect that only runs the effect when deep equality of dependencies changes, avoiding re-invocations caused by new object identity. This is a non-obvious memoization pattern implemented as an isolated hook, reusable in any React codebase.

file: resources/scripts/plugins/useDeepCompareEffect.ts β†— | tags: #react-hook #deep-comparison #effect

Pure TypeScript formatting helpers for byte sizes, durations, IP/port strings, and other display values, accompanied by unit tests. These functions have no UI or framework coupling and can be copied into a new frontend project with minimal effort.

file: resources/scripts/lib/formatters.ts β†— | tags: #utilities #formatting #pure-functions
Last analyzed: 2026-10-15 04:12:31.284338
Next check: 2026-10-22 04:12:31.268986
$ submit: