FIN-001
HermesBank
Fintech / Backend System
Full Stack Engineer
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.
FIN-001
Fintech / Backend System
EDU-010
Microservices / EdTech Platform
SAA-025
Multi-tenant SaaS / Fintech
Selected work
Web products, fintech APIs, microservices platforms, and multi-tenant SaaS work built around real product and architecture decisions.
FIN-001
Fintech / Backend System
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.
Key stats
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
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.
Key stats
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
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.
Key stats
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
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
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
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
CAP-01
Complete web applications with clean interfaces, reliable workflows, and maintainable product logic
CAP-02
React, TypeScript, responsive interfaces, accessibility, animation, and polished user experience
CAP-03
REST APIs, authentication, business logic, relational database design, and service integration
CAP-04
GitHub Actions pipelines, Linux server administration, Docker, deployment automation
CAP-05
Payment APIs, idempotency, KYC integration, cryptocurrency wallets, regulatory compliance
CAP-06
Multi-tenant architecture, isolated client environments, subscription logic, scalable infrastructure
About me
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
I'm available for full-stack product work, APIs, SaaS platforms, automation, and technical consulting. Response within 24-48 hours.
Remote contracts