Enrrutadores × LAMDA
Marketplace de turismo local + neobanco crypto-native. Pagos on-chain con USDT-L, comisión automática, staking DeFi y bot WhatsApp unificado.
Enrrutadores — Marketplace de Turismo Local
Plataforma digital que conecta viajeros con experiencias auténticas, creadas y guiadas por personas locales en México. Sin intermediarios: el local marca la ruta y el beneficio del viaje se queda con quien lo crea.
Stack Tecnológico
| Frontend | Next.js 14 + TypeScript + Tailwind |
| Backend | Node.js 20 + Express |
| Database | PostgreSQL 16 |
| Auth | JWT (8h expiry, bcrypt) |
| Uploads | Multer (10MB, jpg/png/webp) |
| Bot AI | Groq (Llama 3.3 70B) + Baileys |
| Container | Docker Compose (4 servicios) |
Roles y Permisos
| turista | Reservar, favoritos, reviews, pagar |
| guia_local | Crear experiencias, gestionar, cobrar |
| admin | Usuarios, experiencias, blog, dashboard |
Estados de reserva
Endpoints principales
| POST | /api/auth/register | turista | guia_local |
| POST | /api/auth/login | todos |
| GET | /api/experiences | público (filtros, paginación) |
| GET | /api/experiences/:slug | público (detalle + reviews) |
| POST | /api/reservations | turista (crear reserva) |
| PUT | /api/reservations/:id/status | guia | admin |
| POST | /api/reviews | turista (req reserva completada) |
| POST | /api/favorites | turista (toggle) |
| GET | /api/admin/dashboard | admin (stats globales) |
| POST | /api/uploads | auth (imagen, 10MB max) |
Schema de base de datos
usersid, email, password_hash, name, role, phone, bio, avatar_url, city, lamda_email, lamda_wallet_address
experiencesid, title, slug, price_min/max, location, lat/lng, category_id, guide_id, status, is_featured, max_group_size, rating_avg
reservationsid, experience_id, tourist_id, guide_id, date, people, total_price, status, payment_status, commission_rate
reviewsid, experience_id, tourist_id, rating (1-5), comment, is_verified
favoritesid, user_id, experience_id (unique pair)
lamda_paymentsid, reservation_id, tourist_id, guide_id, amount_total/net, commission, tx_hashes, status
notificationsid, user_id, type, title, message, data (JSONB), is_read
blog_postsid, title, slug, excerpt, content, tags, status, author_id
guide_conversationsid, guide_id, role, message (bot AI)
LAMDA — Neobanco Crypto-Native
Neobanco construido sobre blockchain propia (LAMDA Chain). Combina la UX de un banco digital con el poder de Web3: wallets non-custodial, stablecoin USDT-L, transferencias instantáneas on-chain, staking con yield híbrido de 3 capas.
LAMDA Chain
| Chain ID | 20260707 |
| Consensus | PoA (Clique) |
| Block time | 3 segundos |
| Epoch | 30,000 blocks |
| Client | Go-Ethereum (Geth) v1.13 |
| EVM compatible | 100% |
| Validators | 2 (PoA signers) |
Smart Contracts
| USDT-L | 0x8c63...EEE44 |
| Faucet | 0xD302...b11e0 |
| Treasury | 0x863F...d1145 |
| Solidity | 0.8.20 |
| USDT-L supply | 100M (18 decimals) |
| Encriptación | AES-256-GCM |
| Web3 lib | ethers.js 6.x |
Staking DeFi — Yield híbrido de 3 capas
Pool USDT-L: 9% APY
- Capa 1: Aave (4% — DeFi real)
- Capa 2: Revenue plataforma (2% — fees + spreads)
- Capa 3: LAMDA boost (3% — token nativo)
Pool MXN: 6% APY
- Capa 2: Revenue plataforma (3%)
- Capa 3: LAMDA boost (3%)
Endpoints LAMDA (relevantes para integración)
| POST | /api/auth/register | Crea user + wallet + faucet (100 USDT-L) |
| POST | /api/auth/login | JWT 7d |
| POST | /api/user/transfer | Transfer on-chain (USDT-L o MXN) |
| GET | /api/user/wallet | Wallet address + balance on-chain |
| POST | /api/user/faucet | Reclamar 100 USDT-L (24h cooldown) |
| GET | /api/staking/pools | Listar pools (público) |
| POST | /api/staking/stake | Crear stake |
| POST | /api/staking/claim | Claimear yield |
| POST | /api/service/register | Service: crear cuenta (X-Service-Key) |
| POST | /api/service/pay | Service: pago split con comisión |
| GET | /api/service/balance/:email | Service: balance on-chain |
Interconexión Enrrutadores ↔ LAMDA
Enrrutadores no tenía procesador de pagos. LAMDA es un neobanco crypto con USDT-L stablecoin. La integración usa LAMDA como rail de pago: el turista paga reservas con USDT-L, el guía recibe on-chain, y la comisión de plataforma se envía automática al treasury de LAMDA.
┌─────────────────────────────────────────────────────────────┐
│ Enrrutadores (Marketplace Turismo) │
│ │
│ Turista ── POST /api/payments/reservation/:id/pay ──┐ │
│ │ │
│ backend/services/lamdaService.js ────────────────────┤ │
│ (cliente HTTP, header X-Service-Key) │ │
└────────────────────────────────────────────────────────┼─────┘
│
HTTP (X-Service-Key) │
▼
┌─────────────────────────────────────────────────────────────┐
│ LAMDA (Neobanco Crypto-Native) │
│ │
│ POST /api/service/pay │
│ ├─ Transfer 1: turista → guía (neto) [on-chain] │
│ └─ Transfer 2: turista → treasury (comisión) [on-chain] │
│ │
│ walletService.js → LAMDA Chain (Geth PoA, ID 20260707) │
│ USDT-L: 0x8c63...EEE44 Treasury: 0x863F...d1145 │
└─────────────────────────────────────────────────────────────┘Pago split on-chain
Cada pago genera 2 transacciones reales en LAMDA Chain: neto al guía y comisión al treasury. Ambas verificables en Blockscout.
Wallet automática
Al vincular LAMDA, el usuario obtiene wallet ETH + 100 USDT-L gratis (faucet). Sin fricción, sin seed phrases, keys encriptadas AES-256-GCM.
Staking del guía
Los guías pueden stakear sus ingresos USDT-L en LAMDA y ganar 9% APY. Yield de 3 capas: Aave + plataforma + LAMDA boost.
Auth service-to-service
# Enrrutadores → LAMDA (header shared secret) X-Service-Key: lamda-service-key-2026-enrrutadores # No requiere JWT de usuario # El backend de Enrrutadores actúa como proxy # El turista se autentica con JWT de Enrrutadores (8h) # Enrrutadores valida y luego llama a LAMDA con X-Service-Key
Comisión automática
Default 10% configurable via envLAMDA_COMMISSION_RATE
// Reserva: $1,000 MXN
neto guía: $900 (90%)
comisión: $100 (10%) → treasury
// 2 txs on-chain, 1 llamada API
Treasury address
0x863FE791C6dEa5cAD260857c5ce2A2daa4Fd1145Cada comisión se envía on-chain a esta address. Audit trail completo en tabla lamda_payments con commission_tx_hash.
API Reference — Endpoints de Integración
LAMDA Service API (/api/service/*)
| Método | Endpoint | Descripción |
|---|---|---|
| POST | /api/service/register | Crear cuenta LAMDA + wallet + faucet 100 USDT-L |
| GET | /api/service/user/:email | Lookup user (wallet address + balance) |
| GET | /api/service/balance/:email | Balance on-chain USDT-L + LAMDA |
| POST | /api/service/transfer | Transfer USDT-L simple (sender → recipient) |
| POST | /api/service/pay | Pago split: neto → guía + comisión → treasury |
| GET | /api/service/staking/pools | Listar staking pools activos |
Enrrutadores Payments API (/api/payments/*)
| Método | Endpoint | Descripción |
|---|---|---|
| POST | /api/payments/link-lamda | Vincular cuenta LAMDA existente |
| POST | /api/payments/ensure-lamda | Auto-crear cuenta LAMDA + wallet + faucet |
| GET | /api/payments/lamda-status | Estado del link + balance actual |
| GET | /api/payments/lamda-balance | Balance USDT-L del user |
| POST | /api/payments/reservation/:id/pay | Pagar reserva con USDT-L (split on-chain) |
| GET | /api/payments/reservation/:id | Estado del pago de una reserva |
| GET | /api/payments/staking-pools | Proxy a staking pools LAMDA |
Ejemplo: pago de reserva
// 1. Turista crea reserva
POST /api/reservations
{ "experience_id": "uuid", "reservation_date": "2026-08-15", "number_of_people": 2 }
→ { reservation: { id: "res-uuid", total_price: 1000, payment_status: "pending" } }
// 2. Turista vincula/crea cuenta LAMDA
POST /api/payments/ensure-lamda
{ "password": "turista123" }
→ { ok: true, wallet_address: "0xabc...", faucet: { amount: 100, tx_hash: "0x..." } }
// 3. Turista paga con USDT-L
POST /api/payments/reservation/res-uuid/pay
{ "commission_rate": 0.10 }
→ {
ok: true,
amount_total: 1000,
amount_net: 900, // → guía
commission: 100, // → treasury
tx_hashes: {
payment: "0xabc...", // on-chain: turista → guía
commission: "0xdef..." // on-chain: turista → treasury
},
explorer: "http://159.223.147.7:3062/tx/0xabc..."
}
// 4. Reserva actualizada
reservation.payment_status = "paid"
// Guía recibe notificación automáticaFlujos de Pago End-to-End
Flujo 1: Turista paga reserva con USDT-L
- 1Turista crea reserva en Enrrutadores (POST /api/reservations)
- 2Turista click "Crear wallet LAMDA" en dashboard → auto-crea cuenta + wallet + 100 USDT-L faucet
- 3Turista click "Pagar con USDT-L" → Enrrutadores valida reserva + balances
- 4Enrrutadores llama LAMDA POST /api/service/pay (X-Service-Key)
- 5LAMDA ejecuta 2 txs on-chain: neto al guía + comisión al treasury
- 6Enrrutadores actualiza reservation.payment_status = "paid"
- 7Guía recibe notificación en dashboard + WhatsApp
- 8Ambas txs verificables en Blockscout (http://159.223.147.7:3062)
Flujo 2: Guía stakea sus ingresos
- 1Guía recibe USDT-L por reservas pagadas
- 2Guía entra a LAMDA (lamda.lightinnovationlab.com) con mismo email
- 3Guía ve su balance USDT-L en dashboard
- 4Guía selecciona pool (USDT 9% APY o MXN 6%)
- 5Guía elige lock period (flexible, 30d, 90d, 180d)
- 6Yield se acumula por epoch (7 días)
- 7Guía claima yield cuando quiera (POST /api/staking/claim)
Flujo 3: Guía consulta saldo vía WhatsApp
- 1Guía envía "SALDO" al bot de WhatsApp de Enrrutadores
- 2Bot busca lamda_email del guía en DB
- 3Bot llama LAMDA GET /api/service/balance/:email
- 4Bot responde: "USDT-L: 450.00 | LAMDA: 0.5 | Wallet: 0xabc..."
- 5Si no tiene cuenta LAMDA, bot le explica cómo vincular
Bot WhatsApp Unificado
El bot de Enrrutadores (Groq + Baileys) ahora se conecta a LAMDA para consultas de saldo, historial de pagos y opciones de staking. El guía no necesita salir de WhatsApp.
Stack del bot
@whiskeysockets/baileys
AI Model
Llama 3.3 70B (Groq)
Knowledge
knowledge-base.md (10 temas)
Cron
node-cron (reportes dom 8pm)
DB
PostgreSQL (guide_conversations)
HTTP
Node native (status, QR, reports)
LAMDA
API client (saldo, pagos, staking)
Session
Persistente en ./session/auth
Infraestructura y Deploy
Enrrutadores
| Droplet | 159.223.147.7 |
| Frontend | :3071 (Next.js) |
| Backend | :3072 (Express) |
| Bot | :3073 (WhatsApp) |
| PostgreSQL | :5432 (interno) |
| Containers | 4 (postgres, backend, frontend, bot) |
LAMDA
| Droplet | 159.223.147.7 |
| Frontend | :3060 (Vite/React) |
| Backend | :3061 (Express) |
| Chain RPC | :3063 (Geth) |
| Explorer | :3062 (Blockscout) |
| Containers | 5 (pg, backend, chain, explorer, frontend) |
Variables de entorno (integración)
# Enrrutadores backend + bot LAMDA_API_URL=http://159.223.147.7:3061 LAMDA_SERVICE_KEY=lamda-service-key-2026-enrrutadores LAMDA_COMMISSION_RATE=0.10 # LAMDA backend LAMDA_SERVICE_KEY=lamda-service-key-2026-enrrutadores JWT_SECRET=lamda-jwt-secret-2026-bladerunner LAMDA_CHAIN_RPC=http://lamda-chain:8545 LAMDA_TREASURY_ADDR=0x863FE791C6dEa5cAD260857c5ce2A2daa4Fd1145 LAMDA_USDTL_CONTRACT=0x8c63719a07B586F4a7197a3888C04D0eba3EEE44
Roadmap
Fase 1 — MVP Integración (actual)
Implementado- Srvice API en LAMDA (/api/service/*) con X-Service-Key
- Pgo de reservas con USDT-L (split on-chain)
- Cmisión automática al treasury (10% default)
- Ato-creación de wallet LAMDA desde Enrrutadores
- Bt WhatsApp: SALDO, PAGOS, STAKING
- Fontend: LamdaPayButton en dashboard del turista
Fase 2 — SSO y UX unificada
Planificado- Sngle Sign-On: un login sirve para ambas plataformas
- Rdirect automático a LAMDA para staking (sin re-login)
- Wdget de balance LAMDA embebido en dashboard del guía
- Hstorial de transacciones on-chain en dashboard
Fase 3 — Features avanzadas
Futuro- Rembolsos on-chain (burn USDT-L al turista)
- Pgos parciales (deposit + balance al completar)
- Ecrow: pago retenido hasta que guía confirme experiencia
- NT de experiencia completada (comprobante on-chain)
- PP Binance integrado: guía convierte USDT-L a MXN
¿Listo para aceptar pagos en crypto?
Si eres guía local, vincula tu cuenta LAMDA desde tu dashboard y empieza a recibir USDT-L por tus experiencias. Sin comisiones bancarias, sin intermediarios.