Skip to main content

Service

Backend APIs & Durable Workflow Engineering

Some systems need more than request-response APIs. When work must survive restarts, wait for hours or days, retry safely, coordinate external systems, or resume from persisted state, I design the backend around those operational requirements instead of treating them as afterthoughts.

My recent backend work on Active Management AI uses Python, FastAPI, Temporal, Supabase, Fly.io, and Pytest for property-management workflows that can run over time with timers, retries, recovery, and state persisted outside a single process. I also work on Node.js, Express, Laravel, and API-heavy systems where clear service boundaries and production behavior matter.

Engineering by Jonas Viray, Full Stack Developer & AI Automation Engineer · Remote, US Eastern Time (EST/EDT) business hours

Who this is for

  • Teams building backend-heavy products where APIs and workflow execution are core to the product
  • Systems with long-running or scheduled processes that cannot rely on a single cron job or in-memory state
  • Existing applications that need safer retries, clearer service boundaries, or more reliable background processing
  • Products integrating several external APIs where failure handling, idempotency, and recovery matter

What I build

Backend APIs

FastAPI, Node.js, Express, Nest.js, or Laravel services with validation, authentication, clear contracts, and maintainable boundaries.

Durable workflow orchestration

Temporal workflows for long-running, scheduled, stateful, or multi-step processes that need timers, retries, recovery, and persisted execution state.

Background processing

Queue- or workflow-driven work for asynchronous tasks, scheduled operations, API coordination, and system-to-system processing.

Data and state design

PostgreSQL or Supabase schemas, transaction boundaries, idempotency keys, workflow state, and data access patterns matched to the process.

Production reliability

Error handling, retry strategy, logging, test coverage, deployment configuration, and operational visibility for backend services.

Existing-system stabilization

Targeted backend improvements for codebases that already exist, including API fixes, integration reliability, workflow redesign, and production debugging.

Related work

How I approach the work

  1. 1

    Discovery & constraints

    We define the business goal, users, current systems, technical constraints, and what success needs to look like before implementation starts.

  2. 2

    Architecture & scope

    I turn the problem into a practical implementation plan covering scope, system boundaries, integrations, delivery stages, timeline, and tradeoffs.

  3. 3

    Build & validate

    I deliver in visible milestones, validate the important paths as the system evolves, and surface risks or decisions early instead of hiding them until handoff.

  4. 4

    Handoff & support

    You receive the working system, source and access where applicable, operational context, and a clear walkthrough of how the system is maintained and changed.

Tools I use

  • Python
  • FastAPI
  • Temporal
  • Node.js
  • Express
  • PostgreSQL
  • Supabase
  • Redis
  • Docker
  • Fly.io
  • Pytest
  • REST APIs

Frequently asked questions

When does a system need a durable workflow engine such as Temporal?

Temporal is useful when a process must survive service restarts, wait for external events or timers, retry safely, run for a long time, or coordinate multiple steps without losing execution state. A normal API endpoint or cron job is usually enough for simpler short-lived work.

Can you work on an existing Python or Node.js backend?

Yes. I can work inside an existing backend to add endpoints, integrations, workflow logic, tests, observability, or reliability improvements. I start by understanding the current boundaries and failure modes before changing architecture.

How do you prevent duplicate work when retries happen?

Retries are designed together with idempotency. That can mean stable operation IDs, database constraints, workflow state, deduplication keys, or checking the external system before repeating a side effect. The exact strategy depends on what the operation changes.

Do all background jobs need Temporal?

No. I prefer the simplest tool that matches the reliability requirement. Short, stateless jobs can use a queue, scheduler, or lightweight worker. Durable orchestration becomes valuable when the process has state, waits, retries, compensating actions, or several external dependencies.

Have a real system problem to solve?

Share the current workflow, stack, constraints, and target outcome. I'll respond with the architecture or automation approach I would take and a scoped path to implementation.

Other services

All services