Saltar a contenido

Low-Code / No-Code Platforms - Guía de Entorno

Guía completa para trabajar con plataformas low-code y automatización con Claude Code.

Capacidades de Claude Code

Plataforma Capacidades
n8n Workflows JSON, custom nodes
Zapier Apps, Zaps CLI
Make (Integromat) Scenarios, módulos
Power Automate Flows, expresiones
Retool Queries, JS, componentes
Appsmith Widgets, JS, APIs
Supabase SQL, Edge Functions

n8n (Self-hosted automation)

Instalación

# Docker (recomendado)
docker run -d \
  --name n8n \
  -p 5678:5678 \
  -v n8n_data:/home/node/.n8n \
  docker.n8n.io/n8nio/n8n

# npm (desarrollo)
npm install -g n8n
n8n start

# UI: http://localhost:5678

CLI

# Exportar workflows
n8n export:workflow --all --output=./workflows/

# Importar workflows
n8n import:workflow --input=./workflows/

# Ejecutar workflow
n8n execute --id=<workflow-id>

# Crear custom node
npx n8n-node-dev new

Workflow JSON

{
  "name": "My Workflow",
  "nodes": [
    {
      "parameters": {
        "url": "https://api.example.com/data",
        "options": {}
      },
      "name": "HTTP Request",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "position": [250, 300]
    },
    {
      "parameters": {
        "conditions": {
          "number": [
            {
              "value1": "={{$json.status}}",
              "operation": "equal",
              "value2": 200
            }
          ]
        }
      },
      "name": "IF",
      "type": "n8n-nodes-base.if",
      "position": [450, 300]
    }
  ],
  "connections": {
    "HTTP Request": {
      "main": [[{"node": "IF", "type": "main", "index": 0}]]
    }
  }
}

Custom Node Development

# Crear proyecto
mkdir my-n8n-nodes
cd my-n8n-nodes
npm init -y
npm install n8n-core n8n-workflow

# Estructura
my-n8n-nodes/
├── nodes/
   └── MyNode/
       ├── MyNode.node.ts
       └── mynode.svg
├── credentials/
   └── MyApi.credentials.ts
└── package.json

Zapier

Zapier CLI

# Instalar
npm install -g zapier-platform-cli

# Login
zapier login

# Crear app
zapier init my-app
cd my-app

# Estructura
my-app/
├── authentication.js
├── creates/
├── triggers/
├── searches/
├── index.js
└── package.json

# Comandos
zapier test           # Tests locales
zapier push           # Deploy
zapier promote        # Promover versión
zapier logs           # Ver logs

Trigger Example

// triggers/new_item.js
const perform = async (z, bundle) => {
  const response = await z.request({
    url: 'https://api.example.com/items',
    params: {
      since: bundle.meta.page ? bundle.meta.page : undefined
    }
  });
  return response.data;
};

module.exports = {
  key: 'new_item',
  noun: 'Item',
  display: {
    label: 'New Item',
    description: 'Triggers when a new item is created.'
  },
  operation: {
    perform,
    sample: {
      id: 1,
      name: 'Sample Item'
    }
  }
};

Power Automate

Power Platform CLI

# Instalar
dotnet tool install --global Microsoft.PowerApps.CLI.Tool

# Login
pac auth create

# Exportar flows
pac solution export --path ./solution.zip

# Cloud flows están en solutions

Expresiones comunes

// Obtener fecha actual
utcNow()

// Formatear fecha
formatDateTime(utcNow(), 'yyyy-MM-dd')

// Condicional
if(equals(triggerBody()?['status'], 'active'), 'Yes', 'No')

// Obtener valor de array
first(body('Get_items')?['value'])?['name']

// String manipulation
concat('Hello ', triggerBody()?['name'])
substring(variables('myString'), 0, 10)

// JSON
json(body('HTTP'))
string(variables('myObject'))

Retool

Desarrollo Local

# Retool CLI (beta)
npm install -g @retool/cli

# Login
retool login

# Pull app
retool pull --app "My App"

# Estructura exportada
my-app/
├── queries/
   ├── getUsers.sql
   └── createUser.sql
├── components/
└── app.json

# Push cambios
retool push

JavaScript en Retool

