$ whoami
Samuel Ponce Luna
Full-Stack & AI Engineer at WorkFactory · Las Palmas de Gran Canaria
Full stack, focused on AI agents in production. At WorkFactory I designed and built the AI agent for a hotel management SaaS, from the runtime and its tools to the inbox where the team reviews what it proposes. Before that, an Erasmus placement at C-Link in London, building LLM pipelines for the construction industry.
// experience
WorkFactory · Hotel & vacation rental management SaaS · Jun 2026 – Present
Designed and built from scratch the AI agent that talks to guests and staff on the platform. I also worked across everything around it: the Node/TypeScript backend, the Angular frontend and the messaging and voice channels.
- ›Python agent on pydantic-ai and FastAPI, traced in Langfuse and switched on one organization at a time, with a kill switch
- ›End-to-end review mode: the AI drafts the reply or action, and a person approves, edits or discards it
- ›Read-only SQL for the agent: a parser that only lets a single SELECT through, over per-organization views
- ›Angular inbox that groups WhatsApp, email and voice by booking and resyncs in real time after every reconnect
- ›Voice mode for the dashboard in Go, streaming WebRTC from the browser to a real-time voice model
- ›Fixed vulnerabilities found in security audits
view case studyhide case study· AI assistant
problem
The assistant talks to real guests about bookings, payments and stays. If it makes up a check-in time or claims it did something it didn't, the hotel pays for it.
architecture
Messages come in through a channel gateway and reach a FastAPI service that runs the agent, with persistent state in Postgres. The agent calls tools based on the user's role. When an organization runs in review mode, the reply or action is held as a proposal until someone on the team approves it from the dashboard.
decisions
- ›The agent can only state facts a tool has returned. If a reply doesn't match what was verified, it fails closed and isn't sent.
- ›The model never sees every tool: they're filtered by role first, then picked by semantic similarity, with an eval script to measure the selection.
- ›Every action carries an idempotency key and goes through a logged state machine, so a retry never runs it twice.
- ›I rolled it out one organization at a time, with a per-conversation percentage and a kill switch, so I could back out without a deploy.
C-Link · London, UK · Jan 2026 – May 2026
Erasmus placement at an AI-powered construction startup building LLM tools for tender analysis.
- ›Built LLM cost and token-usage accounting system per analysis type
- ›Instrumented New Relic APM in production: distributed traces, performance metrics and alerts, alongside Sentry for error tracking
- ›Refactored the document ingestion layer: external file references, multi-document handling, and addendum enrichment
- ›Fixed a race condition in Celery workers via late acknowledgement; unified error handling across the task layer
view case studyhide case study· BOQ module
problem
Analyze Bills of Quantities in construction tenders to turn dense documentation into actionable signals inside C-Link's workflow.
architecture
Database schema and migrations → private REST API for Nexus integration → Celery pipeline with multiple execution modes → integration test suite.
decisions
- ›Multiple execution modes to adapt analysis to each tender's state and document volume.
- ›LLM token and cost accounting by analysis type to measure real consumption.
- ›Celery late ACK to avoid race conditions and preserve consistency when workers fail.
Astican · Las Palmas de Gran Canaria · 2025
Work placement as a web developer at a shipyard company.
- ›Development and maintenance of internal web applications for a shipyard company
- ›Delivered new features on an existing stack and resolved technical debt in legacy modules
// npm packages
Tiny in-memory job queue for Node.js: zero runtime dependencies, full TypeScript support, concurrency control, priority scheduling, retries with exponential backoff, and cancellation by ID.
In-memory cron/interval scheduler for Node.js: zero runtime dependencies, full TypeScript support, pluggable persistence, missed-job detection, and zero drift via monotonic next-tick recomputation.
// projects
Web tool for securely distributing environment variables across teams: in-transit encryption, per-secret TTL, and single-use access.
Real-time P2P file transfer between mobile and desktop devices over WebSockets. No sign-up, no install.
Full-stack platform for a European robotics competition: JWT authentication, Swagger-documented REST API, and admin dashboard.
Inventory manager with authentication and real-time database.
// stack
// education
IES El Rincón · Las Palmas de Gran Canaria
Erasmus at C-Link, London
// languages
// contact