diff --git a/.vitepress/config.mts b/.vitepress/config.mts index c05419a..2da282c 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -18,6 +18,15 @@ export default defineConfigWithTheme + renderInline(...args).replace(/^ in sitemap.xml. lastUpdated: true, sitemap: { @@ -111,9 +120,13 @@ export default defineConfigWithTheme - ⚡ 330+ Tools • Official n8n Community Node • Live - ⚡ 330+ Tools • n8n Node Live + ⚡ 340+ Web Tools • Official n8n Community Node • Live + ⚡ 340+ Tools • n8n Node Live @@ -42,8 +42,8 @@ const tabs = [

- Run 330+ developer utilities, formatters, and financial calculation engines directly inside your - n8n workflows with zero cloud data leaks and sub-millisecond CPU speed. + Use 340+ developer tools in your browser, and run the core JSON, crypto, text and CTC operations inside your + n8n workflows with no external API calls, in microseconds per item.

@@ -83,23 +83,23 @@ const tabs = [
- 330+ - Client Tools + 340+ + Web Tools
- < 0.2ms - Execution Time + 19 + n8n Operations
- 0 KB - Network Leak + 7 + n8n Templates
- 100% - In-Memory Node + 0 + External API Calls
@@ -118,7 +118,7 @@ const tabs = [ n8n Execution Sandbox
- ✓ 0.18ms + ✓ < 0.01 ms / item
@@ -146,44 +146,46 @@ const tabs = [
{
   "service": "payment",
   "status": "success",
-  "empId": 1042,
-  "traceId": "8f2a1b9c-4e3d-4c8a-9f1e-2b3c4d5e6f7a"
+  "empId": 1042
 }
-
// Payload: Secret Verification Token
+
// Input: text to fingerprint
devdeskapp_production_webhook_secret_key
🔐 DevDeskApp: SHA-256 Digest
{
   "algorithm": "sha256",
-  "hash": "c0053e1a0673f4e3c35b80a1846b0a034f78de1f74075f782c5890772714041b",
-  "tamperProof": true
+  "input": "devdeskapp_production_webhook_secret_key",
+  "hash": "7ac4c84d335afd794bde94eb049d2259cc348357a96538929f263f7c5911a686"
 }
-
// Input: Annual Compensation Breakdown
+
// Input: annual CTC
annualCtc: ₹24,00,000 | basic: 50%
💼 DevDeskApp: Indian Payroll Engine
{
-  "monthlyGross": ₹2,00,000,
-  "takeHomeInHand": ₹1,45,000,
-  "employeePf": ₹12,000,
-  "professionalTax": ₹200
+  "monthlyGross": 198200,
+  "monthlyInHand": 163075,
+  "breakdown": {
+    "employeePf": 1800,
+    "professionalTax": 200,
+    "estimatedMonthlyTds": 33125
+  }
 }
- ● Synchronous Native Execution + ● Real node output (v0.1.6) Zero External Network Calls
diff --git a/.vitepress/theme/components/QuickNavGrid.vue b/.vitepress/theme/components/QuickNavGrid.vue index 1e5d620..a9e7dd1 100644 --- a/.vitepress/theme/components/QuickNavGrid.vue +++ b/.vitepress/theme/components/QuickNavGrid.vue @@ -17,7 +17,7 @@ const cards: NavCard[] = [ category: 'Architecture & Overview', badge: 'Core Concept', badgeType: 'indigo', - description: 'Overview of DevDeskApp node, in-memory zero-latency execution, and security value proposition.', + description: 'What the DevDeskApp node does, its 5 resources, and why it runs in-process with no external API calls.', link: '/n8n/', linkText: 'n8n Overview', icon: '🚀' @@ -27,7 +27,7 @@ const cards: NavCard[] = [ category: 'Setup & Deployment', badge: 'UI & Docker', badgeType: 'cyan', - description: 'Step-by-step setup via n8n Community Nodes UI, Docker container images, npm package, or environment variables.', + description: 'Install from Settings → Community Nodes, inside Docker, or manually with npm in ~/.n8n/nodes.', link: '/n8n/installation', linkText: 'Installation Steps', icon: '📦' @@ -37,7 +37,7 @@ const cards: NavCard[] = [ category: 'Native Node Engine', badge: '10 Operations', badgeType: 'blue', - description: 'Full schema specifications, input parameter types, and sample execution outputs for all 10 native operations.', + description: 'Parameters, output fields and real sample outputs for all 19 operations.', link: '/n8n/operations', linkText: 'Operations Reference', icon: '⚙️' @@ -47,7 +47,7 @@ const cards: NavCard[] = [ category: 'Official n8n.io Recipes', badge: '2 Official Blueprints', badgeType: 'emerald', - description: 'Explore official blueprints #21017 and #21130 published on n8n.io with pre-wired sample payloads and validation steps.', + description: 'The 7 templates published on n8n.io, each with its pipeline, a real run and any fix needed after import.', link: '/templates/', linkText: 'Templates Catalog', icon: '🌟', @@ -58,7 +58,7 @@ const cards: NavCard[] = [ category: 'Function Calling & Tools', badge: 'LangChain & OpenAI', badgeType: 'purple', - description: 'Wire DevDeskApp into n8n AI Agents as zero-latency deterministic tools for payroll, hashing, and JSON compression.', + description: 'Attach DevDeskApp to the Tool port of an n8n AI Agent for exact payroll maths, hashing and JSON minifying.', link: '/solutions/ai-agents', linkText: 'AI Agent Guide', icon: '🤖', @@ -69,7 +69,7 @@ const cards: NavCard[] = [ category: 'Security & Benchmarks', badge: 'Zero-Leak Audit', badgeType: 'indigo', - description: 'Deep-dive security benchmarks comparing local native Node execution vs external cloud REST APIs.', + description: 'Measured local node timings compared with calling cloud utility APIs over HTTP.', link: '/solutions/', linkText: 'Architecture & Solutions', icon: '🛡️' @@ -79,7 +79,7 @@ const cards: NavCard[] = [ category: 'Performance Tuning', badge: 'Optimization', badgeType: 'amber', - description: 'High-throughput concurrency tips, memory management, defensive error handling, and automated CI/CD.', + description: 'Paired items, On Error handling, batch sizes, AI tool setup and safe hashing.', link: '/solutions/best-practices', linkText: 'Best Practices', icon: '⚡' diff --git a/.vitepress/theme/custom.css b/.vitepress/theme/custom.css index dd37d9c..a773751 100644 --- a/.vitepress/theme/custom.css +++ b/.vitepress/theme/custom.css @@ -140,7 +140,8 @@ html, body { border: 1px solid var(--vp-c-border); box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1); overflow: hidden; - background: #141e30; + /* Figures use the light DevDeskApp theme (devdeskapp.com), so frame them on the light surface. */ + background: #f8fafc; transition: transform 0.25s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.25s ease; max-width: 100%; } @@ -380,3 +381,37 @@ html, body { margin: -4px 0; } } + +/* Status badges used across template pages (previously referenced but never defined) */ +.badge-live { + display: inline-flex; + align-items: center; + gap: 6px; + font-size: 0.78rem; + font-weight: 700; + line-height: 1.4; + padding: 3px 10px; + border-radius: 999px; + color: #047857; + background: rgba(16, 185, 129, 0.12); + border: 1px solid rgba(16, 185, 129, 0.35); + white-space: nowrap; +} + +.dark .badge-live { + color: #34d399; +} + +.badge-live.badge-indigo { color: #4338ca; background: rgba(99, 102, 241, 0.12); border-color: rgba(99, 102, 241, 0.35); } +.badge-live.badge-green { color: #047857; background: rgba(16, 185, 129, 0.12); border-color: rgba(16, 185, 129, 0.35); } +.badge-live.badge-purple { color: #7e22ce; background: rgba(168, 85, 247, 0.12); border-color: rgba(168, 85, 247, 0.35); } +.badge-live.badge-blue { color: #1d4ed8; background: rgba(59, 130, 246, 0.12); border-color: rgba(59, 130, 246, 0.35); } +.badge-live.badge-amber { color: #b45309; background: rgba(245, 158, 11, 0.12); border-color: rgba(245, 158, 11, 0.35); } +.badge-live.badge-pink { color: #be185d; background: rgba(236, 72, 153, 0.12); border-color: rgba(236, 72, 153, 0.35); } + +.dark .badge-live.badge-indigo { color: #a5b4fc; } +.dark .badge-live.badge-green { color: #34d399; } +.dark .badge-live.badge-purple { color: #d8b4fe; } +.dark .badge-live.badge-blue { color: #93c5fd; } +.dark .badge-live.badge-amber { color: #fcd34d; } +.dark .badge-live.badge-pink { color: #f9a8d4; } diff --git a/README.md b/README.md index 0506259..95b17b1 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ # 📖 DevDeskApp Documentation Portal -> Official documentation for the **DevDeskApp** platform, 350+ developer utilities, and the **`n8n-nodes-devdeskapp`** community node. +> Official documentation for the **DevDeskApp** platform (340+ browser-based developer tools) and the **`n8n-nodes-devdeskapp`** community node.
[![Live Documentation](https://img.shields.io/badge/docs-docs.devdeskapp.com-6366f1?style=for-the-badge&logo=googlechrome&logoColor=white)](https://docs.devdeskapp.com) [![NPM Package](https://img.shields.io/npm/v/n8n-nodes-devdeskapp?color=ea4b71&style=for-the-badge&logo=npm)](https://www.npmjs.com/package/n8n-nodes-devdeskapp) -[![n8n Template #21017](https://img.shields.io/badge/n8n.io-Template_%2321017-10b981?style=for-the-badge&logo=n8n&logoColor=white)](https://n8n.io/workflows/21017-format-json-and-secure-hr-payloads-with-devdeskapp-utilities) -[![n8n Template #21130](https://img.shields.io/badge/n8n.io-Template_%2321130-3b82f6?style=for-the-badge&logo=n8n&logoColor=white)](https://n8n.io/workflows/21130-automate-salary-and-in-hand-ctc-calculations-with-devdeskapp) +[![n8n Template #21017](https://img.shields.io/badge/n8n.io-Template_%2321017-10b981?style=for-the-badge&logo=n8n&logoColor=white)](https://n8n.io/workflows/21017-format-json-and-secure-hr-payloads-with-devdeskapp-utilities/) +[![n8n Template #21130](https://img.shields.io/badge/n8n.io-Template_%2321130-3b82f6?style=for-the-badge&logo=n8n&logoColor=white)](https://n8n.io/workflows/21130-generate-indian-ctc-offers-and-payroll-breakdowns-with-devdeskapp/) [![License: MIT](https://img.shields.io/badge/License-MIT-purple?style=for-the-badge)](LICENSE)
@@ -16,98 +16,105 @@ ## 🌟 What is DevDeskApp? -DevDeskApp is a modern, privacy-first developer ecosystem designed to eliminate sensitive data leaks: - -1. **[DevDeskApp Web](https://www.devdeskapp.com/)**: Over 350+ browser-based utilities (JSON formatters, regex testers, cryptography tools, and CTC calculators) operating 100% client-side with zero external server tracking. -2. **[`n8n-nodes-devdeskapp`](https://www.npmjs.com/package/n8n-nodes-devdeskapp)**: Official n8n community node providing deterministic, in-memory execution in **< 0.2ms** with **zero cloud API exfiltration**. -3. **AI Agent Tool Calling**: Deterministic local function calling tools for LangChain, OpenAI, Google Gemini, Anthropic Claude, and Ollama agents inside n8n workflows. +1. **[DevDeskApp Web](https://www.devdeskapp.com/)**: 340+ browser-based tools (JSON formatters, hash generators, encoders, CTC and HR calculators) that process your input in the browser. +2. **[`n8n-nodes-devdeskapp`](https://www.npmjs.com/package/n8n-nodes-devdeskapp)**: an n8n community node with 19 operations that run inside your n8n process with no external API calls. +3. **AI Agent tools**: the node declares `usableAsTool: true`, so n8n AI Agents can call it for exact salary maths, hashes and JSON formatting. --- -## 📑 Documentation Structure +## 📑 Documentation structure -The documentation portal is built with **VitePress 1.6+** and structured into 5 core pillars: +Built with **VitePress 1.6**: | Section | Route | Description | | :--- | :--- | :--- | -| **DevDeskApp Suite** | [`/about/`](https://docs.devdeskapp.com/about/) | Platform mission, zero-leak architecture, and privacy model. | -| **n8n Node Guide** | [`/n8n/`](https://docs.devdeskapp.com/n8n/) | UI installation, Docker deployment, and operational concepts. | -| **Templates Hub** | [`/templates/`](https://docs.devdeskapp.com/templates/) | Central catalog of official blueprints, parameter schemas, and 1-click import guides. | -| **AI Agents & LLMs** | [`/solutions/ai-agents`](https://docs.devdeskapp.com/solutions/ai-agents) | Connecting in-memory tools to AI Agents for hallucination-free payroll math and hashing. | -| **Enterprise Solutions** | [`/solutions/`](https://docs.devdeskapp.com/solutions/) | Benchmarks, concurrency limits, and native Node vs REST API latency comparisons. | +| **DevDeskApp Suite** | [`/about/`](https://docs.devdeskapp.com/about/) | Platform, architecture and privacy model | +| **n8n Node Guide** | [`/n8n/`](https://docs.devdeskapp.com/n8n/) | Installation, Docker and the operations reference | +| **Templates Hub** | [`/templates/`](https://docs.devdeskapp.com/templates/) | The 7 published n8n templates and the import guide | +| **AI Agents & LLMs** | [`/solutions/ai-agents`](https://docs.devdeskapp.com/solutions/ai-agents) | Using the node as an AI Agent tool | +| **Enterprise Solutions** | [`/solutions/`](https://docs.devdeskapp.com/solutions/) | Local node vs cloud API, with measured timings | --- -## 📋 Official n8n Workflow Templates - -We provide verified, production-ready n8n blueprints published directly on the **n8n.io Creator Portal**: +## 📋 Published n8n templates -- **🌟 [Template #21017: Developer Suite & Security Engine](https://n8n.io/workflows/21017-format-json-and-secure-hr-payloads-with-devdeskapp-utilities)** - - Sequential pipeline: JSON prettification, SHA-256 cryptographic hashing, RFC 4122 v4 UUID tracing, SEO slug generation, and CTC salary breakdown. - - [Read Detailed Blueprint Guide →](https://docs.devdeskapp.com/templates/developer-suite) - -- **💰 [Template #21130: CTC to In-Hand Salary Engine](https://n8n.io/workflows/21130-automate-salary-and-in-hand-ctc-calculations-with-devdeskapp)** - - Automated compensation modeling: Indian statutory PF calculation (12%), Professional Tax (PT), HRA allowance, and take-home salary projections. - - [Read Detailed Blueprint Guide →](https://docs.devdeskapp.com/templates/ctc-salary-engine) +| ID | Template | Docs | +| :--- | :--- | :--- | +| #21017 | [Developer Suite & Security Engine](https://n8n.io/workflows/21017-format-json-and-secure-hr-payloads-with-devdeskapp-utilities/) | [Guide](https://docs.devdeskapp.com/templates/developer-suite) | +| #21130 | [CTC to In-Hand Salary Engine](https://n8n.io/workflows/21130-generate-indian-ctc-offers-and-payroll-breakdowns-with-devdeskapp/) | [Guide](https://docs.devdeskapp.com/templates/ctc-salary-engine) | +| #21376 | [Payment Webhook Sanitizer](https://n8n.io/workflows/21376-sanitize-and-audit-payment-webhooks-with-devdeskapp-json-and-crypto-tools/) | [Guide](https://docs.devdeskapp.com/templates/payment-webhook-sanitizer) | +| #21593 | [AI LLM JSON into Postgres](https://n8n.io/workflows/21593-sanitize-and-ingest-ai-llm-json-into-postgres-with-devdeskapp-and-slack/) | [Guide](https://docs.devdeskapp.com/templates/ai-llm-postgres-ingest) | +| #21594 | [CTC Offer Letter Generator](https://n8n.io/workflows/21594-generate-indian-ctc-offer-letters-with-devdeskapp-google-docs-gmail-and-slack/) | [Guide](https://docs.devdeskapp.com/templates/offer-letter-generator) | +| #21595 | [Meta CAPI Lead Sync](https://n8n.io/workflows/21595-hash-and-sync-leads-to-meta-capi-with-devdeskapp-google-sheets-and-slack/) | [Guide](https://docs.devdeskapp.com/templates/meta-capi-lead-sync) | +| #21596 | [Notion to WordPress Publisher](https://n8n.io/workflows/21596-publish-seo-safe-notion-blog-posts-to-wordpress-with-devdeskapp-and-slack/) | [Guide](https://docs.devdeskapp.com/templates/notion-wordpress-publisher) | --- -## ⚙️ 10 Native Operations Reference +## ⚙️ 19 operations in 5 resources -`n8n-nodes-devdeskapp` provides 10 high-speed operations out of the box: +| Resource | Operations | +| :--- | :--- | +| **JSON** (`json`) | `prettify`, `minify`, `validate` | +| **Crypto** (`crypto`) | `hash` (md5, sha1, sha256, sha512), `base64Encode`, `base64Decode`, `uuid` | +| **Text** (`text`) | `slugify`, `caseConverter` (camelCase, kebabCase, lowerCase, pascalCase, snakeCase, upperCase), `urlEncode`, `urlDecode` | +| **Calculator** (`calculator`) | `ctcToInHand` | +| **E-commerce** (`ecommerce`) | `catalogMapper`, `upiQr`, `gstJsonToTable`, `profitCalculator`, `shippingLabelCrop`, `webhookVerifier`, `whatsappPayload` | -1. **`jsonPrettifier`**: Minify or format JSON with customizable indentation. -2. **`hashGenerator`**: Compute SHA-256, SHA-512, MD5, and SHA-1 cryptographic digests. -3. **`ctcCalculator`**: Indian statutory payroll engine (basic, HRA, PF, PT, and net monthly in-hand). -4. **`slugGenerator`**: SEO-friendly URL slug generation with multi-language transliteration. -5. **`base64Converter`**: Fast UTF-8 string encoding and decoding. -6. **`urlEncoder`**: Safe percent-encoding / decoding of query parameters. -7. **`uuidGenerator`**: Cryptographically secure RFC 4122 Version 4 UUIDs. -8. **`caseConverter`**: CamelCase, snake_case, kebab-case, and PascalCase transformations. -9. **`markdownToHtml`**: Sanitized Markdown rendering to HTML. -10. **`jwtDecoder`**: Header and payload claim inspection without signature verification. +Full parameters and real outputs: [Operations Reference](https://docs.devdeskapp.com/n8n/operations). --- -## ⚡ Quick Node Installation +## ⚡ Quick node installation -### In n8n Community Nodes UI: -1. In your n8n workspace: **Settings** → **Community Nodes** → **Install**. -2. Enter package name: - ```text - n8n-nodes-devdeskapp - ``` -3. Agree to the risks and click **Install**. +### In the n8n UI +1. **Settings** → **Community Nodes** → **Install**. +2. Enter `n8n-nodes-devdeskapp`. +3. Tick the risk acknowledgement and click **Install**. -### Via Docker / CLI: +### Manually (self-hosted) ```bash +mkdir -p ~/.n8n/nodes && cd ~/.n8n/nodes npm install n8n-nodes-devdeskapp +# then restart n8n ``` --- -## 🤖 Machine-Readable AI Endpoints +## 🛠️ Working on these docs -For AI crawlers, LLMs, and autonomous agents, this documentation exposes clean markdown and context endpoints: +```bash +npm install +npm run docs:dev # local preview at http://localhost:5173 +npm run docs:build # production build into .vitepress/dist +``` -- **LLMs Index**: [`https://docs.devdeskapp.com/llms.txt`](https://docs.devdeskapp.com/llms.txt) -- **Comprehensive Full Context**: [`https://docs.devdeskapp.com/llms-full.txt`](https://docs.devdeskapp.com/llms-full.txt) +Figures in `src/public/images/fig-*.png` are generated with the DevDeskApp light palette: + +```bash +python -I scripts/doc-images/generate.py # all figures +python -I scripts/doc-images/generate.py node-prettify ctc-output # selected figures +``` + +The generator needs Python, Playwright and a local Chrome install. Source screenshots for the framed figures are in `scripts/doc-images/raw/`. --- -## 🔗 Official Ecosystem Links +## 🤖 Machine-readable endpoints -- **Documentation Portal**: [https://docs.devdeskapp.com](https://docs.devdeskapp.com) -- **Web Platform**: [https://www.devdeskapp.com](https://www.devdeskapp.com) -- **Node NPM Package**: [https://www.npmjs.com/package/n8n-nodes-devdeskapp](https://www.npmjs.com/package/n8n-nodes-devdeskapp) -- **Node Source Code**: [https://github.com/DevdeskApp/n8n-nodes-devdeskapp](https://github.com/DevdeskApp/n8n-nodes-devdeskapp) -- **Template #21017**: [n8n.io/workflows/21017](https://n8n.io/workflows/21017-format-json-and-secure-hr-payloads-with-devdeskapp-utilities) -- **Template #21130**: [n8n.io/workflows/21130](https://n8n.io/workflows/21130-automate-salary-and-in-hand-ctc-calculations-with-devdeskapp) +- **LLMs index**: [`https://docs.devdeskapp.com/llms.txt`](https://docs.devdeskapp.com/llms.txt) +- **Full context**: [`https://docs.devdeskapp.com/llms-full.txt`](https://docs.devdeskapp.com/llms-full.txt) --- -## 📄 License +## 🔗 Links + +- **Documentation**: [https://docs.devdeskapp.com](https://docs.devdeskapp.com) +- **Web platform**: [https://www.devdeskapp.com](https://www.devdeskapp.com) +- **npm package**: [https://www.npmjs.com/package/n8n-nodes-devdeskapp](https://www.npmjs.com/package/n8n-nodes-devdeskapp) +- **Node source code**: [https://github.com/DevdeskApp/n8n-nodes-devdeskapp](https://github.com/DevdeskApp/n8n-nodes-devdeskapp) -Distributed under the **MIT License**. See [LICENSE](LICENSE) for more information. +--- + +## 📄 License -Copyright © 2026 [DevDeskApp Community](https://github.com/DevdeskApp). All rights reserved. +Distributed under the **MIT License**. See [LICENSE](LICENSE). diff --git a/scripts/doc-images/generate.py b/scripts/doc-images/generate.py new file mode 100644 index 0000000..24800a7 --- /dev/null +++ b/scripts/doc-images/generate.py @@ -0,0 +1,515 @@ +"""Regenerate the DevDeskApp docs figures (src/public/images/fig-*.png). + +Every value shown in these figures was produced by running the compiled +n8n-nodes-devdeskapp v0.1.6 node (and by simulating the published n8n.io templates), +so the figures match what the node really outputs. UUIDs are random per run. + +Usage (from the docs repo root): + python scripts/doc-images/generate.py # all figures + python scripts/doc-images/generate.py ctc-output # one figure by key + +Needs: pip install playwright pillow, plus Google Chrome (rendered via channel="chrome"). +""" +from __future__ import annotations + +import base64 +import html +import json +import re +import sys +from pathlib import Path + +from PIL import Image +from playwright.sync_api import sync_playwright + +ROOT = Path(__file__).resolve().parents[2] +PUBLIC = ROOT / "src" / "public" +OUT = PUBLIC / "images" +RAW = Path(__file__).resolve().parent / "raw" # untouched n8n screenshots used by the framed figures +LOGO = "data:image/svg+xml;base64," + base64.b64encode((PUBLIC / "logo.svg").read_bytes()).decode() +NODE_VERSION = "v0.1.6" + +# DevDeskApp brand tokens (devdesk-app/src/themes.ts + .vitepress/theme/custom.css) +CSS = """ +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;600&display=swap'); +:root{--bg:#f8fafc;--surface:#ffffff;--soft:#f1f5f9;--border:#e2e8f0;--t1:#0f172a;--t2:#475569;--t3:#64748b;--t4:#94a3b8; +--b1:#6366f1;--b2:#818cf8;--b3:#4f46e5;--pur:#a855f7;--pink:#ec4899;--em:#10b981;--amb:#f59e0b;--blue:#3b82f6;--red:#ef4444; +--mono:'JetBrains Mono',Consolas,'Courier New',monospace} +*{box-sizing:border-box} +body{margin:0;background:#f8fafc;font-family:Inter,'Segoe UI',system-ui,sans-serif;color:var(--t1)} +code{font-family:var(--mono);color:#4f46e5;font-size:.92em} +.fig{width:1600px;padding:26px 40px 30px;position:relative;overflow:hidden; + background:radial-gradient(1000px 460px at 92% -12%,rgba(236,72,153,.10),transparent 62%), + radial-gradient(900px 520px at -8% 112%,rgba(99,102,241,.12),transparent 62%), + radial-gradient(700px 400px at 50% 40%,rgba(168,85,247,.05),transparent 70%),#f8fafc} +.fig::before{content:'';position:absolute;left:0;right:0;top:0;height:4px;background:linear-gradient(90deg,#6366f1,#a855f7,#ec4899)} +.hdr{display:flex;align-items:center;gap:14px} +.dots{display:flex;gap:8px;margin-right:6px}.dots i{width:13px;height:13px;border-radius:50%;display:block} +.logo{width:38px;height:38px;border-radius:10px;box-shadow:0 2px 6px rgba(15,23,42,.12)} +.title{font-size:27px;font-weight:800;letter-spacing:-.01em;color:#0f172a} +.title .brand{background:linear-gradient(90deg,#6366f1,#a855f7);-webkit-background-clip:text;color:transparent} +.title .sep{color:#cbd5e1;margin:0 10px;font-weight:600} +.pill{margin-left:auto;font-size:15px;font-weight:700;padding:8px 16px;border-radius:999px;white-space:nowrap} +.pill.green{background:#ecfdf5;color:#047857;border:1px solid #a7f3d0} +.pill.indigo{background:#eef2ff;color:#4338ca;border:1px solid #c7d2fe} +.pill.amber{background:#fffbeb;color:#b45309;border:1px solid #fde68a} +.sub{color:var(--t2);font-size:17px;margin:12px 0 20px} +.stage{border:1px solid #e0e7ff;border-radius:20px;background:#ffffff;padding:28px;box-shadow:0 10px 40px -12px rgba(99,102,241,.18),0 2px 6px rgba(15,23,42,.04)} +.foot{display:flex;justify-content:space-between;color:var(--t4);font-size:14px;margin-top:14px} +.row{display:flex;gap:20px;align-items:stretch} +.col{display:flex;flex-direction:column;gap:14px} +.panel{background:#f8fafc;border:1px solid var(--border);border-radius:14px;padding:18px 20px} +.ptitle{font-size:13px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--t3);margin-bottom:12px;display:flex;align-items:center;gap:8px} +.ok{color:#059669} +.field{margin-bottom:14px}.flabel{font-size:14px;color:var(--t2);margin-bottom:6px;font-weight:600} +.fval{background:#ffffff;border:1px solid var(--border);border-radius:9px;padding:10px 12px;font-size:16px;color:var(--t1);display:flex;justify-content:space-between;align-items:center} +.fval.expr{font-family:var(--mono);font-size:14px;color:#4f46e5;background:#f5f3ff;border-color:#ddd6fe} +.fval .chev{color:var(--t4)} +.hint{font-family:var(--mono);font-size:13px;color:var(--t3);margin-top:5px} +pre.json{margin:0;font-family:var(--mono);font-size:15px;line-height:1.55;color:#334155;white-space:pre-wrap;word-break:break-all} +.k{color:#4f46e5}.s{color:#047857}.n{color:#b45309}.b{color:#be185d}.p{color:#64748b} +.node{background:#ffffff;border:1px solid var(--border);border-radius:14px;padding:14px 16px;display:flex;gap:12px;align-items:center;position:relative;min-width:0;box-shadow:0 1px 3px rgba(15,23,42,.06)} +.node.dd{border:1.5px solid #a5b4fc;background:linear-gradient(135deg,#eef2ff,#ffffff 70%)} +.node .ic{width:44px;height:44px;border-radius:11px;flex:none;display:grid;place-items:center;font-size:22px;font-weight:800} +.node .ic img{width:44px;height:44px;border-radius:11px} +.node .nm{font-size:16px;font-weight:700;line-height:1.25;color:#0f172a} +.node .op{font-family:var(--mono);font-size:13px;color:var(--t3);margin-top:3px} +.node .val{font-family:var(--mono);font-size:12.5px;color:#047857;margin-top:5px;word-break:break-all} +.node .chk{position:absolute;right:-8px;bottom:-8px;width:24px;height:24px;border-radius:50%;background:#10b981;color:#ffffff;display:grid;place-items:center;font-size:14px;font-weight:900;border:2px solid #ffffff} +.arrow{flex:none;display:flex;align-items:center;justify-content:center;color:#6366f1;font-size:26px;font-weight:800;width:34px} +.slabel{font-size:13px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;margin-bottom:10px} +.lane{border-radius:14px;padding:14px;border:1px dashed var(--border)} +.tag{display:inline-block;font-size:12px;font-weight:700;padding:3px 9px;border-radius:999px} +.kv{display:grid;grid-template-columns:auto 1fr;gap:6px 16px;font-size:16px} +.kv .kk{color:var(--t3)}.kv .vv{font-family:var(--mono);color:var(--t1);text-align:right} +""" + +ICONS = { + "trigger": ("⚡", "#f59e0b"), "webhook": ("⇄", "#a855f7"), "code": ("{ }", "#fb923c"), "if": ("⑂", "#10b981"), + "slack": ("#", "#ec4899"), "pg": ("DB", "#3b82f6"), "http": ("↗", "#38bdf8"), "sheets": ("▦", "#10b981"), + "docs": ("▤", "#3b82f6"), "gmail": ("✉", "#ef4444"), "wp": ("W", "#38bdf8"), "notion": ("N", "#cbd5e1"), + "chat": ("💬", "#a855f7"), "agent": ("✦", "#818cf8"), "model": ("◎", "#38bdf8"), "memory": ("◫", "#94a3b8"), + "out": ("✓", "#10b981"), +} + + +def esc(s: object) -> str: + return html.escape(str(s)) + + +def json_html(obj) -> str: + text = obj if isinstance(obj, str) else json.dumps(obj, indent=2, ensure_ascii=False) + text = esc(text) + text = re.sub(r'("[^&]*?")(\s*:)', r'\1\2', text) + text = re.sub(r'(:\s*)(".*?")', r'\1\2', text) + text = re.sub(r'(:\s*)(-?\d+(?:\.\d+)?)', r'\1\2', text) + text = re.sub(r'(:\s*)(true|false|null)', r'\1\2', text) + text = re.sub(r'^(\s*)(".*?")(,?)$', r'\1\2\3', text, flags=re.M) + return f'
{text}
' + + +def node(name, op="", kind="dd", val="", check=False, style=""): + if kind == "dd": + ic = f'
' + else: + g, c = ICONS[kind] + ic = f'
{g}
' + body = f'
{esc(name)}
' + if op: + body += f'
{esc(op)}
' + if val: + body += f'
{esc(val)}
' + body += "
" + chk = '
✓
' if check else "" + return f'
{ic}{body}{chk}
' + + +def arrow(ch="→"): + return f'
{ch}
' + + +def frame(title, sub, body, pill="n8n-nodes-devdeskapp " + NODE_VERSION, pill_tone="indigo", foot_left=""): + return f"""
+
+
DevDeskApp|{esc(title)}
+
{esc(pill)}
+
{sub}
+
{body}
+
{foot_left}docs.devdeskapp.com
""" + + +def stage_col(label, color, inner, width=None): + w = f"width:{width}px;flex:none;" if width else "flex:1;" + return (f'
{esc(label)}
' + f'
{inner}
') + + +def flow(columns, branches=None): + """columns: list of (label, color, [node html], width). branches: list of (label, color, [node html]) drawn as full-width lanes below.""" + parts = [] + for i, (label, color, nodes, width) in enumerate(columns): + if i: + parts.append(arrow()) + parts.append(stage_col(label, color, "".join(nodes), width)) + out = f'
{"".join(parts)}
' + if branches: + lanes = "" + for label, color, nodes in branches: + inner = "".join(n if j == 0 else arrow() + n for j, n in enumerate(nodes)) + lanes += (f'
' + f'
If {esc(label)} →
' + f'
{inner}
') + out += f'
{lanes}
' + return out + + +def raw_img(name, crop, masks=()): + """Crop a raw n8n screenshot (optionally painting over UI noise boxes) and return it as a data URI.""" + src = RAW / name + tmp = RAW / f"_crop_{name}" + im = Image.open(src).convert("RGB") + # masks: (box, dx, dy) -> replace box with the same-size patch offset by (dx, dy), keeping the canvas texture + for box, dx, dy in masks: + patch = im.crop((box[0] + dx, box[1] + dy, box[2] + dx, box[3] + dy)) + im.paste(patch, box[:2]) + im.crop(crop).save(tmp) + return "data:image/png;base64," + base64.b64encode(tmp.read_bytes()).decode() + + +# ---------------------------------------------------------------- figures + +def fig_node_prettify(): + out = {"formatted": "{\n \"status\": \"ok\",\n \"code\": 200\n}", "success": True} + body = f"""
+
Input · 1 item
{json_html({"rawJson": '{"status":"ok","code":200}'})}
+
Parameters
+
Resource
JSON Utility ⌄
+
Operation
Prettify / Format ⌄
+
JSON Input
{{{{ $json.rawJson }}}}
→ {{"status":"ok","code":200}}
+
Indentation
2 Spaces ⌄
+
✓ Output · 1 item
{json_html(out)} +
formatted (rendered)
{json_html('{\n "status": "ok",\n "code": 200\n}')}
""" + return frame("Test one node: JSON Utility → Prettify", "Input, parameters and the real output of a single DevDeskApp node test step.", body) + + +def fig_ctc_parameters(): + steps = [ + ("Monthly basic", "18,00,000 × 50% ÷ 12", "₹75,000"), + ("Employee PF", "min(12% of basic, ₹1,800)", "₹1,800"), + ("Employer PF", "same as employee PF", "₹1,800"), + ("Monthly gross", "(CTC − 12 × employer PF) ÷ 12", "₹1,48,200"), + ("Estimated TDS", "new regime slabs, ₹75,000 std. deduction", "₹18,125"), + ("Professional tax", "flat", "₹200"), + ("Monthly in-hand", "gross − PF − PT − TDS", "₹1,28,075"), + ] + rows = "".join( + f'
' + f'
{esc(a)}
{esc(b)}
' + f'
{esc(c)}
' + for i, (a, b, c) in enumerate(steps)) + body = f"""
+
Parameters
+
Resource
HR & Calculator ⌄
+
Operation
CTC to In-Hand Salary ⌄
+
Annual CTC
{{{{ $('Sample Candidate Selection Ingest').item.json.annualCtc }}}}
→ 1800000
+
Basic Salary Percentage
{{{{ $('Sample Candidate Selection Ingest').item.json.basicPercentage }}}}
→ 50 (default 50)
+
How the node calculates it · ₹18,00,000 CTC
{rows}
""" + return frame("CTC to In-Hand Salary: parameters", "The two inputs the HR & Calculator resource takes, and the formula the node applies to them.", + body, pill="Template #21130", pill_tone="green") + + +def fig_ctc_output(): + gross = 148200 + segs = [("Monthly in-hand", 128075, "#059669"), ("Employee PF", 1800, "#6366f1"), + ("Professional tax", 200, "#ec4899"), ("Estimated TDS", 18125, "#d97706")] + bar = "" + for i, (label, v, c) in enumerate(segs): + w = v / gross * 100 + radius = "border-radius:4px 0 0 4px;" if i == 0 else ("border-radius:0 4px 4px 0;" if i == len(segs) - 1 else "") + bar += f'
' + legend = "".join( + f'
' + f'{esc(l)}₹{v:,.0f}' + f'{v / gross * 100:.1f}%
' + for l, v, c in segs).replace("₹128,075", "₹1,28,075").replace("₹18,125", "₹18,125") + out = {"annualCtc": 1800000, "monthlyGross": 148200, "monthlyInHand": 128075, + "breakdown": {"monthlyBasic": 75000, "employeePf": 1800, "employerPf": 1800, "professionalTax": 200, "estimatedMonthlyTds": 18125}, + "taxRegime": "India Standard / New Tax Benchmark", "reference": "https://www.devdeskapp.com/ctc-to-in-hand-calculator"} + body = f"""
+
Where the ₹1,48,200 monthly gross goes
+
{bar}
+
{legend}
+
+Employer PF (₹1,800) is part of CTC but not of gross, so it is not in this bar. TDS is an estimate on the new regime; the node does not model HRA, exemptions or the old regime.
+
✓ Output · 1 item
{json_html(out)}
""" + return frame("CTC to In-Hand Salary: output", "Real output of the HR & Calculator node for a ₹18,00,000 annual CTC with 50% basic.", + body, pill="Template #21130", pill_tone="green") + + +def fig_suite_executed(): + a = [node("Manual Run (Instant Test)", "manualTrigger", "trigger", check=True), + node("Sample Developer & HR Payload", "code", "code", "rawMinifiedApiData, annualCtc", True), + node("DevDeskApp: JSON Prettifier", "json · prettify", val="formatted: {\\n \"service\": …", check=True), + node("DevDeskApp: SHA-256 Digest", "crypto · hash (sha256)", val="f7e61312d64a…41620df", check=True)] + b = [node("DevDeskApp: UUID Generator", "crypto · uuid", val="5ad52af6-8b62-48a0-…", check=True), + node("DevDeskApp: Slugifier", "text · slugify", val="rahul-verma-principal-cloud-architect", check=True), + node("DevDeskApp: CTC Calculator", "calculator · ctcToInHand", val="monthlyInHand: 163075", check=True), + node("Consolidated Final Output", "code", "code", "VERIFIED_AND_PROCESSED", True)] + r1 = "".join(n if i == 0 else arrow() + n for i, n in enumerate(a)) + r2 = "".join(n if i == 0 else arrow() + n for i, n in enumerate(b)) + grid = "grid-template-columns:1fr 34px 1fr 34px 1fr 34px 1fr" + body = f"""
{r1}
+
↓
+
{''.join(f'
{x}
' for x in [b[3], arrow('←'), b[2], arrow('←'), b[1], arrow('←'), b[0]])}
+
+8 / 8 nodes succeeded1 item per node, pairedItem kept +0 external HTTP calls from DevDeskApp nodes
""" + _ = r2 + return frame("Template #21017 executed", "Every node of the Developer Suite after one test run, with the key value each DevDeskApp node returned.", + body, pill="Template #21017", pill_tone="green") + + +def fig_suite_output(): + meta = {"meta": {"traceId": "5ad52af6-8b62-48a0-b934-7a82c4ab3eb1", + "sha256PayloadHash": "f7e61312d64a6fefb8ff2dcc4ccc957e7204a229c04647fffba674aed41620df", + "candidateFileSlug": "rahul-verma-principal-cloud-architect", "status": "VERIFIED_AND_PROCESSED", + "poweredBy": "DevDeskApp (https://www.devdeskapp.com)"}} + comp = {"compensationBreakdown": {"annualCtcFormatted": "₹24,00,000", "monthlyGross": "₹1,98,200", "netMonthlyTakeHome": "₹1,63,075", + "taxDeductions": {"monthlyBasic": "₹1,00,000", "employeePf": "₹1,800", "estimatedMonthlyTax": "₹33,125", "professionalTax": "₹200"}}} + fmt = {"formattedJsonResult": {"service": "payment-gateway", "version": 2.4, + "client": {"name": "Rahul Verma", "email": "user@example.com", "plan": "enterprise"}, + "audit": {"ip": "192.168.1.1", "timestamp": 1728950400}}} + body = f"""
+
✓ Consolidated Final Output · meta
{json_html(meta)}
+
formattedJsonResult
{json_html(fmt)}
+
compensationBreakdown
{json_html(comp)}
""" + return frame("Template #21017 output", "The single item the Consolidated Final Output node returns after a test run (traceId changes every run).", + body, pill="Template #21017", pill_tone="green") + + +def fig_ai_agent(): + left = f"""
+
{node("When chat message received", "chatTrigger", "chat")}{arrow()}{node("AI Agent", "tools agent", "agent", style="flex:1.2")}{arrow()}{node("Chat reply", "", "out")}
+
+
Chat Model *
{node("Any n8n chat model", "OpenAI, Anthropic, Gemini, Ollama…", "model")}
+
Memory
{node("Optional", "Simple Memory", "memory")}
+
Tool
{node("DevDeskApp Tool", "calculator · ctcToInHand", style="box-shadow:0 0 0 4px rgba(99,102,241,.18)")}
+
The DevDeskApp node sets usableAsTool: true, so it can be attached to the agent's Tool port. The model fills the parameters; the node computes the answer in the n8n process.
""" + conv = f"""
One agent turn
+
User
What is the monthly in-hand pay for a ₹24,00,000 CTC?
+
Tool call → DevDeskApp
{json_html({"annualCtc": 2400000, "basicPercentage": 50})} +
Tool result
{json_html({"monthlyGross": 198200, "monthlyInHand": 163075, "breakdown": {"employeePf": 1800, "professionalTax": 200, "estimatedMonthlyTds": 33125}})} +
Agent
About ₹1,63,075 a month after ₹1,800 PF, ₹200 professional tax and ~₹33,125 estimated TDS.
""" + return frame("AI Agent with DevDeskApp as a tool", "Chat trigger, AI Agent and the DevDeskApp node on the Tool port. The numbers are the node's real output for ₹24,00,000.", + f'
{left}{conv}
') + + +OPS = [ + ("JSON Utility", "json", "#6366f1", [("Prettify / Format", "prettify"), ("Minify", "minify"), ("Validate", "validate")]), + ("Crypto & Hash", "crypto", "#a855f7", [("Hash (MD5 / SHA-1 / SHA-256 / SHA-512)", "hash"), ("Base64 Encode", "base64Encode"), ("Base64 Decode", "base64Decode"), ("UUID V4", "uuid")]), + ("Text & String", "text", "#ec4899", [("Slugify String", "slugify"), ("Case Converter", "caseConverter"), ("URL Encode", "urlEncode"), ("URL Decode", "urlDecode")]), + ("HR & Calculator", "calculator", "#10b981", [("CTC to In-Hand Salary", "ctcToInHand")]), + ("E-Commerce & FinTech", "ecommerce", "#f59e0b", [("Catalog Schema Mapper", "catalogMapper"), ("Dynamic UPI QR & URI", "upiQr"), ("GST JSON to Tabular Data", "gstJsonToTable"), + ("Profit Margin & ROAS Calculator", "profitCalculator"), ("Shipping Label Cropper Coordinates", "shippingLabelCrop"), + ("Webhook Signature Verifier", "webhookVerifier"), ("WhatsApp Interactive Payload", "whatsappPayload")]), +] + + +def fig_operations_map(): + cards = "" + for name, value, color, ops in OPS: + items = "".join(f'
' + f'{esc(a)}{esc(b)}
' for a, b in ops) + cards += (f'
' + f'
{esc(name)}
{len(ops)}
' + f'
resource: {value}
{items}
') + body = f'
{cards}
' + return frame("5 resources, 19 operations", "Everything the DevDeskApp node can do, with the internal resource and operation values used in workflow JSON.", body) + + +def fig_architecture(): + body = f"""
+
+
Your browser
+
{node("You paste input", "JSON, a secret, a salary figure", "chat")} +
↓
{node("DevDeskApp Web tool", "340+ tools · JavaScript in the tab", style="")} +
↓
{node("Result on screen", "nothing posted to a server for processing", "out")}
+
+
Your n8n instance (container / process)
+
{node("Previous node", "items in", "webhook", style="flex:1")}{arrow()}{node("DevDeskApp node", "in-process · Node.js crypto", style="flex:1.3")}{arrow()}{node("Next node", "items + pairedItem", "code", style="flex:1")}
+
+
No credentials or API keys
No outbound HTTP from the node
Deterministic: same input, same output
+
+
⊘
Third-party utility APIs
online formatters, hash or payroll APIs: not called
""" + return frame("Where your data is processed", "DevDeskApp Web runs in your browser tab; the n8n node runs inside your own n8n process. Neither sends payloads to a DevDeskApp server.", body) + + +def fig_local_vs_cloud(): + bench = [("CTC to In-Hand", 12.56), ("JSON Prettify", 22.63), ("Slugify", 40.7), ("SHA-256 Hash", 46.45)] + mx = 50 + bars = "".join( + f'
{esc(n)}' + f'
' + f'{v:.1f} ms
' for n, v in bench) + body = f"""
+
Measured: 10,000 items through one DevDeskApp node
{bars} +
Node logic only, compiled {NODE_VERSION} on Node.js 24 (one laptop run). That is 0.001–0.005 ms per item; n8n's own per-node overhead comes on top.
+
+
Local DevDeskApp node
12–47 ms
for 10,000 items, no network, no API key
+
Cloud utility API (illustration)
≈ 25 min
10,000 sequential calls at an assumed 150 ms round trip, before rate limits
""" + return frame("Local node vs cloud API", "What 10,000 items cost in time when the work happens in the n8n process instead of over HTTP.", body) + + +def fig_import_steps(): + def step(n, title, lines, color): + li = "".join(f'
{x}
' for x in lines) + return (f'
' + f'
{n}
' + f'
{title}
{li}
') + body = f"""
+{step(1, "Install the node", ["Settings → Community nodes", "Install a community node", "n8n-nodes-devdeskapp → tick the risk box → Install"], "#6366f1")}{arrow()} +{step(2, "Get the template", ["Open the template on n8n.io", "Click Use for free", "Copy the workflow JSON (or open it in your n8n Cloud workspace)"], "#a855f7")}{arrow()} +{step(3, "Paste and run", ["New workflow → click the canvas", "Ctrl + V / Cmd + V", "Add credentials (Slack, Postgres, Google…) → Test workflow"], "#10b981")}
""" + return frame("Import a template in 3 steps", "The same steps work on n8n Cloud, self-hosted, Docker and desktop, as long as community nodes are enabled.", body) + + +def pipeline(title, sub, pill, columns, branches=None): + return frame(title, sub, flow(columns, branches), pill=pill, pill_tone="green") + + +def fig_flow_21017(): + dd = [node("JSON Prettifier", "json · prettify"), node("SHA-256 Digest", "crypto · hash"), node("UUID Generator", "crypto · uuid"), + node("Slugifier", "text · slugify"), node("CTC Calculator", "calculator · ctcToInHand")] + return pipeline("Template #21017 pipeline", "Developer Suite: one sample payload passes through five DevDeskApp operations in sequence.", "Template #21017", [ + ("Trigger", "#b45309", [node("Manual Run (Instant Test)", "manualTrigger", "trigger")], 300), + ("Sample data", "#c2410c", [node("Sample Developer & HR Payload", "code", "code")], 300), + ("DevDeskApp", "#4f46e5", dd, 360), + ("Result", "#047857", [node("Consolidated Final Output", "code", "code")], 300)]) + + +def fig_flow_21376(): + dd = [node("JSON Prettifier & Validator", "json · prettify"), node("SHA-256 Integrity Hasher", "crypto · hash"), + node("Trace UUID Generator", "crypto · uuid"), node("Audit Slug Normalizer", "text · slugify")] + return pipeline("Template #21376 pipeline", "Payment Webhook Sanitizer: format, fingerprint and tag each payment event, then route it by status.", "Template #21376", [ + ("Ingest", "#b45309", [node("Test workflow", "manualTrigger", "trigger"), node("Production Webhook Trigger", "webhook", "webhook")], 250), + ("DevDeskApp", "#4f46e5", dd, 290), + ("Gate", "#047857", [node("If: Payment Captured & Valid", "if", "if")], 230)], + [("true", "#10b981", [node("Format Security Audit Record", "code", "code"), node("DevOps Security Alert", "slack", "slack")]), + ("false", "#ef4444", [node("Format Security Incident Alert", "code", "code"), node("Flag Suspicious Transaction", "slack", "slack")])]) + + +def fig_flow_21593(): + dd = [node("JSON Prettifier & Schema Validator", "json · prettify"), node("Trace UUID Generator", "crypto · uuid"), node("SHA-256 Integrity Hasher", "crypto · hash")] + return pipeline("Template #21593 pipeline", "AI LLM JSON ingestion: a Code node strips the markdown fences, DevDeskApp formats, tags and hashes, an If node routes the record.", "Template #21593", [ + ("Ingest", "#b45309", [node("Sample Raw LLM Output", "manualTrigger → code", "trigger"), node("AI Agent Webhook / Callback", "webhook", "webhook")], 240), + ("Clean", "#c2410c", [node("Strip Markdown Code Fences", "code", "code")], 220), + ("DevDeskApp", "#4f46e5", dd, 290), + ("Gate", "#047857", [node("If: Valid JSON & Clean Schema", "if", "if")], 210)], + [("true", "#10b981", [node("Format Clean Database Record", "code", "code"), node("Postgres: Insert", "postgres", "pg"), node("Slack: Logged", "slack", "slack")]), + ("false", "#ef4444", [node("Format Schema Error Alert", "code", "code"), node("Slack: Malformed AI JSON", "slack", "slack")])]) + + +def fig_flow_21594(): + dd = [node("Indian CTC-to-In-Hand Engine", "calculator · ctcToInHand"), node("Offer Tracking UUID", "crypto · uuid"), + node("Candidate Slug Generator", "text · slugify"), node("Compensation Checksum Hasher", "crypto · hash")] + return pipeline("Template #21594 pipeline", "CTC offer letters: compute pay, tag and fingerprint the offer, then create the Google Doc, email it and tell HR on Slack.", "Template #21594", [ + ("Ingest", "#b45309", [node("Sample Candidate Ingest", "manualTrigger → code", "trigger"), node("Google Sheets Trigger", "new candidate row", "sheets")], 240), + ("DevDeskApp", "#4f46e5", dd, 300), + ("Gate", "#047857", [node("If: Compensation Valid & Above Minimum", "if", "if")], 230)], + [("true", "#10b981", [node("Format Offer Payload", "code", "code"), node("Google Docs", "create from template", "docs"), node("Gmail", "send", "gmail"), node("Slack", "offer sent", "slack")]), + ("false", "#ef4444", [node("Format HR Compliance Alert", "code", "code"), node("Slack: Flag Invalid Offer", "slack", "slack")])]) + + +def fig_flow_21595(): + dd = [node("Email Lowercase & Clean", "text · caseConverter"), node("SHA-256 Email Privacy Hasher", "crypto · hash"), + node("Event Deduplication UUID", "crypto · uuid"), node("Campaign Tracking Slug", "text · slugify")] + return pipeline("Template #21595 pipeline", "Meta CAPI lead sync: normalise and hash the email, add an event_id, then send only opted-in leads to the Graph API.", "Template #21595", [ + ("Ingest", "#b45309", [node("Sample Inbound Lead", "manualTrigger → code", "trigger"), node("Production Lead Webhook", "webhook", "webhook")], 240), + ("DevDeskApp", "#4f46e5", dd, 290), + ("Gate", "#047857", [node("If: Opted-In & Verified Email", "if", "if")], 220)], + [("true", "#10b981", [node("Format Meta CAPI Payload", "code", "code"), node("Meta Graph API", "HTTP POST /events", "http"), node("Google Sheets", "append lead", "sheets"), node("Slack", "marketing", "slack")]), + ("false", "#ef4444", [node("Format Privacy Exclusion Log", "code", "code"), node("Slack: Lead Excluded", "slack", "slack")])]) + + +def fig_flow_21596(): + dd = [node("URL Slug Normalizer", "text · slugify"), node("Content Fingerprint Hasher", "crypto · hash"), + node("Publication Trace UUID", "crypto · uuid"), node("Meta Title Casing Formatter", "text · caseConverter")] + return pipeline("Template #21596 pipeline", "Notion to WordPress: build the slug, fingerprint the content, tag the release, then publish approved posts and tell the team.", "Template #21596", [ + ("Ingest", "#b45309", [node("Sample Notion Article Draft", "manualTrigger → code", "trigger"), node("Notion Trigger", "article updated", "notion")], 240), + ("DevDeskApp", "#4f46e5", dd, 290), + ("Gate", "#047857", [node("If: Approved & Ready", "if", "if")], 210)], + [("true", "#10b981", [node("Format WordPress Payload", "code", "code"), node("WordPress", "create / update post", "wp"), node("Slack", "article live", "slack")]), + ("false", "#ef4444", [node("Format Editorial Warning", "code", "code"), node("Slack: Editorial Warning", "slack", "slack")])]) + + +def framed_screenshot(raw, crop, title, sub, pill="n8n UI", tone="indigo", masks=()): + uri = raw_img(raw, crop, masks) + body = f'' + return frame(title, sub, body, pill=pill, pill_tone=tone).replace('class="stage"', 'class="stage" style="padding:14px"') + + +FIGURES = { + "node-prettify": fig_node_prettify, + "ctc-parameters": fig_ctc_parameters, + "ctc-output": fig_ctc_output, + "suite-executed": fig_suite_executed, + "suite-output": fig_suite_output, + "ai-agent-tool": fig_ai_agent, + "operations-map": fig_operations_map, + "architecture": fig_architecture, + "local-vs-cloud": fig_local_vs_cloud, + "import-steps": fig_import_steps, + "flow-21017": fig_flow_21017, + "flow-21376": fig_flow_21376, + "flow-21593": fig_flow_21593, + "flow-21594": fig_flow_21594, + "flow-21595": fig_flow_21595, + "flow-21596": fig_flow_21596, + "n8n-community-nodes": lambda: framed_screenshot( + "screen_1_community_nodes.png", (200, 0, 1920, 520), "Settings → Community nodes", + "Open Settings, choose Community nodes and click Install a community node."), + "n8n-install-modal": lambda: framed_screenshot( + "screen_1b_install_modal.png", (560, 260, 1360, 760), "Install community nodes", + "Enter n8n-nodes-devdeskapp, tick the risk confirmation, then click Install."), + "ctc-executed": lambda: framed_screenshot( + "screen_ctc_executed.png", (44, 250, 1920, 1050), "Template #21130 test run", + "All seven nodes succeed with 1 item each; n8n shows Workflow executed successfully.", pill="Template #21130", tone="green"), +} + +# Template canvases: real n8n editor screenshots (inner area of the old dark-framed captures), +# re-framed in the light theme with n8n's "Introducing n8n Agents" promo toast painted out. +CANVASES = { + "canvas-21017": ("screen_2_workflow_canvas.png", "21017", "Format JSON & secure HR payloads", "Integrated stack: DevDeskApp JSON Prettifier · SHA-256 · UUID · Slugifier · CTC Calculator"), + "canvas-21130": ("screen_ctc_canvas.png", "21130", "Indian CTC offers & payroll breakdowns", "Integrated stack: DevDeskApp Slugifier · CTC Calculator · UUID · SHA-256"), + "canvas-21376": ("screen_webhook_sanitizer_canvas.png", "21376", "Sanitize & audit payment webhooks", "Integrated stack: DevDeskApp JSON + crypto tools · Webhook · Slack"), + "canvas-21593": ("screen_ai_llm_canvas.png", "21593", "Sanitize & ingest AI LLM JSON into Postgres", "Integrated stack: DevDeskApp · PostgreSQL · Slack"), + "canvas-21594": ("screen_offer_letter_canvas.png", "21594", "Generate Indian CTC offer letters", "Integrated stack: DevDeskApp · Google Docs · Gmail · Slack"), + "canvas-21595": ("screen_meta_capi_canvas.png", "21595", "Hash & sync leads to Meta CAPI", "Integrated stack: DevDeskApp · Meta Graph API · Google Sheets · Slack"), + "canvas-21596": ("screen_notion_wp_canvas.png", "21596", "Publish SEO-safe Notion posts to WordPress", "Integrated stack: DevDeskApp · Notion · WordPress · Slack"), +} +for _key, (_raw, _id, _title, _sub) in CANVASES.items(): + FIGURES[_key] = (lambda raw=_raw, tid=_id, title=_title, sub=_sub: framed_screenshot( + raw, (22, 92, 1578, 948), title, sub, pill=f"Template #{tid} · live on n8n.io", tone="green", + masks=[((56, 820, 284, 920), 320, 0), ((22, 820, 56, 920), 0, -300)])) + + +def render(keys): + OUT.mkdir(parents=True, exist_ok=True) + with sync_playwright() as p: + browser = p.chromium.launch(channel="chrome") + page = browser.new_page(viewport={"width": 1600, "height": 900}, device_scale_factor=1) + for key in keys: + page.set_content(f"{FIGURES[key]()}", + wait_until="networkidle") + page.evaluate("document.fonts.ready") + target = OUT / f"fig-{key}.png" + page.locator(".fig").screenshot(path=str(target)) + Image.open(target).convert("RGB").save(target, optimize=True) + print("wrote", target.relative_to(ROOT)) + browser.close() + for tmp in RAW.glob("_crop_*"): + tmp.unlink() + + +if __name__ == "__main__": + render(sys.argv[1:] or list(FIGURES)) diff --git a/src/public/images/nodes_tab_status.png b/scripts/doc-images/raw/legacy/nodes_tab_status.png similarity index 100% rename from src/public/images/nodes_tab_status.png rename to scripts/doc-images/raw/legacy/nodes_tab_status.png diff --git a/src/public/images/screen_1_community_nodes.png b/scripts/doc-images/raw/legacy/screen_1_community_nodes.png similarity index 100% rename from src/public/images/screen_1_community_nodes.png rename to scripts/doc-images/raw/legacy/screen_1_community_nodes.png diff --git a/src/public/images/screen_1b_install_modal.png b/scripts/doc-images/raw/legacy/screen_1b_install_modal.png similarity index 100% rename from src/public/images/screen_1b_install_modal.png rename to scripts/doc-images/raw/legacy/screen_1b_install_modal.png diff --git a/scripts/doc-images/raw/legacy/screen_2_workflow_canvas.png b/scripts/doc-images/raw/legacy/screen_2_workflow_canvas.png new file mode 100644 index 0000000..d57ccff Binary files /dev/null and b/scripts/doc-images/raw/legacy/screen_2_workflow_canvas.png differ diff --git a/src/public/images/screen_3_node_drawer.png b/scripts/doc-images/raw/legacy/screen_3_node_drawer.png similarity index 100% rename from src/public/images/screen_3_node_drawer.png rename to scripts/doc-images/raw/legacy/screen_3_node_drawer.png diff --git a/src/public/images/screen_4_workflow_executed.png b/scripts/doc-images/raw/legacy/screen_4_workflow_executed.png similarity index 100% rename from src/public/images/screen_4_workflow_executed.png rename to scripts/doc-images/raw/legacy/screen_4_workflow_executed.png diff --git a/src/public/images/screen_5_ai_agent_canvas.png b/scripts/doc-images/raw/legacy/screen_5_ai_agent_canvas.png similarity index 100% rename from src/public/images/screen_5_ai_agent_canvas.png rename to scripts/doc-images/raw/legacy/screen_5_ai_agent_canvas.png diff --git a/scripts/doc-images/raw/legacy/screen_ai_llm_canvas.png b/scripts/doc-images/raw/legacy/screen_ai_llm_canvas.png new file mode 100644 index 0000000..aa63a7c Binary files /dev/null and b/scripts/doc-images/raw/legacy/screen_ai_llm_canvas.png differ diff --git a/scripts/doc-images/raw/legacy/screen_ctc_canvas.png b/scripts/doc-images/raw/legacy/screen_ctc_canvas.png new file mode 100644 index 0000000..a3cc02d Binary files /dev/null and b/scripts/doc-images/raw/legacy/screen_ctc_canvas.png differ diff --git a/src/public/images/screen_ctc_drawer.png b/scripts/doc-images/raw/legacy/screen_ctc_drawer.png similarity index 100% rename from src/public/images/screen_ctc_drawer.png rename to scripts/doc-images/raw/legacy/screen_ctc_drawer.png diff --git a/src/public/images/screen_ctc_executed.png b/scripts/doc-images/raw/legacy/screen_ctc_executed.png similarity index 100% rename from src/public/images/screen_ctc_executed.png rename to scripts/doc-images/raw/legacy/screen_ctc_executed.png diff --git a/scripts/doc-images/raw/legacy/screen_meta_capi_canvas.png b/scripts/doc-images/raw/legacy/screen_meta_capi_canvas.png new file mode 100644 index 0000000..495fd09 Binary files /dev/null and b/scripts/doc-images/raw/legacy/screen_meta_capi_canvas.png differ diff --git a/scripts/doc-images/raw/legacy/screen_notion_wp_canvas.png b/scripts/doc-images/raw/legacy/screen_notion_wp_canvas.png new file mode 100644 index 0000000..3a3a01e Binary files /dev/null and b/scripts/doc-images/raw/legacy/screen_notion_wp_canvas.png differ diff --git a/scripts/doc-images/raw/legacy/screen_offer_letter_canvas.png b/scripts/doc-images/raw/legacy/screen_offer_letter_canvas.png new file mode 100644 index 0000000..66f2c80 Binary files /dev/null and b/scripts/doc-images/raw/legacy/screen_offer_letter_canvas.png differ diff --git a/scripts/doc-images/raw/legacy/screen_webhook_sanitizer_canvas.png b/scripts/doc-images/raw/legacy/screen_webhook_sanitizer_canvas.png new file mode 100644 index 0000000..2479d4b Binary files /dev/null and b/scripts/doc-images/raw/legacy/screen_webhook_sanitizer_canvas.png differ diff --git a/src/public/images/template_test_result.png b/scripts/doc-images/raw/legacy/template_test_result.png similarity index 100% rename from src/public/images/template_test_result.png rename to scripts/doc-images/raw/legacy/template_test_result.png diff --git a/scripts/doc-images/raw/screen_1_community_nodes.png b/scripts/doc-images/raw/screen_1_community_nodes.png new file mode 100644 index 0000000..ef40b6b Binary files /dev/null and b/scripts/doc-images/raw/screen_1_community_nodes.png differ diff --git a/scripts/doc-images/raw/screen_1b_install_modal.png b/scripts/doc-images/raw/screen_1b_install_modal.png new file mode 100644 index 0000000..3997805 Binary files /dev/null and b/scripts/doc-images/raw/screen_1b_install_modal.png differ diff --git a/scripts/doc-images/raw/screen_2_workflow_canvas.png b/scripts/doc-images/raw/screen_2_workflow_canvas.png new file mode 100644 index 0000000..d57ccff Binary files /dev/null and b/scripts/doc-images/raw/screen_2_workflow_canvas.png differ diff --git a/scripts/doc-images/raw/screen_ai_llm_canvas.png b/scripts/doc-images/raw/screen_ai_llm_canvas.png new file mode 100644 index 0000000..aa63a7c Binary files /dev/null and b/scripts/doc-images/raw/screen_ai_llm_canvas.png differ diff --git a/scripts/doc-images/raw/screen_ctc_canvas.png b/scripts/doc-images/raw/screen_ctc_canvas.png new file mode 100644 index 0000000..a3cc02d Binary files /dev/null and b/scripts/doc-images/raw/screen_ctc_canvas.png differ diff --git a/src/public/images/screen_ctc_canvas.png b/scripts/doc-images/raw/screen_ctc_executed.png similarity index 67% rename from src/public/images/screen_ctc_canvas.png rename to scripts/doc-images/raw/screen_ctc_executed.png index 5d2df6c..110beed 100644 Binary files a/src/public/images/screen_ctc_canvas.png and b/scripts/doc-images/raw/screen_ctc_executed.png differ diff --git a/scripts/doc-images/raw/screen_meta_capi_canvas.png b/scripts/doc-images/raw/screen_meta_capi_canvas.png new file mode 100644 index 0000000..495fd09 Binary files /dev/null and b/scripts/doc-images/raw/screen_meta_capi_canvas.png differ diff --git a/scripts/doc-images/raw/screen_notion_wp_canvas.png b/scripts/doc-images/raw/screen_notion_wp_canvas.png new file mode 100644 index 0000000..3a3a01e Binary files /dev/null and b/scripts/doc-images/raw/screen_notion_wp_canvas.png differ diff --git a/scripts/doc-images/raw/screen_offer_letter_canvas.png b/scripts/doc-images/raw/screen_offer_letter_canvas.png new file mode 100644 index 0000000..66f2c80 Binary files /dev/null and b/scripts/doc-images/raw/screen_offer_letter_canvas.png differ diff --git a/scripts/doc-images/raw/screen_webhook_sanitizer_canvas.png b/scripts/doc-images/raw/screen_webhook_sanitizer_canvas.png new file mode 100644 index 0000000..2479d4b Binary files /dev/null and b/scripts/doc-images/raw/screen_webhook_sanitizer_canvas.png differ diff --git a/src/about/architecture.md b/src/about/architecture.md index 60eb8a6..e64fc28 100644 --- a/src/about/architecture.md +++ b/src/about/architecture.md @@ -1,50 +1,41 @@ --- title: 'Architecture & Privacy' -description: 'How DevDeskApp keeps data private: client-side processing in the browser and in-memory execution inside n8n, with no payloads sent to external servers.' +description: 'How DevDeskApp keeps data local: tools that process input in the browser, and an n8n node that runs in-process with no external API calls.' --- # Architecture & Privacy -DevDeskApp is engineered around a strict local-first and privacy-first architectural paradigm. This document explains how the web platform and automation nodes handle memory, security, and execution isolation. - -## Architectural Model - -``` -+-------------------------------------------------------------+ -| DevDeskApp Suite | -+------------------------------+------------------------------+ -| DevDeskApp Web | n8n-nodes-devdeskapp | -| (Browser / Vue 3 + PWA) | (n8n In-Process Engine) | -+------------------------------+------------------------------+ -| * 100% Client-Side V8 | * Native Node.js Execution | -| * Web Crypto API (Subtle) | * Node.js crypto module | -| * Zero Network Roundtrips | * zero external HTTP calls | -| * IndexedDB Local Caching | * Sub-millisecond latency | -| * Offline Service Worker | * pairedItem lineage | -+------------------------------+------------------------------+ -``` - -## Security & Data Isolation - -### Client-Side Execution (Web) -When you paste an API secret, JSON structure, or salary value into DevDeskApp Web: -1. **No Outbound Network Requests**: The browser makes no network requests for data processing. All computations take place inside the client V8 engine. -2. **Web Crypto Standards**: Hashing and cryptographic transforms leverage the browser native `crypto.subtle` API for hardware-accelerated, timing-attack-resistant security. -3. **No Third-Party Analytics on Payloads**: DevDeskApp does not log, inspect, or retain input strings. Refreshing the browser or clearing tab memory clears all transient computation data. - -### In-Process Execution (n8n Community Node) -In enterprise automation workflows, data leakage often occurs when teams call external SaaS APIs (like cloud text formatters or public hash APIs) inside n8n HTTP Request nodes: -- External API logs capture your customer records, PII, and financial parameters. -- Cloud outages break business-critical workflows. -- API rate limits cause automation drops during peak hours. - -The `n8n-nodes-devdeskapp` node executes synchronously within the active Node.js event loop of your n8n workflow execution container: -- Uses Node.js native `crypto` module (`createHash`) for cryptographic hashes. -- Performs string manipulations and casing algorithms with deterministic pure functions. -- Processes Indian CTC calculations with zero network connectivity. - -## Scalability & Performance - -Because operations are synchronous pure functions without I/O blocking: -- **Throughput**: Capable of processing tens of thousands of items per second in n8n batch loops. -- **Memory Footprint**: Transient object allocations are immediately garbage-collected by V8. -- **Deterministic Results**: Unit-tested with 100% branch test coverage across standard test suites. +DevDeskApp is built local-first. The web tools process your input in the browser, and the n8n node processes items inside your n8n instance. This page explains how each part handles data. + +## Architectural model + +
+ DevDeskApp architecture: browser web app and the n8n community node, both processing data locally +
+
Figure 1: Two products, one rule. The data you transform is processed where it already is.
+ +## Security and data isolation + +### Web app (browser) +DevDeskApp Web is a Vue 3 single-page app, installable as a PWA. +1. **Tools run in the browser.** Formatters, encoders, hash generators and calculators process your input with JavaScript in the page. Your input is not sent to a DevDeskApp server. +2. **Some tools use the network by design.** Tools such as the API request tester or AI chat send the requests you ask them to send, because that is their job. +3. **Site analytics.** The site records page-view analytics to understand which tools are used. The tools do not send what you type into them. + +### n8n community node +Calling an external utility API from an n8n **HTTP Request** node means: +- the provider's logs can capture customer records, PII and financial data, +- a provider outage breaks your workflow, +- rate limits drop items during peak load. + +`n8n-nodes-devdeskapp` avoids all three. It runs synchronously in the n8n process that executes the workflow: +- Hashes use the Node.js `crypto` module (`createHash`, `randomUUID`). +- Text, JSON and casing operations are deterministic functions with no I/O. +- The CTC calculation is plain arithmetic with no network access. +- Every output item keeps `pairedItem`, so later nodes can reach the matching input item. + +## Scalability and performance + +Because the operations are pure, synchronous functions: +- **Throughput:** in a local benchmark, 10,000 items took 12.6 ms (CTC), 22.6 ms (Prettify), 40.7 ms (Slugify) and 46.5 ms (SHA-256) of node logic. See [Local vs Cloud](/solutions/). +- **Memory:** use scales with the size of the items you pass in. Nothing is cached between executions. +- **Deterministic results:** the same input and parameters always give the same output (UUID generation is the exception, by design). The node's test suite covers each operation. diff --git a/src/about/index.md b/src/about/index.md index e4c0074..8f2d20e 100644 --- a/src/about/index.md +++ b/src/about/index.md @@ -1,44 +1,42 @@ --- title: 'About DevDeskApp' -description: 'What DevDeskApp is: a privacy-first suite of 300+ browser-based developer tools, plus an n8n community node that runs the same utilities in your workflows.' +description: 'What DevDeskApp is: a privacy-first suite of 340+ browser-based developer tools, plus an n8n community node that brings core utilities into your workflows.' --- # About DevDeskApp -DevDeskApp is an all-in-one developer productivity platform and open-source automation utility suite. It provides modern engineering and operations teams with over 330+ developer utilities, calculators, encoders, and workflow tools designed to run with maximum speed and absolute privacy. +DevDeskApp is a developer productivity platform with **340+ browser-based tools** (formatters, encoders, generators and calculators), plus an open-source n8n community node that brings the most-used utilities into workflow automation. -## Mission and Vision +## Mission -Every day, software engineers, DevOps professionals, and automation builders copy and paste sensitive data into ad-hoc online tools: -- Database connection strings and API payloads into online JSON formatters. -- Plaintext passwords and secret tokens into third-party hash generators. -- Employee payroll and compensation numbers into random calculator websites. +Every day, engineers and automation builders paste sensitive data into random online tools: +- connection strings and API payloads into online JSON formatters, +- passwords and tokens into third-party hash generators, +- salary figures into calculator websites. -DevDeskApp eliminates this security vulnerability by delivering a comprehensive suite of utilities that execute locally in your environment: -1. **DevDeskApp Web**: Runs 100% inside your browser using client-side JavaScript and WebAssembly. No telemetry, no server logs, and no remote data storage. -2. **n8n Community Node (`n8n-nodes-devdeskapp`)**: Runs natively inside your n8n workflow engine as local Node.js functions. No HTTP API calls, no third-party downtime, and zero cloud exfiltration. +DevDeskApp keeps that processing local: +1. **DevDeskApp Web** ([devdeskapp.com](https://www.devdeskapp.com/)): the tools process your input in your browser. It is not sent to a DevDeskApp server. +2. **n8n community node (`n8n-nodes-devdeskapp`)**: runs inside your n8n instance as plain Node.js code, with no external API calls and no third-party downtime. --- -## The DevDeskApp Ecosystem +## The DevDeskApp ecosystem -The platform spans two core components: +### 1. DevDeskApp Web +More than 340 tools, grouped for everyday work: +- **Formatters:** JSON, XML, HTML, CSS, SQL, YAML and more. +- **Crypto and security:** MD5, SHA-1, SHA-256, SHA-512, HMAC, JWT decoding, password generation. +- **Encoders and decoders:** Base64, URL, HTML entities, hex, Unicode. +- **Generators:** UUID, ULID, Lorem Ipsum, QR codes, dummy data. +- **Calculators and converters:** CTC to in-hand salary, gratuity, HR metrics, timestamps, units. -### 1. DevDeskApp Web Platform -The flagship web portal houses more than 330 tools categorized for daily developer workflows: -- **Formatters & Beautifiers**: JSON, XML, HTML, CSS, SQL, GraphQL, YAML. -- **Crypto & Security**: MD5, SHA-1, SHA-256, SHA-512, HMAC, AES, RSA key generators, JWT decoders. -- **Encoders & Decoders**: Base64, URL, HTML entities, Hex, Unicode, Punycode. -- **Generators**: UUID v4, NanoID, Lorem Ipsum, QR codes, Strong passwords, Dummy data. -- **Calculators & Converters**: CTC salary breakdown, in-hand tax estimation, unit converters, timestamp/epoch converters. - -### 2. n8n Community Node -An official n8n community package (`n8n-nodes-devdeskapp`) that brings core DevDeskApp processing capabilities directly into workflow automation pipelines. With seamless n8n UI integration, users can sanitize payloads, calculate salaries, hash sensitive fields, and format strings without writing custom JavaScript code. +### 2. n8n community node +`n8n-nodes-devdeskapp` brings **19 operations** in 5 resources (JSON, Crypto, Text, Calculator, E-commerce) into n8n as typed form fields, so you can format payloads, hash fields, convert case and estimate salaries without writing Code nodes. See the [Operations Reference](/n8n/operations). --- -## Core Principles +## Core principles -- **Zero-Trust Privacy**: Your data belongs to you. No inputs or outputs are ever transmitted to external endpoints. -- **Speed & Efficiency**: Instant execution without network latency. -- **Standards Compliance**: Tested against strict formatting and calculation standards (including official Indian payroll PF, ESI, PT, and Tax regulations). -- **Open Architecture**: Open-source, extensible, and fully transparent. +- **Privacy first:** the data you transform is processed where it already is, in your browser or your n8n instance. +- **Speed:** no network round trip for the processing itself. +- **Transparent maths:** calculators document their formulas. The CTC calculation shows the PF cap, PT and tax slabs it uses, and its output is an estimate. +- **Open source:** the n8n node is MIT licensed. diff --git a/src/index.md b/src/index.md index f6e9f96..a8d4e86 100644 --- a/src/index.md +++ b/src/index.md @@ -20,11 +20,11 @@ description: 'Documentation for DevDeskApp and the n8n-nodes-devdeskapp communit

Format JSON & Secure HR Payloads with DevDeskApp

- Official workflow blueprint is live on n8n.io. Import it with 1 click directly into your n8n workspace with zero configuration needed. + The official template is live on n8n.io. Click Use for free to open it in your n8n workspace. It needs no credentials.

-## 🎯 Zero-Latency Architecture Pipeline +## 🎯 How it fits in a workflow
@@ -44,7 +44,7 @@ description: 'Documentation for DevDeskApp and the n8n-nodes-devdeskapp communit
→
- 0ms In-Memory + In-process ⚡ DevDeskApp Node JSON • Crypto • CTC • Slug
@@ -66,17 +66,17 @@ description: 'Documentation for DevDeskApp and the n8n-nodes-devdeskapp communit ## 📸 Visual Workflow Execution -DevDeskApp allows developers, DevOps engineers, and HR automation teams to chain data cleaning and computation directly on the canvas without external API overhead: +Chain data cleaning and computation directly on the n8n canvas, with no external API calls:
- DevDeskApp Workflow Canvas + Template 21017 developer suite workflow on the n8n canvas
-
Figure 1: Full DevDeskApp Developer Suite chained on n8n visual automation canvas.
+
Figure 1: The Developer Suite template (#21017) on the n8n canvas.
- DevDeskApp Workflow Execution Result + Template 21017 after a successful run, every node marked green
-
Figure 2: Sub-millisecond execution with green success badges and unified output data structure.
+
Figure 2: After Test workflow, every node shows a green success mark and the final node returns one combined result.
--- diff --git a/src/n8n/index.md b/src/n8n/index.md index cdc46a2..e9c3003 100644 --- a/src/n8n/index.md +++ b/src/n8n/index.md @@ -1,99 +1,89 @@ --- title: 'n8n Community Node: DevDeskApp' -description: 'Get started with n8n-nodes-devdeskapp: what the community node does, which operations it offers and how it fits into your n8n workflows.' +description: 'Get started with n8n-nodes-devdeskapp: what the community node does, its 5 resources and 19 operations, and how it fits into n8n workflows and AI agents.' --- # n8n Community Node: DevDeskApp -`n8n-nodes-devdeskapp` is an official community node for [n8n](https://n8n.io) that brings high-performance, zero-latency developer utilities, formatters, and financial calculation engines directly into your automation pipelines. +`n8n-nodes-devdeskapp` is a community node for [n8n](https://n8n.io) that runs common developer utilities directly inside your workflow: JSON formatting and validation, hashing, Base64, UUIDs, slugs, case and URL conversion, an Indian CTC to in-hand estimate, and seven e-commerce and fintech helpers.
- Version (Latest) - Official n8n Template #21017 - MIT Open Source + Version (latest) + 7 published templates + 5 resources · 19 operations + MIT licensed
--- -## Why Use DevDeskApp in n8n? +## Why use DevDeskApp in n8n? -Automation developers, DevOps teams, and HR operations frequently encounter repetitive data transformation bottlenecks: -- **Sanitizing raw webhook payloads** into clean, formatted JSON. -- **Generating cryptographic hashes (SHA-256 / MD5)** to verify webhook signatures or track payload tamper-evidence. -- **Hashing passwords securely using Bcrypt** before storing them in PostgreSQL or Supabase. -- **Calculating Indian payroll and take-home salary** from gross CTC for recruitment and onboarding flows. -- **Generating RFC 4122 UUID v4 trace IDs** for distributed request tracing. -- **Cleaning candidate and project titles into URL-safe slugs**. +Workflows often need the same small transformations again and again: +- **Cleaning webhook payloads** into formatted or minified JSON, and validating them before a database write. +- **Hashing values** (SHA-256, SHA-512, SHA-1, MD5) for deduplication keys, integrity checks or privacy-safe matching. +- **Verifying webhook signatures** from Razorpay, Shopify or Stripe with HMAC-SHA256. +- **Generating RFC 4122 UUID v4 trace IDs** for correlating records across systems. +- **Turning titles and names into URL-safe slugs**, or converting text case. +- **Estimating Indian monthly in-hand salary** from an annual CTC for offer and HR flows. -### Before DevDeskApp vs. With DevDeskApp +### Code node or cloud API vs. DevDeskApp -| Dimension | Custom Code Nodes / Cloud APIs | With `n8n-nodes-devdeskapp` | +| Dimension | Code node or cloud utility API | With `n8n-nodes-devdeskapp` | | :--- | :--- | :--- | -| **Execution Latency** | 150ms – 500ms network round-trip | **< 1ms in-memory native CPU** | -| **Data Privacy** | Sensitive payloads leave container to 3rd-party APIs | **100% Zero-leak local memory** | -| **Maintenance** | Brittle JavaScript snippets prone to syntax breakage | **Strictly typed visual UI with schema validation** | -| **Error Tracing** | Unclear stack traces in raw code | **Native n8n `pairedItem` data lineage** | -| **AI Agent Support** | Requires custom prompt function calling setup | **Native `usableAsTool: true` for n8n AI Agents** | +| **Execution** | Code: in-process. Cloud API: a network round trip per call | **In-process, no HTTP calls** | +| **Data privacy** | Cloud API: payloads leave your instance | **Payloads stay in your n8n process** | +| **Maintenance** | Hand-written JavaScript per workflow | **Form fields and dropdowns, no code** | +| **Item linking** | Depends on your code | **`pairedItem` set on every output item** | +| **AI agents** | Needs a custom tool | **`usableAsTool: true`, attach it to an AI Agent's Tool port** | --- -## 📸 Visual Workspace Overview +## 📸 Visual workspace overview -### Visual Community Node Settings -Installed directly from n8n's community registry without complex command-line builds: +### Install it from Community nodes +Install it from n8n's **Settings → Community nodes** screen, with no command-line build:
- Community Node in n8n UI + n8n Settings, Community nodes page with the Install a community node button
-
Figure 1: Installing and managing n8n-nodes-devdeskapp inside the n8n Settings UI.
+
Figure 1: The Community nodes page in n8n settings.
-### Interactive Parameter Drawer -Easily switch between resources and operations using intuitive dropdowns and dynamic expression fields: +### Configure and test a step +Pick a resource and an operation, map fields with expressions, and click **Execute step**:
- DevDeskApp Node Parameter Drawer + DevDeskApp node test step: JSON Utility Prettify with input, parameters and real output
-
Figure 2: Configuring operations, parameters, and input expressions in the n8n Node drawer.
+
Figure 2: Input, parameters and real output for JSON Utility → Prettify.
--- -## 🛠️ Complete Operations Matrix +## 🛠️ Operations matrix -| Category | Operation | Description | -| :--- | :--- | :--- | -| **JSON Utility** | `Prettify` | Formats raw minified JSON into human-readable formatted string with custom 2, 4, or tab indents. | -| **JSON Utility** | `Minify` | Compacts large JSON objects by stripping non-semantic whitespace for efficient network transport. | -| **JSON Utility** | `Validate` | Validates syntax integrity, returning clear line/character error diagnostics. | -| **Crypto & Hash** | `Hash` | Computes standard cryptographic digests (`SHA-256`, `MD5`, `SHA-512`) from text. | -| **Crypto & Hash** | `UUID Generator` | Generates collision-resistant RFC 4122 compliant UUID Version 4 tokens. | -| **Crypto & Hash** | `Bcrypt Hash` | One-way password hashing with configurable salt rounds (default: 10). | -| **Crypto & Hash** | `Bcrypt Compare` | Constant-time password verification against an existing Bcrypt hash. | -| **Text & String** | `Slugify` | Converts names, titles, and strings into URL-safe slugs with customizable delimiters. | -| **Text & String** | `Regex Matcher` | Tests string against regular expression patterns with flags (`g`, `i`, `m`). | -| **HR & Payroll** | `CTC Calculator` | Computes monthly gross, take-home salary, Employee/Employer PF, PT, and tax breakdown. | +| Resource | Operations | +| :--- | :--- | +| **JSON Utility** (`json`) | Prettify / Format · Minify · Validate | +| **Crypto & Hash** (`crypto`) | Hash (MD5, SHA-1, SHA-256, SHA-512) · Base64 Encode · Base64 Decode · UUID V4 | +| **Text & String** (`text`) | Slugify String · Case Converter · URL Encode · URL Decode | +| **HR & Calculator** (`calculator`) | CTC to In-Hand Salary | +| **E-Commerce & FinTech** (`ecommerce`) | Catalog Schema Mapper · Dynamic UPI QR & URI · GST JSON to Tabular Data · Profit Margin & ROAS Calculator · Shipping Label Cropper Coordinates · Webhook Signature Verifier · WhatsApp Interactive Payload | ---- +Parameters and real example outputs for every operation are in the [Operations Reference](/n8n/operations). -## 🤖 AI Agent Tool Compatibility +--- -The DevDeskApp node exposes `usableAsTool: true`. When you connect DevDeskApp to an **n8n AI Agent** node, the LLM can autonomously choose to format JSON, hash passwords, or calculate compensation without requiring custom tool code. +## 🤖 AI Agent tool compatibility -```mermaid -flowchart TD - User["User Chat / Prompt"] --> Agent["n8n AI Agent (OpenAI / Claude / Gemini)"] - Agent --> Tool["DevDeskApp AI Tool"] - Tool --> Local["In-Memory Execution"] - Local --> Tool - Tool --> Agent - Agent --> Output["Accurate Formatted Response"] +The node declares `usableAsTool: true`. Attach it to the **Tool** port of an n8n **AI Agent** and the model can call it to hash a value, format JSON or estimate salary, while the node does the actual computation. - classDef accent fill:#8b5cf6,stroke:#c4b5fd,color:#fff; - class Tool,Agent accent; -``` +
+ Chat trigger, AI Agent with a chat model and DevDeskApp attached as a tool, with one example tool call +
+
Figure 3: DevDeskApp on the AI Agent's Tool port, with one real tool call and result.
--- -## 📖 Next Steps +## 📖 Next steps -- [Step-by-Step Installation Guide →](/n8n/installation) -- [Complete Operations Reference with Code Examples →](/n8n/operations) -- [Official Workflow Templates →](/n8n/workflow-templates) +- [Step-by-step installation guide →](/n8n/installation) +- [Operations reference with real outputs →](/n8n/operations) +- [Official workflow templates →](/n8n/workflow-templates) diff --git a/src/n8n/installation.md b/src/n8n/installation.md index 491e2cd..da7795a 100644 --- a/src/n8n/installation.md +++ b/src/n8n/installation.md @@ -1,69 +1,65 @@ --- title: 'Install the DevDeskApp n8n Node' -description: 'Install n8n-nodes-devdeskapp step by step from the n8n Community Nodes panel, or with npm on self-hosted and Docker n8n instances.' +description: 'Install n8n-nodes-devdeskapp step by step from the n8n Community nodes panel, or manually with npm on self-hosted and Docker n8n instances.' --- # Step-by-Step Installation Guide -You can install `n8n-nodes-devdeskapp` into your n8n instance using the graphical Community Nodes manager or via container/npm deployment scripts. +You can install `n8n-nodes-devdeskapp` from n8n's **Community nodes** settings page or manually with npm. **Latest release:** ([all versions on npm](https://www.npmjs.com/package/n8n-nodes-devdeskapp?activeTab=versions)). Installing without a version number always gets the latest one. ---- +::: tip Who can install +Installing from the UI needs an instance owner or admin account, and community nodes must be enabled on the instance. They are enabled by default on self-hosted n8n. +::: -## Option 1: Install via n8n Web UI (Recommended) +--- -This is the fastest method and takes under 30 seconds without restarting containers: +## Option 1: Install from the n8n UI (recommended) -### Step 1: Open Community Nodes Settings -1. Log into your n8n web dashboard. -2. Click **Settings** (gear icon in the bottom-left sidebar). -3. Select **Community Nodes** from the left navigation panel. +### Step 1: Open Community nodes +1. Open your n8n editor. +2. Go to **Settings**. +3. Select **Community nodes** in the settings menu.
- Community Nodes Settings in n8n + Community nodes page in n8n settings
-
Figure 1: Navigating to Settings > Community Nodes in the n8n interface.
+
Figure 1: Settings > Community nodes, with the Install a community node button.
-### Step 2: Install Package Name -1. Click the orange **Install a community node** button in the top right. -2. In the **npm Package Name** field, paste: +### Step 2: Enter the package name +1. Click **Install a community node**. +2. In **npm Package Name**, enter: ```text n8n-nodes-devdeskapp ``` -3. Check the checkbox confirming third-party community package installation: - - *"I understand the risks of installing untrusted code."* +3. Tick the confirmation *"I understand the risks of installing unverified code from a public source."* 4. Click **Install**.
- Install Community Node Modal in n8n + Install community nodes dialog with n8n-nodes-devdeskapp entered
-
Figure 2: Community node installation modal with package name and safety confirmation.
+
Figure 2: The install dialog with the package name and the risk confirmation.
-### Step 3: Verification -Once installation finishes: -1. Open any workflow canvas and press `+` (or hit `Tab`). +### Step 3: Check that it is installed +1. Open any workflow and press `Tab` (or click **+**) to open the nodes panel. 2. Search for `DevDeskApp`. -3. Add the node to your canvas and begin chaining developer utilities! +3. Add the node and pick a **Resource** and an **Operation**. --- -## Option 2: Docker & Docker Compose Setup +## Option 2: Docker and Docker Compose -If you manage your n8n instance via Docker Compose, ensure community package installation is allowed by setting `N8N_COMMUNITY_PACKAGES_ENABLED=true`: +Community packages are enabled by default. If your instance disables them, set `N8N_COMMUNITY_PACKAGES_ENABLED=true`. Keep `/home/node/.n8n` on a volume so installed packages survive container restarts: ```yaml -version: '3.8' - services: n8n: image: docker.n8n.io/n8nio/n8n:latest - container_name: n8n-automation restart: always ports: - "5678:5678" environment: - N8N_COMMUNITY_PACKAGES_ENABLED=true - - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true volumes: - n8n_data:/home/node/.n8n @@ -71,45 +67,51 @@ volumes: n8n_data: ``` -### Production Pre-Bundling (Custom Dockerfile) -To avoid manual installation across multiple ephemeral worker nodes, bake `n8n-nodes-devdeskapp` directly into your custom n8n base image: +Then install from the UI (Option 1), or manually inside the container: -```dockerfile -FROM docker.n8n.io/n8nio/n8n:latest - -USER root -RUN cd /usr/local/lib/node_modules/n8n && npm install --save n8n-nodes-devdeskapp -USER node +```bash +docker exec -it sh +mkdir -p ~/.n8n/nodes && cd ~/.n8n/nodes +npm install n8n-nodes-devdeskapp +exit +docker restart ``` +::: warning Queue mode +In queue mode every worker executes nodes, so every worker needs the package. Install it on the shared `.n8n` volume or on each worker, then restart them. +::: + +::: tip Using the node as an AI Agent tool +On self-hosted n8n, community nodes appear on an AI Agent's **Tool** port only if you set `N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true`, for example under `environment:` in the compose file above. See [AI Agents & LLMs](/solutions/ai-agents). +::: + --- -## Option 3: Self-Hosted NPM / Global CLI +## Option 3: Self-hosted n8n with npm -If you run n8n on a bare-metal server or VM directly via Node.js: +If you run n8n directly with Node.js, install the package into n8n's `nodes` folder (the default is `~/.n8n/nodes`), then restart n8n: ```bash -# Navigate to your n8n state directory (default is ~/.n8n) -cd ~/.n8n - -# Install the community node package +mkdir -p ~/.n8n/nodes +cd ~/.n8n/nodes npm install n8n-nodes-devdeskapp -# Restart n8n +# restart n8n so it loads the new node n8n start ``` +To update later, run `npm update n8n-nodes-devdeskapp` in the same folder and restart, or use **Settings → Community nodes → Update**. + --- -## 🔍 Verification & First Test +## 🔍 First test -Once installed: -1. Drag the **DevDeskApp** node onto the canvas. -2. Select **Resource: JSON Utility** and **Operation: Prettify**. -3. Pass in `{"status":"ok","code":200}`. -4. Click **Test step** — you will immediately see clean, formatted JSON with 0ms network latency! +1. Add a **DevDeskApp** node after a **Manual Trigger**. +2. Set **Resource** to **JSON Utility** and **Operation** to **Prettify / Format**. +3. Set **JSON Input** to `{"status":"ok","code":200}`. +4. Click **Execute step**. The output item contains a `formatted` string and `"success": true`.
- DevDeskApp First Test Step in Drawer + DevDeskApp first test step: JSON Utility Prettify input, parameters and output
-
Figure 3: Testing the node parameters in the drawer with real-time feedback.
+
Figure 3: The first test step and its real output.
diff --git a/src/n8n/operations.md b/src/n8n/operations.md index 189f6dc..08d2d43 100644 --- a/src/n8n/operations.md +++ b/src/n8n/operations.md @@ -1,205 +1,235 @@ --- title: 'n8n Node Operations Reference' -description: 'Reference for every n8n-nodes-devdeskapp operation: inputs, options and output fields for JSON, hashing, UUID, encoding and payroll utilities.' +description: 'Reference for all 19 n8n-nodes-devdeskapp operations across 5 resources: parameters and real output fields for JSON, hashing, text, CTC payroll and e-commerce utilities.' --- # Operations Reference -`n8n-nodes-devdeskapp` provides 4 resources with 13 deterministic operations. Every operation executes synchronously in-memory and outputs cleanly formatted JSON objects. +`n8n-nodes-devdeskapp` (latest: ) gives you **one node with 5 resources and 19 operations**. Every operation runs synchronously inside your n8n process, makes no HTTP calls and returns one output item per input item (with `pairedItem` set). + +
+ DevDeskApp node: 5 resources and 19 operations with their internal resource and operation values +
+
Figure 1: Every resource and operation, with the internal values you see in workflow JSON.
+ +::: tip Where the examples come from +Every output below was produced by running the published node with the input shown. UUIDs are random on every run. +::: + +--- + +## 1. JSON Utility (`json`) + +All three operations read the **JSON Input** parameter (`jsonInput`, default `={{ $json }}`). It accepts a JSON string or an object from a previous node. + +| Operation | Value | Extra parameter | Output fields | +| :--- | :--- | :--- | :--- | +| Prettify / Format | `prettify` | **Indentation** (`indentation`): `2`, `4` or `tab` (default `2`) | `formatted` (string), `success` | +| Minify | `minify` | none | `minified` (string), `success` | +| Validate | `validate` | none | `valid`, plus `parsed` (when valid) or `error` (when invalid) | + +**Prettify** with input `{"status":"ok","code":200}`: + +```json +{ + "formatted": "{\n \"status\": \"ok\",\n \"code\": 200\n}", + "success": true +} +``` + +**Validate** with the invalid input `{"status":"ok",}`: + +```json +{ + "valid": false, + "error": "Expected double-quoted property name in JSON at position 15 (line 1 column 16)" +} +``` + +::: warning Invalid JSON in Prettify or Minify +Only **Validate** turns bad JSON into an output item. **Prettify** and **Minify** throw a `NodeOperationError` (`Invalid JSON input: ...`). Turn on **Settings → On Error → Continue** if you want those items to flow on as `{ "error": "..." }`. +::: + +--- + +## 2. Crypto & Hash (`crypto`) + +| Operation | Value | Parameters | Output fields | +| :--- | :--- | :--- | :--- | +| Hash (MD5 / SHA-256 / SHA-512) | `hash` | **Text/Payload** (`textPayload`), **Algorithm** (`hashAlgorithm`): `md5`, `sha1`, `sha256` (default), `sha512` | `algorithm`, `input`, `hash` (lowercase hex) | +| Base64 Encode | `base64Encode` | **Text/Payload** (`textPayload`) | `encoded`, `original` | +| Base64 Decode | `base64Decode` | **Text/Payload** (`textPayload`) | `decoded`, `original` | +| UUID V4 | `uuid` | none | `uuid`, `version` (`4`) | + +**Hash**, SHA-256 of `devdeskapp`: + +```json +{ + "algorithm": "sha256", + "input": "devdeskapp", + "hash": "3b7d21ca0cac379b91140262ad701f739f04f3dae19adf5ea04aa7e118fa50d3" +} +``` + +MD5 of `test@example.com` (the Gravatar-style lookup key) is `55502f40dc8b7c769880b10874abc9d0`. + +**Base64 Encode** of `user:pass123`: + +```json +{ "encoded": "dXNlcjpwYXNzMTIz", "original": "user:pass123" } +``` + +**UUID V4**: + +```json +{ "uuid": "0f264685-868e-4cba-aab1-1b241c5f9c90", "version": 4 } +``` + +::: tip Hashing is not HMAC +`hash` is a plain digest of the text. To verify a signed webhook (a secret plus the body), use **E-Commerce & FinTech → Webhook Signature Verifier**, which computes HMAC-SHA256. +::: --- -## 1. Crypto & Hash (`crypto`) - -Generate cryptographic hashes for security tokens, Gravatar identifiers, cache keys, or payload integrity checks. - -### Operations - -#### MD5 Hash (`md5`) -Computes an MD5 hex digest from an input string. -- **Parameters**: - - `Text to Hash` (`text`): The input string to hash. -- **Output JSON**: - ```json - { - "input": "test@example.com", - "hash": "55502f40dc8b7c769880b10874abc9d0", - "algorithm": "md5" - } - ``` - -#### SHA-256 Hash (`sha256`) -Computes an industry-standard SHA-256 cryptographic digest. -- **Parameters**: - - `Text to Hash` (`text`): The input string to hash. -- **Output JSON**: - ```json - { - "input": "devdeskapp", - "hash": "c0053e1a0673f4e3c35b80a1846b0a034f78de1f74075f782c5890772714041b", - "algorithm": "sha256" - } - ``` - -#### SHA-512 Hash (`sha512`) -Computes a high-entropy SHA-512 cryptographic digest. -- **Parameters**: - - `Text to Hash` (`text`): The input string to hash. -- **Output JSON**: - ```json - { - "input": "devdeskapp", - "hash": "9c12e52b2b1e2e...", - "algorithm": "sha512" - } - ``` +## 3. Text & String (`text`) + +All four operations read **Text Input** (`textInput`). + +| Operation | Value | Extra parameter | Output fields | +| :--- | :--- | :--- | :--- | +| Slugify String | `slugify` | none | `original`, `slug` | +| Case Converter | `caseConverter` | **Target Case** (`targetCase`): `camelCase`, `kebabCase` (default), `lowerCase`, `pascalCase`, `snakeCase`, `upperCase` | `original`, `casing`, `result` | +| URL Encode | `urlEncode` | none | `original`, `encoded`, `success` | +| URL Decode | `urlDecode` | none | `original`, `decoded`, `success` (plus `error` if the input is malformed) | + +**Slugify** of `Top 10 High-Growth AI Automation Trends in 2026! (Complete Guide)`: + +```json +{ + "original": "Top 10 High-Growth AI Automation Trends in 2026! (Complete Guide)", + "slug": "top-10-high-growth-ai-automation-trends-in-2026-complete-guide" +} +``` + +The slug is lowercased, characters other than letters, digits, spaces, `_` and `-` are removed, and runs of spaces, `_` or `-` become one `-`. There is no transliteration, so accented letters are dropped. + +**Case Converter** of `DevDesk App Suite` to `snakeCase`: + +```json +{ "original": "DevDesk App Suite", "casing": "snakeCase", "result": "dev_desk_app_suite" } +``` + +Words are split on spaces, punctuation and camel humps (`DevDesk` becomes `dev desk`). `upperCase` and `lowerCase` only change the letter case of the original string; they keep its spacing and punctuation. + +::: danger Only the six listed Target Case values work +Values such as `lower`, `title` or `Title Case` are not supported. With them the node returns `"result": ""` without throwing an error. Read the converted text from `result`. There is no `convertedText` field. +::: + +**URL Encode** of `hello world & foo=bar` returns `"encoded": "hello%20world%20%26%20foo%3Dbar"` (it uses JavaScript's `encodeURIComponent`). --- -## 2. Text & String (`text`) - -Perform string manipulation, casing conversion, and binary-to-text encoding. - -### Operations - -#### Convert String Case (`caseConverter`) -Transforms any string into the chosen formatting standard. -- **Parameters**: - - `Text to Convert` (`text`): The input string. - - `Target Case` (`targetCase`): - - `camelCase` (e.g., `helloWorld`) - - `kebab-case` (e.g., `hello-world`) - - `lowercase` (e.g., `hello world`) - - `PascalCase` (e.g., `HelloWorld`) - - `Snake_Case` (e.g., `hello_world`) - - `Title Case` (e.g., `Hello World`) - - `UPPERCASE` (e.g., `HELLO WORLD`) -- **Output JSON**: - ```json - { - "original": "DevDesk App Suite", - "converted": "devdesk_app_suite", - "case": "snakeCase" - } - ``` - -#### Base64 Encode String (`base64Encode`) -Encodes plaintext or raw strings into standard Base64. -- **Parameters**: - - `Text to Encode` (`text`): Plaintext string. -- **Output JSON**: - ```json - { - "original": "user:pass123", - "encoded": "dXNlcjpwYXNzMTIz" - } - ``` - -#### Base64 Decode String (`base64Decode`) -Decodes Base64 encoded strings back to UTF-8 plaintext. -- **Parameters**: - - `Base64 Text` (`text`): Valid Base64 string. -- **Output JSON**: - ```json - { - "original": "dXNlcjpwYXNzMTIz", - "decoded": "user:pass123" - } - ``` - -#### Url Encode String (`urlEncode`) -Encodes characters into percent-encoded URL formatting. -- **Parameters**: - - `Text to Encode` (`text`): String with spaces or query characters. -- **Output JSON**: - ```json - { - "original": "hello world & foo=bar", - "encoded": "hello%20world%20%26%20foo%3Dbar" - } - ``` - -#### Url Decode String (`urlDecode`) -Decodes percent-encoded URL strings back into readable text. -- **Parameters**: - - `URL Encoded Text` (`text`): Percent-encoded string. -- **Output JSON**: - ```json - { - "original": "hello%20world%20%26%20foo%3Dbar", - "decoded": "hello world & foo=bar" - } - ``` +## 4. HR & Calculator (`calculator`) + +| Operation | Value | Parameters | Output fields | +| :--- | :--- | :--- | :--- | +| CTC to In-Hand Salary | `ctcToInHand` | **Annual CTC** (`annualCtc`, default `1200000`), **Basic Salary Percentage** (`basicPercentage`, default `50`) | `annualCtc`, `monthlyGross`, `monthlyInHand`, `breakdown{...}`, `taxRegime`, `reference` | + +How the node calculates it: + +- **Monthly basic** = CTC × basic % ÷ 12 +- **Employee PF** = 12% of monthly basic, capped at **₹1,800**. Employer PF is the same. +- **Monthly gross** = (CTC − 12 × employer PF) ÷ 12 +- **Professional tax** = flat ₹200 a month +- **Estimated TDS**: new-regime slabs after a ₹75,000 standard deduction (none at or below ₹7,00,000 CTC) +- **Monthly in-hand** = gross − employee PF − PT − TDS + +**Annual CTC `1800000`, basic `50`:** + +```json +{ + "annualCtc": 1800000, + "monthlyGross": 148200, + "monthlyInHand": 128075, + "breakdown": { + "monthlyBasic": 75000, + "employeePf": 1800, + "employerPf": 1800, + "professionalTax": 200, + "estimatedMonthlyTds": 18125 + }, + "taxRegime": "India Standard / New Tax Benchmark", + "reference": "https://www.devdeskapp.com/ctc-to-in-hand-calculator" +} +``` + +
+ CTC to In-Hand Salary output for 18 lakh CTC: in-hand 1,28,075 of 1,48,200 monthly gross +
+
Figure 2: Where the ₹1,48,200 monthly gross goes for a ₹18,00,000 CTC.
+ +More reference points (basic 50%): + +| Annual CTC | Monthly gross | Est. TDS / month | Monthly in-hand | +| :--- | ---: | ---: | ---: | +| ₹12,00,000 | ₹98,200 | ₹6,563 | ₹89,638 | +| ₹18,00,000 | ₹1,48,200 | ₹18,125 | ₹1,28,075 | +| ₹24,00,000 | ₹1,98,200 | ₹33,125 | ₹1,63,075 | +| ₹28,00,000 | ₹2,31,533 | ₹43,125 | ₹1,86,408 | + +::: warning Scope of the estimate +This is a quick benchmark, not a payroll engine. It does not model HRA or special allowance splits, the old tax regime, ESIC, cess, surcharge, rebates or state-specific professional tax. Field names are nested: use `breakdown.monthlyBasic` and `breakdown.employeePf`, not top-level `basicSalary` or `employeePf`. +::: --- -## 3. HR & Calculator (`hr`) - -Compute comprehensive payroll, tax, and in-hand compensation models directly in n8n. - -### Operations - -#### Calculate In-Hand Salary (`inHandSalary`) -Breaks down annual Cost to Company (CTC) into statutory components: -- Basic salary, HRA, and Special Allowance. -- Employee deductions (EPF, ESIC, Professional Tax, estimated TDS). -- Employer contributions (Employer EPF, Gratuity, Insurance). -- Exact monthly and annual take-home (in-hand) pay. - -- **Parameters**: - - `Annual CTC (INR)` (`ctc`): Total annual compensation (e.g. `1200000`). - - `Annual Bonus / Variable (INR)` (`bonus`): Optional bonus component (default: `0`). - - `Metro City Resident` (`isMetro`): Boolean flag for HRA calculations (default: `true`). - - `Income Tax Regime` (`taxRegime`): `new` (default) or `old`. - - `Additional Custom Deductions (INR)` (`customDeductions`): Any extra annual deductions (default: `0`). - -- **Output JSON Structure**: - ```json - { - "annualCTC": 1200000, - "bonus": 0, - "taxRegime": "new", - "isMetro": true, - "monthlyGross": 100000, - "monthlyInHand": 82600, - "annualInHand": 991200, - "breakdown": { - "basicMonthly": 40000, - "hraMonthly": 20000, - "specialAllowanceMonthly": 40000, - "employeePfMonthly": 1800, - "professionalTaxMonthly": 200, - "monthlyTaxEstimated": 15400 - } - } - ``` +## 5. E-Commerce & FinTech (`ecommerce`) + +| Operation | Value | Main parameters | Key output fields | +| :--- | :--- | :--- | :--- | +| Catalog Schema Mapper | `catalogMapper` | `sourcePlatform`, `targetPlatform` (Shopify, WooCommerce, Google Merchant Center), `catalogInput` | `items[]`, `totalItems` | +| Dynamic UPI QR & URI | `upiQr` | `payeeVpa`, `payeeName`, `amount`, `transactionRef`, `transactionNote`, `currency` | `upiUri`, `intentUrl` | +| GST JSON to Tabular Data | `gstJsonToTable` | `returnType` (`gstr1`, `gstr3b`, `gstr2b`), `gstSection` (`all`, `b2b`, `b2cs`), `gstJsonInput` | `rows[]`, `totalRows`, `totalTaxableValue`, `totalTax` | +| Profit Margin & ROAS Calculator | `profitCalculator` | `platform`, `sellingPrice`, `cogs`, `shippingFee`, `adSpend`, `rtoRatePct`, `commissionFeePct`, `closingFee`, `gstRatePct` | `netProfit`, `netMarginPct`, `breakEvenRoas`, `breakdown{...}` | +| Shipping Label Cropper Coordinates | `shippingLabelCrop` | `carrier`, `pageFormat`, `labelSize`, `thermalDpi` (`203` or `300`) | `cropBox{x,y,width,height}`, `dimensions`, `printableAreaPct` | +| Webhook Signature Verifier | `webhookVerifier` | `provider` (Razorpay, Shopify, Stripe, custom HMAC-SHA256), `webhookSecret`, `signatureHeader`, `rawBody`, `webhookEvent` | `verified`, `provider`, `event`, `error?` | +| WhatsApp Interactive Payload | `whatsappPayload` | `eventType`, `recipientPhone`, `headerText`, `bodyText`, `footerText`, `buttons` (max 3, 20 characters each) | `payload` (Meta Cloud API body), `buttonCount`, `metaApiEndpoint` | + +**Dynamic UPI QR & URI** (`store@okaxis`, ₹499, ref `ORD-1042`): + +```json +{ + "upiUri": "upi://pay?pa=store%40okaxis&pn=DevDesk+Store&am=499.00&tr=ORD-1042&tn=Order+1042&cu=INR", + "amount": 499, + "currency": "INR" +} +``` + +**Profit Margin & ROAS** (Amazon, price ₹999, COGS ₹350, shipping ₹60, ads ₹120, RTO 10%, commission 15%, closing fee ₹20, GST 18%): + +```json +{ + "effectiveRevenue": 899.1, + "netProfit": 183.88, + "netMarginPct": 20.5, + "breakEvenRoas": 2.38, + "totalDeductions": 715.22 +} +``` + +**Webhook Signature Verifier** (Razorpay, correct signature): + +```json +{ "verified": true, "provider": "razorpay", "event": "payment.captured" } +``` + +Pass the **raw** request body. A re-serialised JSON object can differ byte for byte from what the gateway signed, and then `verified` is `false`. Razorpay and custom providers compare a hex HMAC, Shopify compares Base64, and Stripe reads `t=` and `v1=` from the header and signs `t.body`. + +**Shipping Label Cropper** returns PDF point coordinates to crop from an A4 or Letter invoice. Flipkart on A4 at 203 DPI gives `cropBox: { "x": 24, "y": 448, "width": 547, "height": 370 }` and a 812 × 1218 px 4×6 label. --- -## 4. Utilities & Conversion (`utilities`) - -High-speed system utilities for identity generation and workflow time stamping. - -### Operations - -#### Generate UUID V4 (`uuid`) -Generates a cryptographically random RFC 4122 Version 4 UUID. -- **Parameters**: None required. -- **Output JSON**: - ```json - { - "uuid": "4f3b2a1c-9e8d-4a7b-8c5d-3e2f1a0b9c8d", - "version": "v4" - } - ``` - -#### Current Timestamp & Unix Epoch (`timestamp`) -Generates timestamps in standard formats for file naming, database upserts, and time logging. -- **Parameters**: None required. -- **Output JSON**: - ```json - { - "iso": "2026-10-15T18:30:00.000Z", - "epochSeconds": 1792089000, - "epochMillis": 1792089000000 - } - ``` +## Error handling + +- Missing or invalid inputs that the node cannot process throw `NodeOperationError` with the item index. +- With **On Error → Continue (regular output)**, the failed item is returned as `{ "error": "" }` and the remaining items keep going. +- Unsupported option values (for example a wrong `targetCase`) do **not** throw. Check outputs during testing. diff --git a/src/n8n/workflow-templates.md b/src/n8n/workflow-templates.md index fbe9e57..ab1ce07 100644 --- a/src/n8n/workflow-templates.md +++ b/src/n8n/workflow-templates.md @@ -1,129 +1,137 @@ --- -title: 'Workflow Templates for the n8n Node' -description: 'Ready-made n8n workflows built on n8n-nodes-devdeskapp for developer utilities, security hashing and payroll calculation, with setup notes.' +title: 'Official n8n Workflow Templates | DevDeskApp' +description: 'The 7 published n8n templates built with n8n-nodes-devdeskapp: developer utilities, Indian CTC payroll, payment webhook audit, AI LLM JSON ingestion, offer letters, Meta CAPI and Notion to WordPress.' --- -# Official Workflow Templates +# 🌟 Official Workflow Templates (n8n Community) -Discover and copy production-ready n8n workflows built with `n8n-nodes-devdeskapp`. You can copy the workflow JSON snippets below and paste them directly into your n8n canvas using `Ctrl+V` (or `Cmd+V`). +Seven templates built with `n8n-nodes-devdeskapp` are published on [n8n.io](https://n8n.io/workflows/21017-format-json-and-secure-hr-payloads-with-devdeskapp-utilities/). Each one uses colour-coded sticky notes that explain the flow on the canvas, and you can import any of them by pasting the workflow JSON onto a canvas. -
+ --- -## Template 1: Flagship Developer Suite & Security Engine (Template #21017) +## 📊 Template matrix -
- Published on n8n.io Creator Portal - Template ID: 21017 +| ID | Template | DevDeskApp operations | Other integrations | Status | +| :--- | :--- | :--- | :--- | :--- | +| [#21017](/templates/developer-suite) | Developer Suite & Security Engine | prettify, hash, uuid, slugify, ctcToInHand | None | Runs as published | +| [#21130](/templates/ctc-salary-engine) | CTC to In-Hand Salary Engine | slugify, ctcToInHand, uuid, hash | None | Runs as published | +| [#21376](/templates/payment-webhook-sanitizer) | Payment Webhook Sanitizer | prettify, hash, uuid, slugify | Webhook, Slack | Runs as published | +| [#21593](/templates/ai-llm-postgres-ingest) | AI LLM JSON into Postgres | prettify, uuid, hash | Webhook, PostgreSQL, Slack | Fix after import | +| [#21594](/templates/offer-letter-generator) | CTC Offer Letter Generator | ctcToInHand, uuid, slugify, hash | Google Docs, Gmail, Google Sheets, Slack | Fix after import | +| [#21595](/templates/meta-capi-lead-sync) | Meta CAPI Lead Sync | caseConverter, hash, uuid, slugify | Webhook, Meta Graph API, Google Sheets, Slack | Fix after import | +| [#21596](/templates/notion-wordpress-publisher) | Notion to WordPress Publisher | slugify, hash, uuid, caseConverter | Notion, WordPress, Slack | Fix after import | + +"Fix after import" means one or two parameters need changing before the workflow gives correct output. Each template page shows the exact fix. + +--- + +## 1. Developer Suite & Security Engine (#21017) + +A no-credentials demo of the main operations in one chain: format JSON, hash it with SHA-256, add a UUID, slugify a name and break down a CTC. The final Code node collects every result into one object. + +
+ Template 21017 developer suite workflow on the n8n canvas
+
Figure 1: Template #21017. Full page →
-🔗 **Direct n8n Template Link:** -[n8n.io/workflows/21017-format-json-and-secure-hr-payloads-with-devdeskapp-utilities](https://n8n.io/workflows/21017-format-json-and-secure-hr-payloads-with-devdeskapp-utilities) +--- -📖 **Detailed Documentation & Blueprint:** -[Read the Full Blueprint Guide →](/templates/developer-suite) +## 2. CTC to In-Hand Salary Engine (#21130) -### Workflow Architecture -This workflow runs on a manual trigger or incoming webhook and performs 5 essential developer operations sequentially: -1. **Sample Developer & HR Payload:** Mock payload with minified JSON and candidate profile. -2. **DevDeskApp Prettifier:** Re-formats raw JSON into an indented, human-readable structure. -3. **DevDeskApp SHA-256 Digest:** Generates cryptographic tamper-proof digest. -4. **DevDeskApp UUID Generator:** Stamps every request with an RFC 4122 v4 trace ID. -5. **DevDeskApp Slugifier:** Cleans full names and titles into URL-safe slug identifiers. -6. **DevDeskApp CTC Calculator:** Computes monthly take-home, employee/employer PF, PT, and tax breakdown. -7. **Consolidated Output:** Assembles clean, validated JSON output ready for databases or downstream microservices. +Creates an employee slug, UUID and payroll checksum, and turns an annual CTC into monthly gross, basic, employee and employer PF (capped at ₹1,800), professional tax, a new-regime TDS estimate and in-hand pay.
- Developer Suite Canvas + Template 21130 CTC salary engine workflow on the n8n canvas
-
Figure 1: Complete automation pipeline with sticky notes and configured node parameters.
+
Figure 2: Template #21130. Full page →
+ +--- -### 1-Click Execution Result -When executed, every step finishes in sub-millisecond CPU time: +## 3. Payment Webhook Sanitizer (#21376) + +Receives a payment webhook, parses and formats the body, then adds a SHA-256 checksum, a UUID v4 trace ID and a slug, and alerts Slack. The checksum records what was received. It does not verify the provider's signature. Add the DevDeskApp **Webhook Signature Verifier** operation for that.
- Template Test Result Execution + Template 21376 payment webhook sanitizer workflow on the n8n canvas
-
Figure 2: Execution trace showing instantaneous transformation across all 5 DevDeskApp operations.
+
Figure 3: Template #21376. Full page →
--- -## Template 2: Employee CTC to In-Hand Salary Engine (Template #21130) +## 4. Sanitize & Ingest AI LLM JSON into Postgres (#21593) + +A Code node removes markdown fences from LLM output, DevDeskApp parses and formats the JSON, adds a trace UUID and a SHA-256 checksum, and an If node sends clean records to PostgreSQL and bad ones to Slack. -
- Published on n8n.io Creator Portal - Template ID: 21130 +
+ Template 21593 AI LLM JSON ingestion workflow on the n8n canvas
+
Figure 4: Template #21593. Full page and fix →
-🔗 **Direct n8n Template Link:** -[n8n.io/workflows/21130-automate-salary-and-in-hand-ctc-calculations-with-devdeskapp](https://n8n.io/workflows/21130-automate-salary-and-in-hand-ctc-calculations-with-devdeskapp) +--- -📖 **Detailed Documentation & Blueprint:** -[Read the Full Blueprint Guide →](/templates/ctc-salary-engine) +## 5. Generate Indian CTC Offer Letters (#21594) -Designed for HR, Payroll, and Recruiting operations to automate salary computation from raw offer letter inputs: +Calculates the salary breakdown, creates an offer UUID, candidate slug and compensation checksum, then fills a Google Docs letter, emails it with Gmail and alerts HR on Slack.
- CTC Calculator Canvas + Template 21594 CTC offer letter workflow on the n8n canvas
-
Figure 3: Automated CTC evaluation flow in n8n.
+
Figure 5: Template #21594. Full page and fix →
+ +--- -### Parameter Drawer & Indian Payroll Rules -- Input annual CTC (e.g. ₹2,400,000). -- Configurable basic salary percentage (default: 50%). -- Automatic statutory calculation for Employee PF, Employer PF, Professional Tax (PT), and estimated monthly in-hand take-home salary. +## 6. Hash & Sync Leads to Meta CAPI (#21595) + +Lowercases and SHA-256 hashes the lead email, adds an `event_id` UUID and a campaign slug, and sends opted-in leads to the Meta Conversions API with a Google Sheets log. Only the email is hashed and sent.
- CTC Parameter Drawer + Template 21595 Meta CAPI lead sync workflow on the n8n canvas
-
Figure 4: Inputting annual compensation parameters in DevDeskApp node drawer.
+
Figure 6: Template #21595. Full page and fix →
+ +--- -### Real-Time Breakdown Output +## 7. Publish Notion Blog Posts to WordPress (#21596) + +Builds an SEO slug from the title, fingerprints the article HTML with SHA-256, adds a publication UUID and publishes approved posts through the WordPress node with a Slack alert.
- CTC Execution Output + Template 21596 Notion to WordPress workflow on the n8n canvas
-
Figure 5: Complete salary breakdown returned in structured JSON format.
- -```json -{ - "annualCtc": 2400000, - "monthlyGross": 200000, - "monthlyInHand": 145000, - "breakdown": { - "basic": 100000, - "hra": 50000, - "specialAllowance": 34600, - "employeePf": 12000, - "employerPf": 12000, - "professionalTax": 200, - "estimatedTaxMonthly": 40200 - } -} -``` +
Figure 7: Template #21596. Full page and fix →
+ +--- + +## ⏳ Submitted, waiting for review + +- **#22360:** Auto-generate social media banners from RSS feeds with DevDeskApp, LinkedIn, X and Slack +- **#22361:** Convert GitHub PR schemas into Mermaid architecture diagrams with DevDeskApp, Slack and Notion +- **#22362:** Normalize CRM leads and validate JSON with DevDeskApp, PostgreSQL and Slack +- **#22363:** Detect payment fraud and deduplicate webhooks with DevDeskApp, PostgreSQL and Slack --- -## How to Import Templates into Your n8n +## 💡 Import any template + +1. Install `n8n-nodes-devdeskapp` ([installation guide](/n8n/installation)). +2. Open the template on n8n.io and click **Use for free**, or copy the workflow JSON. +3. Click an empty canvas and press `Ctrl + V` (Windows / Linux) or `Cmd + V` (macOS). -1. Copy the JSON structure of any template or click the direct n8n.io link. -2. In your n8n editor window, click anywhere on the canvas grid. -3. Press `Ctrl + V` (or `Cmd + V` on macOS). -4. The workflow will appear instantly with all connections and pre-set parameters! - *(See the complete [Import Guide](/templates/how-to-import) for details)*. +More detail and troubleshooting: [How to Import Templates](/templates/how-to-import). diff --git a/src/public/images/fig-ai-agent-tool.png b/src/public/images/fig-ai-agent-tool.png new file mode 100644 index 0000000..5838213 Binary files /dev/null and b/src/public/images/fig-ai-agent-tool.png differ diff --git a/src/public/images/fig-architecture.png b/src/public/images/fig-architecture.png new file mode 100644 index 0000000..44a60d8 Binary files /dev/null and b/src/public/images/fig-architecture.png differ diff --git a/src/public/images/fig-canvas-21017.png b/src/public/images/fig-canvas-21017.png new file mode 100644 index 0000000..5d06c8a Binary files /dev/null and b/src/public/images/fig-canvas-21017.png differ diff --git a/src/public/images/fig-canvas-21130.png b/src/public/images/fig-canvas-21130.png new file mode 100644 index 0000000..333fa15 Binary files /dev/null and b/src/public/images/fig-canvas-21130.png differ diff --git a/src/public/images/fig-canvas-21376.png b/src/public/images/fig-canvas-21376.png new file mode 100644 index 0000000..542e716 Binary files /dev/null and b/src/public/images/fig-canvas-21376.png differ diff --git a/src/public/images/fig-canvas-21593.png b/src/public/images/fig-canvas-21593.png new file mode 100644 index 0000000..d4cb451 Binary files /dev/null and b/src/public/images/fig-canvas-21593.png differ diff --git a/src/public/images/fig-canvas-21594.png b/src/public/images/fig-canvas-21594.png new file mode 100644 index 0000000..101ba1b Binary files /dev/null and b/src/public/images/fig-canvas-21594.png differ diff --git a/src/public/images/fig-canvas-21595.png b/src/public/images/fig-canvas-21595.png new file mode 100644 index 0000000..d6b2d10 Binary files /dev/null and b/src/public/images/fig-canvas-21595.png differ diff --git a/src/public/images/fig-canvas-21596.png b/src/public/images/fig-canvas-21596.png new file mode 100644 index 0000000..ec63e6e Binary files /dev/null and b/src/public/images/fig-canvas-21596.png differ diff --git a/src/public/images/fig-ctc-executed.png b/src/public/images/fig-ctc-executed.png new file mode 100644 index 0000000..7da237d Binary files /dev/null and b/src/public/images/fig-ctc-executed.png differ diff --git a/src/public/images/fig-ctc-output.png b/src/public/images/fig-ctc-output.png new file mode 100644 index 0000000..c4b6752 Binary files /dev/null and b/src/public/images/fig-ctc-output.png differ diff --git a/src/public/images/fig-ctc-parameters.png b/src/public/images/fig-ctc-parameters.png new file mode 100644 index 0000000..86d0179 Binary files /dev/null and b/src/public/images/fig-ctc-parameters.png differ diff --git a/src/public/images/fig-flow-21017.png b/src/public/images/fig-flow-21017.png new file mode 100644 index 0000000..a4e288f Binary files /dev/null and b/src/public/images/fig-flow-21017.png differ diff --git a/src/public/images/fig-flow-21376.png b/src/public/images/fig-flow-21376.png new file mode 100644 index 0000000..7f49e31 Binary files /dev/null and b/src/public/images/fig-flow-21376.png differ diff --git a/src/public/images/fig-flow-21593.png b/src/public/images/fig-flow-21593.png new file mode 100644 index 0000000..638df2e Binary files /dev/null and b/src/public/images/fig-flow-21593.png differ diff --git a/src/public/images/fig-flow-21594.png b/src/public/images/fig-flow-21594.png new file mode 100644 index 0000000..f3bd89b Binary files /dev/null and b/src/public/images/fig-flow-21594.png differ diff --git a/src/public/images/fig-flow-21595.png b/src/public/images/fig-flow-21595.png new file mode 100644 index 0000000..75011de Binary files /dev/null and b/src/public/images/fig-flow-21595.png differ diff --git a/src/public/images/fig-flow-21596.png b/src/public/images/fig-flow-21596.png new file mode 100644 index 0000000..c6a3201 Binary files /dev/null and b/src/public/images/fig-flow-21596.png differ diff --git a/src/public/images/fig-import-steps.png b/src/public/images/fig-import-steps.png new file mode 100644 index 0000000..54898d5 Binary files /dev/null and b/src/public/images/fig-import-steps.png differ diff --git a/src/public/images/fig-local-vs-cloud.png b/src/public/images/fig-local-vs-cloud.png new file mode 100644 index 0000000..5032723 Binary files /dev/null and b/src/public/images/fig-local-vs-cloud.png differ diff --git a/src/public/images/fig-n8n-community-nodes.png b/src/public/images/fig-n8n-community-nodes.png new file mode 100644 index 0000000..adf48b5 Binary files /dev/null and b/src/public/images/fig-n8n-community-nodes.png differ diff --git a/src/public/images/fig-n8n-install-modal.png b/src/public/images/fig-n8n-install-modal.png new file mode 100644 index 0000000..159483e Binary files /dev/null and b/src/public/images/fig-n8n-install-modal.png differ diff --git a/src/public/images/fig-node-prettify.png b/src/public/images/fig-node-prettify.png new file mode 100644 index 0000000..847c6a4 Binary files /dev/null and b/src/public/images/fig-node-prettify.png differ diff --git a/src/public/images/fig-operations-map.png b/src/public/images/fig-operations-map.png new file mode 100644 index 0000000..b68a424 Binary files /dev/null and b/src/public/images/fig-operations-map.png differ diff --git a/src/public/images/fig-suite-executed.png b/src/public/images/fig-suite-executed.png new file mode 100644 index 0000000..ead6145 Binary files /dev/null and b/src/public/images/fig-suite-executed.png differ diff --git a/src/public/images/fig-suite-output.png b/src/public/images/fig-suite-output.png new file mode 100644 index 0000000..522edc6 Binary files /dev/null and b/src/public/images/fig-suite-output.png differ diff --git a/src/public/images/screen_2_workflow_canvas.png b/src/public/images/screen_2_workflow_canvas.png deleted file mode 100644 index 28cf62a..0000000 Binary files a/src/public/images/screen_2_workflow_canvas.png and /dev/null differ diff --git a/src/public/images/screen_webhook_sanitizer_canvas.png b/src/public/images/screen_webhook_sanitizer_canvas.png deleted file mode 100644 index 718c5ad..0000000 Binary files a/src/public/images/screen_webhook_sanitizer_canvas.png and /dev/null differ diff --git a/src/public/llms-full.txt b/src/public/llms-full.txt index 0de9d12..0aea39a 100644 --- a/src/public/llms-full.txt +++ b/src/public/llms-full.txt @@ -1,304 +1,233 @@ -# DevDeskApp Comprehensive Documentation (llms-full.txt) +# DevDeskApp Documentation (llms-full.txt) -> The Complete Knowledge Base & Machine-Readable Reference for AI Agents, LLM Function Calling, and Automation Engineers. +> Machine-readable reference for AI agents, LLM tool calling and automation engineers. > Canonical URL: https://docs.devdeskapp.com/llms-full.txt -> Documentation Portal: https://docs.devdeskapp.com -> Main Web Application: https://www.devdeskapp.com -> NPM Package: https://www.npmjs.com/package/n8n-nodes-devdeskapp -> Official n8n Workflow Template: https://n8n.io/workflows/21017-format-json-and-secure-hr-payloads-with-devdeskapp-utilities -> GitHub Organization: https://github.com/DevdeskApp +> Documentation: https://docs.devdeskapp.com +> Web application: https://www.devdeskapp.com +> npm package: https://www.npmjs.com/package/n8n-nodes-devdeskapp +> Template #21017: https://n8n.io/workflows/21017-format-json-and-secure-hr-payloads-with-devdeskapp-utilities/ --- -## 1. Executive Summary & Value Proposition +## 1. Summary -DevDeskApp is a dual-ecosystem developer productivity platform: -1. **Web Suite**: 330+ client-side developer utilities, formatters, financial calculators, and converters running 100% in the browser with zero cloud storage or tracking at https://www.devdeskapp.com. -2. **n8n Automation Node (`n8n-nodes-devdeskapp`)**: An official community node for n8n that brings 10 core developer utilities directly onto the visual automation canvas. +DevDeskApp has two parts: +1. **Web app**: 340+ browser-based developer tools (formatters, encoders, hash generators, generators, CTC and HR calculators) at https://www.devdeskapp.com. Tools process input in the browser. +2. **n8n community node** `n8n-nodes-devdeskapp` (v0.1.6, MIT): one node, "DevDeskApp", with **19 operations in 5 resources**. -### The Problem with Cloud Utility APIs -Traditional workflow automations (Zapier, Make, default REST nodes) rely on third-party SaaS APIs to format JSON, hash secrets, or calculate payroll. This introduces: -- **Severe Latency Overhead**: 150ms to 450ms network round-trip time per HTTP request. -- **Data Privacy Violations**: Sensitive HR payrolls, employee IDs, customer PII, and webhook secrets leave corporate servers and traverse external clouds. -- **Fragile Cloud Dependencies**: Rate limits, API quota exhaustion, and vendor downtime break critical production pipelines. - -### The DevDeskApp Solution -- **Sub-Millisecond Execution**: Runs synchronously in-process inside Node.js memory in < 0.2ms per item. -- **Zero Cloud Data Leaks**: 0 KB external network egress. Payloads never touch an external server or third-party cloud. -- **Zero Configuration & Quotas**: No API keys, credentials, or paid subscriptions required. +Node behaviour: +- Runs synchronously inside the n8n process. No external API calls and no credentials. +- Every output item carries `pairedItem: { item: i }`. +- Errors throw `NodeOperationError` linked to the item. If the node's **On Error** setting is set to continue, failed items return `{ "error": "" }`. +- `usableAsTool: true`: it can be attached to an n8n AI Agent's Tool port. +- Measured node logic (10,000 items, compiled v0.1.6, Node.js 24): CTC 12.6 ms, prettify 22.6 ms, slugify 40.7 ms, SHA-256 46.5 ms. That is about 0.001 to 0.005 ms per item, before n8n's own overhead. --- -## 2. Complete Operations Reference (10 Native Engines) - -### 2.1 JSON Prettifier & Minifier (`jsonPrettifier`) -- **Purpose**: Cleans, parses, formats, or minifies raw JSON payloads from webhooks, AI agents, or databases. -- **Execution Speed**: 0.08ms – 0.15ms. -- **Parameters**: - - `mode`: `"prettify"` (human-readable) | `"minify"` (single-line token saver). - - `indent`: `2` | `4` | `tab` (applicable when mode is prettify). - - `inputJson`: String or incoming JSON object. -- **Sample Input**: - ```json - {"service":"payment","status":"success","empId":1042,"traceId":"8f2a1b9c-4e3d-4c8a-9f1e-2b3c4d5e6f7a"} - ``` -- **Minified Output (Context Saver)**: - `{"service":"payment","status":"success","empId":1042,"traceId":"8f2a1b9c-4e3d-4c8a-9f1e-2b3c4d5e6f7a"}` -- **Prettified Output**: - ```json - { - "service": "payment", - "status": "success", - "empId": 1042, - "traceId": "8f2a1b9c-4e3d-4c8a-9f1e-2b3c4d5e6f7a" - } - ``` +## 2. Operations reference ---- +Parameter names are the internal n8n names. JSON operations read `jsonInput`, Crypto operations read `textPayload`, and Text operations read `textInput`. -### 2.2 Hash Generator (`hashGenerator`) -- **Purpose**: Computes one-way cryptographic digests for webhook verification, password storage, and data integrity verification. -- **Execution Speed**: 0.05ms – 0.12ms. -- **Supported Algorithms**: `sha256`, `sha512`, `md5`, `sha1`. -- **Parameters**: - - `algorithm`: Cryptographic hashing algorithm. - - `text`: Plaintext input string. - - `encoding`: `"hex"` (default) | `"base64"`. -- **Sample Input**: - `text`: `"devdeskapp_production_webhook_secret_key"`, `algorithm`: `"sha256"` -- **Sample Output**: - ```json - { - "algorithm": "sha256", - "hash": "c0053e1a0673f4e3c35b80a1846b0a034f78de1f74075f782c5890772714041b", - "tamperProof": true, - "length": 64 - } - ``` +### 2.1 JSON (`json`) ---- +| Operation | Parameters | Output | +| :--- | :--- | :--- | +| `prettify` | `jsonInput`, `indentation` (`2` default, `4`, `tab`) | `formatted`, `success`. Throws on invalid JSON. | +| `minify` | `jsonInput` | `minified`, `success`. Throws on invalid JSON. | +| `validate` | `jsonInput` | `valid`, plus `parsed` (valid) or `error` (invalid). Never throws. | -### 2.3 CTC & Indian Payroll Calculator (`ctcCalculator`) -- **Purpose**: Deterministic Indian compensation calculation engine compliant with New & Old Tax Regimes, calculating monthly gross, basic salary, HRA, employee PF, employer PF, professional tax, and net take-home salary. -- **Execution Speed**: 0.18ms. -- **Parameters**: - - `annualCtc`: Number (e.g., `2400000`). - - `basicPercentage`: Percentage of CTC allocated to Basic (default: `50%`). - - `regime`: `"new"` | `"old"`. - - `metroCity`: Boolean (affects HRA exemption under Old Regime). -- **Sample Input**: - `annualCtc`: `2400000`, `basicPercentage`: `50`, `regime`: `"new"` -- **Sample Output**: - ```json - { - "annualCtc": 2400000, - "monthlyGross": 200000, - "basicSalaryMonthly": 100000, - "hraMonthly": 50000, - "specialAllowanceMonthly": 38000, - "employeePfMonthly": 12000, - "employerPfMonthly": 12000, - "professionalTaxMonthly": 200, - "estimatedMonthlyTds": 30800, - "netTakeHomeMonthly": 145000, - "taxRegime": "new" - } - ``` +Prettify, input `{"service":"payment","status":"success","empId":1042}`: +```json +{ "formatted": "{\n \"service\": \"payment\",\n \"status\": \"success\",\n \"empId\": 1042\n}", "success": true } +``` ---- +Validate, input `{"service": payment}`: +```json +{ "valid": false, "error": "Unexpected token 'p', \"{\"service\": payment}\" is not valid JSON" } +``` -### 2.4 Slug Generator (`slugGenerator`) -- **Purpose**: Transforms arbitrary strings, article titles, or product names into URL-safe, SEO-optimized slugs. -- **Execution Speed**: 0.04ms. -- **Features**: Unicode character transliteration, lowercasing, non-word replacement, multiple consecutive hyphens collapsed. -- **Sample Input**: `"DevDeskApp: High-Performance Node & AI Utilities 2026!"` -- **Sample Output**: - ```json - { - "original": "DevDeskApp: High-Performance Node & AI Utilities 2026!", - "slug": "devdeskapp-high-performance-node-ai-utilities-2026" - } - ``` +### 2.2 Crypto (`crypto`) ---- +| Operation | Parameters | Output | +| :--- | :--- | :--- | +| `hash` | `textPayload`, `hashAlgorithm` (`md5`, `sha1`, `sha256` default, `sha512`) | `algorithm`, `input`, `hash` (hex) | +| `base64Encode` | `textPayload` | `encoded`, `original` | +| `base64Decode` | `textPayload` | `decoded`, `original` | +| `uuid` | none | `uuid`, `version` (4) | -### 2.5 Base64 Converter (`base64Converter`) -- **Purpose**: Encodes UTF-8 strings or raw buffers into Base64 format or decodes Base64 payloads back to plaintext. -- **Execution Speed**: 0.03ms. -- **Parameters**: - - `action`: `"encode"` | `"decode"`. - - `input`: String. -- **Sample Output (Encode)**: - ```json - { - "action": "encode", - "result": "ZGV2ZGVza2FwcC1zZWN1cmUtYXV0b21hdGlvbg==" - } - ``` +Hash, input `devdeskapp_production_webhook_secret_key`, sha256: +```json +{ + "algorithm": "sha256", + "input": "devdeskapp_production_webhook_secret_key", + "hash": "7ac4c84d335afd794bde94eb049d2259cc348357a96538929f263f7c5911a686" +} +``` ---- +Base64 encode, input `devdeskapp-secure-automation`: +```json +{ "encoded": "ZGV2ZGVza2FwcC1zZWN1cmUtYXV0b21hdGlvbg==", "original": "devdeskapp-secure-automation" } +``` -### 2.6 URL Encoder / Decoder (`urlEncoder`) -- **Purpose**: RFC 3986 percent-encoding and decoding for query parameters and dynamic web links. -- **Execution Speed**: 0.03ms. -- **Parameters**: - - `action`: `"encode"` | `"decode"`. - - `input`: String. -- **Sample Output**: - ```json - { - "action": "encode", - "result": "https%3A%2F%2Fdocs.devdeskapp.com%2Fsearch%3Fq%3Ddeveloper%2Btools" - } - ``` +UUID: +```json +{ "uuid": "8af08c51-e5bf-4800-85a4-0ec7f7f24eea", "version": 4 } +``` ---- +A plain hash is not a signature. Use `ecommerce.webhookVerifier` to verify HMAC webhook signatures. -### 2.7 UUID Generator (`uuidGenerator`) -- **Purpose**: Generates cryptographically strong RFC 4122 Version 4 UUIDs for request tracing and database IDs. -- **Execution Speed**: 0.02ms. -- **Parameters**: - - `quantity`: Number of UUIDs to generate (1 to 100). -- **Sample Output**: - ```json - { - "uuid": "4f18b3e2-89c1-4d37-a56e-92d6e3f41a08", - "version": 4 - } - ``` +### 2.3 Text (`text`) ---- +| Operation | Parameters | Output | +| :--- | :--- | :--- | +| `slugify` | `textInput` | `original`, `slug` | +| `caseConverter` | `textInput`, `targetCase`: `camelCase`, `kebabCase` (default), `lowerCase`, `pascalCase`, `snakeCase`, `upperCase` | `original`, `casing`, `result` | +| `urlEncode` | `textInput` | `original`, `encoded`, `success` | +| `urlDecode` | `textInput` | `original`, `decoded`, `success` (plus `error` if malformed) | -### 2.8 Case Converter (`caseConverter`) -- **Purpose**: Converts text across naming conventions for code generators and database schema mappings. -- **Supported Cases**: `camelCase`, `snake_case`, `kebab-case`, `pascalCase`, `constantCase`. -- **Sample Output**: - ```json - { - "camelCase": "employeeSalaryRecord", - "snakeCase": "employee_salary_record", - "kebabCase": "employee-salary-record", - "pascalCase": "EmployeeSalaryRecord", - "constantCase": "EMPLOYEE_SALARY_RECORD" - } - ``` +Only the six `targetCase` values above work. Other values (for example `lower` or `title`) return `"result": ""` without an error. There is no `convertedText` field. ---- +Slugify, input `DevDeskApp: High-Performance Node & AI Utilities 2026!`: +```json +{ "original": "DevDeskApp: High-Performance Node & AI Utilities 2026!", "slug": "devdeskapp-high-performance-node-ai-utilities-2026" } +``` + +Case converter, input `Employee Salary Record`, snakeCase: +```json +{ "original": "Employee Salary Record", "casing": "snakeCase", "result": "employee_salary_record" } +``` -### 2.9 Markdown to HTML Converter (`markdownToHtml`) -- **Purpose**: Parses CommonMark and GitHub Flavored Markdown into sanitized HTML for notification emails and CMS updates. -- **Execution Speed**: 0.22ms. -- **Sample Output**: - ```json - { - "html": "

Payroll Summary

Take home: ₹1,45,000

" - } - ``` +URL encode, input `developer tools & n8n`: +```json +{ "original": "developer tools & n8n", "encoded": "developer%20tools%20%26%20n8n", "success": true } +``` ---- +### 2.4 Calculator (`calculator`) -### 2.10 JWT Claim Inspector & Decoder (`jwtDecoder`) -- **Purpose**: Decodes base64url-encoded JWT headers and claims locally for routing and permission evaluation without external auth verification. -- **Execution Speed**: 0.09ms. -- **Sample Output**: - ```json - { - "header": { "alg": "HS256", "typ": "JWT" }, - "payload": { "sub": "usr_9981", "role": "admin", "exp": 1792195200 }, - "isExpired": false - } - ``` +`ctcToInHand`: parameters `annualCtc` (default 1200000) and `basicPercentage` (default 50). ---- +Formula: +- Monthly basic = annual CTC × basic % ÷ 12. +- Employee PF = employer PF = min(12% of monthly basic, ₹1,800). +- Monthly gross = (annual CTC − 12 × employer PF) ÷ 12. +- Professional tax = ₹200 per month. +- TDS = new-regime slabs on (12 × gross − ₹75,000 standard deduction), divided by 12. +- In-hand = gross − employee PF − PT − TDS. + +It does not model HRA, special allowance, the old regime, ESIC, cess, surcharge or rebates. Treat results as estimates. -## 3. Step-by-Step Installation - -### Method 1: n8n Community Nodes UI (Recommended) -1. Open your n8n workspace. -2. Navigate to **Settings** → **Community Nodes**. -3. Click **Install**. -4. Enter the package name: - ```text - n8n-nodes-devdeskapp - ``` -5. Check the risk agreement checkbox and click **Install**. The node will appear immediately in the node library. - -### Method 2: Docker / Docker Compose -Add the package to your `docker-compose.yml` environment: -```yaml -environment: - - N8N_COMMUNITY_PACKAGES_ENABLED=true +Output for `annualCtc: 2400000`, `basicPercentage: 50`: +```json +{ + "annualCtc": 2400000, + "monthlyGross": 198200, + "monthlyInHand": 163075, + "breakdown": { + "monthlyBasic": 100000, + "employeePf": 1800, + "employerPf": 1800, + "professionalTax": 200, + "estimatedMonthlyTds": 33125 + }, + "taxRegime": "India Standard / New Tax Benchmark", + "reference": "https://www.devdeskapp.com/ctc-to-in-hand-calculator" +} ``` -Or install directly in the container: + +Other CTCs (monthly gross / TDS / in-hand): ₹12L 98,200 / 6,563 / 89,638 · ₹18L 1,48,200 / 18,125 / 1,28,075 · ₹21L 1,73,200 / 25,625 / 1,45,575 · ₹28L 2,31,533 / 43,125 / 1,86,408. + +### 2.5 E-commerce & FinTech (`ecommerce`) + +| Operation | Purpose | +| :--- | :--- | +| `catalogMapper` | Map product catalogs between Shopify, WooCommerce and Google Merchant Center | +| `upiQr` | Build a UPI payment URI and QR payload | +| `gstJsonToTable` | Flatten GSTR-1, GSTR-3B or GSTR-2B JSON into table rows | +| `profitCalculator` | Profit margin and ROAS after commission, shipping, ad spend and RTO | +| `shippingLabelCrop` | Crop coordinates for carrier shipping labels on A4 or thermal pages | +| `webhookVerifier` | Verify Razorpay, Shopify, Stripe or custom HMAC-SHA256 webhook signatures | +| `whatsappPayload` | Build WhatsApp interactive message payloads | + +Full parameters: https://docs.devdeskapp.com/n8n/operations + +--- + +## 3. Installation + +### n8n UI (recommended) +1. **Settings → Community Nodes → Install**. +2. Enter `n8n-nodes-devdeskapp`. +3. Tick the risk acknowledgement and click **Install**. + +### Docker ```bash -docker exec -it n8n npm install n8n-nodes-devdeskapp +docker exec -it n8n sh -c "mkdir -p ~/.n8n/nodes && cd ~/.n8n/nodes && npm install n8n-nodes-devdeskapp" +docker restart n8n ``` -### Method 3: NPM CLI +### Manual (self-hosted) ```bash +mkdir -p ~/.n8n/nodes && cd ~/.n8n/nodes npm install n8n-nodes-devdeskapp +# restart n8n ``` +In queue mode, install the package on the main instance and every worker. To use the node as an AI Agent tool on self-hosted n8n, set `N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true`. + --- -## 4. Official n8n Workflow Template #21017 +## 4. Published n8n templates -- **Template URL**: https://n8n.io/workflows/21017-format-json-and-secure-hr-payloads-with-devdeskapp-utilities -- **Title**: Format JSON and Secure HR Payloads with DevDeskApp Utilities -- **Architecture**: - `Webhook Trigger ➔ DevDeskApp: JSON Prettifier ➔ DevDeskApp: Security Hasher ➔ DevDeskApp: CTC Calculator ➔ Clean Output` -- **Use Case**: Ingests raw employee compensation updates, minifies the payload, cryptographically hashes the verification secret via SHA-256, computes monthly take-home salary, and delivers structured JSON to downstream HR databases. +| ID | Template | DevDeskApp operations | Status | +| :--- | :--- | :--- | :--- | +| 21017 | Developer Suite & Security Engine | prettify, hash, uuid, slugify, ctcToInHand | Runs as published | +| 21130 | CTC to In-Hand Salary Engine | slugify, ctcToInHand, uuid, hash | Runs as published | +| 21376 | Payment Webhook Sanitizer | prettify, hash, uuid, slugify (+ Webhook, Slack) | Runs as published | +| 21593 | AI LLM JSON into Postgres | prettify, uuid, hash (+ Webhook, Postgres, Slack) | Fix after import | +| 21594 | CTC Offer Letter Generator | ctcToInHand, uuid, slugify, hash (+ Google Docs, Gmail, Sheets, Slack) | Fix after import | +| 21595 | Meta CAPI Lead Sync | caseConverter, hash, uuid, slugify (+ Meta Graph API, Sheets, Slack) | Fix after import | +| 21596 | Notion to WordPress Publisher | slugify, hash, uuid, caseConverter (+ Notion, WordPress, Slack) | Fix after import | ---- +Fixes after import (as of 4 Nov 2026): +- 21593: fix the sample Code node string. Hash `$('DevDeskApp: JSON Prettifier & Schema Validator').item.json.formatted`. Read `prettified.formatted`, not `prettified.prettified`. +- 21594: read `salary.breakdown.monthlyBasic`, `salary.breakdown.employeePf` and `salary.breakdown.professionalTax`. +- 21595: set `targetCase` to `lowerCase`, and hash `{{ $json.result }}`. +- 21596: hash `$('Sample Notion Article Draft').item.json.rawHtmlContent`. Use `article.articleTitle` for the post title (there is no Title Case option). -## 5. AI Agents & LLM Function Calling Integration +Import: open the template on n8n.io and click **Use for free**, or copy the workflow JSON and paste it onto an n8n canvas with Ctrl+V / Cmd+V. -DevDeskApp seamlessly plugs into the **Tool port** of n8n AI Agent nodes (LangChain, OpenAI, Anthropic Claude, Google Gemini, Ollama). +--- + +## 5. AI Agent tool usage -### Why AI Agents Require DevDeskApp Tools -1. **Eliminate Math Hallucinations**: LLMs are language predictors and produce severe errors when calculating compound tax deductions, HRA exemptions, and PF contributions. DevDeskApp computes exact figures in 0.18ms. -2. **Context Window Token Optimization**: Raw webhook payloads waste thousands of tokens. DevDeskApp minifies JSON prior to prompting, saving 40%–60% on token fees. -3. **Data Security**: Secrets and PII are hashed into SHA-256 digests in local RAM before prompt assembly, preventing credentials from leaking to third-party LLM cloud servers. +1. Add an **AI Agent** node and connect a chat model. +2. Click **+** on the agent's **Tool** input and add **DevDeskApp**. Use one resource and operation per tool node. +3. Fill model-supplied values with `$fromAI()`, for example `{{ $fromAI('annualCtc', 'Annual CTC in rupees', 'number') }}`. -### Recommended System Prompt for AI Agents +Suggested system prompt: ```markdown -You have access to the DevDeskApp utility tool suite. -Always use DevDeskApp tools for: -- Calculating Indian payroll, salaries, PF, and tax breakdowns. -- Generating SHA-256 or MD5 cryptographic hashes. -- Formatting and validating JSON payloads. -Do NOT guess financial calculations manually. Always invoke the corresponding DevDeskApp tool. +You can call DevDeskApp tools. +- For any salary, PF, professional tax or take-home question, call the CTC tool. Never calculate it yourself. +- For hashes, Base64 or UUIDs, call the matching DevDeskApp tool and return its exact output. +- Quote numbers exactly as the tool returns them. ``` ---- - -## 6. Enterprise Performance Benchmarks - -| Metric | DevDeskApp Native Node | Cloud REST API Alternative | -| :--- | :--- | :--- | -| **Execution Latency** | **0.18ms** | 220ms – 450ms | -| **Data Privacy** | **100% In-Memory (Zero Leak)** | Transmitted over public cloud | -| **API Costs & Quotas** | **$0 / Unlimited** | Pay-per-call / Rate limited | -| **Network Failure Risk** | **0% (Offline Capable)** | Prone to HTTP timeouts / DNS drops | -| **Throughput Capacity** | **5,000+ items / sec** | Limited by connection pool | +Data sent to the chat model goes to that model's provider. Hash or strip sensitive fields before they reach the agent. --- -## 7. Machine-Readable Metadata +## 6. Metadata ```json { "@context": "https://schema.org", "@type": "SoftwareApplication", - "name": "DevDeskApp", - "applicationCategory": "DeveloperApplication, AutomationTool, AIAgentTool", - "operatingSystem": "Cross-platform (Linux, macOS, Windows, Docker)", - "npmPackage": "n8n-nodes-devdeskapp", - "officialTemplate": 21017, - "documentationUrl": "https://docs.devdeskapp.com", - "webSuiteUrl": "https://www.devdeskapp.com", - "llmsIndexUrl": "https://docs.devdeskapp.com/llms.txt", - "llmsFullUrl": "https://docs.devdeskapp.com/llms-full.txt", - "license": "MIT" + "name": "n8n-nodes-devdeskapp", + "applicationCategory": "DeveloperApplication", + "operatingSystem": "Any platform that runs n8n", + "softwareVersion": "0.1.6", + "license": "https://opensource.org/licenses/MIT", + "url": "https://docs.devdeskapp.com", + "downloadUrl": "https://www.npmjs.com/package/n8n-nodes-devdeskapp" } ``` diff --git a/src/public/llms.txt b/src/public/llms.txt index 09cf9ed..7fa4327 100644 --- a/src/public/llms.txt +++ b/src/public/llms.txt @@ -1,41 +1,52 @@ # DevDeskApp Documentation -> Official developer documentation for DevDeskApp, 350+ client-side utilities, and the `n8n-nodes-devdeskapp` community node. -> Full comprehensive context: https://docs.devdeskapp.com/llms-full.txt +> Official documentation for DevDeskApp (340+ browser-based developer tools at https://www.devdeskapp.com) and the `n8n-nodes-devdeskapp` n8n community node. +> Full context: https://docs.devdeskapp.com/llms-full.txt -DevDeskApp provides sub-millisecond, in-memory execution of developer utilities, formatters, and financial calculation engines directly inside n8n workflows and AI Agent function calling pipelines with zero external cloud API data leaks. +`n8n-nodes-devdeskapp` (v0.1.6, MIT) adds one node, DevDeskApp, with 19 operations in 5 resources. Operations run synchronously inside the n8n process with no external API calls and need no credentials. The node declares `usableAsTool: true`, so it can be attached to an n8n AI Agent's Tool port. -## Core Capabilities -- **350+ Client-Side Tools**: Online developer utilities running entirely in the browser at https://www.devdeskapp.com. -- **n8n Community Node**: Published on NPM as `n8n-nodes-devdeskapp` (v0.1.4+). -- **Official n8n Workflow Templates**: - - Template #21017 on n8n.io ("Format JSON & Secure HR Payloads with DevDeskApp"). - - Template #21130 on n8n.io ("Automate Salary & In-Hand CTC Calculations with DevDeskApp"). -- **AI Agent Function Calling**: Zero-latency deterministic tools for OpenAI, Anthropic Claude, Google Gemini, and Ollama inside n8n. -- **Zero-Latency In-Memory Execution**: Operations execute in < 0.2ms using local Node.js CPU cycles. -- **Privacy-First Zero Cloud Leak**: Payloads never leave local host memory. +## Core facts +- Web app: 340+ tools that process input in the browser. +- n8n node: 19 operations (JSON, Crypto, Text, Calculator, E-commerce). Each output item keeps `pairedItem`. Errors throw `NodeOperationError`, or return `{ "error": "..." }` when the node's On Error setting continues. +- Measured node logic for 10,000 items: CTC 12.6 ms, JSON prettify 22.6 ms, slugify 40.7 ms, SHA-256 46.5 ms. +- 7 templates published on n8n.io: #21017, #21130, #21376, #21593, #21594, #21595, #21596. #21593 to #21596 need a small fix after import, documented on each template page. -## Documentation Index -- [Getting Started](https://docs.devdeskapp.com/n8n/): Architecture overview, benefits, and execution model. -- [Installation Guide](https://docs.devdeskapp.com/n8n/installation): Setup via n8n Community Nodes UI, Docker, or npm. -- [Operations Reference](https://docs.devdeskapp.com/n8n/operations): Schema specifications for all 10 native operations. -- [Workflow Templates Hub](https://docs.devdeskapp.com/templates/): All verified blueprints and catalog. -- [Template #21017: Developer Suite](https://docs.devdeskapp.com/templates/developer-suite): JSON prettification, SHA-256, UUID, and slug generation. -- [Template #21130: CTC Salary Engine](https://docs.devdeskapp.com/templates/ctc-salary-engine): Indian payroll statutory calculation and net take-home salary. -- [How to Import Templates](https://docs.devdeskapp.com/templates/how-to-import): 1-click clipboard paste guide into n8n canvas. -- [AI Agents & LLM Function Calling](https://docs.devdeskapp.com/solutions/ai-agents): Connecting DevDeskApp to n8n AI Agents and LangChain models. -- [Enterprise Architecture](https://docs.devdeskapp.com/solutions/): Performance benchmarks comparing in-memory Node vs external REST APIs. -- [Production Best Practices](https://docs.devdeskapp.com/solutions/best-practices): Concurrency limits, memory management, and error handling. -- [Platform Architecture](https://docs.devdeskapp.com/about/architecture): Zero-leak security guarantee and cryptographic guarantees. +## Documentation index +- [Getting Started](https://docs.devdeskapp.com/n8n/): What the node does and when to use it. +- [Installation Guide](https://docs.devdeskapp.com/n8n/installation): Community Nodes UI, Docker and manual npm install. +- [Operations Reference](https://docs.devdeskapp.com/n8n/operations): Parameters, output fields and real outputs for all 19 operations. +- [Workflow Templates](https://docs.devdeskapp.com/n8n/workflow-templates): Overview of the 7 published templates. +- [Templates Hub](https://docs.devdeskapp.com/templates/): Catalog with one page per template. +- [Template #21017: Developer Suite](https://docs.devdeskapp.com/templates/developer-suite): prettify, SHA-256, UUID, slugify and CTC in one chain. +- [Template #21130: CTC Salary Engine](https://docs.devdeskapp.com/templates/ctc-salary-engine): Annual CTC to monthly in-hand breakdown. +- [Template #21376: Payment Webhook Sanitizer](https://docs.devdeskapp.com/templates/payment-webhook-sanitizer): Format, checksum and trace payment webhooks with Slack alerts. +- [Template #21593: AI LLM JSON Ingestion](https://docs.devdeskapp.com/templates/ai-llm-postgres-ingest): Strip markdown fences, format, hash and insert LLM JSON into PostgreSQL. +- [Template #21594: CTC Offer Letter Generator](https://docs.devdeskapp.com/templates/offer-letter-generator): Salary breakdown into Google Docs, Gmail and Slack. +- [Template #21595: Meta CAPI Lead Sync](https://docs.devdeskapp.com/templates/meta-capi-lead-sync): Lowercase and SHA-256 hash lead emails for the Meta Conversions API. +- [Template #21596: Notion to WordPress Publisher](https://docs.devdeskapp.com/templates/notion-wordpress-publisher): SEO slug, content hash and WordPress publishing. +- [How to Import Templates](https://docs.devdeskapp.com/templates/how-to-import): Copy a template and paste it onto the n8n canvas. +- [AI Agents & LLM Function Calling](https://docs.devdeskapp.com/solutions/ai-agents): Using the node as an AI Agent tool. +- [Local Node vs Cloud APIs](https://docs.devdeskapp.com/solutions/): Measured timings and trade-offs. +- [Production Best Practices](https://docs.devdeskapp.com/solutions/best-practices): Paired items, error handling, batches and hashing. +- [Architecture & Privacy](https://docs.devdeskapp.com/about/architecture): How the web app and the node handle data. -## Operations Summary -1. `jsonPrettifier`: Minify or format JSON with customizable indentation. -2. `hashGenerator`: Compute SHA-256, SHA-512, MD5, and SHA-1 cryptographic digests. -3. `ctcCalculator`: Indian payroll engine calculating basic, HRA, PF, and net take-home salary. -4. `slugGenerator`: SEO-friendly URL slug generator with multi-language transliteration. -5. `base64Converter`: Encode and decode UTF-8 strings to Base64. -6. `urlEncoder`: Percent-encode or decode query parameters safely. -7. `uuidGenerator`: Generate RFC4122 Version 4 UUIDs. -8. `caseConverter`: Convert strings to camelCase, snake_case, kebab-case, and PascalCase. -9. `markdownToHtml`: Render Markdown to sanitized HTML. -10. `jwtDecoder`: Decode and inspect JWT headers and claims without signature verification. +## Operations summary (resource.operation) +1. `json.prettify`: Format JSON with 2 spaces, 4 spaces or tabs. Output `formatted`. +2. `json.minify`: Remove whitespace. Output `minified`. +3. `json.validate`: Check JSON without throwing. Output `valid`, plus `parsed` or `error`. +4. `crypto.hash`: md5, sha1, sha256 or sha512 hex digest. Output `algorithm`, `input`, `hash`. +5. `crypto.base64Encode`: UTF-8 text to Base64. Output `encoded`. +6. `crypto.base64Decode`: Base64 to UTF-8 text. Output `decoded`. +7. `crypto.uuid`: Random UUID v4. Output `uuid`, `version`. +8. `text.slugify`: URL slug. Output `slug`. +9. `text.caseConverter`: camelCase, kebabCase, lowerCase, pascalCase, snakeCase or upperCase. Output `original`, `casing`, `result`. +10. `text.urlEncode`: Percent-encode text. Output `encoded`. +11. `text.urlDecode`: Decode percent-encoding. Output `decoded`. +12. `calculator.ctcToInHand`: Indian annual CTC to monthly gross, basic, PF (12% of basic, capped at ₹1,800), PT ₹200, new-regime TDS estimate and in-hand pay. +13. `ecommerce.catalogMapper`: Map product catalogs between Shopify, WooCommerce and Google Merchant Center. +14. `ecommerce.upiQr`: Build a UPI payment URI and QR payload. +15. `ecommerce.gstJsonToTable`: Flatten GSTR-1, GSTR-3B or GSTR-2B JSON into rows. +16. `ecommerce.profitCalculator`: Profit margin and ROAS after fees, shipping, ads and RTO. +17. `ecommerce.shippingLabelCrop`: Crop coordinates for carrier shipping labels. +18. `ecommerce.webhookVerifier`: Verify Razorpay, Shopify, Stripe or custom HMAC-SHA256 webhook signatures. +19. `ecommerce.whatsappPayload`: Build WhatsApp interactive message payloads. diff --git a/src/solutions/ai-agents.md b/src/solutions/ai-agents.md index 8733375..00b2244 100644 --- a/src/solutions/ai-agents.md +++ b/src/solutions/ai-agents.md @@ -1,134 +1,105 @@ --- title: 'AI Agents & LLM Function Calling' -description: 'Give n8n AI Agents and LangChain deterministic tools: clean JSON, hash secrets and calculate payroll in memory without sending data to the cloud.' +description: 'Attach the DevDeskApp node to an n8n AI Agent as a tool, so the model calls it for exact CTC maths, SHA-256 hashes and JSON formatting instead of guessing.' --- # 🤖 AI Agents & LLM Function Calling -Learn how to connect **DevDeskApp** to **n8n AI Agents**, **LangChain**, and **LLMs** (OpenAI, Anthropic Claude, Google Gemini, Ollama) as a high-performance in-memory deterministic tool suite. +The DevDeskApp node declares `usableAsTool: true`, so you can attach it to the **Tool** port of an n8n **AI Agent**. The model decides *when* to call it, and the node does the actual work: salary maths, hashing, encoding and JSON formatting. This works with any chat model n8n supports, such as OpenAI, Anthropic, Google Gemini or Ollama. --- -## 🌟 Why AI Agents Need In-Memory Tools +## 🌟 Why give an agent DevDeskApp tools? -Large Language Models (LLMs) are phenomenal at natural language comprehension, reasoning, and synthesis. However, when deployed inside production workflow automations, LLMs suffer from three critical bottlenecks: +1. **Exact maths.** LLMs often get multi-step payroll arithmetic wrong (PF caps, tax slabs, rounding). The CTC operation returns the same numbers every time. +2. **Exact strings.** A model cannot compute a SHA-256 hash, Base64 or a UUID in its head. It will invent something that looks right. +3. **Smaller prompts.** Minifying a large JSON payload before it goes into the prompt removes indentation and line breaks, which saves tokens. -1. **Arithmetic Hallucinations**: LLMs struggle with precision financial math (Indian Tax slabs, PF, take-home salaries, compound CTC calculations). -2. **Context Window Token Bloat**: Raw webhook payloads inject redundant whitespace and metadata, inflating token costs and slowing inference speeds. -3. **Data Privacy & Secret Leaks**: Passing unmasked webhook secrets, HR salaries, or cryptographic seeds to external LLM cloud APIs violates enterprise security compliance (GDPR, SOC2, HIPAA). - -
-
-
- ⚡ Native AI Tool -
-

DevDeskApp solves all three bottlenecks

-

- By plugging DevDeskApp directly into the Tool port of an n8n AI Agent node, calculations, formatting, and hashing occur entirely in local Node.js memory in < 0.2ms with zero external network calls. -

-
-
+The node runs inside your n8n process and makes no network calls of its own. Data you pass to the **chat model**, though, still goes to that model's provider. Hash or strip sensitive fields *before* they reach the agent if they must not leave your instance. --- -## 📸 Architecture: AI Agent with DevDeskApp Tool - -Below is a live n8n visual automation workflow showing an **AI Agent** powered by an **OpenAI Chat Model** delegating security operations to the **DevDeskApp Hasher Tool**: +## 📸 Architecture: AI Agent with DevDeskApp tools
- n8n AI Agent with DevDeskApp Security Hasher Tool + n8n AI Agent with a chat model and DevDeskApp nodes attached to the Tool port
-
Figure: n8n AI Agent routing verification requests to DevDeskApp Security Hasher Tool directly on canvas.
+
Figure 1: The agent receives a chat message, the model chooses a tool, and the DevDeskApp node returns an exact result.
--- -## 🎯 3 Primary AI Agent Use Cases +## 🎯 Use cases + +### 1. 🧮 Salary questions (CTC to in-hand) -### 1. 🧮 Deterministic Financial Calculations (CTC & Indian Payroll) -LLMs frequently hallucinate tax exemptions, basic salary percentages, and employer PF contributions. +Prompt: *"What is the monthly take-home and employee PF for a ₹24,00,000 CTC?"* -- **How it works**: When a user prompts the AI Agent: - `"Calculate the monthly take-home salary and employee PF for a ₹24,00,000 CTC under the New Tax Regime."` -- **Agent Action**: Instead of calculating math internally, the AI Agent invokes the `devdeskapp.ctcCalculator` tool. -- **Result**: Exactly **₹1,45,000** take-home and **₹12,000** PF returned deterministically in **0.18ms**. +The agent calls the DevDeskApp tool set to **Calculator → CTC to In-Hand Salary** with `annualCtc = 2400000`, and the node returns: ```json { - "monthlyGross": 200000, - "basicMonthly": 100000, - "employeePf": 12000, - "employerPf": 12000, - "takeHomeInHand": 145000, - "professionalTax": 200, - "regime": "new" + "annualCtc": 2400000, + "monthlyGross": 198200, + "monthlyInHand": 163075, + "breakdown": { + "monthlyBasic": 100000, + "employeePf": 1800, + "employerPf": 1800, + "professionalTax": 200, + "estimatedMonthlyTds": 33125 + }, + "taxRegime": "India Standard / New Tax Benchmark", + "reference": "https://www.devdeskapp.com/ctc-to-in-hand-calculator" } ``` ---- +The agent then answers with **₹1,63,075 in hand per month** and **₹1,800 employee PF**. PF is 12% of basic, capped at ₹1,800, and TDS uses the new-regime slabs with the ₹75,000 standard deduction. Treat the output as an estimate, not payroll advice. See the [Operations Reference](/n8n/operations#_4-hr-calculator-calculator) for the full formula. -### 2. 🧹 Context Window Compression (JSON Cleaning) -Enterprise webhooks from Stripe, Shopify, or Salesforce can easily reach 10,000+ characters of unformatted JSON, consuming valuable LLM context window tokens. +### 2. 🧹 Shrinking JSON before it reaches the model -- **How it works**: Before piping incoming webhooks into the AI Agent prompt, pass the payload through `devdeskapp.jsonPrettifier` (minify mode) or `devdeskapp.slugGenerator`. -- **Result**: Strips unwanted whitespace, standardizes keys, and trims context tokens by **up to 60%**, significantly lowering LLM API bills. +Put a DevDeskApp node set to **JSON → Minify** *before* the agent, as a normal step rather than a tool, and pass its `minified` output into the prompt. Removing whitespace from a pretty-printed payload usually cuts its size noticeably. The exact saving depends on how indented the input was. ---- +### 3. 🔐 Hashing identifiers -### 3. 🔐 Zero-Leak Cryptographic Hashing (SHA-256) -Protect sensitive corporate credentials before feeding context to third-party LLMs. +Ask the agent to fingerprint a value, or hash IDs before the agent sees them. **Crypto → Hash** with `sha256` returns, for example: -- **How it works**: Hash passwords, API verification tokens, and user IDs locally into SHA-256 hexadecimal digests. -- **Result**: The AI Agent only ever sees the tamper-proof cryptographic fingerprint, preventing credentials from entering external LLM training loops or server logs. +```json +{ "algorithm": "sha256", "input": "devdeskapp", "hash": "3b7d21ca0cac379b91140262ad701f739f04f3dae19adf5ea04aa7e118fa50d3" } +``` + +The output echoes `input`. If the raw value is sensitive, remove `input` with a **Set** node before passing the result on. --- -## ⚙️ Step-by-Step Setup in n8n +## ⚙️ Setup in n8n -### Step 1: Add the AI Agent Node -1. On your n8n workflow canvas, click **+** and add an **AI Agent** node. -2. Set **Prompt Type** to `Define below` or connect a **When chat message received** trigger. +### Step 1: Add the agent and a chat model +1. Add a **When chat message received** trigger and an **AI Agent** node. +2. Connect a chat model (for example **OpenAI Chat Model**, **Anthropic Chat Model** or **Ollama Chat Model**) to the agent's **Chat Model** input. -### Step 2: Connect a Chat Model -1. Connect an **OpenAI Chat Model** (GPT-4o / GPT-4o-mini), **Anthropic Chat Model** (Claude 3.5 Sonnet), or **Ollama** node to the `Chat Model` input port. +### Step 2: Attach DevDeskApp as a tool +1. Click **+** on the agent's **Tool** input and search for **DevDeskApp**. +2. Pick the **Resource** and **Operation**, for example **Calculator → CTC to In-Hand Salary**. Each tool node runs one operation, so add one node per tool you want to offer (CTC, Hash, Minify and so on). +3. Give each tool a clear name and description, such as *"Calculates Indian monthly in-hand salary from annual CTC in rupees"*. The model uses this text to decide when to call it. +4. For inputs the model should fill in, use `$fromAI()` in the parameter, for example **Annual CTC** = `{{ $fromAI('annualCtc', 'Annual CTC in rupees', 'number') }}`. -### Step 3: Connect DevDeskApp as a Custom Tool -1. From the node selector, search for **DevDeskApp**. -2. Drag the output into the **Tool** input port of the AI Agent node. -3. Select the desired operation: - - `Hash Generator` (SHA-256, SHA-512, MD5) - - `CTC Calculator` (Indian Payroll) - - `JSON Prettifier & Minifier` - - `Base64 Encoder / Decoder` -4. Provide a descriptive Tool Name (e.g., `DevDeskApp_Payroll_Engine` or `DevDeskApp_Security_Hasher`). +::: tip Self-hosted n8n +For community nodes to appear as agent tools on self-hosted n8n, set the environment variable `N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true` and restart n8n. +::: -### Step 4: System Prompt Configuration -Add the following instruction to your AI Agent's system prompt: +### Step 3: System prompt ```markdown -You have access to the DevDeskApp utility tool suite. -Always use DevDeskApp tools for: -- Calculating Indian payroll, salaries, PF, and tax breakdowns. -- Generating SHA-256 or MD5 cryptographic hashes. -- Formatting and validating JSON payloads. -Do NOT attempt to guess financial formulas manually. Always invoke the corresponding DevDeskApp tool. +You can call DevDeskApp tools. +- For any salary, PF, professional tax or take-home question, call the CTC tool. Never calculate it yourself. +- For hashes, Base64 or UUIDs, call the matching DevDeskApp tool and return its exact output. +- Quote numbers exactly as the tool returns them. ``` --- -## 🤖 Supported AI Models & Frameworks - -| Provider | Models Supported | Integration Type | Latency | -| :--- | :--- | :--- | :--- | -| **OpenAI** | GPT-4o, GPT-4o-mini, GPT-4 Turbo | Function Calling / Tool Port | < 0.2ms local | -| **Anthropic** | Claude 3.5 Sonnet, Claude 3 Opus | Tool Calling | < 0.2ms local | -| **Google** | Gemini 1.5 Pro, Gemini 1.5 Flash | Tool Calling | < 0.2ms local | -| **Ollama** | Llama 3.1, Mistral, Qwen 2.5 | Local Agent Tools | < 0.2ms local | -| **LangChain** | All LangChain agents in n8n | Structured Tool Port | < 0.2ms local | - ---- - -## 🚀 Next Steps +## 🚀 Next steps -- Explore all 10 native tools in the [Operations Reference](/n8n/operations). -- Inspect local Node execution speed vs cloud APIs in [Enterprise Architecture](/solutions/). -- Download the official pre-built workflow blueprint in [Workflow Templates](/n8n/workflow-templates). +- See all 19 operations in the [Operations Reference](/n8n/operations). +- Compare local and cloud execution in [Enterprise Architecture](/solutions/). +- Start from a ready workflow in [Workflow Templates](/n8n/workflow-templates). diff --git a/src/solutions/best-practices.md b/src/solutions/best-practices.md index d03d5e1..f2edcfe 100644 --- a/src/solutions/best-practices.md +++ b/src/solutions/best-practices.md @@ -1,84 +1,91 @@ --- title: 'Production Best Practices' -description: 'Best practices for running n8n-nodes-devdeskapp in production: error handling, input validation, secrets, versioning and monitoring workflows.' +description: 'Best practices for running n8n-nodes-devdeskapp in production: paired items, error handling with On Error, batch sizes, AI agent tools and safe hashing.' --- # Production Best Practices -Implementing automated workflows in production requires attention to data integrity, error boundaries, and throughput optimization. This guide outlines recommended practices when deploying `n8n-nodes-devdeskapp` at scale. +These practices help you run `n8n-nodes-devdeskapp` reliably in production workflows. --- -## 1. Preserving Data Lineage with pairedItem +## 1. Reaching earlier data with paired items -In n8n, data flows through nodes as arrays of items. When downstream nodes query prior inputs using `$item(0)`, n8n relies on **pairedItem metadata** to trace which input item produced which output item. - -`n8n-nodes-devdeskapp` strictly attaches pairedItem indices: +n8n passes data between nodes as a list of items. Every item the DevDeskApp node returns carries **`pairedItem`** metadata that points back to the input item it came from: ```typescript -// Internal node execution pattern: +// Inside the node, for every input item i: returnData.push({ json: result, - pairedItem: { item: i } + pairedItem: { item: i }, }); ``` -### Best Practice -When chaining multiple transformations (e.g. Ingest -> DevDeskApp Slug -> DevDeskApp Hash -> Postgres Upsert), you can safely access original webhook inputs downstream using: +### Best practice +`$json` and `$input.item.json` only show the **previous** node's output. After a DevDeskApp node, that is the node's result (for example `{ "hash": "…" }`), not your original fields. To read a field from an earlier node, reference that node by name. n8n follows `pairedItem` back to the matching item: + ```javascript -// In downstream expressions: -$input.item.json.candidateName +// In a later expression or Code node (Run Once for Each Item): +$('Webhook').item.json.body.candidateName ``` -n8n will always map back to the correct source item even if previous steps filtered or modified elements. + +This works through a chain such as *Webhook → DevDeskApp Slugify → DevDeskApp Hash → Postgres*, because each DevDeskApp node keeps the pairing. --- -## 2. Robust Error Handling +## 2. Error handling -In standard mode, if an unexpected input is received (e.g. invalid Base64 string), `n8n-nodes-devdeskapp` throws an item-linked `NodeOperationError`: +If an item cannot be processed (for example invalid JSON in **Prettify**), the node throws a `NodeOperationError` linked to that item, and the execution stops: ```typescript throw new NodeOperationError(this.getNode(), error, { itemIndex: i }); ``` -### Production Recommendation -If your pipeline handles bulk incoming batches from third parties where isolated records might be malformed: -1. Open the node settings tab (cog icon). -2. Enable **Continue On Fail**. -3. When enabled, failed items output an error structure rather than aborting the entire workflow execution. -4. Add an **If** or **Switch** node downstream to route failed records into a Dead Letter Queue (DLQ) or Slack alert channel. +### Production recommendation +For batches from third parties where a few records may be malformed: + +1. Open the DevDeskApp node and go to **Settings**. +2. Set **On Error** to **Continue** or **Continue (using error output)**. +3. Failed items are returned as `{ "error": "" }` with the same `pairedItem`, and the remaining items keep going. +4. With **Continue (using error output)**, connect the node's error output to a Slack alert or a dead-letter table. With **Continue**, add an **If** node that checks whether `error` exists. + +::: tip Use Validate when failures are expected +**JSON → Validate** never throws. It returns `valid: true/false` plus `error`, so you can branch on bad input without changing the error setting. +::: --- -## 3. High-Throughput Batch Processing +## 3. Batch processing + +The node's operations are synchronous and run in the n8n process with no network calls: -Because `n8n-nodes-devdeskapp` runs synchronous in-memory logic: -- **Avoid SplitInBatches where possible**: You do not need to split inputs into batches of 10 or 50 to prevent rate-limiting or socket exhaustion. The node can process arrays of 10,000 items in a single execution tick. -- **Memory Consumption**: Processing 50,000 items in a single pass consumes minimal V8 heap. After execution, transient string allocations are automatically collected during normal Node.js garbage collection cycles. +- **No rate limits.** You do not need **Loop Over Items** to avoid throttling. In a local benchmark, 10,000 items took about 13 ms for CTC, 23 ms for Prettify, 41 ms for Slugify and 46 ms for SHA-256 (node logic only, excluding n8n overhead). +- **Memory comes from your data.** Memory use grows with the size of the items you pass in. For very large or deeply nested payloads, split the input first so a single execution does not hold everything at once. --- -## 4. Leveraging usableAsTool with AI Agents +## 4. Using the node as an AI Agent tool + +The node declares `usableAsTool: true`, so it can be attached to an n8n **AI Agent** as a tool. -`n8n-nodes-devdeskapp` specifies `usableAsTool: true` in its node description. This allows the node to be attached as a **Tool** to n8n AI Agent nodes (OpenAI, Anthropic, or Local Ollama models). +### Setup steps +1. Add an **AI Agent** node and connect a chat model. +2. Click **+** on the agent's **Tool** input and add **DevDeskApp**. +3. Choose one resource and operation per tool node, for example **Calculator → CTC to In-Hand Salary** or **Crypto → Hash**. +4. Fill model-supplied inputs with `$fromAI()`, for example `{{ $fromAI('annualCtc', 'Annual CTC in rupees', 'number') }}`. +5. Tell the agent in its system prompt to call the tool for salary or hash questions instead of calculating. -### Setup Steps -1. Add an **AI Agent** node to your canvas. -2. Under the **Tools** input of the AI Agent node, connect the **DevDeskApp** node. -3. Select the required resource (e.g. `HR & Calculator` or `Crypto & Hash`). -4. In the AI Agent prompt, instruct the agent: - > "When a user asks for salary breakdown or take-home pay, call the DevDeskApp In-Hand Salary tool with their CTC." -5. The LLM will parse parameters from chat and invoke the deterministic calculator without hallucinations. +On self-hosted n8n, set `N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true` so community nodes can be used as tools.
- DevDeskApp AI Agent Tool Canvas + n8n AI Agent with DevDeskApp nodes attached to the Tool port
-
Figure 1: DevDeskApp wired as an autonomous tool into an n8n AI Agent.
+
Figure 1: DevDeskApp nodes attached to an AI Agent's Tool port. More in AI Agents & LLMs.
--- -## 5. Security & Secret Protection +## 5. Hashing and secrets -When hashing or encoding sensitive tokens: -- Use **SHA-256** or **SHA-512** for signatures and integrity checks. -- Reserve **MD5** strictly for legacy non-security hashes (such as Gravatar email lookups). -- DevDeskApp does not log strings to disk or external monitoring platforms. Workflows running inside air-gapped environments remain completely isolated. +- Use **SHA-256** or **SHA-512** for integrity checks and fingerprints. Reserve **MD5** and **SHA-1** for legacy lookups such as Gravatar. +- A plain hash is **not** a signature. To verify Razorpay, Shopify or Stripe webhooks, use **E-Commerce & FinTech → Webhook Signature Verifier**, which checks the provider's HMAC-SHA256 signature with your shared secret. Store that secret in a credential or environment variable, not in the workflow JSON. +- The **Hash** output includes the original `input`. Drop it with a **Set** node if the raw value must not travel further. +- The node makes no network calls and writes nothing to disk. n8n itself stores execution data, including inputs and outputs, according to your **execution saving** settings, so turn those down for workflows that handle secrets. diff --git a/src/solutions/index.md b/src/solutions/index.md index 3ed06d9..faa73f2 100644 --- a/src/solutions/index.md +++ b/src/solutions/index.md @@ -1,67 +1,52 @@ --- title: 'Local n8n Node vs Cloud APIs' -description: 'Why run utilities in a local n8n node instead of calling cloud APIs: latency, cost, rate limits and keeping sensitive data inside your infrastructure.' +description: 'Why run utilities in a local n8n node instead of calling cloud APIs: measured latency, cost, rate limits and keeping sensitive data inside your infrastructure.' --- # Local Node vs Cloud APIs -When architecting data transformation and developer utility pipelines in n8n, engineering teams often evaluate whether to use a local native community node or call an external cloud-hosted microservice/API. - -This document outlines the architectural trade-offs, security implications, and performance benchmarks comparing both approaches. +To format, hash or calculate data inside an n8n workflow, you can either call an external utility API over HTTP or run the logic in a community node inside n8n. This page compares the two. --- -## Architectural Comparison - -``` -Approach A: External Cloud API Architecture -[n8n Workflow] --(HTTPS POST)--> [Internet Router] --(TLS Handshake)--> [Public API Gateway] - | - [Auth / Rate Limit] - | - [Cloud Compute] - | -[n8n Workflow] <--(HTTPS Response JSON)-- [Internet Router] <------------+ -Total Latency: 150ms - 800ms per item. External dependency risk. +## Architectural comparison +
+ Measured time for 10,000 items in the local DevDeskApp node compared with sequential cloud API calls +
+
Figure 1: Measured node logic for 10,000 items, compared with an illustrative 150 ms HTTP round trip per call.
-Approach B: DevDeskApp Native Node Architecture -+-------------------------------------------------------+ -| n8n Workflow Container / Node.js Process | -| | -| [n8n Item] ---> [DevDeskApp Native Function] ---> Next Node | -+-------------------------------------------------------+ -Total Latency: < 0.1ms per item. 100% In-Memory. Zero Network. -``` +- **Cloud API:** each item becomes an HTTPS request: DNS, TLS, the network round trip, then the provider's auth and rate limiting. +- **DevDeskApp node:** each item is a function call in the same Node.js process as the rest of the workflow. There is no network step. --- -## Key Decision Dimensions +## Key decision dimensions -### 1. Latency & Batch Throughput -- **Cloud API**: An external HTTP call incurs DNS resolution, TLS handshake, and network transport latency (typically 50ms to 400ms per request). In an n8n workflow iterating over 500 items, sequential HTTP calls take **100 to 200 seconds**. -- **DevDeskApp**: Executes synchronous JavaScript and Node.js native bindings directly in the active process. Iterating over 500 items finishes in **less than 15 milliseconds**. +### 1. Latency and batch throughput +- **Cloud API:** a typical round trip is tens to hundreds of milliseconds. At 150 ms per call, 500 sequential items take about 75 seconds and 10,000 take about 25 minutes, before any rate limits. +- **DevDeskApp:** in a local benchmark of the compiled v0.1.6 logic, 10,000 items took 12.6 ms (CTC) to 46.5 ms (SHA-256). That is a few microseconds per item. n8n's own per-node overhead comes on top, but it is the same for any node. -### 2. Information Security & Compliance (GDPR, SOC2, HIPAA) -- **Cloud API**: When hashing sensitive emails or computing executive compensation figures via an external API, that data crosses external boundaries and lands in third-party access logs. -- **DevDeskApp**: Zero data packets leave your container. All processing is strictly confined to your self-hosted or private cloud n8n infrastructure. +### 2. Data privacy +- **Cloud API:** the emails, salaries or payloads you send cross your network boundary and may appear in the provider's logs. +- **DevDeskApp:** the node makes no network calls. The data stays wherever your n8n runs: self-hosted, private cloud or n8n Cloud. -### 3. Reliability & Blast Radius -- **Cloud API**: If the third-party API goes down, experiences an outage, or revokes your API key, all your critical automated pipelines fail immediately. -- **DevDeskApp**: Independent of third-party uptime. As long as your n8n container is alive, your utilities run with 100% deterministic reliability. +### 3. Reliability +- **Cloud API:** an outage, expired key or changed API breaks every workflow that depends on it. +- **DevDeskApp:** no third-party dependency at run time. If n8n is running, the node runs, and the same input always gives the same output. -### 4. Financial Cost & Licensing -- **Cloud API**: APIs bill per thousand requests or require recurring monthly subscription tiers that scale with automation volume. -- **DevDeskApp**: Released under the permissive MIT open-source license. Run millions of executions with zero licensing fees. +### 4. Cost and licensing +- **Cloud API:** usually billed per request or per monthly tier. +- **DevDeskApp:** MIT licensed and free to use, with no per-execution fees. --- -## Comparative Matrix +## Comparative matrix -| Characteristic | DevDeskApp Native Node | Cloud / SaaS Utility API | Custom Code Node | +| Characteristic | DevDeskApp node | Cloud / SaaS utility API | Custom Code node | | :--- | :--- | :--- | :--- | -| **Execution Latency** | `< 0.2 ms` | `100 - 800 ms` | `< 0.5 ms` | -| **Setup Complexity** | Zero configuration | High (API keys, secrets) | Moderate (Requires coding) | -| **Payload Privacy** | 100% On-Premises | Transmitted externally | 100% On-Premises | -| **Maintainability** | Auto-updated via npm | Managed by provider | High maintenance debt | -| **Network Dependency** | Offline capable | Internet required | Offline capable | -| **UI Form Validation** | Built-in n8n controls | Generic HTTP fields | None | +| **Time per item (node logic)** | ~0.001–0.005 ms (measured) | Tens to hundreds of ms | Similar to DevDeskApp | +| **Setup** | Install once, no credentials | API keys and credentials | Write and maintain JS | +| **Payload privacy** | Stays in your n8n instance | Sent to the provider | Stays in your n8n instance | +| **Updates** | Update from **Settings → Community Nodes** | Managed by the provider | You maintain the code | +| **Network needed** | No | Yes | No | +| **UI** | Typed n8n fields and dropdowns | Generic HTTP Request fields | Code editor | diff --git a/src/templates/ai-llm-postgres-ingest.md b/src/templates/ai-llm-postgres-ingest.md new file mode 100644 index 0000000..42ab088 --- /dev/null +++ b/src/templates/ai-llm-postgres-ingest.md @@ -0,0 +1,110 @@ +--- +title: 'Template #21593: AI LLM JSON Ingestion' +description: 'n8n template #21593: strip markdown fences from LLM output, format and fingerprint the JSON with DevDeskApp, add a UUID trace ID, and insert clean records into PostgreSQL with Slack alerts.' +--- + +# 🤖 Template #21593: Sanitize & Ingest AI LLM JSON into Postgres with DevDeskApp and Slack + +
+ Published on n8n.io + Template ID: 21593 +
+ +🔗 **Template on n8n.io:** [n8n.io/workflows/21593](https://n8n.io/workflows/21593-sanitize-and-ingest-ai-llm-json-into-postgres-with-devdeskapp-and-slack/) + +
+ Template 21593 AI LLM JSON ingestion workflow on the n8n canvas +
+
Figure 1: The template on the n8n canvas.
+ +--- + +## 🎯 Overview + +LLMs often wrap JSON in markdown fences (`` ```json … ``` ``), which breaks `JSON.parse` and SQL inserts. This template is an ingestion gateway for model output: + +1. A **Code node** strips the markdown fences from `rawResponse`. +2. The **DevDeskApp JSON Prettifier** parses and formats the cleaned string. Invalid JSON stops here with a clear error. +3. **DevDeskApp UUID** adds a trace ID that links the database row, logs and Slack. +4. **DevDeskApp SHA-256** fingerprints the formatted JSON for deduplication and audit. +5. An **If** node sends valid records to **PostgreSQL** plus a Slack log, and malformed ones to a Slack alert. + +::: danger Known issue in the published version (checked 4 Nov 2026) +Running the published template end to end shows three problems. Fix them after import: +1. **Sample node fails to run.** `Sample Raw LLM Output (With Markdown)` writes the response with four backticks (` ```` `), which is a JavaScript syntax error. Change it to a normal string, for example `rawResponse: "```json\n{ ... }\n```"`. +2. **The hash covers an empty string.** `SHA-256 Integrity Hasher` reads `{{ $json.prettified }}`, but the prettifier outputs `formatted`, and the previous node is the UUID generator. Use `{{ $('DevDeskApp: JSON Prettifier & Schema Validator').item.json.formatted }}`. +3. **The Postgres branch crashes.** `Format Clean Database Record` calls `JSON.parse(prettified.prettified)`. Change both `prettified.prettified` to `prettified.formatted`. + +With these three changes the workflow runs through to the Postgres insert and Slack log. +::: + +--- + +## 📸 Pipeline + +
+ Template 21593 pipeline: ingest, strip fences, three DevDeskApp nodes, If gate, Postgres and Slack branches +
+
Figure 2: Node order and branches in the published template.
+ +| Node | Resource · Operation | Purpose | +| :--- | :--- | :--- | +| Strip Markdown Code Fences | Code node | Removes leading `` ```json `` and trailing `` ``` `` | +| DevDeskApp: JSON Prettifier & Schema Validator | `json` · `prettify` | Parses and formats `cleanedJsonString`. Throws on invalid JSON. | +| DevDeskApp: Trace UUID Generator | `crypto` · `uuid` | Trace ID | +| DevDeskApp: SHA-256 Integrity Hasher | `crypto` · `hash` (`sha256`) | Fingerprint of the formatted JSON | +| If: Valid JSON & Clean Schema | `if` | Routes to Postgres or to the error alert | + +The DevDeskApp node does not remove markdown fences itself. That is the Code node's job, and the node then parses and formats the result. + +--- + +## ⚡ Execution sample (with the fixes above) + +**Input** (`rawResponse` from the sample node): + +````text +```json +{ + "customer_id": "cust_88291", + "sentiment": "positive", + "confidence_score": 0.94, + "intent": "upsell_enterprise", + "extracted_topics": ["security_compliance", "sso", "audit_logs"], + "action_required": true +} +``` +```` + +**Output** of `Format Clean Database Record`: + +```json +{ + "traceId": "110ae286-1a41-46ec-9142-ec2a2b8f22c5", + "sha256Checksum": "07df809dca91e8094d9a16a331dd03b97e1aea4ce54b8166bd1a15fa446d9d59", + "model": "gpt-4o", + "parsedData": { + "customer_id": "cust_88291", + "sentiment": "positive", + "confidence_score": 0.94, + "intent": "upsell_enterprise", + "extracted_topics": ["security_compliance", "sso", "audit_logs"], + "action_required": true + }, + "sqlInsertQuery": "INSERT INTO ai_agent_records (trace_id, model, payload, checksum) VALUES (...)" +} +``` + +::: warning Use query parameters in production +The sample builds `sqlInsertQuery` by string concatenation. For real data, use the Postgres node's **Insert** operation or query parameters instead of running that string. +::: + +--- + +## 📥 Import it + +1. Make sure `n8n-nodes-devdeskapp` is installed ([installation guide](/n8n/installation)). +2. Open the [template on n8n.io](https://n8n.io/workflows/21593-sanitize-and-ingest-ai-llm-json-into-postgres-with-devdeskapp-and-slack/) and click **Use for free**, or copy the workflow JSON. +3. Paste it onto a new workflow canvas with **`Ctrl + V`** (**`Cmd + V`** on macOS). +4. Apply the three fixes from the known-issue box above. +5. Add your **PostgreSQL** and **Slack** credentials, create the `ai_agent_records` table, and click **Test workflow**. diff --git a/src/templates/ctc-salary-engine.md b/src/templates/ctc-salary-engine.md index 2b3fed5..2fb575b 100644 --- a/src/templates/ctc-salary-engine.md +++ b/src/templates/ctc-salary-engine.md @@ -1,84 +1,90 @@ --- title: 'Template #21130: CTC Salary Engine' -description: 'n8n template #21130: calculate Indian payroll from CTC, including employee and employer PF, professional tax and net monthly take-home pay.' +description: 'n8n template #21130: estimate Indian monthly in-hand pay from annual CTC with employee and employer PF, professional tax and TDS, then build an offer payload.' --- # 💰 Template #21130: Employee CTC to In-Hand Salary Engine
- Published on n8n.io Creator Portal - Template ID: 21130 + Published on n8n.io + Template ID: 21130 + No credentials needed
-🔗 **Direct n8n Template Link:** -[n8n.io/workflows/21130-automate-salary-and-in-hand-ctc-calculations-with-devdeskapp](https://n8n.io/workflows/21130-automate-salary-and-in-hand-ctc-calculations-with-devdeskapp) +🔗 **Template on n8n.io:** [n8n.io/workflows/21130](https://n8n.io/workflows/21130-generate-indian-ctc-offers-and-payroll-breakdowns-with-devdeskapp/)
- CTC Calculator Canvas + Template 21130 CTC salary engine workflow on the n8n canvas
-
Figure 1: Automated CTC evaluation flow in n8n.
+
Figure 1: The template on the n8n canvas.
--- -## 🎯 Overview & Use Cases +## 🎯 Overview -Modern HR, Recruiting, and Finance operations frequently need to calculate net in-hand salary projections from gross CTC figures during offer generation, payroll forecasting, and candidate negotiations. +HR and recruiting teams often need a quick in-hand estimate while preparing an offer. This template takes a sample candidate (Arjun Sharma, Senior Cloud Architect, ₹18,00,000 CTC) through four DevDeskApp nodes: -Traditional approaches suffer from major challenges: -- **LLM Hallucinations:** AI agents routinely make arithmetic mistakes on statutory PF percentages and tax brackets. -- **Privacy Violations:** Sending confidential employee compensation figures to third-party cloud APIs breaches HR data compliance. -- **Complex Code Maintenance:** Writing custom JavaScript functions for each payroll rule increases maintenance debt. +1. **Candidate Slugifier** builds `arjun-sharma-senior-cloud-architect`. +2. **Indian CTC Payroll Engine** estimates monthly gross, PF, PT, TDS and in-hand pay. +3. **Offer Tracking UUID** creates the offer reference. +4. **Compensation Hasher** computes a SHA-256 of `name | CTC | in-hand` as a tamper check. -**Template #21130** solves this by providing a dedicated, deterministic calculation engine executing directly in your local n8n instance in **< 0.2ms**. +A Code node then assembles an offer and Slack-ready payload. Everything runs inside n8n with no external API calls. --- -## ⚙️ Parameter Configuration +## ⚙️ Parameter configuration
- CTC Parameter Drawer + HR and Calculator node parameters: Annual CTC and Basic Salary Percentage, with the calculation steps
-
Figure 2: Configuring annual compensation parameters in the DevDeskApp node drawer.
+
Figure 2: The two parameters of CTC to In-Hand Salary and how the node uses them.
-### Input Parameters -| Parameter | Type | Default | Description | -| :--- | :--- | :--- | :--- | -| `Annual CTC` | Number | `2400000` | Total cost to company in INR (e.g. ₹24,00,000 / annum) | -| `Basic Salary %` | Number | `50` | Basic salary proportion of gross CTC (Default: 50%) | -| `Include PF` | Boolean | `true` | Calculates statutory Employee (12%) & Employer (12%) Provident Fund | -| `Include PT` | Boolean | `true` | Automatically factors statutory Professional Tax (₹200/mo) | +| Parameter | Internal name | Type | Node default | Value in this template | +| :--- | :--- | :--- | :--- | :--- | +| Annual CTC | `annualCtc` | Number | `1200000` | `1800000` (from the sample node) | +| Basic Salary Percentage | `basicPercentage` | Number | `50` | `50` (from the sample node) | + +PF is always 12% of basic, capped at ₹1,800 a month, and professional tax is a flat ₹200. There are no switches to turn them off. See the [Operations Reference](/n8n/operations#_4-hr-calculator-calculator) for the full formula and its limits. --- -## 📊 Structured JSON Output +## 📊 Structured JSON output
- CTC Execution Output + CTC to In-Hand output for 18 lakh CTC: monthly in-hand 1,28,075
-
Figure 3: Complete salary breakdown returned in structured JSON format.
+
Figure 3: Real output of the payroll node for ₹18,00,000 CTC.
```json { - "annualCtc": 2400000, - "monthlyGross": 200000, - "monthlyInHand": 145000, + "annualCtc": 1800000, + "monthlyGross": 148200, + "monthlyInHand": 128075, "breakdown": { - "basic": 100000, - "hra": 50000, - "specialAllowance": 34600, - "employeePf": 12000, - "employerPf": 12000, + "monthlyBasic": 75000, + "employeePf": 1800, + "employerPf": 1800, "professionalTax": 200, - "estimatedTaxMonthly": 40200 - } + "estimatedMonthlyTds": 18125 + }, + "taxRegime": "India Standard / New Tax Benchmark", + "reference": "https://www.devdeskapp.com/ctc-to-in-hand-calculator" } ``` +The final Code node turns this into a formatted offer payload, for example `"estimatedMonthlyInHandFormatted": "₹1,28,075"` and `"offerReferenceId": "OFFER-ARJUN-SHARMA-SENIO-83AF855D"`. + +
+ Template 21130 after a successful test run with all nodes green +
+
Figure 4: A successful test run, with every node green and 1 item per node.
+ --- -## 📥 How to Import into Your n8n Instance +## 📥 Import it -1. Open the [n8n Creator Portal page](https://n8n.io/workflows/21130-automate-salary-and-in-hand-ctc-calculations-with-devdeskapp). -2. Click **"Use workflow"** or copy the workflow JSON payload. -3. In your n8n workspace, press **`Ctrl + V`** (or **`Cmd + V`** on Mac). -4. Connect the node into your HRMS webhook or Slack bot pipeline! +1. Make sure `n8n-nodes-devdeskapp` is installed ([installation guide](/n8n/installation)). +2. Open the [template on n8n.io](https://n8n.io/workflows/21130-generate-indian-ctc-offers-and-payroll-breakdowns-with-devdeskapp/) and click **Use for free**, or copy the workflow JSON. +3. In n8n, paste it onto a new workflow canvas with **`Ctrl + V`** (**`Cmd + V`** on macOS). +4. Click **Test workflow**, then replace the sample node with your HRMS webhook, form or sheet. diff --git a/src/templates/developer-suite.md b/src/templates/developer-suite.md index 0f9b319..ada55b7 100644 --- a/src/templates/developer-suite.md +++ b/src/templates/developer-suite.md @@ -1,85 +1,101 @@ --- title: 'Template #21017: Developer Suite' -description: 'n8n template #21017: format JSON, compute SHA-256 digests, generate UUID v4 trace IDs and evaluate CTC payloads with n8n-nodes-devdeskapp.' +description: 'n8n template #21017: format JSON, compute a SHA-256 digest, add a UUID v4 trace ID, build a slug and estimate CTC take-home with n8n-nodes-devdeskapp.' --- # 🌟 Template #21017: Developer Suite & Security Engine
- Published on n8n.io Creator Portal - Template ID: 21017 + Published on n8n.io + Template ID: 21017 + No credentials needed
-🔗 **Direct n8n Template Link:** -[n8n.io/workflows/21017-format-json-and-secure-hr-payloads-with-devdeskapp-utilities](https://n8n.io/workflows/21017-format-json-and-secure-hr-payloads-with-devdeskapp-utilities) +🔗 **Template on n8n.io:** [n8n.io/workflows/21017](https://n8n.io/workflows/21017-format-json-and-secure-hr-payloads-with-devdeskapp-utilities/) + +
+ Template 21017 Developer Suite workflow on the n8n canvas +
+
Figure 1: The template on the n8n canvas, with its sticky notes.
--- -## 🎯 Overview & Use Cases +## 🎯 Overview -This workflow acts as an **all-in-one developer pipeline** for inbound webhooks and API payloads. Instead of routing payloads to multiple external cloud microservices or writing error-prone JavaScript `Code` nodes, it executes five fundamental developer operations sequentially in sub-millisecond local memory: +This workflow shows five DevDeskApp operations chained on one sample payload, with no Code-node logic for the transformations and no external APIs: -1. **JSON Formatting & Prettification:** Normalizes unformatted or minified JSON strings into indented structures. -2. **Cryptographic SHA-256 Digest:** Generates tamper-proof SHA-256 hashes of sensitive request bodies. -3. **UUID v4 Trace Injection:** Stamps incoming requests with an RFC 4122 v4 UUID for distributed tracing. -4. **URL Slugification:** Cleans names, candidate profiles, or titles into URL-safe identifiers. -5. **CTC Salary Computation:** Evaluates monthly in-hand take-home, employee/employer PF, PT, and tax breakdown. +1. **JSON Prettifier** formats the minified `rawMinifiedApiData` string. +2. **SHA-256 Digest** hashes the formatted JSON. +3. **UUID Generator** adds an RFC 4122 v4 trace ID. +4. **Slugifier** turns the candidate name into a URL-safe slug. +5. **CTC Calculator** estimates monthly take-home pay from the annual CTC. + +A final Code node merges the five results into one item. It needs no credentials, so you can run it right after import. --- -## 📸 Workflow Architecture +## 📸 Pipeline
- Developer Suite Canvas + Template 21017 pipeline: manual trigger, sample payload, five DevDeskApp operations, consolidated output
-
Figure 1: Complete automation pipeline with sticky notes and configured node parameters.
- -### Pipeline Sequence - -```mermaid -flowchart LR - A["Manual Trigger / Webhook"] --> B["Mock Payload"] - B --> C["DevDeskApp Prettifier"] - C --> D["DevDeskApp SHA-256"] - D --> E["DevDeskApp UUID v4"] - E --> F["DevDeskApp Slugifier"] - F --> G["DevDeskApp CTC Engine"] - G --> H["Consolidated JSON"] -``` +
Figure 2: Node order in the published template.
+ +| Node | Resource · Operation | Key parameter | +| :--- | :--- | :--- | +| DevDeskApp: JSON Prettifier | `json` · `prettify` | `jsonInput = {{ $json.rawMinifiedApiData }}`, 2 spaces | +| DevDeskApp: SHA-256 Digest | `crypto` · `hash` | `textPayload = {{ $json.formatted }}`, `sha256` | +| DevDeskApp: UUID Generator | `crypto` · `uuid` | none | +| DevDeskApp: Slugifier | `text` · `slugify` | `textInput = candidateFullName` from the sample node | +| DevDeskApp: CTC Calculator | `calculator` · `ctcToInHand` | `annualCtc` and `basicPercentage` from the sample node | --- -## ⚡ Execution Result +## ⚡ Execution result -When triggered, all 5 transformations execute instantaneously in **< 0.2ms total execution time**: +One test run executes all eight nodes with one item each:
- Template Test Result Execution + Template 21017 after a test run: all eight nodes succeeded with their key outputs
-
Figure 2: Execution trace showing instantaneous transformation across all 5 DevDeskApp operations.
+
Figure 3: Every node after a test run, with the value each DevDeskApp node returned.
+ +
+ Consolidated Final Output item of template 21017 +
+
Figure 4: The item produced by Consolidated Final Output.
+ +### Consolidated output (from a real run) -### Consolidated Output Sample +The sample payload uses `annualCtc: 2400000` and `basicPercentage: 50`. The `traceId` changes on every run. ```json { - "traceId": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d", - "hashDigest": "5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8", - "slug": "senior-fullstack-engineer", - "payroll": { - "annualCtc": 1800000, - "monthlyInHand": 112500, - "employeePf": 9000, - "employerPf": 9000 + "meta": { + "traceId": "5ad52af6-8b62-48a0-b934-7a82c4ab3eb1", + "sha256PayloadHash": "f7e61312d64a6fefb8ff2dcc4ccc957e7204a229c04647fffba674aed41620df", + "candidateFileSlug": "rahul-verma-principal-cloud-architect", + "status": "VERIFIED_AND_PROCESSED" }, - "status": "SANITIZED_AND_VERIFIED" + "compensationBreakdown": { + "annualCtcFormatted": "₹24,00,000", + "monthlyGross": "₹1,98,200", + "netMonthlyTakeHome": "₹1,63,075", + "taxDeductions": { + "monthlyBasic": "₹1,00,000", + "employeePf": "₹1,800", + "estimatedMonthlyTax": "₹33,125", + "professionalTax": "₹200" + } + } } ``` --- -## 📥 How to Import into Your n8n Instance +## 📥 Import it -1. Open the [n8n Creator Portal page](https://n8n.io/workflows/21017-format-json-and-secure-hr-payloads-with-devdeskapp-utilities) and click **"Use workflow"** or copy the workflow JSON. -2. In your n8n workspace, navigate to **Workflows → New Workflow**. -3. Press **`Ctrl + V`** (or **`Cmd + V`** on Mac). -4. Save and execute the workflow! +1. Make sure `n8n-nodes-devdeskapp` is installed ([installation guide](/n8n/installation)). +2. Open the [template on n8n.io](https://n8n.io/workflows/21017-format-json-and-secure-hr-payloads-with-devdeskapp-utilities/) and click **Use for free**, or copy the workflow JSON. +3. In n8n, create a new workflow, click the canvas and press **`Ctrl + V`** (**`Cmd + V`** on macOS). +4. Click **Test workflow**. diff --git a/src/templates/how-to-import.md b/src/templates/how-to-import.md index dc48bef..eb840fa 100644 --- a/src/templates/how-to-import.md +++ b/src/templates/how-to-import.md @@ -1,55 +1,73 @@ --- title: 'How to Import n8n Templates' -description: 'Import official DevDeskApp templates into n8n Cloud, self-hosted n8n or Docker by pasting the workflow JSON onto the canvas, step by step.' +description: 'Import the official DevDeskApp templates into n8n Cloud, self-hosted n8n or Docker by pasting the workflow JSON onto the canvas, step by step.' --- # ⚡ How to Import Templates into n8n -Every workflow template built with **`n8n-nodes-devdeskapp`** can be imported directly into any n8n environment in seconds. +You can import any workflow template built with **`n8n-nodes-devdeskapp`** into n8n Cloud, self-hosted n8n or Docker in under a minute. + +
+ Three steps to import a DevDeskApp template: install the node, copy the template, paste on the canvas +
+
Figure 1: Install the node once, then copy and paste any template.
--- ## Prerequisites -Before importing, ensure your n8n workspace has **`n8n-nodes-devdeskapp`** installed: +Install **`n8n-nodes-devdeskapp`** in your n8n instance first: -1. In your n8n web app, open **Settings → Community Nodes**. +1. In n8n, open **Settings → Community Nodes**. 2. Click **Install**. -3. Enter `n8n-nodes-devdeskapp` and confirm. -4. If running via Docker, make sure `N8N_COMMUNITY_PACKAGES_ENABLED=true` is set. - *(See the complete [Installation Guide](/n8n/installation) for details)*. +3. Enter `n8n-nodes-devdeskapp`, tick the risk acknowledgement and click **Install**. +4. On self-hosted n8n, community packages must be allowed (`N8N_COMMUNITY_PACKAGES_ENABLED=true`, the default). + +See the [Installation Guide](/n8n/installation) for Docker, manual and queue-mode setups. --- -## 3-Step Import Method (Clipboard Copy / Paste) +## 3-step import (copy and paste) + +### Step 1: Open the template on n8n.io -This is the fastest method and works on all n8n instances (Self-Hosted, Cloud, Desktop, and Docker): +| ID | Template | Extra credentials | +| :--- | :--- | :--- | +| #21017 | [Developer Suite & Security Engine](https://n8n.io/workflows/21017-format-json-and-secure-hr-payloads-with-devdeskapp-utilities/) | None | +| #21130 | [CTC to In-Hand Salary Engine](https://n8n.io/workflows/21130-generate-indian-ctc-offers-and-payroll-breakdowns-with-devdeskapp/) | None | +| #21376 | [Payment Webhook Sanitizer](https://n8n.io/workflows/21376-sanitize-and-audit-payment-webhooks-with-devdeskapp-json-and-crypto-tools/) | Slack | +| #21593 | [AI LLM JSON Ingestion](https://n8n.io/workflows/21593-sanitize-and-ingest-ai-llm-json-into-postgres-with-devdeskapp-and-slack/) | PostgreSQL, Slack | +| #21594 | [CTC Offer Letter Generator](https://n8n.io/workflows/21594-generate-indian-ctc-offer-letters-with-devdeskapp-google-docs-gmail-and-slack/) | Google Docs, Gmail, Google Sheets, Slack | +| #21595 | [Meta CAPI Lead Sync](https://n8n.io/workflows/21595-hash-and-sync-leads-to-meta-capi-with-devdeskapp-google-sheets-and-slack/) | Meta access token, Google Sheets, Slack | +| #21596 | [Notion to WordPress Publisher](https://n8n.io/workflows/21596-publish-seo-safe-notion-blog-posts-to-wordpress-with-devdeskapp-and-slack/) | Notion, WordPress, Slack | -### Step 1: Open Template on n8n Creator Portal -Navigate to either of our official templates: -- **[Template #21017: Developer Suite & Security Engine](https://n8n.io/workflows/21017-format-json-and-secure-hr-payloads-with-devdeskapp-utilities)** -- **[Template #21130: CTC to In-Hand Salary Engine](https://n8n.io/workflows/21130-automate-salary-and-in-hand-ctc-calculations-with-devdeskapp)** +Click **Use for free** to open it in your own n8n, or use the copy option to put the workflow JSON on your clipboard. -Click the **"Copy workflow to clipboard"** or **"Use workflow"** button. +::: warning Check the template page first +Templates #21593, #21594, #21595 and #21596 need a small fix after import. Each template page lists the exact change in its **Known issue** box. +::: -### Step 2: Open Your n8n Canvas -In your n8n workspace: -1. Click **+ New Workflow** in the sidebar. -2. Click once on the canvas grid background to focus the window. +### Step 2: Open a canvas -### Step 3: Paste (`Ctrl + V`) -Press **`Ctrl + V`** (Windows / Linux) or **`Cmd + V`** (macOS). +1. Click **+** → **Workflow** in the n8n sidebar. +2. Click once on the empty canvas to focus it. -The complete workflow with all pre-configured nodes, sticky notes, and wiring will immediately appear on your screen! +### Step 3: Paste + +Press **`Ctrl + V`** (Windows / Linux) or **`Cmd + V`** (macOS). All nodes, sticky notes and connections appear on the canvas. Click **Test workflow** to run it. --- -## Troubleshooting Common Issues +## Troubleshooting + +### Nodes show as unknown or with a question mark +- **Cause:** `n8n-nodes-devdeskapp` is not installed, or n8n has not reloaded since you installed it. n8n reports the node type `n8n-nodes-devdeskapp.devDeskApp` as not installed. +- **Fix:** Install the package from **Settings → Community Nodes**, reload the browser tab, and restart the container on Docker. -### "Unknown Node: devdeskapp" -- **Cause:** The `n8n-nodes-devdeskapp` package is not installed or the n8n container needs a quick restart. -- **Fix:** Install `n8n-nodes-devdeskapp` via **Settings → Community Nodes** and reload the page. +### Nothing happens on paste +- **Cause:** The canvas was not focused, or the clipboard holds the page URL instead of the workflow JSON. +- **Fix:** Click the canvas background and paste again. If you copied a link, open it and copy the workflow JSON. -### Canvas did not register paste -- **Cause:** Canvas window was not focused before pressing `Ctrl+V`. -- **Fix:** Click anywhere on the dotted grid background and press `Ctrl+V` again. +### A node asks for credentials +- **Cause:** Templates #21376 and #21593 to #21596 use Slack, Google, Postgres, Notion, WordPress or Meta nodes. +- **Fix:** Open each highlighted node and choose or create the credential. The DevDeskApp nodes themselves never need credentials. diff --git a/src/templates/index.md b/src/templates/index.md index 2a56936..2e454a1 100644 --- a/src/templates/index.md +++ b/src/templates/index.md @@ -1,16 +1,16 @@ --- title: 'Official n8n Workflow Templates' -description: 'Catalog of official DevDeskApp n8n templates: developer suite, CTC salary engine and payment webhook sanitizer, each with an import guide.' +description: 'Catalog of 7 official DevDeskApp n8n templates: AI LLM ingestion, CTC payroll, payment webhook sanitizer, Meta CAPI sync, and Notion CMS publishing.' --- # 📋 Official n8n Workflow Templates -Discover and deploy production-ready n8n automation blueprints built with **`n8n-nodes-devdeskapp`**. Every template runs entirely in-memory using local Node.js cycles—delivering sub-millisecond execution and **zero cloud data leaks**. +Discover and deploy production-ready n8n automation blueprints built with **`n8n-nodes-devdeskapp`**. The DevDeskApp nodes in every template run inside your n8n process and make no external API calls, so the data they format, hash or calculate stays on your instance.
- Verified Blueprints + 7 Verified Blueprints Official n8n Creator Portal

1-Click n8n Canvas Import

@@ -26,13 +26,13 @@ Discover and deploy production-ready n8n automation blueprints built with **`n8n --- -## 🌟 Templates Catalog +## 🌟 Templates Catalog (7 Published Live) -Explore our published templates below. Each template has a dedicated documentation page detailing its architecture, parameter schemas, input/output structures, and real-time execution results. +Each template has its own page with the node order, parameters and a real execution result. Templates marked **Fix after import** need one small change, listed on their page.
- +
@@ -58,13 +58,13 @@ Explore our published templates below. Each template has a dedicated documentati View Blueprint → - + n8n Portal ↗
- +
@@ -77,7 +77,7 @@ Explore our published templates below. Each template has a dedicated documentati Employee CTC to In-Hand Salary Engine

- Automate compensation modeling from offer letters: Indian statutory PF calculation, Professional Tax (PT), HRA allowance, and take-home salary projections. + Turns an annual CTC into monthly gross, basic, employee and employer PF (capped at ₹1,800), professional tax, a new-regime TDS estimate and in-hand pay.

Payroll Automation @@ -90,12 +90,13 @@ Explore our published templates below. Each template has a dedicated documentati View Blueprint → - + n8n Portal ↗
- + +
@@ -108,7 +109,7 @@ Explore our published templates below. Each template has a dedicated documentati Payment Webhook Sanitizer & Security Audit

- Zero-trust gateway for payment webhooks (Stripe, Razorpay, Lemon Squeezy): JSON normalization, SHA-256 cryptographic audit digest, RFC UUID v4 incident trace, and Slack notifications. + Audit pipeline for payment webhooks: parses and formats the JSON body, records a SHA-256 checksum, a UUID v4 trace ID and a slug, and alerts Slack through an If gate.

Webhook Sanitizer @@ -121,7 +122,135 @@ Explore our published templates below. Each template has a dedicated documentati View Blueprint → - + + n8n Portal ↗ + +
+
+ + +
+
+
+ + TEMPLATE #21593 + + Fix after import +
+

+ Sanitize & Ingest AI LLM JSON into Postgres +

+

+ A Code node strips markdown fences from LLM output, then DevDeskApp formats the JSON, adds a UUID v4 trace ID and a SHA-256 checksum before the PostgreSQL insert and Slack log. +

+
+ AI Agent Ingest + Markdown fences + PostgreSQL + Slack Alerts +
+
+ +
+ + +
+
+
+ + TEMPLATE #21594 + + Fix after import +
+

+ Generate Indian CTC Offer Letters with Docs & Gmail +

+

+ CTC to in-hand breakdown (basic, PF, PT, TDS), an offer UUID, a candidate slug and a compensation checksum, then a Google Docs letter, Gmail delivery and a Slack HR alert. +

+
+ HR Automation + Google Docs + Gmail + PF / PT Breakdown +
+
+ +
+ + +
+
+
+ + TEMPLATE #21595 + + Fix after import +
+

+ Hash & Sync Leads to Meta CAPI with Google Sheets +

+

+ Lowercases and SHA-256 hashes the lead email for Meta CAPI, adds a UUID v4 event_id and campaign slug, and posts opted-in leads to the Graph API with a Google Sheets log. +

+
+ Meta CAPI + SHA-256 Privacy + Google Sheets + Conversion Sync +
+
+ +
+ + +
+
+
+ + TEMPLATE #21596 + + Fix after import +
+

+ Publish SEO-Safe Notion Blog Posts to WordPress +

+

+ Builds an SEO slug from the article title, fingerprints the HTML with SHA-256, adds a UUID v4 publication ID and publishes approved posts through the WordPress node with a Slack alert. +

+
+ Notion CMS + WordPress API + SEO Slugifier + Slack Alerts +
+
+ @@ -131,13 +260,26 @@ Explore our published templates below. Each template has a dedicated documentati --- +## ⏳ Upcoming Templates (Under n8n Community Review) + +These 4 workflows are submitted to the n8n Creator Portal and waiting for review: + +| Template ID | Workflow Name | Key Operations | Target Pipeline | +| :--- | :--- | :--- | :--- | +| **#22360** | RSS-based Social Banner Publisher | Slugifier, SHA-256, UUID v4 | LinkedIn, X & Slack automated multi-platform broadcasting | +| **#22361** | GitHub PR Architecture Diagram Sync | Slugifier, SHA-256 | GitHub Pull Requests, Slack alerts & Notion Architecture Hub | +| **#22362** | CRM Lead Normalizer & Deduplication | Prettifier, SHA-256, UUID v4 | HubSpot, Salesforce, PostgreSQL & Slack pipeline | +| **#22363** | Real-Time Fraud & Webhook Deduplication | SHA-256, UUID v4, Condition Gate | Stripe/Razorpay anti-replay defense & Slack incident escalation | + +--- + ## ⚡ Quick 1-Click Import Instructions Importing any DevDeskApp workflow into your n8n workspace requires only 3 simple steps: 1. **Install Node:** Ensure `n8n-nodes-devdeskapp` is installed in your n8n instance ([Installation Guide](/n8n/installation)). -2. **Copy Blueprint:** Open any template page (or copy JSON snippet from the Creator Portal). -3. **Paste in Canvas:** Open your n8n canvas and press **`Ctrl + V`** (or **`Cmd + V`**). All nodes, parameters, and connections will render instantly. +2. **Copy the template:** Open it on n8n.io and click **Use for free**, or copy the workflow JSON. +3. **Paste in Canvas:** Open your n8n canvas and press **`Ctrl + V`** (or **`Cmd + V`**). All nodes, parameters and connections appear on the canvas. Detailed step-by-step instructions with troubleshooting can be found in our [Import Guide](/templates/how-to-import). diff --git a/src/templates/meta-capi-lead-sync.md b/src/templates/meta-capi-lead-sync.md new file mode 100644 index 0000000..b501560 --- /dev/null +++ b/src/templates/meta-capi-lead-sync.md @@ -0,0 +1,95 @@ +--- +title: 'Template #21595: Meta CAPI Lead Hasher & Sync' +description: 'n8n template #21595: lowercase and SHA-256 hash lead emails with DevDeskApp, add a UUID event_id, send opted-in leads to the Meta Conversions API, log them to Google Sheets and alert Slack.' +--- + +# 📊 Template #21595: Hash and Sync Leads to Meta CAPI with DevDeskApp, Google Sheets, and Slack + +
+ Published on n8n.io + Template ID: 21595 +
+ +🔗 **Template on n8n.io:** [n8n.io/workflows/21595](https://n8n.io/workflows/21595-hash-and-sync-leads-to-meta-capi-with-devdeskapp-google-sheets-and-slack/) + +
+ Template 21595 Meta CAPI lead sync workflow on the n8n canvas +
+
Figure 1: The template on the n8n canvas.
+ +--- + +## 🎯 Overview + +The Meta Conversions API (CAPI) expects customer identifiers such as email to be **normalised (trimmed, lowercased) and SHA-256 hashed** before you send them. It also uses an `event_id` to deduplicate server events against pixel events. This template: + +1. Trims and **lowercases** the lead email with DevDeskApp **Case Converter**. +2. **Hashes** it with SHA-256 in the n8n process, so the raw email is never sent to Meta. +3. Creates a **UUID v4 `event_id`** and a **campaign slug** such as `q4-enterprise-cloud-migration`. +4. Checks opt-in with an **If** node, then posts the event to the **Meta Graph API** (`/v19.0/{pixel_id}/events`), saves the lead to **Google Sheets** and alerts **Slack**. Leads without opt-in are logged to Slack and not sent. + +Only the email is hashed. The phone number in the sample is not sent to Meta. If you need `ph`, add another hash node on the digits-only phone number. + +::: danger Known issue in the published version (checked 4 Nov 2026) +As published, **every lead is sent with the same email hash**: `e3b0c442…b855`, the SHA-256 of an empty string. Meta cannot match these events. Fix two parameters after import: +1. **DevDeskApp: Email Lowercase & Clean**: set **Target Case** to **Lowercase** (`lowerCase`). The published value `lower` is not a valid option, so the node returns an empty `result`. +2. **DevDeskApp: SHA-256 Email Privacy Hasher**: set **Text/Payload** to `{{ $json.result }}`. The published `{{ $json.convertedText }}` refers to a field that does not exist. +::: + +--- + +## 📸 Pipeline + +
+ Template 21595 pipeline: ingest, four DevDeskApp nodes, opt-in gate, Meta Graph API, Google Sheets and Slack +
+
Figure 2: Node order and branches in the published template.
+ +| Node | Resource · Operation | Purpose | +| :--- | :--- | :--- | +| DevDeskApp: Email Lowercase & Clean | `text` · `caseConverter` (`lowerCase`) | Normalises `leadEmail.trim()` | +| DevDeskApp: SHA-256 Email Privacy Hasher | `crypto` · `hash` (`sha256`) | `em` value for CAPI | +| DevDeskApp: Event Deduplication UUID | `crypto` · `uuid` | `event_id` | +| DevDeskApp: Campaign Tracking Slug | `text` · `slugify` | Campaign tag in `custom_data` | +| If: Lead Has Opted-In & Verified Email | `if` | Only opted-in leads reach Meta | +| Meta Graph API: Dispatch Server CAPI Event | HTTP Request | `POST https://graph.facebook.com/v19.0/YOUR_PIXEL_ID/events` | + +--- + +## ⚡ CAPI payload (with the fix above) + +For the sample lead `user@example.com`, `Format Meta CAPI Payload` produces: + +```json +{ + "data": [ + { + "event_name": "Lead", + "event_time": 1793735085, + "event_id": "b7014673-4581-44c0-b06f-be1822754c7a", + "user_data": { + "em": ["b4c9a289323b21a01c3e940f150eb9b8c542587f1abfd8f0e1cc1ffc5e475514"] + }, + "custom_data": { + "currency": "INR", + "value": 50000, + "campaign": "q4-enterprise-cloud-migration" + }, + "action_source": "system_generated" + } + ] +} +``` + +`b4c9a289…5514` is the SHA-256 of `user@example.com`. `event_id` and `event_time` change on every run. + +--- + +## 📥 Import it + +1. Make sure `n8n-nodes-devdeskapp` is installed ([installation guide](/n8n/installation)). +2. Open the [template on n8n.io](https://n8n.io/workflows/21595-hash-and-sync-leads-to-meta-capi-with-devdeskapp-google-sheets-and-slack/) and click **Use for free**, or copy the workflow JSON. +3. Paste it onto a new workflow canvas with **`Ctrl + V`** (**`Cmd + V`** on macOS). +4. Apply the two fixes from the known-issue box. +5. Replace `YOUR_PIXEL_ID`, add your Meta access token, and connect **Google Sheets** and **Slack** credentials. +6. Click **Test workflow** and check the event in Meta Events Manager → **Test events**. diff --git a/src/templates/notion-wordpress-publisher.md b/src/templates/notion-wordpress-publisher.md new file mode 100644 index 0000000..a9e6df7 --- /dev/null +++ b/src/templates/notion-wordpress-publisher.md @@ -0,0 +1,83 @@ +--- +title: 'Template #21596: Notion to WordPress SEO Publisher' +description: 'n8n template #21596: build clean SEO slugs with DevDeskApp, fingerprint article content with SHA-256, add a UUID trace ID and publish approved Notion posts to WordPress with Slack alerts.' +--- + +# 📝 Template #21596: Publish SEO-Safe Notion Blog Posts to WordPress with DevDeskApp and Slack + +
+ Published on n8n.io + Template ID: 21596 +
+ +🔗 **Template on n8n.io:** [n8n.io/workflows/21596](https://n8n.io/workflows/21596-publish-seo-safe-notion-blog-posts-to-wordpress-with-devdeskapp-and-slack/) + +
+ Template 21596 Notion to WordPress workflow on the n8n canvas +
+
Figure 1: The template on the n8n canvas.
+ +--- + +## 🎯 Overview + +Content teams write in Notion and publish on WordPress. Copying by hand produces messy permalinks and no record of which version went live. This template: + +1. Turns the article title into a **clean SEO slug** with DevDeskApp **Slugify String**. For example, *"Top 10 High-Throughput Microservice Architecture Patterns in 2027"* becomes `top-10-high-throughput-microservice-architecture-patterns-in-2027`. +2. Computes a **SHA-256 fingerprint** of the article HTML, so you can tell whether the content changed between versions. +3. Adds a **UUID v4 publication ID** to the JSON-LD and audit data. +4. Checks the editorial status with an **If** node, then creates or updates the post through the **WordPress** node and announces it on **Slack**. Drafts trigger an editorial warning instead. + +::: danger Known issue in the published version (checked 4 Nov 2026) +Running the published template end to end shows two problems: +1. **The content hash covers an empty string.** `Content Fingerprint Hasher` reads `{{ $json.rawHtmlContent }}`, but its input is the slug node's output. Use `{{ $('Sample Notion Article Draft').item.json.rawHtmlContent }}`, or your Notion trigger node's name. +2. **The post title is empty.** `Meta Title Casing Formatter` uses Target Case `title`, which the node does not support (it returns an empty `result`), and the WordPress code reads `titleData.convertedText`, which does not exist. Either delete that node and use `article.articleTitle` in `Format WordPress Post Payload`, or pick a supported case and read `titleData.result`. +::: + +--- + +## 📸 Pipeline + +
+ Template 21596 pipeline: ingest, four DevDeskApp nodes, approval gate, WordPress and Slack +
+
Figure 2: Node order and branches in the published template.
+ +| Node | Resource · Operation | Purpose | +| :--- | :--- | :--- | +| DevDeskApp: URL Slug Normalizer | `text` · `slugify` | WordPress `slug` | +| DevDeskApp: Content Fingerprint Hasher | `crypto` · `hash` (`sha256`) | Version digest of the article HTML | +| DevDeskApp: Publication Trace UUID | `crypto` · `uuid` | Publication ID in JSON-LD and audit data | +| DevDeskApp: Meta Title Casing Formatter | `text` · `caseConverter` | See the known issue. There is no Title Case option. | +| If: Article Approved & Ready for Publication | `if` | Publishes approved posts only | +| WordPress: Create / Update Blog Post | WordPress node | Creates the post with title, slug, content and categories | + +--- + +## ⚡ WordPress payload (with the fixes above) + +```json +{ + "title": "Top 10 High-Throughput Microservice Architecture Patterns in 2027", + "slug": "top-10-high-throughput-microservice-architecture-patterns-in-2027", + "status": "publish", + "categories": ["Software Engineering"], + "audit": { + "publicationId": "a7c1f0f2-1b0e-4a55-9b52-5c0c1d6f8e21", + "contentSha256": "f27253646187f9d5f7aa44e397fee49df53d0001946d6b729b476911e0a03f0a", + "permalink": "https://myblog.com/posts/top-10-high-throughput-microservice-architecture-patterns-in-2027" + } +} +``` + +`contentSha256` is the SHA-256 of the sample article's HTML. `publicationId` changes on every run. + +--- + +## 📥 Import it + +1. Make sure `n8n-nodes-devdeskapp` is installed ([installation guide](/n8n/installation)). +2. Open the [template on n8n.io](https://n8n.io/workflows/21596-publish-seo-safe-notion-blog-posts-to-wordpress-with-devdeskapp-and-slack/) and click **Use for free**, or copy the workflow JSON. +3. Paste it onto a new workflow canvas with **`Ctrl + V`** (**`Cmd + V`** on macOS). +4. Apply the fixes from the known-issue box. +5. Connect **Notion**, **WordPress** (application password) and **Slack** credentials, then click **Test workflow**. diff --git a/src/templates/offer-letter-generator.md b/src/templates/offer-letter-generator.md new file mode 100644 index 0000000..2bd5702 --- /dev/null +++ b/src/templates/offer-letter-generator.md @@ -0,0 +1,103 @@ +--- +title: 'Template #21594: Indian CTC Offer Letter Generator' +description: 'n8n template #21594: estimate in-hand salary, PF and PT from annual CTC with DevDeskApp, create a Google Docs offer letter, email it with Gmail and alert HR on Slack.' +--- + +# 📄 Template #21594: Generate Indian CTC Offer Letters with DevDeskApp, Google Docs, Gmail and Slack + +
+ Published on n8n.io + Template ID: 21594 +
+ +🔗 **Template on n8n.io:** [n8n.io/workflows/21594](https://n8n.io/workflows/21594-generate-indian-ctc-offer-letters-with-devdeskapp-google-docs-gmail-and-slack/) + +
+ Template 21594 CTC offer letter workflow on the n8n canvas +
+
Figure 1: The template on the n8n canvas.
+ +--- + +## 🎯 Overview + +Drafting offer letters by hand is slow, and compensation figures copied from spreadsheets drift. This template takes a candidate row (from the sample node or a **Google Sheets trigger**) and: + +1. **Estimates pay** with DevDeskApp **CTC to In-Hand Salary**: monthly gross, basic, employee and employer PF, PT, TDS and in-hand. +2. **Creates an offer token** (UUID v4) and a **candidate slug** such as `ananya-roy-principal-devops-engineer`. +3. **Fingerprints the compensation** with SHA-256, so the figures in the letter can be checked later. +4. Checks the offer with an **If** node, then fills a **Google Docs** template, emails it with **Gmail** and posts to HR **Slack**. Invalid offers go to a compliance alert instead. + +::: danger Known issue in the published version (checked 4 Nov 2026) +In `Format Offer Letter Document Payload`, three fields read top-level keys that the DevDeskApp node does not return, so the letter shows **₹0** for basic salary, PF and professional tax. Change: +- `salary.basicSalary` → `salary.breakdown.monthlyBasic` +- `salary.employeePf` → `salary.breakdown.employeePf` +- `salary.professionalTax` → `salary.breakdown.professionalTax` + +Monthly gross, in-hand and CTC are already correct. +::: + +--- + +## 📸 Pipeline + +
+ Template 21594 pipeline: ingest, four DevDeskApp nodes, If gate, Google Docs, Gmail and Slack branch +
+
Figure 2: Node order and branches in the published template.
+ +| Node | Resource · Operation | Purpose | +| :--- | :--- | :--- | +| DevDeskApp: Indian CTC-to-In-Hand Engine | `calculator` · `ctcToInHand` | `annualCtc`, `basicPercentage` (default 50) | +| DevDeskApp: Offer Tracking UUID | `crypto` · `uuid` | Offer token | +| DevDeskApp: Candidate Slug Generator | `text` · `slugify` | `name-role` slug for file names | +| DevDeskApp: Compensation Checksum Hasher | `crypto` · `hash` (`sha256`) | Hash of the full salary output | +| If: Compensation Valid & Above Minimum Threshold | `if` | Valid offers go to Docs, Gmail and Slack, the rest to an HR alert | + +--- + +## ⚡ Execution sample (with the fix above) + +**Input** (sample candidate): + +```json +{ + "candidateName": "Ananya Roy", + "roleTitle": "Principal DevOps Engineer", + "annualCtc": 2100000, + "basicPercentage": 50, + "joiningDate": "2026-12-01" +} +``` + +**DevDeskApp CTC output:** `monthlyGross: 173200`, `monthlyInHand: 145575`, `breakdown.monthlyBasic: 87500`, `employeePf: 1800`, `professionalTax: 200`, `estimatedMonthlyTds: 25625`. + +**`Format Offer Letter Document Payload` output:** + +```json +{ + "offerId": "83aaa78d-e801-4c0a-ab00-2621a1422747", + "trackingSlug": "ananya-roy-principal-devops-engineer", + "integrityChecksum": "575b5e91708c83e62caf29cc5e6a7fee1cfd0d5354faa7befc06dbcbb9a41293", + "compensationBreakdown": { + "annualCtcFormatted": "₹21,00,000", + "monthlyGrossFormatted": "₹1,73,200", + "basicSalaryFormatted": "₹87,500", + "employeePfFormatted": "₹1,800", + "professionalTaxFormatted": "₹200", + "monthlyInHandFormatted": "₹1,45,575" + } +} +``` + +PF follows the node's rule (12% of basic, capped at ₹1,800), so a ₹21L CTC shows ₹1,800, not 12% of the full basic. + +--- + +## 📥 Import it + +1. Make sure `n8n-nodes-devdeskapp` is installed ([installation guide](/n8n/installation)). +2. Open the [template on n8n.io](https://n8n.io/workflows/21594-generate-indian-ctc-offer-letters-with-devdeskapp-google-docs-gmail-and-slack/) and click **Use for free**, or copy the workflow JSON. +3. Paste it onto a new workflow canvas with **`Ctrl + V`** (**`Cmd + V`** on macOS). +4. Apply the fix from the known-issue box, then connect **Google Docs**, **Gmail**, **Google Sheets** and **Slack** credentials. +5. Point the Google Docs node at your offer-letter template and click **Test workflow**. diff --git a/src/templates/payment-webhook-sanitizer.md b/src/templates/payment-webhook-sanitizer.md index 6c2796b..cb581e0 100644 --- a/src/templates/payment-webhook-sanitizer.md +++ b/src/templates/payment-webhook-sanitizer.md @@ -1,147 +1,91 @@ --- title: 'Template #21376: Payment Webhook Sanitizer' -description: 'n8n template #21376: sanitize Stripe and Razorpay webhooks, compute SHA-256 digests, add UUID trace IDs and keep an audit trail of payments.' +description: 'n8n template #21376: format payment webhook JSON, compute a SHA-256 checksum, add a UUID trace ID and audit slug, then route captured and failed payments to Slack.' --- # 🛡️ Template #21376: Payment Webhook Sanitizer & Security Audit Pipeline
- Published on n8n.io Creator Portal - Template ID: 21376 + Published on n8n.io + Template ID: 21376
-🔗 **Direct n8n Template Link:** -[n8n.io/workflows/21376](https://n8n.io/workflows/21376) +🔗 **Template on n8n.io:** [n8n.io/workflows/21376](https://n8n.io/workflows/21376-sanitize-and-audit-payment-webhooks-with-devdeskapp-json-and-crypto-tools/) + +
+ Template 21376 payment webhook sanitizer workflow on the n8n canvas +
+
Figure 1: The template on the n8n canvas.
--- -## 🎯 Overview & Use Cases +## 🎯 Overview -In modern production payment gateways (**Stripe**, **Razorpay**, **Lemon Squeezy**, **Shopify**, **PayPal**), incoming webhook events carry mission-critical financial data. However, engineering teams face significant architectural challenges: +Payment gateways such as Stripe, Razorpay and Shopify send compact JSON webhooks that you want to log consistently, deduplicate and trace across systems. This template: -1. **Unformatted & Minified Payloads:** Gateways often stream compact, escaped, or minified JSON strings that risk malformed parsing errors and crash downstream database ingest pipelines. -2. **Replay & Tampering Vulnerabilities:** Financial and order transactions require deterministic cryptographic **SHA-256 integrity digests** to guarantee non-repudiation and verify payload authenticity. -3. **Traceability Gaps Across Systems:** Without unified identifiers, debugging failed payment events across PostgreSQL, Slack alerts, and application logs is slow and fragmented. +1. **Formats and validates** the raw body with the JSON Prettifier. +2. **Computes a SHA-256 checksum** of the formatted payload, a stable fingerprint for audit logs and deduplication. +3. **Adds a UUID v4 trace ID** for correlating the event across your database, logs and Slack. +4. **Builds an audit slug** from the order ID and customer name, for example `ord-89421-priya-patel`. +5. **Routes the event** with an If node: captured, valid payments go to a DevOps Slack alert, and anything else goes to a suspicious-transaction alert. -**Template #21376** acts as an in-memory security and audit gateway. It intercepts incoming webhook payloads, validates and formats JSON, generates cryptographic checksums and UUID v4 correlation tokens, normalizes order slugs, and routes verified audit records to Slack and downstream databases—running **100% in local memory with zero external cloud API latency**. +::: tip Checksum vs. signature verification +The SHA-256 here fingerprints the payload. It does **not** prove the webhook came from your gateway. To verify the gateway's signature header, add a DevDeskApp **E-Commerce & FinTech → Webhook Signature Verifier** node (HMAC-SHA256 for Razorpay, Shopify and Stripe) on the production webhook path. +::: --- -## 📸 Workflow Architecture +## 📸 Pipeline
- Payment Webhook Sanitizer Canvas + Template 21376 pipeline: ingest, four DevDeskApp nodes, If gate, success and incident branches
-
Figure 1: Complete security audit and webhook sanitization canvas in n8n.
- -### 🧩 Interactive Architecture & Multi-Stage Execution Flow - -```mermaid -flowchart TD - subgraph Ingestion ["📥 Stage 1: Ingestion Gateway"] - T1["⚡ 1-Click Manual Trigger (Testing)"] - T2["🌐 Production Webhook Trigger (Stripe / Razorpay)"] - Payload["📦 Inbound Webhook Payload (Headers + Raw Body)"] - T1 --> Payload - T2 --> Payload - end - - subgraph CoreEngine ["🛡️ Stage 2: DevDeskApp In-Memory Processing Engine (<0.2ms)"] - direction TB - N1["1️⃣ JSON Prettifier & Schema Validator -Unescapes raw JSON strings and formats cleanly"] - N2["2️⃣ SHA-256 Non-Repudiation Hasher -Computes timing-safe cryptographic payload checksum"] - N3["3️⃣ RFC UUID v4 Incident Generator -Injects distributed trace correlation token"] - N4["4️⃣ Audit Reference Slugifier -Creates URL-safe audit identifier (order + customer)"] - N1 --> N2 --> N3 --> N4 - end - - subgraph Decision ["⚖️ Stage 3: Security Validation & Condition Check"] - Check{"Payment Status == SUCCESS -& Payload Valid?"} - end - - subgraph VerifiedPath ["✅ Stage 4A: Authenticated Dispatch Pipeline"] - SuccessAudit["📄 Format Security Audit Record -Normalized JSON for PostgreSQL / Supabase Log"] - SlackSuccess["💬 DevOps Slack Alert -#devops-security-alerts (Verified Transaction)"] - SuccessAudit --> SlackSuccess - end - - subgraph IncidentPath ["🚨 Stage 4B: Security Incident & Tamper Pipeline"] - IncidentAudit["⚠️ Format Security Incident Record -Flags failed payment, tampered payload, or schema error"] - SlackIncident["🚨 Tamper Slack Alert -#security-tamper-alerts (Action Required)"] - IncidentAudit --> SlackIncident - end - - Payload --> N1 - N4 --> Check - Check -- "Verified (SUCCESS)" --> SuccessAudit - Check -- "Rejected / Tampered" --> IncidentAudit -``` - -### 🔍 Execution Walkthrough (Step-by-Step): -- **Stage 1 (Dual Ingest):** Supports instant 1-click test runs via manual trigger or live production webhooks from payment gateways with zero configuration changes. -- **Stage 2 (Local In-Memory Security):** In sub-millisecond local Node.js cycles, DevDeskApp prettifies the payload, computes a SHA-256 cryptographic digest, assigns an RFC 4122 UUID v4 trace ID, and generates a unified audit slug. -- **Stage 3 (Zero-Trust Condition):** The `If` node evaluates payment capture status and integrity verification. -- **Stage 4 (Multi-Channel Routing):** - - **Success Route:** Emits a compliant audit record and notifies `#devops-security-alerts`. - - **Incident Route:** Catches tampered or failed transactions and triggers an immediate escalation to `#security-tamper-alerts`. +
Figure 2: Node order and branches in the published template.
---- - -## ⚙️ Core Operations in Pipeline - -| Node / Step | Tool / Operation | Purpose | +| Node | Type / operation | Purpose | | :--- | :--- | :--- | -| **1. Webhook Ingest** | `manualTrigger` / `webhook` | Ingests live payment event headers and raw JSON body | -| **2. JSON Prettifier** | `devDeskApp` → `prettify` | Normalizes and validates raw/minified payload into structured JSON | -| **3. Integrity Hasher** | `devDeskApp` → `hash` (SHA-256) | Computes timing-safe SHA-256 cryptographic digest of payload | -| **4. Trace Token** | `devDeskApp` → `uuid` (v4) | Injects RFC 4122 UUID v4 incident identifier for distributed audit tracing | -| **5. Audit Slugifier** | `devDeskApp` → `slugify` | Generates clean URL-safe tracking slug from customer name and order ID | -| **6. Security Dispatch** | `code` + `slack` | Emits structured compliance payload and triggers real-time security alerts | +| Test workflow / Production Webhook Trigger | `manualTrigger` + sample Code node / `webhook` | Test with a sample `payment.captured` event, or receive live events | +| DevDeskApp: JSON Prettifier & Validator | `json` · `prettify` | Formats the raw body (string or object) | +| DevDeskApp: SHA-256 Integrity Hasher | `crypto` · `hash` (`sha256`) | Checksum of `formatted` | +| DevDeskApp: Trace UUID Generator | `crypto` · `uuid` | Trace ID | +| DevDeskApp: Audit Slug Normalizer | `text` · `slugify` | `orderId-customer` slug | +| If: Payment Captured & Valid | `if` | Splits success from incident | +| Format … Record / Alert + Slack | `code` + `slack` | Builds the audit record and posts the alert | --- -## ⚡ Consolidated Audit Output Sample - -When executed, the workflow produces a structured, tamper-proof security record: +## ⚡ Audit record (from a real run of the sample event) ```json { - "auditRecord": { - "traceId": "c47a2846-95e2-4bd1-bc91-236b3f7f02ea", - "eventChecksum": "a79c4a8b753f19e782e4e135d0e729a4a753697e8838ec6f4bf4b74e64903e1a", - "auditSlug": "priya-patel-ord-89421", - "gatewayEvent": "payment.captured", - "paymentId": "pay_N982kls823a", - "orderId": "ORD-89421", - "customer": { - "name": "Priya Patel", - "email": "priya.patel@example.com", - "tier": "enterprise" - }, - "amountFormatted": "₹4,999.00", - "currency": "INR", - "paymentMethod": "UPI", - "status": "VERIFIED_SUCCESS", - "processedAt": "2026-10-23T19:40:00.000Z" + "status": "INGEST_AUTHENTICATED", + "traceId": "78a2b9f9-b0b1-4061-8dab-a205441937d8", + "auditSlug": "ord-89421-priya-patel", + "event": "payment.captured", + "paymentId": "pay_N982kls823a", + "orderId": "ORD-89421", + "customer": "Priya Patel", + "amountFormatted": "₹4,999", + "cryptographicProof": { + "algorithm": "sha256", + "payloadChecksum": "c87e5ce4d19729796b75ec57b8be2dd806a5af425f5f9d5abffd7741c2c41a21" + }, + "databaseRecord": { + "table": "audit_webhook_logs", + "source": "payment_gateway_prod", + "checksum": "c87e5ce4d19729796b75ec57b8be2dd806a5af425f5f9d5abffd7741c2c41a21" } } ``` +`traceId` changes on every run. The checksum stays the same for the same payload. + --- -## 📥 How to Import into Your n8n Instance +## 📥 Import it -1. Open the [official template page on n8n.io](https://n8n.io/workflows/21376). -2. Click **"Use workflow"** or copy the workflow JSON payload. -3. In your n8n workspace, navigate to **Workflows → New Workflow**. -4. Press **`Ctrl + V`** (or **`Cmd + V`** on Mac). -5. Configure the **Production Webhook Trigger** URL in your payment gateway dashboard (Stripe / Razorpay webhooks) and connect your Slack alerts channel! +1. Make sure `n8n-nodes-devdeskapp` is installed ([installation guide](/n8n/installation)). +2. Open the [template on n8n.io](https://n8n.io/workflows/21376-sanitize-and-audit-payment-webhooks-with-devdeskapp-json-and-crypto-tools/) and click **Use for free**, or copy the workflow JSON. +3. Paste it onto a new workflow canvas with **`Ctrl + V`** (**`Cmd + V`** on macOS). +4. Connect your **Slack** credentials and click **Test workflow**. +5. For production, register the **Production Webhook Trigger** URL in your payment gateway's webhook settings.