// Transformers
const data = {{ getUsers.data }};
return data.map(user => ({
  ...user,
  fullName: `${user.firstName} ${user.lastName}`
}));

// Event handlers
await getUsers.trigger();
utils.showNotification({ title: "Success", description: "Data loaded" });

// State management
{{ state1.value }}
state1.setValue(newValue);

// Conditional visibility
{{ currentUser.role === 'admin' }}

Appsmith

Self-hosted

# Docker
docker run -d --name appsmith -p 80:80 -v "$PWD/stacks:/appsmith-stacks" appsmith/appsmith-ce

# Docker Compose
curl -L https://bit.ly/docker-compose-appsmith -o docker-compose.yml
docker compose up -d

Git Sync

# Appsmith soporta Git nativo
# Conectar repo desde UI: Settings > Git Connection

# Estructura en Git
.appsmith/
├── pages/
   └── Page1/
       ├── Page1.json
       └── queries/
           └── Query1.json
├── datasources/
└── theme.json

JavaScript en Appsmith

// API calls
await Api1.run();
const data = Api1.data;

// Store values
storeValue('userId', selectedRow.id);
appsmith.store.userId;

// Navigation
navigateTo('Page2', { id: selectedRow.id });

// Alerts
showAlert('Success!', 'success');

// Modals
showModal('Modal1');
closeModal('Modal1');

Supabase

CLI

# Instalar
npm install -g supabase

# Login
supabase login

# Iniciar proyecto local
supabase init
supabase start

# Migraciones
supabase migration new create_users
supabase db push

# Edge Functions
supabase functions new my-function
supabase functions serve my-function
supabase functions deploy my-function

# Generar tipos TypeScript
supabase gen types typescript --local > types/supabase.ts

Edge Functions

// supabase/functions/my-function/index.ts
import { serve } from "https://deno.land/std@0.168.0/http/server.ts"
import { createClient } from 'https://esm.sh/@supabase/supabase-js@2'

serve(async (req) => {
  const supabase = createClient(
    Deno.env.get('SUPABASE_URL')!,
    Deno.env.get('SUPABASE_ANON_KEY')!
  )

  const { data, error } = await supabase
    .from('users')
    .select('*')

  return new Response(
    JSON.stringify({ data, error }),
    { headers: { "Content-Type": "application/json" } }
  )
})

Directus

Instalación

# npm
npm init directus-project my-project

# Docker
docker run -d \
  -p 8055:8055 \
  -e KEY=<random-key> \
  -e SECRET=<random-secret> \
  directus/directus

# CLI
npx directus database migrate:latest
npx directus roles create --name admin --admin

Extensions

# Crear extension
npx create-directus-extension@latest

# Tipos
# - interface (UI components)
# - display (column display)
# - endpoint (custom API)
# - hook (event listeners)
# - operation (flows)

# Build
npm run build

# Deploy
cp -r dist extensions/

Budibase

Instalación

# Docker
docker run -d \
  -p 10000:80 \
  -v budibase_data:/data \
  budibase/budibase

# CLI
npm install -g @budibase/cli
budi hosting --init
budi hosting --start

Comandos que Claude Code Ejecutará

# n8n
n8n export:workflow --all
n8n import:workflow --input=workflow.json
n8n execute --id=123

# Zapier
zapier test
zapier push
zapier logs

# Retool
retool pull --app "MyApp"
retool push

# Supabase
supabase migration new name
supabase db push
supabase functions deploy

# Directus
npx directus database migrate:latest

Verificación del Entorno

#!/bin/bash
echo "=== Verificación Entorno Low-Code ==="

echo -e "\n--- n8n ---"
n8n --version 2>/dev/null || echo "n8n no instalado"

echo -e "\n--- Zapier CLI ---"
zapier --version 2>/dev/null || echo "Zapier CLI no instalado"

echo -e "\n--- Supabase ---"
supabase --version 2>/dev/null || echo "Supabase CLI no instalado"

echo -e "\n--- Retool ---"
retool --version 2>/dev/null || echo "Retool CLI no instalado"

echo -e "\n--- Docker (para self-hosted) ---"
docker --version

echo -e "\n=== Verificación Completa ==="

Recursos