[v1.4.0] (2026-07-06)
Major Features
-
Output typography – Tool result text is larger app-wide via
--rand-output-font-size(1.2rem) on.responseDivand.copyable-content; redundant per-module inline output font sizes removed. -
Copyable outputs – Copy/action buttons sit on the right of output text (stacked for multi-action boxes); large split-pane outputs keep a footer bar with right-aligned actions.
-
Demo URL – Centralized
DEMO_URL(https://rand.demo.roste.org/) inincludes/config.php; dashboard hero, About panel, andREADME.mdpoint to the live demo host (replacingroste.org/rand). -
About modal – Navbar About opens a combined modal with About (php-rand version, Docker vs native, PHP version/SAPI, OS, server software, key extension status, full loaded extension list) and Changelog tabs (lazy-loaded on tab switch). Data from
about.php/includes/about_info.php. Fixed stuck loading state: discard accidental PHP output inabout.php, removed trailing?>fromincludes/functions.php, moved Bootstrap modal trigger to the About nav link, and hardened JSON parsing injs/rand.js. -
String tools – Titlecase / Camelcase use
mb_convert_caseso all-caps input title-cases correctly; CRLF→LF, LF→CRLF, and Format normalize real line endings (oldcrlf2lfstripped all breaks); Custom characters remove is implemented; Regex opens the Regex Tester with the current input; case tools usemb_*where appropriate. -
Docker CI – Fixed invalid
secretsusage in stepifconditions in.github/workflows/docker-release.ymland.github/workflows/docker-dev.ymlby detecting Docker Hub credentials in a shell step and gating publish steps onsteps.dockerhub.outputs.enabled. -
Docker (rolling dev images) – Pushes to the
devbranch republish rollingdevanddeveloptags to Docker Hub and GHCR via.github/workflows/docker-dev.yml(no per-commit image tags). TheDockerfilecopies the build context instead of cloning GitHub so CI images match the checked-out branch/tag;.dockerignoreexcludes local secrets and VCS metadata. -
jQuery 4.0 – Upgraded CDN dependency from jQuery 3.7.1 to 4.0.0 (full build) in
index.phpandtest_random_buttons.html; updated SRI hash. Migrate 4 audit (test_jquery4_migrate_audit.html) found no compatibility warnings acrossjs/rand.jsand modules with inline jQuery handlers. -
Tool page descriptions – Moved per-tool information alerts into each card as muted description text across tool modules (networking, units, crontab, serialization, shellcheck, validators, text/data tools, crypto, and others); dashboard “what’s new” banner unchanged.
-
Theme and UI scale preferences – Navbar Settings → Theme (dark/light) and Interface size (compact through extra large) persisted via
randUiPrefs(js/rand_ui_boot.js,includes/navbar.php); light-theme polish instyle.css. -
Global UI spacing preference + release guidance – Navbar Settings → Item spacing (Tight/Dense/Standard/Comfortable/Relaxed) persisted via
randUiPrefs(spaceScale) and applied app-wide instyle.cssby scaling common spacing utilities (m-*,p-*,gap-*,g*/gx*/gy*) plus card spacing. Added repository agent guidance inAGENTS.mdcovering core architecture, mandatory changelog policy, scripted release flow (scripts/release.sh,scripts/extract_changelog_section.sh,scripts/update-release-descriptions.php), and a quick release checklist. Also added an inline quick release checklist comment block at the top ofscripts/release.sh. -
Spin the wheel – Per-item weights with optional even distribution; sector building supports item slicing for long lists; item rows honor the global spacing preference (
modules/spin_the_wheel.php,handle_spinwheel()). -
Clipboard UX – Copy buttons reflect Clipboard API availability (disabled state + tooltip when copy is unavailable); complements the copyable-output layout refresh (
index.php,style.css). -
Syntax validators (many languages) – New Miscellaneous → Validators checks pasted content without executing it. Kinds: JSON (
json_decode+JSON_THROW_ON_ERROR), YAML (symfony/yaml), XML (DOM parse), INI (parse_ini_string), JSON Lines (per-line JSON, capped line count), cron (sharedcron_parse_expression_fields()with the Crontab tool /dragonmantank/cron-expression), PHP (php -l, optional<?phpprepend for snippets), Python (ast.parseviapython3/python), Ruby (ruby -c), JavaScript (node --check), shell (bash -n/sh -nwhen available). Handlerhandle_syntax_validate, logic inincludes/syntax_validate.php, UI inmodules/syntax_validate.phpand embedmodules/validators.php. Layout/help copy refined for clarity; help panel aligned with sibling cards. -
Navigation (Misc) – ShellCheck and Validators are separate items under Miscellaneous. ShellCheck stays
modules/shellcheck.php; Validators is syntax-only and embeds the validator section. -
Text & Data tools – URL encoding (RFC 3986 via
rawurlencode/ decode preview), HTML entities (encode, decode, both, or auto from content), Levenshtein distance with tunable insertion/replacement/deletion costs (PHP length limits documented in UI), Metaphone (word keys), Minify JS/CSS viamatthiasmullie/minifyplus light HTML whitespace cleanup. Handlers and navbar entries inincludes/handlers_functional.php/includes/navbar.php; modulesurlencoding.php,htmlentities.php,levenshtein.php,metaphone.php,minify.php. -
Logo generator – Circle / rounded-rectangle output uses
logo_apply_shape_alpha_mask()so transparency matches the shape (fixes incorrect white fill from the old merge path). Font picker useslogo_discover_font_files()(.ttf and .otf underfonts/); bundled DejaVu TTFs; labels strip extensions. Font size 12–400 px with number + range slider kept in sync; presets callsyncFontSizeUi(). Default background#000000; border row and “Text transform” section reorganized inmodules/gen_image.php. -
Logo generator (follow-up) – Export as PNG / WebP / JPEG (
logo_build_raster_data_uri(), JPEG flattened onto background color). Multiline text (textarea, 500 chars), word-wrap, optional autofit (binary-search font size to inner box), nudge X/Y offsets, per-color shuffle buttons beside each swatch, instant preview (0 ms debounce +textareain delegated events). Layout helpers:logo_wrap_paragraph,logo_build_wrapped_lines,logo_autofit_font_size,logo_draw_ttf_text_blockinincludes/handlers_functional.php. -
Crontab –
cron_parse_expression_fields()inincludes/tooling_helpers.phpcentralizes expression validation,@reboot, andCronExpressionconstruction for both the explorer and syntax validator. UI: layout tweaks and diff output styling (modules/crontab.php,style.css). -
Docker – Image installs
python3so Python (and related CLI checks where applicable) work in containers. -
Random data (syntax validator) –
js/rand.js: shuffle for language (#syntaxValidateKind) vs sample textarea; samples follow the active kind with avoid-repeat keys. -
Config & repo hygiene –
APP_ROOTset withdirname(__FILE__, 2)inincludes/config.php..gitignoreno longer ignoresscripts/(release tooling tracked).README.mdfeature list reorganized (e.g. cryptography, text & data, misc tools). -
Release automation –
scripts/release.shrotates[Unreleased], bumpsdocker-image.config, optional commit/tag/push, GitHub release, Docker publish;scripts/extract_changelog_section.shandscripts/update-release-descriptions.phpsupport changelog/release descriptions.
📋 Detailed Changes (click to expand)
Syntax validation
- Dependencies –
composer require symfony/yaml(^7.x); YAML lint binary undervendor/as shipped by the package. - Registry –
syntax_validate→handle_syntax_validate()inincludes/handlers_functional.php(lazy-loadsincludes/syntax_validate.php). - Limits – Input length capped (e.g. 200k characters); JSON Lines capped per
syntax_validate_jsonl_max_lines(). - Privacy copy –
index.phpprivacy modal lists server-processed tools without a separate “validators” top-level line (validators under Misc).
Navigation and modules
includes/navbar.php– Misc:shellcheck,validators; Text & Data entries for new tools as applicable.modules/validators.php–#validatorsshell; embeds syntax validator via$validatorsEmbedso nested panels are not hidden by global.contenttoggling injs/rand.js.modules/syntax_validate.php– Embed mode (<section class="validators-block">) vs standalone#syntax_validateforload_module.php?module=syntax_validate.
Random data (js/rand.js)
SYNTAX_VALIDATE_KIND_OPTIONS– Language-only shuffle pool.SYNTAX_VALIDATE_SCENARIOS– Per-kind samples; textarea shuffle uses the selected kind (syntaxValidateContent_<kind>, avoid-repeat).addRandomDataButtons– Includes#syntaxValidateKind; titles distinguish language vs sample actions.
Docker
Dockerfile–apt-get installaddspython3alongsideshellcheckandopenssh-client.
Dependencies (composer.json)
symfony/yaml,matthiasmullie/minify(and transitivepath-converter) for the features above.
Styling
style.css– Adjustments including Crontab / diff presentation, light theme, copy-button tooltips, and spacing scale utilities.
Spin the wheel
modules/spin_the_wheel.php– Weight inputs, even-distribution toggle, weighted random selection, and canvas sector layout for large item sets.includes/handlers_functional.php–handle_spinwheel()returns weighted pick results aligned with client-side animation.
UI preferences
js/rand_ui_boot.js– Early-loadrandUiPrefs(theme,uiScale,spaceScale) applied before paint.includes/navbar.php– Settings dropdown for theme, interface size, and item spacing.
Other
modules/currency.php,modules/units.php– Minor copy or wiring updates where touched for consistency.
Add entries here during development; rotate into a dated release section when tagging.