Available for remote contracts Full stack • APIs • Product systems

Full Stack Engineer

Full Stack Engineer — complete products, APIs & scalable architecture.

I build complete web products, APIs, microservices platforms, and production SaaS systems for startups and businesses. Based in Dominican Republic, available for remote contracts globally.

Primary focus
Full stack
Location
Remote
Availability
Contracts
engineering.profile
Search projects, architecture, capabilities...

FIN-001

HermesBank

Production-grade

Fintech / Backend System

EDU-010

SkillMind

Production-ready

Microservices / EdTech Platform

SAA-025

Zentro

Production

Multi-tenant SaaS / Fintech

Selected work

Production systems, not portfolio theater.

Web products, fintech APIs, microservices platforms, and multi-tenant SaaS work built around real product and architecture decisions.

FIN-001

Fintech / Backend System

Production-grade

HermesBank

A layered ASP.NET Core banking system with a REST API, MVC/Razor web app, role-based access, account workflows, transactions, credit cards, commerce payments, loans, amortization, scheduled jobs, and email notifications.

C#ASP.NET CoreMVC/RazorSQL ServerEntity Framework CoreASP.NET IdentityJWTHangfire

Key stats

  • Separate REST API and MVC/Razor web application
  • Role-based workflows for Admin, Client, ATM, and Comercio users
  • Account creation, cancellation, deposits, withdrawals, and transfers
  • Credit card, commerce payment, loan, and amortization workflows
  • Scheduled maintenance jobs with Hangfire
  • Transaction records and email notifications for banking activity

Architecture choice

The system is organized into separate layers so each part has a clear responsibility: controllers handle requests, application services coordinate banking workflows, domain models represent banking concepts, and infrastructure handles persistence, Identity, authentication, background jobs, and external services.

EDU-010

Microservices / EdTech Platform

Production-ready

SkillMind

An educational platform built by a 10-person team to support courses, video content, notifications, subscriptions, and AI-powered recommendations. I served as Team Lead and Scrum Master, owning architecture decisions, infrastructure setup, and sprint delivery.

.NET 10NestJSFastAPIPostgreSQLKafkaRedisDockerStripeFirebaseGitHub Actions

Key stats

  • 5 independently deployable services
  • Led 10 developers under Agile/Scrum
  • 90% of sprints delivered on time
  • Full Docker Compose orchestration with health checks
  • Kafka with Zookeeper for async communication between services
  • Redis for caching and session state across services
  • Stripe subscriptions, Firebase push notifications, and Google/YouTube OAuth

Architecture choice

The platform was split into independent services because course management, notifications, payments, analytics, and recommendations all grow and fail differently. Kafka lets the system publish one event and let each service react in its own time, so a slow notification or analytics process does not block a student from enrolling in a course.

SAA-025

Multi-tenant SaaS / Fintech

Production

Zentro

A multi-tenant SaaS platform built in production at Media Revolution SRL. Allows businesses to spin up isolated agency environments per client with custom configuration, payments, and KYC.

PythonFastAPIPostgreSQLDockerGitHub ActionsLinux
Private production system

Key stats

  • 25% reduction in payment transaction failures
  • Multi-tenant architecture with per-tenant isolated configuration
  • Integrated cryptocurrency wallets and KYC identity verification
  • Deployments reduced from days to under 5 minutes
  • Production system serving real clients

Architecture choice

FastAPI was chosen for its async-first design and automatic OpenAPI documentation. Idempotency keys were implemented on all payment endpoints to prevent duplicate charges.

Case Studies

Real technical decisions, explained.

These are not just descriptions of what I built. Each case study explains the problem, the architectural decision I made, why I made it, and what the result was.

CASE-01 / HermesBank

Designing a Layered Banking System With Role-Based Access

Result

HermesBank became a complete banking-style system with layered architecture, role-based security, account workflows, money movement, credit cards, commerce payments, loans, amortization, scheduled jobs, transaction records, and email notifications. The project demonstrates how a financial system can be organized around clear roles and separated responsibilities instead of placing everything into controllers.

The challenge

Banking applications need more than simple CRUD operations. HermesBank needed clear user roles, controlled access to sensitive workflows, consistent transaction records, and separate areas for administrators, clients, ATM users, and commerce users. The goal was to make each responsibility clear in both the architecture and the authorization model.

What I built

A multi-project ASP.NET Core banking system with a REST API, an MVC/Razor web application, SQL Server persistence, ASP.NET Identity, JWT authentication, role-based access control, and scheduled background jobs. The system supports authentication, account confirmation, user management, deposits, withdrawals, account transfers, express transfers, beneficiaries, transaction history, credit cards, commerce payments, loans, amortization schedules, email notifications, and Hangfire maintenance jobs.

Why Clean Architecture

The system has many concerns that should not all live in the same place. Controllers receive HTTP requests, application services coordinate banking workflows, domain models represent banking concepts, and infrastructure handles database access, Identity, authentication, and external services. This keeps workflows like transfers, deposits, withdrawals, loan payments, and card payments easier to reason about because they are separated from HTTP and database configuration details.

Why Role-Based Access Control

A simple login system only confirms that a user exists. HermesBank needed to know what type of user is logged in and what that user is allowed to do. Admin users manage users, accounts, credit cards, loans, commerces, and administrative workflows. Clients handle transfers, beneficiaries, card transactions, and account views. ATM users handle deposits and withdrawals. Comercio users handle commerce payment workflows. JWT tokens include role claims for the API, and the MVC app uses cookie authentication with role-based authorization.

Why separate API and web application

The REST API exposes banking operations through versioned endpoints, making the backend useful for external clients, integrations, or future frontend applications. The MVC/Razor web app provides a complete user interface with role-specific views. Keeping these presentation surfaces separate makes the system more flexible while reusing the same application and infrastructure layers.

Why EF Core and repository pattern

Entity Framework Core with SQL Server handles persistence, while repositories keep database access separate from application workflows. Application services can focus on banking use cases such as creating accounts, processing payments, updating balances, assigning loans, and recording transactions without depending directly on DbContext details.

Why transaction records matter

In a banking system, changing a balance is not enough. HermesBank creates transaction records for transfers, deposits, withdrawals, and payments, including amount, transaction type, date, origin, beneficiary information, and status. This gives users and administrators traceability: where money came from, where it went, when it happened, and what operation was performed.

Why credit cards were included

Banking platforms usually involve more than savings accounts. HermesBank models credit card workflows such as assigning cards, updating limits, processing card transactions, tracking available credit, recording payments, and cancelling cards.

Why commerce payments were included

Commerce payments model a real payment-processing scenario. Commerce users can be linked to commerce records and process payments using card information, while administrators manage commerce records from a broader system perspective. This shows how role-based access can support more than admin and client workflows.

Why loans and amortization were included

Loans add long-running financial behavior. A loan is not a one-time operation; it has installments, payment status, interest, and scheduled updates. HermesBank includes loan assignment, loan payments, amortization schedules, installment tracking, and status updates.

Why Hangfire was used

Some banking workflows need background processing. Loan and amortization statuses may need updates even when no user is making a request. Hangfire runs recurring jobs for scheduled maintenance, including updates for overdue amortization installments and completed loans.

Why email notifications were added

Banking users expect to be informed when important financial activity happens. HermesBank sends emails for account and transaction-related events through an email service interface, keeping SMTP details separate from banking workflow logic.

CASE-02 / SkillMind

Building a Microservices Platform with a Team of 10

Result

A production-ready platform with 5 independently deployable services, health-checked Docker orchestration, Stripe subscriptions, Firebase push notifications, AI-powered recommendations, Google/YouTube OAuth, and 90% sprint delivery across a 10-person team.

The challenge

SkillMind had to support many product areas at once: authentication, course content, subscriptions, media uploads, notifications, email, analytics, and AI-powered recommendations. With 10 developers working in parallel, the real problem was not just building features — it was keeping teams from blocking or breaking each other.

What I built

A 5-service platform with clear ownership boundaries. The .NET core service handles users, courses, enrollments, Stripe subscriptions, OAuth, and email. The NestJS API gateway is the single entry point for the client, routes requests, handles media uploads, and publishes events. A Node.js notification service sends Firebase push notifications and SMTP emails. A Python/FastAPI recommendation service serves AI-powered course suggestions with async PostgreSQL queries and Redis caching. A separate TypeScript analytics service keeps reporting concerns out of the main business logic.

Why Kafka over direct HTTP calls

When a student enrolls in a course, that one action needs to trigger a confirmation email, a push notification, analytics tracking, and a recommendation update. If every service had to respond immediately through HTTP, one slow service could make enrollment fail. With Kafka, enrollment completes first, then each service processes the event independently. If notifications are temporarily down, the student still gets enrolled and the notification is processed after recovery.

Why Docker Compose with health checks

Five services plus Kafka, Zookeeper, and Redis create startup-order problems. A service can appear to be running before it is actually ready. I configured health checks on critical dependencies so services only start when Kafka, Redis, databases, and related services are ready. This removed race-condition bugs during development and deployment.

Why separate database contexts

The core service uses separate EF Core contexts for business data and identity data. This keeps authentication infrastructure away from domain logic and lets each schema evolve independently without unnecessary risk.

Why .NET 10 for the core

The core service owns the most important workflows: payments, OAuth, JWT issuance, course management, and enrollment logic. .NET 10 was a strong fit because it performs well under load and handles async integrations with Stripe, Google, email, and Kafka cleanly.

Capabilities

What I can build for you.

CAP-01

Product & Application Engineering

Complete web applications with clean interfaces, reliable workflows, and maintainable product logic

CAP-02

Frontend & UX Implementation

React, TypeScript, responsive interfaces, accessibility, animation, and polished user experience

CAP-03

APIs & Backend Systems

REST APIs, authentication, business logic, relational database design, and service integration

CAP-04

DevOps & CI/CD

GitHub Actions pipelines, Linux server administration, Docker, deployment automation

CAP-05

Fintech Systems

Payment APIs, idempotency, KYC integration, cryptocurrency wallets, regulatory compliance

CAP-06

SaaS Platforms

Multi-tenant architecture, isolated client environments, subscription logic, scalable infrastructure

About me

Full-stack product engineering from Santo Domingo.

I'm Teudy, a self-taught Full Stack Engineer based in Santo Domingo, Dominican Republic, and I recently graduated from ITLA. I build across the stack — interfaces, APIs, microservices, cloud infrastructure, and product workflows — and I have professional experience shipping fintech and SaaS products in production environments.

I've led teams, found practical solutions to technical problems, designed distributed architectures, and built systems that handle real money and real users. I'm available for remote contracts with startups and companies in the US, Canada, and Europe.

Outside of code, I play piano and develop video games.

Contact

Have a project? Let's talk.

I'm available for full-stack product work, APIs, SaaS platforms, automation, and technical consulting. Response within 24-48 hours.

Resume
Download CV
Location
Santo Domingo, Dominican Republic — available globally, remote

Remote contracts