diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 4c2d10e..3a90add 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -4,104 +4,124 @@ Thank you for your interest in contributing! This guide will help you understand
## π Project Structure
+Source layout (the runnable app is produced under **`dist/`** by `npm run build`; `dist/` is gitignored).
+
```
P4RS3LT0NGV3/
+βββ package.json
+βββ favicon.svg
+βββ index.template.html # HTML shell; tool *script* tags updated by inject-tool-scripts
+βββ css/
+β βββ style.css
+β βββ notification.css
βββ js/
-β βββ app.js # Main Vue.js application entry point
-β βββ core/ # Core feature modules (shared libraries)
-β β βββ decoder.js # Universal decoder
-β β βββ steganography.js # Steganography encoding/decoding
-β β βββ toolRegistry.js # Tool registry system
-β βββ bundles/ # Build-generated files (auto-created)
-β β βββ transforms-bundle.js # Generated bundle from src/transformers/
-β βββ config/ # Configuration constants
+β βββ app.js # Vue app entry
+β βββ config/
β β βββ constants.js
-β βββ data/ # Generated or static data files (auto-created)
-β β βββ emojiData.js # Generated from Unicode emoji data
-β β βββ emojiCompatibility.js
-β βββ utils/ # Utility functions
+β βββ core/ # Shared logic (not tab-specific UI)
+β β βββ decoder.js # Universal decode engine
+β β βββ steganography.js # Emoji / invisible carriers
+β β βββ toolRegistry.js # Registers tools, merges Vue data/methods
+β β βββ transformOptions.js
+β βββ data/ # Static data shipped with the app (see note below)
+β β βββ anticlassifierPrompt.js
+β β βββ emojiCompatibility.js
+β β βββ endSequences.js
+β β βββ glitchTokens.js
+β β βββ openrouterModels.js
+β βββ utils/
β β βββ clipboard.js
-β β βββ emoji.js
+β β βββ emoji.js # window.EmojiUtils (uses window.emojiData when present)
β β βββ escapeParser.js
β β βββ focus.js
+β β βββ glitchTokens.js
β β βββ history.js
β β βββ notifications.js
β β βββ theme.js
-β βββ tools/ # Tool implementations (Vue integration)
-β βββ Tool.js # Base class
-β βββ TransformTool.js
+β βββ tools/ # One *Tool.js per tab (extends Tool.js)
+β βββ Tool.js
+β βββ AntiClassifierTool.js
+β βββ BijectionTool.js
β βββ DecodeTool.js
β βββ EmojiTool.js
-β βββ TokenadeTool.js
+β βββ GibberishTool.js
β βββ MutationTool.js
-β βββ TokenizerTool.js
+β βββ PromptCraftTool.js
β βββ SplitterTool.js
-β βββ GibberishTool.js
+β βββ TokenadeTool.js
+β βββ TokenizerTool.js
+β βββ TransformTool.js
+β βββ TranslateTool.js # hidden tab wiring; UI lives on Transform
βββ src/
-β βββ emojiWordMap.js # Emoji keyword mappings (merged into emojiData.js)
-β βββ transformers/ # Transformer modules (source - bundled at build time)
+β βββ emojiWordMap.js # Merged into generated emoji data at build time
+β βββ transformers/ # Transformer sources β bundled to dist/js/bundles/
β βββ BaseTransformer.js
-β βββ ancient/ # Elder Futhark, Hieroglyphics, Ogham, Roman Numerals
-β βββ case/ # Camel, Kebab, Snake, Title, etc.
-β βββ cipher/ # Caesar, ROT13, VigenΓ¨re, Atbash, etc.
-β βββ encoding/ # Base64, Hex, Binary, URL, etc.
-β βββ fantasy/ # Quenya, Tengwar, Klingon, Aurebesh, Dovahzul
-β βββ format/ # Leetspeak, Pig Latin, Reverse, etc.
-β βββ special/ # Randomizer
-β βββ technical/ # Morse, NATO, Braille, Brainfuck, etc.
-β βββ unicode/ # Upside-down, Fullwidth, Bubble, etc.
-β βββ visual/ # Disemvowel, Rovarspraket, Ubbi-dubbi, etc.
-βββ templates/ # HTML templates for tools (injected at build time)
+β βββ index.js # Generated by npm run build:index (gitignored)
+β βββ ancient/
+β βββ case/
+β βββ cipher/
+β βββ encoding/
+β βββ fantasy/
+β βββ format/
+β βββ special/
+β βββ technical/
+β βββ unicode/
+β βββ visual/
+βββ templates/ # Injected into dist/index.html by inject-tool-templates
+β βββ anticlassifier.html
+β βββ bijection.html
β βββ decoder.html
-β βββ steganography.html
-β βββ transforms.html
-β βββ tokenade.html
β βββ fuzzer.html
-β βββ tokenizer.html
+β βββ gibberish.html
+β βββ promptcraft.html
β βββ splitter.html
-β βββ gibberish.html
-βββ build/ # Build scripts
-β βββ build-index.js # Generates transformer index
-β βββ build-transforms.js # Bundles transformers into js/bundles/
-β βββ build-emoji-data.js # Generates emojiData.js from Unicode data
-β βββ inject-tool-scripts.js # Auto-discovers and registers tools
-β βββ inject-tool-templates.js # Injects templates into index.html
-βββ tests/ # Test suites
+β βββ steganography.html
+β βββ tokenade.html
+β βββ tokenizer.html
+β βββ transforms.html
+β βββ README.md
+βββ build/
+β βββ README.md
+β βββ build-index.js # Writes src/transformers/index.js
+β βββ build-transforms.js # Writes dist/js/bundles/transforms-bundle.js
+β βββ build-emoji-data.js # Writes dist/js/data/emojiData.js
+β βββ copy-static.js # Copies css/, js/, favicon β dist/
+β βββ fetch-glitch-data.js
+β βββ inject-tool-scripts.js # Discovers tools; updates index.template.html + toolRegistry
+β βββ inject-tool-templates.js # Builds dist/index.html from index.template.html + templates/
+β βββ readme-transform-section.js # Maintainer helper for README transform list
+βββ tests/
β βββ test_universal.js
β βββ test_steganography_options.js
-βββ css/ # Stylesheets (edit *.css, then npm run build:css)
-β βββ style.css # Source (readable)
-β βββ style.min.css # Generated; linked from HTML
-β βββ notification.css
-β βββ notification.min.css
-βββ index.template.html # Base HTML template (templates injected here)
-βββ index.html # Generated file (created by build process)
-βββ docs/ # Documentation
+βββ docs/
+β βββ TOOL-SYSTEM.md
+β βββ TOOL_ARCHITECTURE.md
+β βββ UI-COMPONENTS.md
+βββ README.md
+βββ CONTRIBUTING.md
+
+dist/ # npm run build β gitignored
+βββ index.html # `npm run build:templates` β from index.template.html + templates/
+βββ css/ β¦
+βββ js/ β¦
+β βββ bundles/transforms-bundle.js
+β βββ data/emojiData.js
```
+**Generated / ignored paths (also listed in `.gitignore`):** `dist/`, `src/transformers/index.js`, legacy `js/bundles/transforms-bundle.js`, `js/data/emojiData.js`, root `index.html` if present. The build updates **`dist/index.html`** only; a **root** `index.html` is not produced by the current scripts.
+
## π― Key Concepts
### Core vs Tools
-- **`js/core/`** - Shared business logic and infrastructure
- - These are **NOT** tool-specific
- - Examples:
- - `decoder.js` (used by DecodeTool + app.js)
- - `steganography.js` (used by EmojiTool + decoder.js)
- - `emojiLibrary.js` (used by EmojiTool)
- - `toolRegistry.js` (ToolRegistry class - infrastructure for the tool system)
-
-- **Source files** (`src/`) - Source files used by build process
- - `emojiWordMap.js` - Emoji keyword mappings (merged into emojiData.js during build)
- - `transformers/` - Transformer modules (bundled into transforms-bundle.js)
-
-- **Generated files** (`js/bundles/`)
- - `transforms-bundle.js` - Generated bundle from `src/transformers/` (created by `npm run build:transforms`)
-
-- **`js/tools/`** - Vue.js integration layer for UI features
- - Each tool represents a tab/feature in the UI
- - Tools use core modules and utilities for functionality
- - Example: `DecodeTool.js` uses `window.universalDecode` from `core/decoder.js`
+- **`js/core/`** β Shared business logic and infrastructure (not tab-specific)
+ - Examples: `decoder.js` (DecodeTool, decoder pipeline), `steganography.js` (EmojiTool, steg engine), `toolRegistry.js` (registers tools, merges Vue surface), `transformOptions.js` (shared transform UI helpers)
+- **`js/utils/`** β Cross-cutting helpers (`clipboard`, `EmojiUtils` in `emoji.js`, notifications, theme, etc.)
+- **`js/data/`** β Committed static payloads (models, prompts, glitch token data, end sequences, `emojiCompatibility.js`). **`emojiData.js`** is **not** edited here β it is **generated** to `dist/js/data/emojiData.js` by `npm run build:emoji`.
+- **`src/`** β `emojiWordMap.js` feeds the emoji build; `transformers/` holds transformer modules
+- **Generated bundle** β `npm run build:transforms` writes `dist/js/bundles/transforms-bundle.js` (a legacy `js/bundles/transforms-bundle.js` path may exist for older workflows and is gitignored)
+- **`js/tools/`** β Vue integration: one `*Tool.js` per tab (plus `TranslateTool.js`, which is hidden and wired from the Transform tab)
+ - Example: `DecodeTool.js` uses the universal decode API from `core/decoder.js`
### Transformers vs Tools
@@ -142,7 +162,7 @@ Transformers are the core text transformation logic. See `src/transformers/READM
1. Create a new file in the appropriate category directory:
```bash
- src/transformers/ciphers/my-cipher.js
+ src/transformers/cipher/my-cipher.js
```
2. Use the `BaseTransformer` class:
@@ -174,7 +194,7 @@ Transformers are the core text transformation logic. See `src/transformers/READM
```
4. Test it:
- - Open `index.html` in a browser
+ - After `npm run build`, open **`dist/index.html`** in a browser (or use `npm start` β http://localhost:8080 if you prefer)
- Your transformer will appear in the Transform tab automatically
- Test encoding/decoding
- Test with the Universal Decoder
@@ -250,7 +270,7 @@ Tools represent UI features/tabs. Examples: Transform tab, Decoder tab, Emoji ta
```
4. Test it:
- - Open `index.html`
+ - After `npm run build`, open **`dist/index.html`** (or `npm start` at http://localhost:8080)
- Your new tab should appear automatically
- Test all functionality
@@ -273,7 +293,7 @@ Utilities are shared helper functions used across the app. Currently, utility fu
};
```
-2. Add script tag to `index.html` (before `app.js`):
+2. Add a script tag to **`index.template.html`** (before `app.js`), then `npm run build:copy` (or `npm run build`) so it lands in **`dist/index.html`**:
```html
```
@@ -289,7 +309,7 @@ Utilities are shared helper functions used across the app. Currently, utility fu
- Document with JSDoc comments
- Consider adding to existing modules if functionality is related
-**Note:** The `js/utils/` directory contains utility functions: clipboard, escapeParser, focus, history, notifications, and theme. The `js/config/` directory contains configuration constants.
+**Note:** Prefer `js/utils/` for shared helpers (clipboard, emoji, escapeParser, focus, glitchTokens, history, notifications, theme). Use `js/config/` for constants.
## π§ͺ Testing
@@ -328,12 +348,11 @@ npm run test:steg # Steganography options tests
### File Organization
-- **Core modules** (`js/core/`) - Shared business logic (e.g., `decoder.js`)
-- **Root-level modules** (`js/`) - Feature libraries (e.g., `steganography.js`, `emojiLibrary.js`)
-- **Tools** (`js/tools/`) - Vue.js UI integration layer
-- **Templates** (`templates/`) - HTML templates for tools (injected at build time)
-- **Transformers** (`src/transformers/`) - Text transformation logic
-- **Bundles** (`js/bundles/`) - Build-generated files
+- **Core modules** (`js/core/`) β Shared logic (`decoder.js`, `steganography.js`, `toolRegistry.js`, `transformOptions.js`)
+- **App entry** (`js/app.js`) β Vue bootstrap and shell behavior
+- **Tools** (`js/tools/`) β Tab UI layer (`*Tool.js`)
+- **Templates** (`templates/`) β Tool markup injected into `dist/index.html`
+- **Transformers** (`src/transformers/`) β Transform implementations; output is `dist/js/bundles/transforms-bundle.js`
### Naming Conventions
@@ -351,9 +370,9 @@ npm run build:templates
```
This:
-1. Reads all `.html` files from `templates/` directory
-2. Injects them into `index.html` at the `#tool-content-container` marker
-3. Creates a single static HTML file for fast loading
+1. Reads the ordered list of tool templates from `templates/` (see `build/inject-tool-templates.js`)
+2. Injects them into **`dist/index.html`** at the `#tool-content-container` marker (from `index.template.html`)
+3. Produces the static HTML file served from `dist/`
**When to run:**
- After editing any template in `templates/`
@@ -361,21 +380,21 @@ This:
### Build Script Details
-- **Directory Creation**: Build scripts automatically create output directories (`js/bundles/`, `js/data/`) if they don't exist
-- **Full Build**: Run `npm run build` to execute all build steps in order
-- **Individual Builds**: Each build script can be run independently
+- **Directory creation**: Scripts create `dist/` (and subfolders) as needed
+- **Full build**: `npm run build` runs tools injection, copy, transformer index, transform bundle, emoji data, template injection (see `package.json` and `build/README.md`)
+- **Individual builds**: Each `npm run build:*` step can be run on its own
-**Note:** Transformers are loaded from `js/bundles/transforms-bundle.js` which may be pre-built or generated separately.
+**Note:** The browser loads transforms from **`dist/js/bundles/transforms-bundle.js`** after a successful `npm run build:transforms` (and `npm run build:copy`).
## π Debugging
### Common Issues
-1. **Template changes not showing**: Run `npm run build:templates` to inject templates into `index.html`
+1. **Template changes not showing**: Run `npm run build:templates` to rebuild **`dist/index.html`**, then refresh (or run `npm start` after a full `npm run build`)
2. **Tool not showing**: Check that:
- - Tool is registered in `js/core/toolRegistry.js`
- - Script tag is in `index.html` before `app.js`
- - Template file exists in `templates/` directory
+ - `npm run build:tools` ran so `toolRegistry.js` and `index.template.html` include the new tool
+ - Script tag order in **`index.template.html`** (loads before `app.js`)
+ - Template file exists in `templates/` and is listed in `build/inject-tool-templates.js` when adding a new tab
3. **Tests failing**: Check file paths use `path.join(projectRoot, '...')`
### Browser Console
@@ -383,23 +402,24 @@ This:
- Open browser DevTools (F12)
- Check console for errors
- Use `window.transforms` to see all transformers
-- Use `window.steganography` to access steganography functions
-- Use `window.emojiLibrary` to access emoji functions
+- Use `window.steganography` for steganography helpers
+- Use `window.emojiData` (after build) and `window.EmojiUtils` (`js/utils/emoji.js`) for emoji lists / splitting
## π Documentation
-- **Project README**: `README.md` - Overview and user guide
-- **Templates**: `templates/README.md` - How to edit tool templates
-- **Build Process**: `build/README.md` - Build script documentation
-- **Tool System**: `docs/TOOL-SYSTEM.md` - Tool architecture details
-- **Code Review**: `docs/CODE-REVIEW.md` - Architecture and code review guidelines
+- **Project README**: `README.md` β Overview and user guide
+- **Templates**: `templates/README.md` β Editing tool templates
+- **Build process**: `build/README.md` β Build scripts
+- **Tool system**: `docs/TOOL-SYSTEM.md` β Templates, injection, UI vocabulary
+- **Tool architecture**: `docs/TOOL_ARCHITECTURE.md`
+- **UI components**: `docs/UI-COMPONENTS.md`
## β
Checklist Before Submitting
- [ ] Code follows existing style
- [ ] Tests pass (`npm test`)
- [ ] Templates built (`npm run build:templates`) if template files were edited
-- [ ] Tested in browser (open `index.html`)
+- [ ] Tested in browser (`npm run build`, then open `dist/index.html` or `npm start`)
- [ ] No console errors
- [ ] Documentation updated (if needed)
- [ ] JSDoc comments added (for new functions)
@@ -407,7 +427,7 @@ This:
## π€ Questions?
- Check existing code for examples
-- Review `docs/CODE_REVIEW.md` for architecture details
+- Review `docs/TOOL_ARCHITECTURE.md` and `docs/TOOL-SYSTEM.md` for architecture details
- Look at similar features to understand patterns
Thank you for contributing! π
diff --git a/README.md b/README.md
index 7300f94..7672fc0 100644
--- a/README.md
+++ b/README.md
@@ -1,90 +1,215 @@
# π P4RS3LT0NGV3 - Universal Text Translator
-A powerful web-based text transformation and steganography tool that can encode/decode text in 79+ different languages, scripts, and formats. Think of it as a universal translator for ALL alphabets and writing systems!
+A powerful web-based text transformation and steganography tool with **159** built-in text transforms spanning encodings, classical and modern ciphers, Unicode styles, formatting, and niche alphabets. Think of it as a universal translator for ALL alphabets and writing systems!
+
+The app is a **static site**: run **`npm run build`** (after `npm install`), then open **`dist/index.html`** in your browserβno local server required. **Alternatively**, you can run it as a local app over HTTP with **`npm start`** or **`npx serve dist -l 8080`** (see [Getting Started](#getting-started) below). Core transforms, decoder, and steganography work **without** calling the cloud; features that use [OpenRouter](https://openrouter.ai/) need **network access** and an API key (see below).
## β¨ Features
### π **Steganography**
-- **Emoji Steganography**: Hide messages within emojis using variation selectors
-- **Invisible Text**: Encode text using Unicode Tags block (completely invisible)
-- **Image Steganography**: Hide messages in images using LSB techniques
+- **Emoji Steganography**: Hide messages within emojis using variation selectors (VS15/VS16 and related options; configurable bit order in Advanced Settings)
+- **Invisible Text**: Encode text using Unicode Tags block (visually invisible)
+- **Whitespace & zero-width steganography**: Available as transforms for research-style payloads (see transform categories)
### π **Text Transformations**
-#### **Encoding & Decoding**
-- **Base64** - Standard base64 encoding/decoding
-- **Base32** - RFC 4648 compliant base32 encoding/decoding
-- **Base58** - Bitcoin alphabet encoding/decoding
-- **Base62** - 0-9A-Za-z compact encoding/decoding
-- **Binary** - Convert text to/from binary representation
-- **Hexadecimal** - Convert text to/from hex format
-- **ASCII85** - Advanced ASCII85 encoding/decoding
-- **URL Encode** - URL-safe encoding/decoding
-- **HTML Entities** - HTML entity encoding/decoding
+Categories match the Transform tab and the folders under `src/transformers/` (each transformerβs `name` as shown in the UI). Short descriptions explain what each transform does.
-#### **Ciphers & Codes**
-- **Caesar Cipher** - Classic shift cipher with configurable offset
-- **ROT13** - Simple rotation cipher
-- **ROT47** - Extended rotation cipher for ASCII 33-126
-- **Morse Code** - International Morse code with proper spacing
+#### **Ancient**
+- **Elder Futhark** - Germanic Elder Futhark runes
+- **Hieroglyphics** - Egyptian hieroglyph-style mapping
+- **Ogham (Celtic)** - Celtic Ogham tree alphabet
+- **Roman Numerals** - Arabic numerals β Roman numerals
+
+#### **Case**
+- **Alternating Case** - Alternate uppercase and lowercase per letter (first letter upper or lower)
+- **camelCase** - lowerCamelCase for identifiers
+- **kebab-case** - kebab-case for slugs and identifiers
+- **Random Case** - Random casing per character
+- **Sentence Case** - Capitalize the first letter of each sentence
+- **snake_case** - snake_case for identifiers
+- **Title Case** - Capitalize each word
+
+#### **Cipher**
+- **ADFGX Cipher** - WWI ADFGVX-style polybius + column transposition
+- **Affine Cipher** - Affine substitution (ax + b mod 26)
+- **Atbash Cipher** - Reverse-alphabet substitution (AβZ)
+- **Autokey Cipher** - Key stream mixed with plaintext (autokey)
+- **Baconian Cipher** - Five-letter groups hiding A/B (Bacon biliteral)
+- **Beaufort Cipher** - Beaufort key-table polyalphabetic cipher
+- **Bifid Cipher** - Polybius square + row/column interleaving
+- **Caesar Cipher** - Classic alphabet shift (configurable)
+- **Columnar Transposition** - Columnar transposition with a keyword
+- **Four-Square Cipher** - Four 5Γ5 squares; digraph substitution
+- **Gronsfeld Cipher** - Vigenère family with numeric key
+- **Hill Cipher** - Matrix-based multi-letter substitution
+- **Homophonic Cipher** - Multiple ciphertext symbols per plaintext letter
+- **Nihilist Cipher** - Keyed Polybius + additive encryption
+- **Pigpen Cipher** - Masonic / pigpen grid symbols
+- **Playfair Cipher** - Digraph cipher on a 5Γ5 square
+- **Polybius Square** - Letter β grid coordinates
+- **Porta Cipher** - Porta table polyalphabetic cipher
+- **Rail Fence** - Zig-zag rail-fence transposition
+- **ROT128** - UTF-16 code unit rotation by 128
+- **ROT13** - Rotate Latin letters by 13 places
+- **ROT18** - Rotate printable ASCII (33β126) by 18
+- **ROT47** - Rotate printable ASCII (33β126) by 47
+- **ROT5** - Rotate digits 0β9 by 5
+- **ROT8000** - Plane-0 Unicode BMP rotation cipher
+- **Scytale Cipher** - Wrap-around strip (scytale) transposition
+- **Trifid Cipher** - Three Polybius cubes + trifid grouping
+- **Two-Square Cipher** - Digraph cipher with two Playfair squares
+- **Vigenère Cipher** - Polyalphabetic cipher with repeating keyword
+- **XOR Cipher** - XOR with a repeating key
+
+#### **Encoding**
+- **ASCII85** - Ascii85 / Adobe-style base-85 encoding
+- **Base122** - Binary β 122 printable ASCII characters
+- **Base32** - RFC 4648 Base32
+- **Base36** - Base36 (0β9, AβZ)
+- **Base45** - Base45 byte encoding
+- **Base58** - Bitcoin-style Base58 (no 0/O/I/l)
+- **Base62** - Base62 (0β9, AβZ, aβz)
+- **Base64** - Standard Base64
+- **Base64 URL** - Base64url (URL-safe alphabet)
+- **Base91** - basE91 / Ascii91 encoding
+- **Baudot Code (ITA2)** - Five-bit telegraph / ITA2
+- **Binary Coded Decimal** - Decimal digits as BCD nibbles
+- **Binary** - Text bytes β binary strings
+- **EBCDIC** - EBCDIC byte encoding
+- **Emoji Encoding** - Payload encoded with emoji
+- **Gray Code** - Binary Gray code
+- **Hexadecimal** - Hex encode/decode bytes
+- **HTML Entities** - HTML entity escape / unescape
+- **Invisible Text** - Unicode Tags / invisible carrier encoding
+- **Quoted-Printable** - MIME quoted-printable
+- **Unicode Code Points** - Characters β U+XXXX code points
+- **URL Encode** - application/x-www-form-urlencoded
+- **Uuencoding** - Classic uuencode / uudecode
+- **YEnc** - yEnc line-oriented binary encoding
+- **Z85** - ZeroMQ Z85 encoding
+
+#### **Fantasy**
+- **Aurebesh (Star Wars)** - Galactic Basic Aurebesh alphabet
+- **Dovahzul (Dragon)** - Skyrim Dovahzul transliteration
+- **Klingon** - Klingon transliteration
+- **Quenya (Tolkien Elvish)** - Tolkien Quenya mapping
+- **Tengwar Script** - Elvish Tengwar script
+
+#### **Format**
+- **Bitwise NOT** - UTF-8 bytes NOT'd per byte; encode output is hex (decode pastes hex back to text)
+- **Boustrophedon** - Serpentine / alternating line direction
+- **Capitalize Words** - Capitalize the first letter of each word
+- **Indent** - Add leading spaces to each line (configurable width)
+- **Javanais** - French βjavanaisβ vowel-insertion game
+- **Latin Gibberish** - Latin-flavored pseudo-text
+- **Leetspeak** - 1337-style character substitutions
+- **Letters Only** - Keep letters; strip other characters
+- **Letters & Numbers Only** - Alphanumeric only
+- **Line Numbers** - Prefix lines with numbers (start and column width configurable)
+- **Louchebem** - French argot (loucherbem-style)
+- **Lowercase All** - Lowercase entire text
+- **Mirror Digits** - Mirror digits 0β9 visually
+- **Numbers Only** - Digits only
+- **Pig Latin** - English Pig Latin
+- **QWERTY Right Shift** - Map keys to the key to the right on QWERTY
+- **Remove Accents** - Strip diacritics / combining marks
+- **Remove Consonants** - Remove consonant letters
+- **Remove Duplicates** - Remove duplicate lines
+- **Remove Extra Spaces** - Collapse runs of spaces
+- **Remove HTML Tags** - Strip HTML/XML tags
+- **Remove Newlines** - Remove line breaks
+- **Remove Numbers** - Remove digit characters
+- **Remove Punctuation** - Remove punctuation
+- **Remove Tabs** - Remove tab characters
+- **Remove Zero Width** - Strip zero-width characters
+- **Reverse Words** - Reverse order of words
+- **Reverse Text** - Reverse character order
+- **Shuffle Characters** - Shuffle characters (random order)
+- **Shuffle Words** - Shuffle word order
+- **Spaces Remover** - Remove space characters
+- **Text Justify** - Pad each line to a fixed width (left, right, or center); not word-spacing justify
+- **Uppercase All** - Uppercase entire text
+- **Toggle Case** - Swap case of each letter
+- **Whitespace Steganography** - Hide bits in whitespace patterns
+- **Word Wrap** - Break long lines at spaces so each line fits a maximum width
+- **Zero-Width Steganography** - Hide data with zero-width characters
+
+#### **Special**
+- **Random Mix** - Pick random transforms and chain them
+
+#### **Technical**
+- **A1Z26** - A=1 β¦ Z=26 letter numbering
+- **Braille** - Unicode Braille patterns
+- **Brainfuck** - Text β Brainfuck program
+- **ICAO Spelling Alphabet** - ICAO radiotelephony spelling
+- **ITU Spelling Alphabet** - ITU phonetic / spelling alphabet
+- **Maritime Signal Flags** - International maritime signal flags
+- **Morse Code** - International Morse code
- **NATO Phonetic** - NATO phonetic alphabet
-- **Vigenère Cipher** - Polyalphabetic cipher (default key "KEY")
-- **Rail Fence (3 Rails)** - Zig-zag transposition cipher
+- **Semaphore Flags** - Flag semaphore arm positions
+- **Tap Code** - Polybius / tap / prison code
-#### **Visual Transformations**
-- **Upside Down** - Flip text upside down using Unicode characters
-- **Full Width** - Convert to full-width Unicode characters
-- **Small Caps** - Convert to small capital letters
-- **Bubble Text** - Enclose letters in circles
-- **Braille** - Convert to Braille patterns
-- **Strikethrough** - Add strikethrough using combining characters
-- **Underline** - Add underlines using combining characters
+#### **Unicode**
+- **Bold Italic** - Mathematical sans-serif bold italic
+- **Bold** - Mathematical bold
+- **Bubble** - Circled / βbubbleβ letters
+- **Chemical Symbols** - Chemical element symbols
+- **Circled** - Circled Unicode letters
+- **Cursive** - Mathematical script / cursive
+- **Cyrillic Stylized** - Latin β Cyrillic lookalike letters
+- **Dashed Underline** - Combining dashed underline
+- **Dotted Underline** - Combining dotted underline
+- **Double-Struck** - Mathematical double-struck
+- **Fraktur** - Mathematical Fraktur / Gothic
+- **Full Width** - Fullwidth Latin (and related) forms
+- **Greek Letters** - Greek letter replacements
+- **Hiragana** - Rough Romaji β Hiragana
+- **Italic** - Mathematical italic
+- **Katakana** - Rough Romaji β Katakana
+- **Mathematical Notation** - Mathematical alphanumeric symbols
+- **Medieval** - Medieval Unicode letterforms
+- **Mirror Text** - Leftβright mirrored characters
+- **Monospace** - Mathematical monospace
+- **Negative Squared** - Negative circled / squared letters
+- **Overline** - Overline combining marks
+- **Parenthesized** - Parenthesized Latin letters
+- **Regional Indicator Letters** - Regional-indicator flag letters
+- **Small Caps** - Small capitals (Unicode)
+- **Squared** - Squared / enclosed alphanumeric
+- **Strikethrough** - Strikethrough combining characters
+- **Subscript** - Unicode subscripts
+- **Superscript** - Unicode superscripts
+- **Underline** - Underline combining characters
+- **Upside Down** - Upside-down Unicode letters
+- **Vaporwave** - Fullwidth + aesthetic spacing
+- **Wavy Underline** - Wavy underline combining marks
+- **Wide Spacing** - Insert wide spaces between characters
+- **Wingdings** - Wingdings-style symbol mapping
+- **Zalgo** - Stacked combining marks (βglitchβ text)
-#### **Unicode Styles**
-- **Medieval** - Gothic/medieval style characters
-- **Cursive** - Cursive/script style characters
-- **Monospace** - Monospace mathematical characters
-- **Double-Struck** - Mathematical double-struck characters
-- **Greek Letters** - Greek alphabet characters
-- **Wingdings** - Symbol font characters
-- **Fraktur** - Mathematical Fraktur alphabet
-- **Cyrillic Stylized** - Latin letters mapped to similar Cyrillic glyphs
-- **Katakana** - Romaji to Katakana (approximate, reversible)
-- **Hiragana** - Romaji to Hiragana (approximate, reversible)
-- **Roman Numerals** - Numbers to Roman numerals (reversible)
+#### **Visual**
+- **Disemvowel** - Remove vowels (speech game)
+- **Emoji Speak** - Emoji-heavy βspeakβ transform
+- **RΓΆvarsprΓ₯ket** - Swedish consonant-doubling game
+- **Ubbi Dubbi** - Insert βubβ before vowel sounds
-#### **Fantasy Languages** π§ββοΈ
-- **Quenya (Tolkien Elvish)** - High Elvish language from Lord of the Rings
-- **Tengwar Script** - Elvish writing system
-- **Klingon** - Star Trek Klingon language
-- **Aurebesh (Star Wars)** - Galactic Basic alphabet
-- **Dovahzul (Dragon)** - Dragon language from Skyrim
+### π οΈ **Tools** (tabs)
-#### **Ancient Scripts** ποΈ
-- **Elder Futhark** - Ancient Germanic runes
-- **Hieroglyphics** - Egyptian hieroglyphic symbols
-- **Ogham (Celtic)** - Celtic tree alphabet
-- **Semaphore Flags** - Flag signaling system
+Tabs appear in **UI order** below. **OpenRouter** (optional or required per tool) uses the key in **Advanced Settings** β see **OpenRouter API Key Setup** below.
-#### **Technical Codes** βοΈ
-- **Brainfuck** - Esoteric programming language
-- **Mathematical Notation** - Mathematical script characters
-- **Chemical Symbols** - Chemical element abbreviations
+### π€ **Transform**
-#### **Formatting**
-- **Pig Latin** - Simple word transformation
-- **Leetspeak** - 1337 speak with number substitutions
-- **Vaporwave** - Aesthetic spacing
-- **Zalgo** - Glitch text with combining marks
-- **Mirror Text** - Reversed text
-
-### π **Universal Decoder**
-- **Smart Detection**: Automatically detects and decodes any supported format
-- **Priority Matching**: Prioritizes decoding based on active transform
-- **Fallback Methods**: Tries all available decoders if primary fails
-- **Real-time Processing**: Instant decoding as you type
+- **159 Transforms**: Encodings, ciphers, Unicode styles, formats, and more (full catalog above).
+- **Categories**: Grouped sections you can **reorder**; quick-jump legend; **randomizer** last.
+- **Favorites & last used**: Pin transforms and recall recent picks.
+- **Per-transform options**: Gear icon where a transform exposes settings.
+- **Keyboard shortcut**: **T** (shown in the tab title).
### π **AI Translation** (via OpenRouter)
+
+*Lives on the **Transform** tab β not a separate tab.*
+
- **20+ Languages**: Major world languages (Spanish, French, Chinese, Japanese, Korean, etc.)
- **Dead & Exotic Languages**: Latin, Sanskrit, Ancient Greek, Sumerian, Akkadian, Old English, and more
- **Custom Languages**: Add any language on-the-fly
@@ -92,23 +217,73 @@ A powerful web-based text transformation and steganography tool that can encode/
- **TranslateGemma Prompt Format**: Uses Google's optimized prompt template for high-quality translation
- **Auto-Fallback**: If a model is unavailable, automatically falls back to Gemma 3 27B
-### πͺ **PromptCraft** (AI Prompt Mutation)
-- **9 Mutation Strategies**: Rephrase, Obfuscate, Role-Play Wrap, Multi-Language, Expand, Compress, Metaphor, Fragment, and Custom
-- **48+ Models**: Frontier (Claude, GPT, Gemini, Grok), Reasoning (o3, o4, DeepSeek R1), Fast (Haiku, Mini), Code-specialized, Open Source (Llama, Qwen), and Search/Research models
-- **Parallel Variants**: Generate 1-10 variants simultaneously with diverse temperature settings
-- **Copy & Iterate**: Copy any variant or feed it back as input for iterative refinement
+### π **Decoder** (Universal Decoder)
-### π οΈ **Available Tools**
-- **Universal Decoder**: Auto-detect and decode any supported format
-- **Text Transforms**: 79+ encoding, cipher, and transformation options
-- **AI Translation**: Translate to 20+ languages via OpenRouter (built into Transforms tab)
-- **PromptCraft**: AI-powered prompt mutation and crafting (dedicated tab)
-- **Steganography**: Emoji and invisible text steganography
-- **Tokenade Generator**: High-density token payload builder
-- **Mutation Lab (Fuzzer)**: Generate diverse text mutations
-- **Tokenizer Visualization**: Visualize tokenization for various engines
-- **Message Splitter**: Split text into multiple copyable chunks
-- **Gibberish Generator**: Create gibberish dictionaries and character removal variants
+- **Smart detection**: Runs format detectors and decode paths for supported transforms.
+- **Priority matching**: When a transform is active, decoding prefers that format first.
+- **Fallback**: Tries other decoders if the primary guess fails.
+- **Real-time**: Updates as you type.
+- **Script & language hints**: Unicode script ranges and Latin word-marker heuristics for common languages.
+- **AI translate to English** (optional, OpenRouter): When text looks foreign, optional one-shot translate to English.
+- **Keyboard shortcut**: **D**.
+
+### π **Emoji** (Steganography)
+
+- **Emoji carriers**: Hide data using variation selectors and supported emoji carriers; pick from the emoji grid.
+- **Invisible text**: Switch to Unicode Tagsβstyle invisible encoding where available.
+- **Encode & decode**: Separate flows for hiding and recovering text.
+- **Advanced Settings**: Bit order, VS choices, and other steganography tuning (sliders icon).
+- **Keyboard shortcut**: **H** (shown in the tab title).
+
+### π£ **Tokenade**
+
+- **Token bomb builder**: Depth, breadth, repeats, separators (e.g. ZWSP), variation selectors, noise.
+- **Carriers & payloads**: Emoji carriers, text payloads, combining options.
+- **Safety**: Warns when estimated output crosses a **danger** token threshold.
+
+### π§ͺ **Mutation Lab**
+
+- **Batch mutations**: Generate many variants from one input (count configurable).
+- **Seed**: Optional deterministic runs.
+- **Toggles**: Random mix, zero-width, Unicode noise, Zalgo, whitespace, casing, encode/shuffle.
+- **Random Mix**: Can chain the projectβs random transform mixer when enabled.
+
+### π **Tokenizer**
+
+- **Engines**: UTF-8 **bytes**, **words**, or **GPT BPE** (**cl100k**, **o200k**, **p50k**, **r50k**) via `gpt-tokenizer` (CDN).
+- **Visualization**: Token list with IDs/pieces; **character** and **word** counts.
+- **Live updates**: Re-tokenizes when input or engine changes.
+
+### βοΈ **Bijection**
+
+- **Custom mappings**: Character-to-number (and related) βalphaprβ-style maps for research payloads.
+- **Controls**: Mapping type, budget, optional examples.
+- **Output**: Generated mappings and payloads ready to copy.
+
+### βοΈ **Splitter**
+
+- **Split modes**: By chunk size, **word**, **sentence**, **line**, **regex pattern**, or **token** count (GPT tokenizer).
+- **Transform chain**: Optionally run transforms on each piece.
+- **Wrapping**: Start/end templates; `{n}` iterator marker; single-line vs multiline copy.
+
+### π¬ **Gibberish**
+
+- **Dictionary mode**: Seeded random gibberish over a configurable character set.
+- **Removal mode**: Random or **specific** letter removal with batch **variations** and min/max strip lengths.
+
+### πͺ **PromptCraft** (via OpenRouter)
+
+- **9 Mutation Strategies**: Rephrase, Obfuscate, Role-Play Wrap, Multi-Language, Expand, Compress, Metaphor, Fragment, and Custom
+- **48+ Models**: Frontier (Claude, GPT, Gemini, Grok), Reasoning (o3, o4, DeepSeek R1), Fast (Haiku, Mini), Code-specialized, Open Source (Llama, Qwen), and Search/Research
+models
+- **Parallel Variants**: Generate 1-10 variants simultaneously with diverse temperature settings
+- **Copy & iterate**: Copy any variant or feed it back as input for iterative refinement
+
+### π€ **Anti-Classifier** (via OpenRouter)
+
+- **Purpose**: Syntactic / paraphrase-style rewrites for research-style prompts.
+- **Controls**: Model, temperature, max tokens.
+- **Same key**: Uses the same OpenRouter API key as Translation and PromptCraft.
### π± **User Experience**
- **Dark/Light Theme**: Toggle between themes
@@ -117,9 +292,12 @@ A powerful web-based text transformation and steganography tool that can encode/
- **Keyboard Shortcuts**: Quick access to features
- **Responsive Design**: Works on all device sizes
- **Accessibility**: Screen reader friendly with proper ARIA labels
+- **Side panels**: Glitch token browser (optional data), end-sequence / delimiter strings for research, and **Advanced Settings** (OpenRouter key, steganography tuning)
### π **OpenRouter API Key Setup**
-Translation and PromptCraft features require an [OpenRouter](https://openrouter.ai/) API key:
+
+**AI Translation**, **PromptCraft**, and **Anti-Classifier** require an [OpenRouter](https://openrouter.ai/) API key. **Decoder**βs optional βtranslate to Englishβ also uses OpenRouter when enabled.
+
1. Create an account at [openrouter.ai](https://openrouter.ai/)
2. Generate an API key (starts with `sk-or-...`)
3. In P4RS3LT0NGV3, click the **sliders icon** (top-right) to open **Advanced Settings**
@@ -130,39 +308,50 @@ Translation and PromptCraft features require an [OpenRouter](https://openrouter.
## π **Getting Started**
-### **Quick Start (Built Version)**
-1. Run the build process (see Development Setup below)
-2. Open `dist/index.html` in any modern web browser
-3. Type text in the input field
-4. Choose a transformation from the categorized buttons
-5. Click any transform button to apply and auto-copy
-6. Use the Universal Decoder to decode any encoded text
+### **Quick Start (local)**
+1. `npm install` then `npm run build` (generates the **`dist/`** folder β it is **not** checked into git; you must build after clone or source changes)
+2. Open **`dist/index.html`** in Chrome, Firefox, Safari, or another browser (double-click the file or use **File β Open**).
+
+**Alternative β run as a local app (npm / npx):** From the project root, after `npm install` and `npm run build`, use **`npm start`** (runs [`serve`](https://github.com/vercel/serve) on port **8080**) or **`npx serve dist -l 8080`**. Then open **http://localhost:8080** β same UI, stable URL you can bookmark. **`npm run preview`** runs a full **`npm run build`** and then serves **`dist/`** in one step.
### **Development Setup**
```bash
# Install dependencies
npm install
-# Build all assets (required before use):
-# - Copies static files to dist/
-# - Builds transform bundle from source files
-# - Generates emoji data
-# - Injects tool templates into dist/index.html
+# Build all assets (required before use). Order matches package.json:
+# build:tools β build:copy β build:index β build:transforms β build:emoji β build:templates
npm run build
# Or build individual components:
+npm run build:tools # Auto-discover tools, inject script tags into dist/index.html
npm run build:copy # Copy static files to dist/
-npm run build:transforms # Bundle all transformers to dist/js/bundles/
+npm run build:index # Generate src/transformers/index.js (ES module index)
+npm run build:transforms # Bundle all transformers to dist/js/bundles/transforms-bundle.js
npm run build:emoji # Generate emoji data to dist/js/data/
-npm run build:templates # Inject tool HTML templates to dist/index.html
-npm run build:index # Generate transformer index
+npm run build:templates # Inject tool HTML templates into dist/index.html
# Run tests
npm test # Run universal decoder tests
npm run test:universal # Same as above
npm run test:steg # Test steganography options
+npm run test:all # Universal + steganography tests
+
+# Optional: serve dist/ over HTTP instead of opening dist/index.html directly
+npm start # http://localhost:8080
+npm run preview # npm run build, then serve dist/
```
+### **Documentation & maintainer notes**
+
+| Doc | Purpose |
+|-----|---------|
+| [CONTRIBUTING.md](CONTRIBUTING.md) | Adding transformers, tools, tests |
+| [docs/TOOL-SYSTEM.md](docs/TOOL-SYSTEM.md) | Tool templates, build injection, shared UI classes |
+| [build/README.md](build/README.md) | What each `build:*` script does |
+| [templates/README.md](templates/README.md) | Editing tool HTML templates |
+
+**Keeping the transform list in this README in sync:** when you add or rename a transformer, add a one-line description to `DESCRIPTIONS` in `build/readme-transform-section.js`, run `node build/readme-transform-section.js`, and replace the **Text Transformations** section here (details in [src/transformers/README.md](src/transformers/README.md)).
## π οΈ **Technical Details**
@@ -171,11 +360,12 @@ npm run test:steg # Test steganography options
- **Tool System**: Modular tool registry with build-time template injection
- **Encoding**: UTF-8 with proper Unicode handling
- **Steganography**: Variation selectors and Tags Unicode block
+- **Transforms**: Individual transformer modules live under `src/transformers/` (159; the bundle is generated by `npm run build:transforms`)
- **Build Process**:
- - Transformers are bundled from `src/transformers/` into `js/bundles/transforms-bundle.js`
- - Tool templates are injected from `templates/` into `index.html`
- - Emoji data is generated from Unicode specifications
- - All build steps are required before the app can run
+ - `npm run build` writes the runnable app under `dist/` (ignored by git in most setups)
+ - Transformers are bundled from `src/transformers/` to `dist/js/bundles/transforms-bundle.js`
+ - Tool templates are injected from `templates/` into `dist/index.html`
+ - Emoji data is generated to `dist/js/data/`
### **Browser Support**
- Chrome/Edge 80+
@@ -200,7 +390,7 @@ npm run test:steg # Test steganography options
- π **AI Translation**: Translate to 20+ languages (including dead/exotic) via OpenRouter using TranslateGemma prompt format
- π **PromptCraft Tool**: AI-powered prompt mutation with 9 strategies and 48+ models
- π **OpenRouter Integration**: Unified API key management for all AI-powered features
-- π **79+ Transformations**: Added fantasy, ancient, and technical scripts
+- π **159 Transformations**: Full catalog of encodings, ciphers, Unicode styles, fantasy and ancient scripts, and technical codes (see README transform list)
- π **More Encodings/Ciphers**: Base58, Base62, VigenΓ¨re, Rail Fence, Roman Numerals
- π **Category Organization**: Better organized transform categories
- π **Enhanced Styling**: New color schemes for each category
diff --git a/js/README.md b/js/README.md
index 77424ab..1c466da 100644
--- a/js/README.md
+++ b/js/README.md
@@ -1,39 +1,38 @@
-# JavaScript Directory Structure
+# JavaScript directory
-## Core Modules (`js/core/`)
+Source files here are copied to **`dist/js/`** by `npm run build:copy`. Generated artifacts (`dist/js/bundles/transforms-bundle.js`, `dist/js/data/emojiData.js`) are produced by other build steps.
-- `decoder.js` - Universal decoder for automatic encoding detection
-- `steganography.js` - Emoji and invisible text steganography
-- `emojiLibrary.js` - Emoji search, filtering, and library functions
-- `toolRegistry.js` - Tool registration and Vue data/method merging
+## Core (`js/core/`)
+
+- `decoder.js` β Universal decoder engine
+- `steganography.js` β Emoji / invisible text steganography
+- `toolRegistry.js` β Tool registration and Vue data/method merging
+- `transformOptions.js` β Shared transform UI helpers
## Utilities (`js/utils/`)
-- `clipboard.js` - `ClipboardUtils.copy()` - Clipboard API wrapper
-- `focus.js` - `FocusUtils.focusWithoutScroll()`, `clearFocusAndSelection()`
-- `history.js` - `HistoryUtils` - Copy history management
-- `notifications.js` - `NotificationUtils` - Toast notifications
-- `theme.js` - `ThemeUtils` - Dark/light theme management
-- `escapeParser.js` - Escape sequence parsing
+- `clipboard.js`, `focus.js`, `history.js`, `notifications.js`, `theme.js`
+- `escapeParser.js` β Escape sequence parsing
+- `emoji.js` β `window.EmojiUtils` (uses `window.emojiData` when loaded)
+- `glitchTokens.js` β Glitch token panel helpers
## Tools (`js/tools/`)
-Tool classes extending `Tool` base class. Auto-discovered by `build/inject-tool-scripts.js`.
+Classes extending `Tool`; auto-discovered by `build/inject-tool-scripts.js`.
## Data (`js/data/`)
-- `emojiData.js` - Generated emoji data (build output)
-- `emojiCompatibility.js` - Emoji compatibility mappings
+Committed static data: `anticlassifierPrompt.js`, `emojiCompatibility.js`, `endSequences.js`, `glitchTokens.js`, `openrouterModels.js`. **`emojiData.js`** is generated into **`dist/js/data/`** by `npm run build:emoji`, not edited in-repo.
-## Bundles (`js/bundles/`)
+## Bundles
-- `transforms-bundle.js` - Bundled transformer modules (build output)
+Transformer bundle: **`dist/js/bundles/transforms-bundle.js`** (`npm run build:transforms`). A legacy `js/bundles/transforms-bundle.js` path may be gitignored.
-## Load Order
+## Typical load order (see `index.template.html`)
-1. Data files (emojiData, emojiCompatibility)
-2. Generated bundles (transforms-bundle)
-3. Utilities (escapeParser, focus, notifications, history, clipboard, theme)
-4. Core modules (steganography, decoder, emojiLibrary)
-5. Tool system (Tool.js, *Tool.js files, toolRegistry)
-6. Main app (app.js)
+1. Data (`emojiData.js`, `emojiCompatibility.js`, β¦) β `emojiData` from build output in `dist/`
+2. Bundles (`transforms-bundle.js`)
+3. Utilities (including `emoji.js`)
+4. Core (`steganography`, `decoder`, `transformOptions`, β¦)
+5. Tools (`Tool.js`, `*Tool.js`, `toolRegistry.js`)
+6. `app.js`
diff --git a/js/core/transformOptions.js b/js/core/transformOptions.js
index 68f1adf..35c19b9 100644
--- a/js/core/transformOptions.js
+++ b/js/core/transformOptions.js
@@ -39,10 +39,41 @@ function getMergedTransformOptions(transform) {
return Object.assign({}, merged, saved);
}
+/**
+ * Resolve merged options for a transform by display name (same prefs as Transform tab).
+ * @param {string} transformName
+ * @param {Array