Skip to work

Ruben Folhento

Full-stack engineer

A scanner that guesses is worse than one that asks.

That is the rule behind the offline check-in system I designed for a venue door. When a queued scan and the server disagree, nothing is resolved silently — it goes to the supervisor standing three metres away, who can see the guest when the system cannot.

I am a full-stack engineer with seven years of production experience, working in TypeScript across the whole stack. I publish the architecture behind what I build, including the parts that do not work yet.

Work

  • Verifactu compliance microservice

    Quipu · owned end to end2022 — present

    A Node.js service handling Spanish invoicing-compliance workflows: queued background processing, a Prisma and PostgreSQL data layer, and containerised deployment. I designed it, built it, and I am the one who maintains it in production.

    • Queue-based job processing with BullMQ
    • PostgreSQL data layer with Prisma
    • Dockerised deployment and ongoing production support
    • Node.js
    • TypeScript
    • Prisma
    • PostgreSQL
    • BullMQ
    • Docker
  • Quipu platform and mobile app

    Quipu · product engineering2022 — present

    Feature work on a live SaaS product used by paying customers, across a React web platform and a React Native app shipped to the App Store and Google Play. Day to day this is delivery, production debugging, and refactoring code other people have to keep working in.

    • Feature delivery on a production SaaS frontend
    • Cross-platform mobile releases for iOS and Android
    • Production troubleshooting alongside product and support
    • React
    • TypeScript
    • React Native
  • Events platform

    Personal · architecture published2026

    A Turborepo monorepo with six deployable surfaces — an Express and Prisma API, a React Native app, three Next.js web surfaces and a universal-link bridge — sharing one Zod contract package, so a breaking change fails the build instead of reaching production.

    The call
    Ship a discovery-only V1 while keeping the entire transactional V2 path compiled and switched off at build time, so launching payments becomes a configuration change rather than a rewrite.
    What it cost
    Code nobody exercises drifts. Test coverage is not high enough to catch that automatically, so the V2 flip needs a deliberate verification pass, not just an environment variable.
    • Offline venue check-in designed around a six-state sync queue — built, feature-flagged, not yet run at a live gate
    • Every disagreement between a queued scan and the server routes to a human supervisor rather than resolving silently
    • TypeScript
    • Next.js
    • React Native
    • Prisma
    • PostgreSQL
    • Redis
  • Nome Terra

    Personal · live2026

    A realtime multiplayer word game. Socket.IO with the Redis adapter for multi-instance fanout, room state in Redis behind a repository interface with TTL-based expiry, and socket contracts typed in a shared package so a renamed event is a compile error rather than a silent no-op.

    The call
    Scoring is server-authoritative with no client prediction, because whether an answer scores full or half depends on what every other player wrote and on votes that have not been cast yet.
    What it cost
    Submitting costs a round trip inside a timed round, where the delay is visible. Worth it — revising a score downward after showing it is worse than a short wait.
    • Production refuses the in-memory fallback and throws at boot, rather than silently losing rooms on restart
    • Room writes are not yet version-guarded, and the repository says so
    • TypeScript
    • Node.js
    • Socket.IO
    • Redis
    • PostgreSQL
  • Inventory and operations platform

    Personal · being rebuilt2025 — 2026

    A multi-tenant business system of around thirty backend domain modules across stock, commerce and operations. Stock on hand is derived from an append-only movement ledger rather than stored as a mutable quantity, so any historical balance is reconstructible.

    The call
    I am rewriting it rather than extending it. It was competent software built for the wrong market — English, desktop-first and online-only, aimed at Mozambican shops where the operator is behind a counter on a phone and the connection drops.
    What it cost
    Thirty modules and no cash session. A shop owner's nightly question is whether the drawer matches the day's sales, and v1 could not answer it.
    • Tenant scoping composed at the repository layer, behind company-access and role middleware
    • The repository includes a retrospective on what went wrong and why
    • TypeScript
    • Node.js
    • Prisma
    • PostgreSQL
    • React

Stack

Frontend
  • React
  • Next.js
  • TypeScript
  • React Native
Backend
  • Node.js
  • Express
  • Prisma
  • PostgreSQL
Systems
  • Docker
  • Redis
  • BullMQ
  • Socket.IO
Tooling
  • Turborepo
  • pnpm
  • Biome

Contact

Looking for remote product engineering and senior full-stack roles, in Europe or with global teams.

Based in
Maputo, Mozambique — UTC+2
Work authorisation
Portuguese citizen, full EU rights. Relocating to Europe in 2027.
Available for
Remote roles — contract, EOR or direct.