Senior Software Engineer · Naples, FL

RoxanaCastillo

Ideas that ship to production

Transforming ideas into robust, scalable digital solutions. Deep specialization in the Moodle ecosystem —plugins, LTI 1.3, xAPI/LRS— on a full-stack foundation across multiple languages, architectures and industries · AI-assisted development.

+16
years of full-stack experience
~10
years evolving one platform in production
468×
faster dashboard loads (caching)
+13k
analytics records recovered
40+
plugins in production
700+
own automated tests
Roxana Castillo
Emailrox.cas.mol@gmail.com
LinkedInlinkedin.com/in/roxcasmol
LocationNaples, Florida, USA
Phone+1 239 737 7289

About Me

Computer Science Engineer with over sixteen years building end-to-end production software across industries as diverse as eLearning, insurance and logistics, neuroscience, and air/maritime operations. I work full-stack: from architecture and data modeling to deployment and operation of real systems, with C#/.NET, Node.js, SQL Server and NoSQL databases, REST APIs, OAuth 2.0 / OpenID Connect authentication, and layered and microservices architectures.

One of my biggest differentiators today is AI-assisted development: I lead the analysis, design, and implementation, leveraging AI tools to accelerate delivery without compromising quality. I work with a solution-oriented mindset — I start from the belief that every challenge has a technical solution — and I adapt quickly to any language, architecture, or platform a project requires.

Featured Projects

Rosseys Solutions website

01 · Own product · Live site

Rosseys Solutions (website platform)

My own bilingual-website offering for local businesses. I built a re-runnable Node compiler that turns visual-editor exports (a React runtime) into standalone static HTML, with technical SEO (hreflang, JSON-LD) and one-command reproducible deployment on a VPS. Own freelance product, live.

Node.js · Compiler (vm sandbox) · Static HTML/CSS · SEO (hreflang, JSON-LD) · VPS · Nginx

02 · Own product · Published on the Moodle Marketplace

Course Link Picker (TinyMCE plugin)

A TinyMCE subplugin for Moodle: search and insert a link to any activity in the course in one click, grouped by section, with accent-insensitive search that respects visibility and access restrictions. Own product (Rosseys): GPLv3, Privacy API, PHPUnit tests and moodle-plugin-ci; published on the Moodle Marketplace after passing the official review with no observations.

PHP · Moodle 5 · TinyMCE subplugin · Web Service · PHPUnit · CI · GPLv3

Course Link Picker in the Moodle TinyMCE editor
Heading Contents in a Moodle course

03 · Own product · Moodle Marketplace (in review)

Heading Contents (Moodle filter)

A text filter that builds a navigable table of contents from the headings and re-injects the anchors AFTER Moodle's HTML purifier, so the internal links survive saving. No JavaScript (CSS :target), no database. Own product (Rosseys): a stable GPLv3 release with PHPUnit/Behat and multi-version CI 4.5 LTS→5.2; submitted to the Marketplace and in review.

PHP · Moodle · Text filter · No JS (CSS :target) · PHPUnit · Behat · CI · GPLv3

04 · Own product · In real use, private

Bóveda — Local-First, Encrypted Personal Finance

Privacy-first personal finance app for macOS: real bank aggregation via Plaid and security by design (at-rest encryption with SQLCipher, secrets in Keychain, Touch ID unlock, backend bound to 127.0.0.1, log redaction). Models household net worth on accounting principles —assets and liabilities counted once, joint accounts— with credit usage and availability, manual assets, installment purchases, fixed expenses with due-date projection, and spending by category. Layered architecture, 135 tests. Sole author.

Python · FastAPI · SQLCipher · Plaid · Keychain / Touch ID · pywebview

Bóveda architecture
Bóveda dashboard (sample data)sample data
Financial management SaaS dashboard

05 · Own product · In production, private access

Financial Management SaaS with Dual AI

Full-stack web app in production for project financial management: JWT authentication, multi-currency support, AI-generated reports (OpenAI), transaction insights (Gemini), and an analytics dashboard. End-to-end ownership — architecture, development, and deployment on a self-managed VPS with CI.

React · TypeScript · Express · Prisma · OpenAI + Gemini

06 · Client · Live

Bilingual Platform for a Local Business

Full-stack bilingual platform (EN/ES) for an independent professional in Florida: on-site reviews, WhatsApp booking, local SEO (Schema.org), and mobile-first design. In production with continuous iteration of features and search ranking.

Angular · Node.js · TypeORM · MySQL · JWT

Bilingual platform for a local business

07 · Company (team) · Private code

SHIFT eLearning Platform

Corporate eLearning suite used by clients in multiple countries. I contributed for ~10 years: C#/ASP.NET development and its evolution to Node.js and microservices, REST APIs, OAuth/OIDC integrations and a standards-based LTI 1.3 (provider) integration with Deep Linking 2.0 that lets the tool launch from any LMS, a SCORM player, iOS/Android mobile apps (Ionic/Capacitor), and 40+ Moodle plugins in production — including configurable performance dashboards and regulatory certification compliance for the financial sector. Results: recovered an analytics pipeline stalled for ~541 days (+13,000 records) and sped up dashboard loads ≈468× with caching.

C# / ASP.NET · Node.js · Angular · MongoDB · Microservices · Docker · OAuth / OIDC · LTI 1.3

08 · Client · Private code

Evaluation Platform on Moodle

Contest and evaluation management platform for an independent client, built on Moodle. I developed custom plugins end to end (judging rounds with judge assignment, per-edition enrollment, passwordless autologin, email templates) with CLI tooling to operate at scale, judging-integrity features (streaming PDF.js viewer, download blocking), and technical-debt reduction by migrating inherited core customizations into maintainable plugins.

