Dec. 2025

Poster image

Academic Exchange at UTEQ (Ecuador)

Intensive development of web and AI solutions. Representative of the University of Córdoba.

🇪🇨 Applied Web Development & AI: The “Virtual Psychologist”

During my exchange at the State Technical University of Quevedo (UTEQ), the academic focus wasn’t just on building an app, but understanding the why behind every technical decision. The “Virtual Psychologist Unicórdoba” project served as a case study to apply a robust architecture under the mentorship of Professor Bryan Cortez.

More than a final product, this project represents an exercise in web development and artificial intelligence, where the priority was security, scalability, and the correct implementation of design patterns.

🏗️ Decoupled Architecture and Technical Decisions

We opted for a microservices architecture to separate responsibilities and allow us to use the best tool for each task. It wasn’t an arbitrary choice, but a necessity to orchestrate heterogeneous components:

  1. Database (PostgreSQL): The central piece. We implemented business logic directly in the database to ensure integrity:

    • UUIDs: We used uuid_generate_v4() as primary keys to prevent enumeration attacks.
    • Stored Procedures: We encapsulated sensitive logic (like user registration or credential validation) in SQL functions, adding an extra security layer.
    • Triggers: We automated recovery code expiration (15 min) directly in the database engine.
  2. Backend (Spring Boot + Java): Manages security with JWT (Access + Refresh Tokens) and password hashing with BCrypt. Data validation isn’t trusted solely to the frontend; it’s reinforced here and in the database.

  3. Frontend (Next.js): Chosen for its hybrid rendering capability and secured with invisible reCAPTCHA v3 to mitigate bots without affecting UX.

🧠 The AI Flow: Double Model

The “Artificial Intelligence” system isn’t a magical black box. We designed an explicit two-stage pipeline to control the response:

  1. Classification: User text first passes through a lightweight scikit-learn model that detects the emotion (e.g., sadness, anxiety).
  2. Generation: That labeled emotion, along with chat history, is fed into Meta Llama 3 (8B). This allows the language model to generate a response that is not only coherent but empathically aligned with the detected emotion.

All of this runs on Docker containers, which allowed us to solve the classic “it works on my machine” problem, standardizing the development and production environment.

🚀 Real Learnings

The experience was “real” in the sense of facing daily development problems: managing local AI model latency, and designing secure password recovery flows.

Work team and Professor Bryan Cortez

The work team alongside Professor Bryan Cortez.

Technical Documentation: