Session 125 — Redis Integration, Railway Consolidation, E2B/Browserless, Remaining Roadmap

Documentation for Sessions

Session 125 Summary

What Was Accomplished

1. Redis Integration — All 4 APIs (Session 122, completed in 125)

Created a shared RedisModule in @libs-api/backend-core and integrated it into all 4 backend APIs:

Files created:

Integration:

2. Railway Project Consolidation (Session 122-125)

Four separate Railway projects merged into one consolidated project:

Field Value
Project ID 3990549d-4313-47e4-9682-d17b382bdba2
Environment ID 1d438b60-52d5-4c89-ba8f-45fff0df308f
Dashboard https://railway.com/project/3990549d-4313-47e4-9682-d17b382bdba2

Service IDs:

3. Deployment Script Reorganization (Session 125)

Cleaned up scattered deployment scripts:

4. E2B + Browserless Configuration (Session 125)

5. Bug Fixes


Current Infrastructure State

All 4 APIs are healthy in production:

Redis: Online (shared across all APIs via private networking)


Environment Variables Added

Variable API Purpose
REDIS_URL backend-api, backend-ai-api, backend-docs-api Redis db 1/2/3 for rate limiting, Socket.IO, locks
VITTO_REDIS_URL backend-vitto-api Redis db 0 for BullMQ task queue
E2B_API_KEY backend-vitto-api Code sandbox execution
ENABLE_SANDBOX backend-vitto-api Feature flag for sandbox endpoint
BROWSERLESS_TOKEN backend-vitto-api Managed Chromium for JS-heavy scraping
RAILWAY_TOKEN local only (.env.local) Smart Deploy CLI authentication

Remaining Work (Prioritized)

CRITICAL — Security Wiring (~35 lines)

5 services are built but never called:

  1. scanForInjection() — prompt injection detection → wire before LLM calls
  2. ChannelRateLimiterService — per-channel rate limits → wire in ChannelGateway
  3. CircuitBreakerService — provider failure isolation → wrap SmartRouter
  4. CostTrackerService.recordSpending() — persist spending → call after LLM calls
  5. DeadLetterQueueService — failed task retry → wire in task failure handler

HIGH — Messaging Channel Reply-Paths

Channels have inbound but incomplete outbound:

HIGH — HTTP Scraping Engine (DONE in this session)

cheerio installed, BrowserAgentService updated with HTTP-first scraping.

MEDIUM — Tauri Desktop App

Desktop daemon POC exists (apps/gograb-desktop-daemon/). ComputerUseLoopService works via backend-ai-api. But no native desktop app yet. Tauri v2 planned for apps/vitto-desktop/ (2-3 sessions for MVP).

MEDIUM — Workflow Auto-Submit

workflow-engine.service.ts action steps return payload but don't call submitTask(). ~5 lines.

LOW — Skill Marketplace UI, Visual Workflow Builder, Voice/Speech

Backend exists for all three. Frontend components needed.


Key Decisions Made

  1. Railway Redis over Upstash: Sub-ms latency on private network, resource-based billing (~$3.65/mo vs unpredictable per-command), single dashboard
  2. Project consolidation: 4 projects → 1 for shared Redis via private networking, zero egress, simpler management
  3. E2B free tier: $100 credits, no CC needed, correct tool for sandboxed code execution
  4. HTTP scraping primary, Browserless fallback: cheerio handles 80% of scraping at $0 with no concurrent limits. Browserless only for SPAs.
  5. Single Redis instance, 4 logical databases: db0=vitto, db1=api, db2=ai-api, db3=docs-api. Key isolation without separate instances.