PHP · Moodle · MySQL · PDF.js · CLI Tooling

09 · Client · Private code

Insurance & Logistics System

Web system for commercial insurance and transport logistics management, with multi-tenant architecture, insurance/accounting modules, and real-time chat. Development collaboration on Python/Django, PostgreSQL, Redis, and Docker.

Python / Django · PostgreSQL · Redis · Docker · Multi-tenant

10 · Company (team) · Private code

AI Time-Tracking App

Internal time-tracking tool for Aura that I developed end to end (sole code author): AI analytics (Google Gemini), charts, PDF export, and a complementary browser extension.

React · TypeScript · Vite · Google Gemini · Chrome Extension

Case Studies

Real production problems, with their architecture and measurable outcome. No client names or internal data.

Canonical LTI catalog diagram

Architecture · LTI 1.3 · corporate eLearning

One shared course catalog, with full tracking

Problem: many Moodle instances (subsidiaries, business units) had to consume the same courses from a central catalog —embedded, without copying the content or drifting out of version sync— and the business needed full tracking, not just the grade.

Approach: I designed a canonical catalog consumed over LTI 1.3 (enrol_lti): each client instance activates the courses it needs and launches them embedded, from a single content source. Since AGS only returns the grade, I extended the return path with web services to bring back completion, progress and time spent. Validated against two real Moodle instances and a 5.0 ↔ 5.1 version matrix.

Result: a single canonical catalog, designed to serve courses embedded from one source —avoiding content duplication and version drift— with full tracking centralized. Built within the SHIFT ecosystem (team effort).

0
content copies
+3
signals beyond AGS
5.0·5.1
version matrix

Data · Production · SHIFT platform (team)

An analytics pipeline down for 541 days

Problem: a learning-analytics sync process (xAPI/LRS) had gone ~541 days without updating; activity data wasn't reaching the dashboards, with no visible errors.

Approach: I diagnosed the root cause —special characters aborting batches of 5,000 records due to the database encoding— and migrated the entire database to utf8mb4 with a reversible migration; then reprocessed the missing history idempotently.

Result: +13,000 activity records reincorporated, with no duplicates, and the pipeline back up to date.

541
days without data
+13k
records recovered
49·221
tables · columns
xAPI/LRS ETL pipeline diagram
LTI 1.3 launch diagram

Integration · OAuth/OIDC · sole author

LTI 1.3: content that just works in any LMS

Problem: the platform had to launch embedded from any standard LMS (Moodle, Canvas, Blackboard) with the user's identity already resolved and securely.

Approach: I built the provider-side integration: OIDC-over-OAuth 2.0 launch validation verifying the signed JWT against the LMS JWKS, Deep Linking 2.0 to return content to the course, multi-tenant platform auto-registration, and session isolation in cross-site iframes (SameSite=None; Secure).

Result: SHIFT launchable as an LTI 1.3 tool from any compatible LMS, returning the selected content to the course. The integration is my own work; the platform is a team effort.

ltijs / Node.js · OAuth 2.0 / OIDC · JWT / JWKS · Deep Linking 2.0

Hard bug · Data · sole author (Time Tracker)

Silent corruption: recovering 100% of the data

Problem: a collaborator reported tasks that wouldn't list their project; on investigation, a sync process was deleting valid associations on every run — silently, with not a single error in the log.

Approach: root cause: the sync treated the external API as the sole source of truth and overwrote the association with null on transient failures. Non-destructive fix (preserve-on-null + skip PRs) and deterministic recovery from an alternative source of truth (title prefix → mapping table), with dry-run, JSON backup, and idempotent UPDATE.

Result: 301 associations —100% of the affected task bank (60 → 0)— leaving genuinely project-less issues intact. Internal tool; presented at capability level.

301
associations
100%
of the affected bank
60→0
orphan tasks
Silent corruption recovery diagram

My Skills

Programming Languages

C# · JavaScript · TypeScript · PHP · Python · SQL · HTML5 / CSS3 (incl. SASS)

Frameworks & Libraries

ASP.NET · Node.js (Express) · Angular · React · Next.js · Entity Framework · Ionic / Capacitor

Databases

SQL Server · MySQL / MariaDB · PostgreSQL · MongoDB · Redis

Tools & Platforms

Moodle (Plugin Development) · Docker · AWS (S3, DynamoDB, Secrets Manager) · DevOps (CI/CD, Cloud Deployment) · Mobile Development (Ionic / Capacitor) · AI Integration (OpenAI, Gemini)

Methodologies & Best Practices

Agile / Scrum · Clean Architecture & Reusable Components · Complex Problem Solving · API & Microservices Design and Consumption · Git / GitHub

Additional Skills

Proactivity and autonomy in remote environments · Results-oriented and continuous improvement · Analysis and complex technical problem-solving capabilities · Effective collaboration and communication in distributed teams · AI-assisted development

Languages

Spanish (Native) · English (Technical written (code & documentation))

Interests

Technology and Development · Continuous Learning · Innovation · Problem Solving · Team Collaboration

Education & Certifications

Ingeniería en Ciencias Informáticas
Universidad Tecnológica de La Habana (CUJAE) · 2014
AWS QuickSight course
AWS QuickSight
Udemy · 2024
CSS3 course
CSS3: Flexbox, Grid, SASS & Bootstrap 5
Udemy · 2024
Moodle plugin development course
Moodle: local plugins & filters
Udemy · 2024

Contact Me

Do you have a project in mind or want to know more about my work? Feel free to contact me!