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
Project case study
Active Management AI
A production backend for an AI-powered property management platform, using durable workflow orchestration to execute long-running processes across delinquency, maintenance, tenant communication, and compliance-sensitive operations.
Project case study
US Fund Advisor
A production business-funding platform that combines AI analysis with account flows, financial data, payments, communications, document generation, external APIs, and multi-service infrastructure inside one end-to-end application.
Project case study
CEO Dashboard
A multi-role operations platform that combines executive reporting, communication analytics, integration management, scheduling, and day-to-day workflow tools behind organization-aware access and authenticated backend services.
How I approach the work
- 1
Discovery & constraints
We define the business goal, users, current systems, technical constraints, and what success needs to look like before implementation starts.
- 2
Architecture & scope
I turn the problem into a practical implementation plan covering scope, system boundaries, integrations, delivery stages, timeline, and tradeoffs.
- 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
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.