This commit is contained in:
Bryan Ramos 2026-03-31 12:46:52 -04:00
commit 55ae41cb0c
1902 changed files with 513237 additions and 0 deletions

800
utils/words.ts Normal file
View file

@ -0,0 +1,800 @@
/**
* Random word slug generator for plan IDs
* Inspired by https://github.com/nas5w/random-word-slugs
* with Claude-flavored words
*/
import { randomBytes } from 'crypto'
// Adjectives for slug generation - whimsical and delightful
const ADJECTIVES = [
// Classic pleasant adjectives
'abundant',
'ancient',
'bright',
'calm',
'cheerful',
'clever',
'cozy',
'curious',
'dapper',
'dazzling',
'deep',
'delightful',
'eager',
'elegant',
'enchanted',
'fancy',
'fluffy',
'gentle',
'gleaming',
'golden',
'graceful',
'happy',
'hidden',
'humble',
'jolly',
'joyful',
'keen',
'kind',
'lively',
'lovely',
'lucky',
'luminous',
'magical',
'majestic',
'mellow',
'merry',
'mighty',
'misty',
'noble',
'peaceful',
'playful',
'polished',
'precious',
'proud',
'quiet',
'quirky',
'radiant',
'rosy',
'serene',
'shiny',
'silly',
'sleepy',
'smooth',
'snazzy',
'snug',
'snuggly',
'soft',
'sparkling',
'spicy',
'splendid',
'sprightly',
'starry',
'steady',
'sunny',
'swift',
'tender',
'tidy',
'toasty',
'tranquil',
'twinkly',
'valiant',
'vast',
'velvet',
'vivid',
'warm',
'whimsical',
'wild',
'wise',
'witty',
'wondrous',
'zany',
'zesty',
'zippy',
// Whimsical / magical
'breezy',
'bubbly',
'buzzing',
'cheeky',
'cosmic',
'cozy',
'crispy',
'crystalline',
'cuddly',
'drifting',
'dreamy',
'effervescent',
'ethereal',
'fizzy',
'flickering',
'floating',
'floofy',
'fluttering',
'foamy',
'frolicking',
'fuzzy',
'giggly',
'glimmering',
'glistening',
'glittery',
'glowing',
'goofy',
'groovy',
'harmonic',
'hazy',
'humming',
'iridescent',
'jaunty',
'jazzy',
'jiggly',
'melodic',
'moonlit',
'mossy',
'nifty',
'peppy',
'prancy',
'purrfect',
'purring',
'quizzical',
'rippling',
'rustling',
'shimmering',
'shimmying',
'snappy',
'snoopy',
'squishy',
'swirling',
'ticklish',
'tingly',
'twinkling',
'velvety',
'wiggly',
'wobbly',
'woolly',
'zazzy',
// Programming concepts
'abstract',
'adaptive',
'agile',
'async',
'atomic',
'binary',
'cached',
'compiled',
'composed',
'compressed',
'concurrent',
'cryptic',
'curried',
'declarative',
'delegated',
'distributed',
'dynamic',
'eager',
'elegant',
'encapsulated',
'enumerated',
'eventual',
'expressive',
'federated',
'functional',
'generic',
'greedy',
'hashed',
'idempotent',
'immutable',
'imperative',
'indexed',
'inherited',
'iterative',
'lazy',
'lexical',
'linear',
'linked',
'logical',
'memoized',
'modular',
'mutable',
'nested',
'optimized',
'parallel',
'parsed',
'partitioned',
'piped',
'polymorphic',
'pure',
'reactive',
'recursive',
'refactored',
'reflective',
'replicated',
'resilient',
'robust',
'scalable',
'sequential',
'serialized',
'sharded',
'sorted',
'staged',
'stateful',
'stateless',
'streamed',
'structured',
'synchronous',
'synthetic',
'temporal',
'transient',
'typed',
'unified',
'validated',
'vectorized',
'virtual',
] as const
// Nouns for slug generation - whimsical creatures, nature, and fun objects
const NOUNS = [
// Nature & cosmic
'aurora',
'avalanche',
'blossom',
'breeze',
'brook',
'bubble',
'canyon',
'cascade',
'cloud',
'clover',
'comet',
'coral',
'cosmos',
'creek',
'crescent',
'crystal',
'dawn',
'dewdrop',
'dusk',
'eclipse',
'ember',
'feather',
'fern',
'firefly',
'flame',
'flurry',
'fog',
'forest',
'frost',
'galaxy',
'garden',
'glacier',
'glade',
'grove',
'harbor',
'horizon',
'island',
'lagoon',
'lake',
'leaf',
'lightning',
'meadow',
'meteor',
'mist',
'moon',
'moonbeam',
'mountain',
'nebula',
'nova',
'ocean',
'orbit',
'pebble',
'petal',
'pine',
'planet',
'pond',
'puddle',
'quasar',
'rain',
'rainbow',
'reef',
'ripple',
'river',
'shore',
'sky',
'snowflake',
'spark',
'spring',
'star',
'stardust',
'starlight',
'storm',
'stream',
'summit',
'sun',
'sunbeam',
'sunrise',
'sunset',
'thunder',
'tide',
'twilight',
'valley',
'volcano',
'waterfall',
'wave',
'willow',
'wind',
// Cute creatures
'alpaca',
'axolotl',
'badger',
'bear',
'beaver',
'bee',
'bird',
'bumblebee',
'bunny',
'cat',
'chipmunk',
'crab',
'crane',
'deer',
'dolphin',
'dove',
'dragon',
'dragonfly',
'duckling',
'eagle',
'elephant',
'falcon',
'finch',
'flamingo',
'fox',
'frog',
'giraffe',
'goose',
'hamster',
'hare',
'hedgehog',
'hippo',
'hummingbird',
'jellyfish',
'kitten',
'koala',
'ladybug',
'lark',
'lemur',
'llama',
'lobster',
'lynx',
'manatee',
'meerkat',
'moth',
'narwhal',
'newt',
'octopus',
'otter',
'owl',
'panda',
'parrot',
'peacock',
'pelican',
'penguin',
'phoenix',
'piglet',
'platypus',
'pony',
'porcupine',
'puffin',
'puppy',
'quail',
'quokka',
'rabbit',
'raccoon',
'raven',
'robin',
'salamander',
'seahorse',
'seal',
'sloth',
'snail',
'sparrow',
'sphinx',
'squid',
'squirrel',
'starfish',
'swan',
'tiger',
'toucan',
'turtle',
'unicorn',
'walrus',
'whale',
'wolf',
'wombat',
'wren',
'yeti',
'zebra',
// Fun objects & concepts
'acorn',
'anchor',
'balloon',
'beacon',
'biscuit',
'blanket',
'bonbon',
'book',
'boot',
'cake',
'candle',
'candy',
'castle',
'charm',
'clock',
'cocoa',
'cookie',
'crayon',
'crown',
'cupcake',
'donut',
'dream',
'fairy',
'fiddle',
'flask',
'flute',
'fountain',
'gadget',
'gem',
'gizmo',
'globe',
'goblet',
'hammock',
'harp',
'haven',
'hearth',
'honey',
'journal',
'kazoo',
'kettle',
'key',
'kite',
'lantern',
'lemon',
'lighthouse',
'locket',
'lollipop',
'mango',
'map',
'marble',
'marshmallow',
'melody',
'mitten',
'mochi',
'muffin',
'music',
'nest',
'noodle',
'oasis',
'origami',
'pancake',
'parasol',
'peach',
'pearl',
'pebble',
'pie',
'pillow',
'pinwheel',
'pixel',
'pizza',
'plum',
'popcorn',
'pretzel',
'prism',
'pudding',
'pumpkin',
'puzzle',
'quiche',
'quill',
'quilt',
'riddle',
'rocket',
'rose',
'scone',
'scroll',
'shell',
'sketch',
'snowglobe',
'sonnet',
'sparkle',
'spindle',
'sprout',
'sundae',
'swing',
'taco',
'teacup',
'teapot',
'thimble',
'toast',
'token',
'tome',
'tower',
'treasure',
'treehouse',
'trinket',
'truffle',
'tulip',
'umbrella',
'waffle',
'wand',
'whisper',
'whistle',
'widget',
'wreath',
'zephyr',
// Computer scientists
'abelson',
'adleman',
'aho',
'allen',
'babbage',
'bachman',
'backus',
'barto',
'bengio',
'bentley',
'blum',
'boole',
'brooks',
'catmull',
'cerf',
'cherny',
'church',
'clarke',
'cocke',
'codd',
'conway',
'cook',
'corbato',
'cray',
'curry',
'dahl',
'diffie',
'dijkstra',
'dongarra',
'eich',
'emerson',
'engelbart',
'feigenbaum',
'floyd',
'gosling',
'graham',
'gray',
'hamming',
'hanrahan',
'hartmanis',
'hejlsberg',
'hellman',
'hennessy',
'hickey',
'hinton',
'hoare',
'hollerith',
'hopcroft',
'hopper',
'iverson',
'kahan',
'kahn',
'karp',
'kay',
'kernighan',
'knuth',
'kurzweil',
'lamport',
'lampson',
'lecun',
'lerdorf',
'liskov',
'lovelace',
'matsumoto',
'mccarthy',
'metcalfe',
'micali',
'milner',
'minsky',
'moler',
'moore',
'naur',
'neumann',
'newell',
'nygaard',
'papert',
'parnas',
'pascal',
'patterson',
'pearl',
'perlis',
'pike',
'pnueli',
'rabin',
'reddy',
'ritchie',
'rivest',
'rossum',
'russell',
'scott',
'sedgewick',
'shamir',
'shannon',
'sifakis',
'simon',
'stallman',
'stearns',
'steele',
'stonebraker',
'stroustrup',
'sutherland',
'sutton',
'tarjan',
'thacker',
'thompson',
'torvalds',
'turing',
'ullman',
'valiant',
'wadler',
'wall',
'wigderson',
'wilkes',
'wilkinson',
'wirth',
'wozniak',
'yao',
] as const
// Verbs for the middle word - whimsical action words
const VERBS = [
'baking',
'beaming',
'booping',
'bouncing',
'brewing',
'bubbling',
'chasing',
'churning',
'coalescing',
'conjuring',
'cooking',
'crafting',
'crunching',
'cuddling',
'dancing',
'dazzling',
'discovering',
'doodling',
'dreaming',
'drifting',
'enchanting',
'exploring',
'finding',
'floating',
'fluttering',
'foraging',
'forging',
'frolicking',
'gathering',
'giggling',
'gliding',
'greeting',
'growing',
'hatching',
'herding',
'honking',
'hopping',
'hugging',
'humming',
'imagining',
'inventing',
'jingling',
'juggling',
'jumping',
'kindling',
'knitting',
'launching',
'leaping',
'mapping',
'marinating',
'meandering',
'mixing',
'moseying',
'munching',
'napping',
'nibbling',
'noodling',
'orbiting',
'painting',
'percolating',
'petting',
'plotting',
'pondering',
'popping',
'prancing',
'purring',
'puzzling',
'questing',
'riding',
'roaming',
'rolling',
'sauteeing',
'scribbling',
'seeking',
'shimmying',
'singing',
'skipping',
'sleeping',
'snacking',
'sniffing',
'snuggling',
'soaring',
'sparking',
'spinning',
'splashing',
'sprouting',
'squishing',
'stargazing',
'stirring',
'strolling',
'swimming',
'swinging',
'tickling',
'tinkering',
'toasting',
'tumbling',
'twirling',
'waddling',
'wandering',
'watching',
'weaving',
'whistling',
'wibbling',
'wiggling',
'wishing',
'wobbling',
'wondering',
'yawning',
'zooming',
] as const
/**
* Generate a cryptographically random integer in the range [0, max)
*/
function randomInt(max: number): number {
// Use crypto.randomBytes for better randomness than Math.random
const bytes = randomBytes(4)
const value = bytes.readUInt32BE(0)
return value % max
}
/**
* Pick a random element from an array
*/
function pickRandom<T>(array: readonly T[]): T {
return array[randomInt(array.length)]!
}
/**
* Generate a random word slug in the format "adjective-verb-noun"
* Example: "gleaming-brewing-phoenix", "cosmic-pondering-lighthouse"
*/
export function generateWordSlug(): string {
const adjective = pickRandom(ADJECTIVES)
const verb = pickRandom(VERBS)
const noun = pickRandom(NOUNS)
return `${adjective}-${verb}-${noun}`
}
/**
* Generate a shorter random word slug in the format "adjective-noun"
* Example: "graceful-unicorn", "cosmic-lighthouse"
*/
export function generateShortWordSlug(): string {
const adjective = pickRandom(ADJECTIVES)
const noun = pickRandom(NOUNS)
return `${adjective}-${noun}`
}