# ConveniencePro - Complete Documentation > Privacy-focused developer utility tools with client-side processing. All tools run in your browser - no data is ever sent to servers. ## Overview ConveniencePro provides 25+ developer utility tools designed for: 1. Direct browser use via the website 2. LLM integration via URL-as-API pattern 3. Embedding in third-party applications 4. Programmatic use via JavaScript SDK All processing happens client-side. The server only delivers static files - no user data ever touches our infrastructure. --- ## LLM Integration Guide ### The URL-as-API Pattern ConveniencePro implements a novel pattern for LLM tool integration without server-side infrastructure: 1. **Discovery**: LLM reads `/.well-known/ai-tools.json` to learn available tools 2. **Invocation**: LLM constructs URL with tool name and parameters 3. **Execution**: Browser loads page, JavaScript processes locally 4. **Response**: Result renders as JSON in page content This approach means: - No API keys required - No rate limits - No server-side processing - Complete privacy for user data ### URL Structure ``` https://conveniencepro.cc/run/{tool-id}?{parameters} ``` ### Response Format All tools return JSON with this structure: ```json { "success": true, "result_field": "value", "_meta": { "tool": "tool-id", "description": "Tool description", "category": "category", "provider": "ConveniencePro", "timestamp": "2024-01-01T00:00:00.000Z", "note": "All processing performed client-side." } } ``` On error: ```json { "success": false, "error": "Error message" } ``` --- ## Complete Tool Reference ### base64-encode Encode text to Base64 format. **URL**: `/run/base64-encode?text={text}&urlSafe={true|false}` **Parameters**: - `text` (required): Text to encode - `urlSafe` (optional): Use URL-safe encoding (default: false) **Response**: ```json { "success": true, "encoded": "SGVsbG8gV29ybGQ=", "length": 16, "urlSafe": false } ``` **Example**: `/run/base64-encode?text=Hello%20World` --- ### base64-decode Decode Base64 to text. **URL**: `/run/base64-decode?input={base64}` **Parameters**: - `input` (required): Base64 string to decode **Response**: ```json { "success": true, "decoded": "Hello World", "length": 11 } ``` --- ### url-encode URL encode text (percent encoding). **URL**: `/run/url-encode?text={text}` **Parameters**: - `text` (required): Text to encode **Response**: ```json { "success": true, "encoded": "Hello%20World", "original": "Hello World" } ``` --- ### url-decode Decode URL-encoded text. **URL**: `/run/url-decode?input={encoded}` **Parameters**: - `input` (required): URL-encoded text **Response**: ```json { "success": true, "decoded": "Hello World", "original": "Hello%20World" } ``` --- ### html-encode Escape HTML special characters. **URL**: `/run/html-encode?text={text}` **Parameters**: - `text` (required): Text to encode **Response**: ```json { "success": true, "encoded": "<div>Hello</div>" } ``` --- ### html-decode Unescape HTML entities. **URL**: `/run/html-decode?input={encoded}` **Parameters**: - `input` (required): HTML-encoded text **Response**: ```json { "success": true, "decoded": "
Hello
" } ``` --- ### json-format Format/beautify JSON with indentation. **URL**: `/run/json-format?json={json}&indent={number}` **Parameters**: - `json` (required): JSON string to format - `input` (alternative): Base64-encoded JSON - `indent` (optional): Spaces for indentation (default: 2) **Response**: ```json { "success": true, "formatted": "{\n \"key\": \"value\"\n}", "valid": true, "type": "object", "keys": 1 } ``` --- ### json-minify Remove whitespace from JSON. **URL**: `/run/json-minify?json={json}` **Parameters**: - `json` (required): JSON string to minify - `input` (alternative): Base64-encoded JSON **Response**: ```json { "success": true, "minified": "{\"key\":\"value\"}", "originalLength": 20, "minifiedLength": 15, "reduction": "25%" } ``` --- ### json-validate Check if JSON is valid. **URL**: `/run/json-validate?json={json}` **Parameters**: - `json` (required): JSON string to validate - `input` (alternative): Base64-encoded JSON **Response**: ```json { "success": true, "valid": true, "type": "object", "depth": 2, "keys": 3 } ``` --- ### hash-sha256 Generate SHA-256 hash. **URL**: `/run/hash-sha256?text={text}` **Parameters**: - `text` (required): Text to hash **Response**: ```json { "success": true, "hash": "a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e", "algorithm": "SHA-256", "inputLength": 5 } ``` --- ### hash-sha512 Generate SHA-512 hash. **URL**: `/run/hash-sha512?text={text}` **Parameters**: - `text` (required): Text to hash **Response**: ```json { "success": true, "hash": "9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043", "algorithm": "SHA-512", "inputLength": 5 } ``` --- ### hash-sha1 Generate SHA-1 hash (deprecated for security). **URL**: `/run/hash-sha1?text={text}` **Parameters**: - `text` (required): Text to hash **Response**: ```json { "success": true, "hash": "aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d", "algorithm": "SHA-1", "inputLength": 5, "note": "SHA-1 is deprecated for security purposes." } ``` --- ### hash-md5 Generate MD5 hash (not cryptographically secure). **URL**: `/run/hash-md5?text={text}` **Parameters**: - `text` (required): Text to hash **Response**: ```json { "success": true, "hash": "5d41402abc4b2a76b9719d911017c592", "algorithm": "MD5", "inputLength": 5, "note": "MD5 is not secure for cryptographic purposes." } ``` --- ### uuid-generate Generate UUID v4. **URL**: `/run/uuid-generate?count={number}` **Parameters**: - `count` (optional): Number of UUIDs to generate (default: 1, max: 100) **Response**: ```json { "success": true, "uuid": "550e8400-e29b-41d4-a716-446655440000", "count": 1, "version": 4 } ``` For multiple: ```json { "success": true, "uuids": ["uuid1", "uuid2", "uuid3"], "count": 3, "version": 4 } ``` --- ### uuid-validate Validate UUID format and extract version. **URL**: `/run/uuid-validate?uuid={uuid}` **Parameters**: - `uuid` (required): UUID to validate **Response**: ```json { "success": true, "valid": true, "version": 4, "uuid": "550e8400-e29b-41d4-a716-446655440000" } ``` --- ### regex-test Test a regex pattern against text. **URL**: `/run/regex-test?pattern={pattern}&text={text}&flags={flags}` **Parameters**: - `pattern` (required): Regular expression pattern - `text` (required): Text to test against - `flags` (optional): Regex flags (default: "g") **Response**: ```json { "success": true, "matches": [ { "match": "123", "index": 0, "groups": null, "captures": [] } ], "count": 1, "pattern": "\\d+", "flags": "g" } ``` --- ### regex-replace Replace text using regex. **URL**: `/run/regex-replace?pattern={pattern}&text={text}&replacement={replacement}&flags={flags}` **Parameters**: - `pattern` (required): Regular expression pattern - `text` (required): Text to perform replacement on - `replacement` (optional): Replacement string (default: "") - `flags` (optional): Regex flags (default: "g") **Response**: ```json { "success": true, "result": "abc", "replacements": 2, "pattern": "\\d+", "flags": "g" } ``` --- ### text-stats Get statistics about text. **URL**: `/run/text-stats?text={text}` **Parameters**: - `text` (required): Text to analyze - `input` (alternative): Base64-encoded text **Response**: ```json { "success": true, "characters": 100, "charactersNoSpaces": 85, "words": 20, "sentences": 3, "paragraphs": 1, "lines": 5, "averageWordLength": 4.2 } ``` --- ### case-convert Convert text between different cases. **URL**: `/run/case-convert?text={text}&to={case}` **Parameters**: - `text` (required): Text to convert - `to` (required): Target case type **Case Types**: - `upper` / `uppercase` - `lower` / `lowercase` - `title` / `titlecase` - `sentence` / `sentencecase` - `camel` / `camelcase` - `pascal` / `pascalcase` - `snake` / `snakecase` / `snake_case` - `kebab` / `kebabcase` / `kebab-case` - `constant` / `constantcase` / `constant_case` **Response**: ```json { "success": true, "result": "helloWorld", "from": "hello world", "to": "camel" } ``` --- ### text-reverse Reverse text by characters, words, or lines. **URL**: `/run/text-reverse?text={text}&mode={mode}` **Parameters**: - `text` (required): Text to reverse - `mode` (optional): Reversal mode (default: "characters") - `characters` / `chars` - `words` - `lines` **Response**: ```json { "success": true, "result": "dlroW olleH", "mode": "characters" } ``` --- ### text-trim Trim whitespace from text. **URL**: `/run/text-trim?text={text}&mode={mode}` **Parameters**: - `text` (required): Text to trim - `input` (alternative): Base64-encoded text - `mode` (optional): Trim mode (default: "both") - `both` - Trim start and end - `start` / `left` - `end` / `right` - `lines` - Trim each line - `all` - Collapse all whitespace **Response**: ```json { "success": true, "result": "trimmed text", "originalLength": 20, "trimmedLength": 12, "removed": 8 } ``` --- ### number-format Format numbers with locale and style. **URL**: `/run/number-format?value={number}&locale={locale}&style={style}¤cy={code}&decimals={number}` **Parameters**: - `value` (required): Number to format - `locale` (optional): Locale code (default: "en-US") - `style` (optional): Format style (default: "decimal") - `decimal` - `currency` - `percent` - `currency` (optional): Currency code for style=currency (default: "USD") - `decimals` (optional): Decimal places **Response**: ```json { "success": true, "formatted": "$1,234.56", "value": 1234.56, "locale": "en-US", "style": "currency" } ``` --- ### number-base Convert numbers between bases. **URL**: `/run/number-base?value={value}&from={base}&to={base}` **Parameters**: - `value` (required): Number to convert - `from` (optional): Source base (default: 10) - `to` (optional): Target base (default: 16) **Note**: Bases must be between 2 and 36. **Response**: ```json { "success": true, "result": "ff", "value": "255", "fromBase": 10, "toBase": 16, "decimal": 255 } ``` --- ### timestamp Convert between timestamp formats. **URL**: `/run/timestamp?value={timestamp}` **Parameters**: - `value` (optional): Timestamp or date string (default: "now") - Unix seconds: `1704067200` - Unix milliseconds: `1704067200000` - ISO string: `2024-01-01T00:00:00Z` - Date string: `January 1, 2024` **Response**: ```json { "success": true, "iso": "2024-01-01T00:00:00.000Z", "unix": 1704067200, "unixMs": 1704067200000, "utc": "Mon, 01 Jan 2024 00:00:00 GMT", "local": "Mon Jan 01 2024 00:00:00 GMT+0000", "date": "1/1/2024", "time": "12:00:00 AM", "year": 2024, "month": 1, "day": 1, "dayOfWeek": "Monday" } ``` --- ### color-convert Convert between color formats. **URL**: `/run/color-convert?color={color}` **Parameters**: - `color` (required): Color in any supported format - Hex: `#RGB`, `#RRGGBB`, `#RRGGBBAA` - RGB: `rgb(255, 128, 0)` - RGBA: `rgba(255, 128, 0, 0.5)` **Response**: ```json { "success": true, "hex": "#ff8000", "hexAlpha": "#ff8000", "rgb": "rgb(255, 128, 0)", "rgba": "rgba(255, 128, 0, 1)", "hsl": "hsl(30, 100%, 50%)", "r": 255, "g": 128, "b": 0, "a": 1, "h": 30, "s": 100, "l": 50 } ``` --- ## JavaScript SDK Reference ### Installation ```html ``` Or for module bundlers: ```javascript import ConveniencePro from 'https://conveniencepro.cc/sdk/conveniencepro.js'; ``` ### API All methods follow the pattern: ```javascript const result = ConveniencePro.methodName(param1, param2, ...); // result.success === true/false // result.error contains message if failed ``` ### Methods ```javascript // Encoding ConveniencePro.base64Encode(text, urlSafe) ConveniencePro.base64Decode(input) ConveniencePro.urlEncode(text) ConveniencePro.urlDecode(input) ConveniencePro.htmlEncode(text) ConveniencePro.htmlDecode(input) // JSON ConveniencePro.jsonFormat(json, indent) ConveniencePro.jsonMinify(json) ConveniencePro.jsonValidate(json) // Hashing (async) await ConveniencePro.hashSha256(text) await ConveniencePro.hashSha512(text) await ConveniencePro.hashSha1(text) ConveniencePro.hashMd5(text) // UUID ConveniencePro.uuidGenerate(count) ConveniencePro.uuidValidate(uuid) // Regex ConveniencePro.regexTest(pattern, text, flags) ConveniencePro.regexReplace(pattern, text, replacement, flags) // Text ConveniencePro.textStats(text) ConveniencePro.caseConvert(text, targetCase) ConveniencePro.textReverse(text, mode) ConveniencePro.textTrim(text, mode) // Numbers ConveniencePro.numberFormat(value, options) ConveniencePro.numberBaseConvert(value, fromBase, toBase) // Date/Time ConveniencePro.timestampConvert(value) // Colors ConveniencePro.colorConvert(color) // Utility ConveniencePro.listTools() // Returns array of tool names ConveniencePro.version // SDK version string ``` --- ## Embedding Guide ### Basic Iframe ```html ``` ### Pre-filled Values ```html ``` ### Receiving Results ```javascript window.addEventListener('message', (event) => { if (event.origin !== 'https://conveniencepro.cc') return; if (event.data.type === 'conveniencepro-result') { console.log('Tool:', event.data.tool); console.log('Result:', event.data.result); } }); ``` --- ## Security ### Data Privacy - All processing happens in the user's browser - No data is transmitted to ConveniencePro servers - No logging, analytics, or tracking of tool inputs - No cookies or local storage used for user data ### Architecture - Static file deployment (HTML, JS, CSS, JSON) - No server-side code execution - No database or state management - No authentication layer ### HTTPS - All endpoints served over HTTPS - Protects JavaScript integrity during delivery - User data never traverses the network --- ## Links - Website: https://conveniencepro.cc - Tool Manifest: https://conveniencepro.cc/.well-known/ai-tools.json - OpenAPI Spec: https://conveniencepro.cc/.well-known/openapi.yaml - ChatGPT Plugin: https://conveniencepro.cc/.well-known/ai-plugin.json - JavaScript SDK: https://conveniencepro.cc/sdk/conveniencepro.js - LLM Summary: https://conveniencepro.cc/llms.txt