Skip to content

Commit 06e4bfa

Browse files
committed
feat(tools): add UUID/ULID generator, Chmod calc, and Crontab diff
- UuidGenerator: v1/v4/v5/v7 + ULID + NanoID with bulk output, namespace selector, format options (uppercase, hyphens) - ChmodCalculator: octal/symbolic/ls-l conversion, visual bit matrix, setuid/setgid/sticky support, live 2-way updates - CrontabDiff: 2 crontab comparison with timezone, next 10 runs each, 24h overlap stats, first divergence within 7d, visual timeline Deps: cron-parser ^5.10.0
1 parent 46e57e7 commit 06e4bfa

8 files changed

Lines changed: 1420 additions & 1 deletion

File tree

‎README.md‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ A sleek collection of developer tools built with React + Vite. Runs entirely in-
2727
| **T9 Decoder** | Decode and encode T9 phone keypad sequences (multi-tap) |
2828
| **Morse Code** | Translate text ↔ Morse, play the audio signal, and watch each dit/dah on a timing diagram |
2929
| **Subnet Calc** | Parse IPv4 CIDR and split a network into equal-sized subnets for devops/IP planning |
30+
| **UUID / ULID** | Generate UUID v1/v4/v5/v7, ULID, and NanoID with bulk output, format options, and copy-all |
31+
| **Chmod Calc** | Convert between octal, symbolic, and `ls -l` permission formats; toggle bits visually with setuid/setgid/sticky support |
32+
| **Crontab Diff** | Compare two cron expressions: human description, next 10 runs each, 24h stats, and first divergence within 7 days |
3033

3134
## Quick Start
3235

‎package-lock.json‎

Lines changed: 22 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"dependencies": {
1212
"bcryptjs": "^3.0.3",
1313
"clean-css": "^5.3.3",
14+
"cron-parser": "^5.10.0",
1415
"cronstrue": "^3.11.0",
1516
"diff": "^7.0.0",
1617
"js-beautify": "^1.15.4",

‎src/App.jsx‎

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
Hash,
1313
Lock,
1414
CalendarClock,
15+
CalendarDays,
1516
Hourglass,
1617
Mail,
1718
FileJson,
@@ -20,7 +21,8 @@ import {
2021
Table,
2122
FileText,
2223
GitCompare,
23-
Network
24+
Network,
25+
Fingerprint
2426
} from 'lucide-react';
2527

2628
import { Sidebar, Header } from './layouts';
@@ -37,7 +39,10 @@ import {
3739
PasswordGenerator,
3840
HashGenerator,
3941
BasicAuthGenerator,
42+
ChmodCalculator,
4043
CrontabGenerator,
44+
CrontabDiff,
45+
UuidGenerator,
4146
SmtpChecker,
4247
SubnetCalculator,
4348
JsonToEnv,
@@ -78,6 +83,7 @@ const MENU_GROUPS = [
7883
{ id: 'password', label: 'Password Gen', icon: Lock, keywords: ['password', 'generate', 'random', 'security', 'pass', 'strength'] },
7984
{ id: 'hash', label: 'Hash Generator', icon: Hash, keywords: ['hash', 'md5', 'sha1', 'sha256', 'sha512', 'encode', 'digest'] },
8085
{ id: 'basicauth', label: 'Basic Auth', icon: KeyRound, keywords: ['basic', 'auth', 'encode', 'decode', 'base64', 'header'] },
86+
{ id: 'chmod', label: 'Chmod Calc', icon: KeyRound, keywords: ['chmod', 'permission', 'mode', 'octal', 'symbolic', 'rwx', 'unix', 'file', 'ls'] },
8187
]
8288
},
8389
{
@@ -92,6 +98,8 @@ const MENU_GROUPS = [
9298
{ id: 'textanalyzer', label: 'Text Analyzer', icon: AlignLeft, keywords: ['text', 'analyze', 'count', 'words', 'characters', 'lines', 'length'] },
9399
{ id: 'textdiff', label: 'Text Diff', icon: GitCompare, keywords: ['text', 'diff', 'compare', 'line', 'word', 'unified', 'side-by-side'] },
94100
{ id: 'crontab', label: 'Crontab Gen', icon: CalendarClock, keywords: ['cron', 'crontab', 'schedule', 'time', 'generator', 'timer'] },
101+
{ id: 'crontab-diff', label: 'Crontab Diff', icon: CalendarDays, keywords: ['cron', 'crontab', 'compare', 'diff', 'schedule', 'next runs', 'overlap'] },
102+
{ id: 'uuid', label: 'UUID / ULID', icon: Fingerprint, keywords: ['uuid', 'ulid', 'nanoid', 'id', 'unique', 'random', 'generator', 'guid', 'v4', 'v7'] },
95103
{ id: 'datatable', label: 'Data Table View', icon: Table, keywords: ['csv', 'tsv', 'table', 'data', 'preview', 'excel', 'spreadsheet'] },
96104
{ id: 'subnet', label: 'Subnet Calc', icon: Network, keywords: ['subnet', 'cidr', 'ipv4', 'network', 'mask', 'subnetting', 'split', 'devops', 'address', 'broadcast'] },
97105
]
@@ -120,7 +128,10 @@ const FEATURE_COMPONENTS = {
120128
password: PasswordGenerator,
121129
hash: HashGenerator,
122130
basicauth: BasicAuthGenerator,
131+
chmod: ChmodCalculator,
123132
crontab: CrontabGenerator,
133+
'crontab-diff': CrontabDiff,
134+
uuid: UuidGenerator,
124135
smtp: SmtpChecker,
125136
json2env: () => <JsonToEnv initialMode="json2env" />,
126137
env2json: () => <JsonToEnv initialMode="env2json" />,

0 commit comments

Comments
 (0)