San José, Costa Rica
Juan Campos
Senior Software EngineerFull-Stack Developer
I design and build systems that stay maintainable after I leave.
I've spent 11 years building web, mobile, and API systems — mostly .NET and TypeScript — for corporate engineering teams and, for three of those years, as an independent consultant.
Most of my work sits behind an employer or a client, so this site leads with the projects I can actually show you and describes the rest in plain terms.
About
I care most about the parts of software that are still costly three years in: where the boundaries between modules sit, which decisions get written down, and whether the test suite tells you the truth. That bias shows up in how I work — specifications and architecture decision records before implementation, architecture rules enforced by tests rather than by convention, and refactoring treated as ordinary work rather than a special project.
I also lead and mentor: technical design for client engagements, code review as an actual quality gate, and bringing less experienced developers up on codebases that are already large. I work in English at C1 level with distributed teams, and I'm based in Costa Rica.
More recently I've been integrating generative AI into the way I build — prototyping, research, and app scaffolding — while keeping the judgement about what ships firmly human.
- Education
- Bachelor of Science in Computer EngineeringUniversidad Internacional San Isidro Labrador (UISIL), 2012
- Languages
- Spanish — NativeEnglish — C1 — Professional working proficiency
- Based in
- San José, Costa RicaWorking with distributed teams
Tools and technologies
- Languages
- C# · TypeScript · JavaScript (ES6+) · SQL · HTML5 · CSS3 / SCSS
- Front-end & mobile
- Next.js · React · Angular · React Native · Svelte
- Back-end
- .NET Core 7/8 · ASP.NET Core · Node.js (Express, NestJS) · VB.NET
- Data
- SQL Server · PostgreSQL · MySQL · MongoDB
- AI & automation
- AI-assisted development · Prompt engineering · Generative AI tooling · AI app building & deployment
- Practice
- Agile / Scrum · TDD · CI/CD pipelines · API design · Git · Mobile UI/UX
Experience
Senior Software Developer
Jan 2023 — Present
NearShore Tek
- Architect and maintain high-traffic web applications for international clients, using modern JavaScript frameworks with .NET microservices.
- Lead technical design and implementation for scalable architectures, with a focus on system modularity.
- Deliver an electronic invoicing API for the Costa Rican tax authority's v4.3/4.4 specification — XAdES XML signing, OAuth2 integration, and certificate lifecycle management for a regulated, high-availability workload.
- Mentor developers and run code review as a real quality gate for security, performance, and maintainability.
Freelance Full-Stack Developer
Mar 2020 — Dec 2022
Independent Consultant · Self-employed
- Delivered end-to-end development for a global client portfolio, focused on custom enterprise solutions.
- Web: built high-performance front-ends in Next.js and Angular, optimised for SEO and cross-browser behaviour.
- Mobile: built and shipped cross-platform applications for iOS and Android with React Native.
- Back-end: designed secure .NET Core 7/8 APIs on clean architecture principles, built for availability.
Software Developer
May 2015 — Mar 2020
SicSoft
- Built enterprise desktop and web applications in an Agile team.
- Worked test-first — TDD workflows that measurably reduced production defects.
- Modernised legacy systems by refactoring older codebases to improve performance and admit new features.
- Designed UI/UX components that made complex data management comprehensible to end users.
Projects
Three projects I've built recently. The rest of my work sits behind employers and clients, so it's described in the experience section instead.
Order Manager
Sourcefor Order Manager (opens in a new tab)Order management for a small bakery, built decision-first: a domain glossary and four ADRs before implementation.
A Spanish-language application for a bakery that takes advance orders. The central idea is that the deadline is derived rather than typed in: each order line knows its preparation time, so the app works backwards from the delivery time to the moment preparation has to start, and buckets orders by urgency from there.
The business rules live in plain, testable services rather than inside components — preparation scheduling, urgency buckets, validation, order drafts — so the rules that matter are the easy ones to cover. The suite is 79 facts and 4 theories across 13 files.
Four ADRs sit beside the code and are actually maintained, including a real supersession chain: the original Clerk/OIDC decision was superseded by ASP.NET Core Identity with local cookie auth, which was then amended by the staff-role and user-management decision. A glossary fixes the domain vocabulary — Owner versus Staff, Order versus OrderLine — so the words in the code and the words in the conversation stay the same.
- .NET 10
- Blazor Server
- ASP.NET Core Identity
- PostgreSQL
- xUnit
- Docker
An architecture template for a modular monolith: one deployable unit, real internal boundaries, and decisions written down.
Three business modules — Identity, Billing, and Features — each split into Domain, Application, Infrastructure, Contracts, and PublicApi, deployed as a single API. Every module owns its own PostgreSQL schema, and one module reads another's data through its Contracts project rather than reaching into its internals.
The part I care about most is enforcement. A NetArchTest suite asserts layer dependencies, module boundaries, contracts purity, and naming conventions, so a boundary violation fails the build instead of being caught in review. The coverage is deliberately partial — several assemblies are still on the TODO list — but the mechanism is real, and it is the practice I would carry onto a team.
Domain events go through a transactional outbox: the publisher writes an outbox row into the same DbContext as the state change, and a background service drains it and marks it processed, so an event can't escape for work that was later rolled back.
This is a template and an architecture demonstration first — a skeleton whose module layout and seams are the deliverable, not a finished product.
- .NET 10
- EF Core
- PostgreSQL
- MediatR
- NetArchTest
- Docker
Consignación
Source not published yet.
Consignment management for small retailers: products, shops, stock movements, and commission settlements.
Consignment is awkward to model: stock sits in someone else's shop, ownership never transfers, and money only moves when an item sells. The app tracks products, the commerces holding them, every stock movement, and what is owed back after each settlement.
Three decisions carry the design. The commission rate is snapshotted onto each consignment and settlement line, so changing a rate later cannot rewrite history. Stock is never stored as a number — it is always the sum of the movement rows, so it cannot drift out of step with what actually happened. And settling the same movement twice is made impossible by a database constraint rather than by application logic.
Settlement calculations use decimal arithmetic with explicit rounding, and the calculator and the consignment state machine are pure functions with no I/O — which is what lets the suite reach 213 tests, including an end-to-end test that walks a product from creation through activation, two sales, a refill, an adjustment, a settlement, and payment.
- Next.js 16
- React 19
- TypeScript
- Prisma
- libSQL
- Tailwind CSS 4
- Vitest
Certifications
Google AI Professional Certificate
August 2026
Google, via Coursera
Eight courses covering generative AI for brainstorming, research, writing, content creation, data analysis, app building, and deployment — completed with a portfolio of AI-built artifacts and a custom AI solution.
Introduction to Generative AI for Developers With Copilot
September 2026
Microsoft, via Coursera
Applying generative AI tooling to day-to-day development work, authorised by Microsoft and delivered through Coursera.
Contact
The quickest way to reach me is email. I read everything, and I answer.