{
  "_note": "Featured projects shown as cards on projects.html. Order here = display order.",
  "_fields": {
    "thumb":              "Path to the card thumbnail image (img/...)",
    "thumb_alt":          "Alt text for the thumbnail",
    "title_en/es":        "Project title shown on the card and in the modal header",
    "card_desc_en/es":    "Short description shown on the card (1-2 sentences)",
    "card_tech":          "Comma-separated tech tags shown in the card footer",
    "modal_desc_en/es":   "Full description shown in the modal (2-4 sentences)",
    "modal_features_en/es": "Array of bullet points shown in the modal feature list",
    "modal_tech":         "Comma-separated tech tags shown in the modal (can be more detailed than card_tech)",
    "modal_images":       "Array of image paths for the modal carousel (first image shown on open)",
    "links":              "Array of { type, url } shown as buttons on the card and in the modal, in this order. type is one of: github, demo, web. Each type has its own label and color (github = blue, demo = red/YouTube, web = green)"
  },
  "_also_update": [
    "llms.txt          → ## Featured Projects section",
    "profile.json      → projects array (featured: true)",
    "projects.html     → <script type='application/ld+json'> itemListElement"
  ],

  "projects": [
    {
      "thumb":     "img/thumbs/erpApp.webp",
      "thumb_alt": "Microvalencia ERP App screenshot",

      "badge_en": "Professional · Internship",
      "badge_es": "Profesional · Prácticas",

      "title_en": "Microvalencia ERP App — Mobile Application (Flutter)",
      "title_es": "Microvalencia ERP App — Aplicación Móvil (Flutter)",

      "card_desc_en": "Mobile app built in Flutter during my internship at Microvalencia, integrated with their ERP via Laravel/PHP REST APIs. Covers time tracking, work orders, client management, internal messaging, holidays and more. Soon on Google Play Store and App Store.",
      "card_desc_es": "App móvil desarrollada en Flutter durante mis prácticas en Microvalencia, integrada con su ERP mediante APIs REST Laravel/PHP. Cubre fichaje, partes de trabajo, gestión de clientes, mensajería interna, vacaciones y más. Próximamente en Google Play Store y App Store.",

      "card_tech": "Flutter, Dart, PHP, Laravel, REST API",

      "portrait": true,
      "links": [
        { "type": "demo", "url": "https://youtu.be/lrgRXaBEdI4" }
      ],

      "modal_desc_en": "Mobile application built in Flutter during my internship at Microvalencia Soluciones Informáticas. It acts as a mobile gateway for the company ERP, consuming data for users, permissions, clients, time tracking, work orders, visits, holidays, documents and internal messaging through REST APIs designed and implemented specifically for this project on a Laravel/PHP backend.",
      "modal_desc_es": "Aplicación móvil desarrollada en Flutter durante las prácticas en Microvalencia Soluciones Informáticas. Actúa como puerta móvil al ERP de la empresa, consumiendo datos de usuarios, permisos, clientes, fichajes, partes de trabajo, visitas, vacaciones, documentos y mensajería a través de APIs REST diseñadas e implementadas específicamente para este proyecto sobre un backend Laravel/PHP.",

      "modal_features_en": [
        "Authentication with configurable server URL, remember URL/user options, automatic session restore and secure logout",
        "Clock-in/out with optional GPS location, monthly accordion history and grouped admin view",
        "Clock-in incident reporting with creation, detail view and status tracking",
        "Internal messaging with real-time polling and unread badge count",
        "Work orders with line items, audio recording, image attachments and digital client signature",
        "Visit reports linked to clients, with client digital signature and optional distance and travel time fields",
        "Client search, detail view, five document types (quotes, orders, delivery notes, invoices, recurring invoices) and Maps integration",
        "Holiday management with visual calendar, requests, approval, rejection and cancellation",
        "Role-based access control: superAdmin, admin, user, worker, client, supplier",
        "Internationalization in Spanish, Valencian, Catalan and English; dark/light theme toggle",
        "Clean MVVM architecture with SOLID principles, per-module ViewModels and immutable state",
        "Two app variants from the same codebase via Flutter Flavors (full and lite)"
      ],
      "modal_features_es": [
        "Autenticación con URL de servidor configurable, opciones de recordar URL y usuario, restauración automática de sesión y cierre seguro",
        "Fichaje con ubicación GPS opcional, historial mensual con acordeón y vista agrupada para administradores",
        "Incidencias de fichaje con creación, detalle y seguimiento del estado de cada incidencia",
        "Mensajería interna con polling en tiempo real y badge de mensajes no leídos",
        "Partes de trabajo con líneas, grabación de audio, adjuntos de imagen y firma digital del cliente",
        "Partes de visita vinculados a clientes, con firma digital del cliente y campos opcionales de distancia y tiempo de desplazamiento",
        "Búsqueda de clientes, ficha de detalle, cinco tipos de documentos (presupuestos, pedidos, albaranes, facturas, facturas recurrentes) e integración con Maps",
        "Gestión de vacaciones con calendario visual, solicitudes, aprobación, rechazo y cancelación",
        "Control de acceso por roles: superAdmin, admin, usuario, trabajador, cliente, proveedor",
        "Internacionalización en español, valenciano, catalán e inglés; toggle de tema oscuro/claro",
        "Arquitectura limpia MVVM con principios SOLID, ViewModels por módulo y estado inmutable",
        "Dos variantes de la app desde el mismo código base mediante Flutter Flavors (full y lite)"
      ],

      "modal_tech":   "Flutter, Dart, PHP, Laravel, REST API, MVVM, SOLID, Dio, FlutterSecureStorage, Geolocator, Flutter Flavors",
      "modal_images": [
        "img/erpApp/login.webp",
        "img/erpApp/home.webp",
        "img/erpApp/lateral_bar.webp",
        "img/erpApp/client_detail.webp",
        "img/erpApp/offline.webp"
      ]
    },
    {
      "thumb":     "img/thumbs/cinema_app.webp",
      "thumb_alt": "Cinema App screenshot",

      "title_en": "Cinema App — Movie Discovery App (Flutter)",
      "title_es": "Cinema App — App de Descubrimiento de Películas (Flutter)",

      "card_desc_en": "Flutter movie discovery app consuming 9 REST endpoints from The Movie Database API through a dedicated datasource and mapper layer, built with Clean Architecture, Riverpod state management and Drift (SQLite) for local persistence of favorite movies.",
      "card_desc_es": "App de descubrimiento de películas en Flutter que consume 9 endpoints REST de The Movie Database a través de una capa dedicada de datasources y mappers, con Clean Architecture, gestión de estado con Riverpod y persistencia local de favoritos con Drift (SQLite).",

      "card_tech": "Flutter, Dart, Riverpod, Drift, go_router, Dio",
      "portrait": true,
      "links": [
        { "type": "github", "url": "https://github.com/RaulEstevezA/Cinema_App" },
        { "type": "demo",   "url": "https://youtube.com/shorts/67coTqVxwA4?feature=share" }
      ],

      "modal_desc_en": "Movie discovery application built in Flutter, consuming 9 REST endpoints of The Movie Database (TMDB) API via Dio. Structured with Clean Architecture across domain, infrastructure and presentation layers: a dedicated datasource and mapper layer (MovieMapper, ActorMapper, GenreMapper) transforms the raw TMDB JSON responses (DTOs) into domain entities, keeping the rest of the app decoupled from the external API shape. Uses Riverpod for state management, go_router with a StatefulShellRoute for tabbed navigation, and Drift (SQLite) for local persistence of favorite movies.",
      "modal_desc_es": "Aplicación de descubrimiento de películas desarrollada en Flutter, que consume 9 endpoints REST de la API de The Movie Database (TMDB) mediante Dio. Estructurada con Clean Architecture en capas de dominio, infraestructura y presentación: una capa dedicada de datasources y mappers (MovieMapper, ActorMapper, GenreMapper) transforma las respuestas JSON de TMDB (DTOs) en entidades de dominio, manteniendo el resto de la app desacoplado de la forma de la API externa. Usa Riverpod para la gestión de estado, go_router con StatefulShellRoute para la navegación por pestañas, y Drift (SQLite) para la persistencia local de películas favoritas.",

      "modal_features_en": [
        "Consumes 9 TMDB REST endpoints (now playing, popular, upcoming, top rated, details, credits, search, genre list, discover by genre) through Dio-based datasources",
        "Dedicated mapper layer (MovieMapper, ActorMapper, GenreMapper) that converts TMDB DTOs into domain entities, decoupling business logic from the API response shape",
        "TMDB endpoint responses inspected and verified with Postman during development, before modeling the corresponding DTOs and mappers",
        "Home screen with an autoplay slideshow and four infinite-scroll lists: now playing, upcoming, popular and top rated",
        "Movie detail screen with expanded backdrop, genre chips, cast list and a favorite toggle backed by local storage",
        "Debounced search (500ms) using a native SearchDelegate with asynchronous streamed results",
        "Favorites screen backed by a local SQLite database (Drift), with a masonry grid and infinite scroll",
        "Genre browsing with a dedicated categories screen and per-genre movie listings with pagination",
        "Remote and local infinite pagination with in-memory caching of movie details and cast by ID",
        "Custom app icon generated for Android and iOS, and animated tab transitions",
        "Unit test suite (mappers, repositories, pagination notifier) with flutter_test and mocktail"
      ],
      "modal_features_es": [
        "Consume 9 endpoints REST de TMDB (en cartelera, populares, próximos estrenos, mejor valoradas, detalle, reparto, búsqueda, listado de géneros, descubrir por género) mediante datasources basados en Dio",
        "Capa de mappers dedicada (MovieMapper, ActorMapper, GenreMapper) que convierte los DTOs de TMDB en entidades de dominio, desacoplando la lógica de negocio de la forma de la respuesta de la API",
        "Respuestas de los endpoints de TMDB inspeccionadas y verificadas con Postman durante el desarrollo, antes de modelar los DTOs y mappers correspondientes",
        "Pantalla de inicio con carrusel autoreproducible y cuatro listas con scroll infinito: en cines, próximos estrenos, populares y mejor valoradas",
        "Pantalla de detalle con backdrop expandido, géneros como chips, reparto y botón de favorito conectado a almacenamiento local",
        "Búsqueda con debounce (500ms) mediante un SearchDelegate nativo y resultados asíncronos en streaming",
        "Pantalla de favoritos respaldada por base de datos local SQLite (Drift), con cuadrícula masonry y scroll infinito",
        "Navegación por géneros con pantalla de categorías dedicada y listados de películas por género con paginación",
        "Paginación infinita remota y local con caché en memoria de detalles de película y reparto por ID",
        "Icono de la app generado para Android e iOS, y animaciones de transición entre pestañas",
        "Suite de tests unitarios (mappers, repositorios, notifier de paginación) con flutter_test y mocktail"
      ],

      "modal_tech":   "Flutter, Dart, Riverpod, go_router, Dio, DTO/Entity Mapping, Drift (SQLite), flutter_staggered_grid, animate_do, card_swiper, TMDB API, Postman",
      "modal_images": [
        "img/cinema_app/home_view.webp",
        "img/cinema_app/movie_detail.webp",
        "img/cinema_app/serach_results.webp",
        "img/cinema_app/favorites_view.webp",
        "img/cinema_app/genres_list_view.webp",
        "img/cinema_app/movie_by_genre.webp"
      ]
    },
    {
      "thumb":     "img/thumbs/cs50a1.webp",
      "thumb_alt": "CS50 AI project screenshot",

      "title_en": "CS50 AI — Artificial Intelligence Project",
      "title_es": "CS50 IA — Proyecto de Inteligencia Artificial",

      "card_desc_en": "Structured CS50 AI repository with 13 completed Python exercises across search, logic, uncertainty, optimization, machine learning, neural networks, and natural language processing.",
      "card_desc_es": "Repositorio estructurado de CS50 IA con 13 ejercicios en Python sobre búsqueda, lógica, incertidumbre, optimización, machine learning, redes neuronales y procesamiento del lenguaje natural.",

      "card_tech": "Python, AI, Machine Learning, TensorFlow, scikit-learn, NLTK, Pygame",

      "modal_desc_en": "Structured repository of CS50's Introduction to Artificial Intelligence with Python, organized as a course library with 13 completed exercises across 7 AI units. It covers graph search, adversarial search, propositional logic, probabilistic reasoning, constraint satisfaction, supervised learning, reinforcement learning, neural networks, and natural language processing.",
      "modal_desc_es": "Repositorio estructurado de CS50's Introduction to Artificial Intelligence with Python, organizado como una biblioteca del curso con 13 ejercicios completados en 7 unidades de IA. Cubre búsqueda en grafos, búsqueda adversarial, lógica proposicional, razonamiento probabilístico, satisfacción de restricciones, aprendizaje supervisado, aprendizaje por refuerzo, redes neuronales y procesamiento del lenguaje natural.",

      "modal_features_en": [
        "Search: Degrees with BFS and Tic Tac Toe with Minimax",
        "Knowledge: Knights with propositional logic and Minesweeper with inference",
        "Uncertainty: PageRank via sampling/iteration and Heredity with joint probabilities",
        "Optimization: Crossword as a CSP with AC-3, MRV, Degree, LCV, and backtracking",
        "Learning: Shopping with k-NN and Nim with Q-learning through self-play",
        "Neural Networks: Traffic with a TensorFlow/Keras CNN and approximately 98% test accuracy",
        "Language: Parser with CFG/NLTK and Attention with BERT self-attention visualization"
      ],
      "modal_features_es": [
        "Búsqueda: Degrees con BFS y Tic Tac Toe con Minimax",
        "Conocimiento: Knights con lógica proposicional y Minesweeper con inferencia",
        "Incertidumbre: PageRank por muestreo/iteración y Heredity con probabilidades conjuntas",
        "Optimización: Crossword como CSP con AC-3, MRV, Degree, LCV y backtracking",
        "Aprendizaje: Shopping con k-NN y Nim con Q-learning por self-play",
        "Redes neuronales: Traffic con CNN en TensorFlow/Keras y precisión de test cercana al 98%",
        "Lenguaje: Parser con CFG/NLTK y Attention con visualización de self-attention en BERT"
      ],

      "modal_tech":   "Python, Artificial Intelligence, Machine Learning, TensorFlow, scikit-learn, NLTK, Pygame",
      "modal_images": [
        "img/hardvard_ia/attention.webp",
        "img/hardvard_ia/tictactoe.webp",
        "img/hardvard_ia/crossword2.webp",
        "img/hardvard_ia/parser.webp",
        "img/hardvard_ia/minesweeper.webp"
      ],
      "links": [
        { "type": "github", "url": "https://github.com/RaulEstevezA/harvard_ai" }
      ]
    },
    {
      "thumb":     "img/thumbs/duckware.webp",
      "thumb_alt": "DuckyWare screenshot",

      "title_en": "DuckyWare — Web Backend Application",
      "title_es": "DuckyWare — Aplicación Web Backend",

      "card_desc_en": "Hardware e-commerce platform built with Python and Django. It implements database-driven catalog categories, carts with stock and discount logic, order processing, user profiles, dynamic search, and PayPal payment integration.",
      "card_desc_es": "Plataforma e-commerce de hardware desarrollada con Python y Django. Implementa catálogo por categorías desde base de datos, carrito con lógica de stock y descuentos, pedidos, perfiles de usuario, búsqueda dinámica e integración de pagos con PayPal.",

      "card_tech": "Python, Django, SQL, HTML, CSS, JavaScript",

      "modal_desc_en": "Complete hardware-focused e-commerce platform built as the CS50W capstone. Beyond a product listing site, it models a real store flow: database-driven catalog navigation, stock-aware carts, order creation, profile and shipping data, PayPal checkout, and JavaScript interactions for search, validation, and smoother updates.",
      "modal_desc_es": "Plataforma e-commerce completa orientada a hardware, desarrollada como proyecto final de CS50W. Va más allá de un listado de productos: modela el flujo real de una tienda con catálogo desde base de datos, carrito sensible al stock, creación de pedidos, perfil y datos de envío, pago con PayPal e interacciones en JavaScript para búsqueda, validación y actualizaciones más fluidas.",

      "modal_features_en": [
        "Database-driven hierarchical categories and subcategories",
        "Dynamic homepage with featured, best-selling, and last-unit products",
        "Cart and order flow with stock and discount business logic",
        "PayPal checkout integration",
        "Live product search with image-backed results",
        "User profiles with contact and shipping address management",
        "Responsive interface built with Django templates, Bootstrap, and JavaScript"
      ],
      "modal_features_es": [
        "Categorías y subcategorías jerárquicas cargadas desde base de datos",
        "Página de inicio dinámica con productos destacados, más vendidos y últimas unidades",
        "Flujo de carrito y pedidos con lógica de stock y descuentos",
        "Integración de pago con PayPal",
        "Búsqueda dinámica de productos con resultados apoyados en imágenes",
        "Perfiles de usuario con gestión de contacto y dirección de envío",
        "Interfaz responsive con plantillas Django, Bootstrap y JavaScript"
      ],

      "modal_tech":   "Python, Django, SQL, JavaScript, Bootstrap",
      "modal_images": [
        "img/duckstore/loginPanel.webp",
        "img/duckstore/payment.webp",
        "img/duckstore/menu.webp",
        "img/duckstore/cpuProducts.webp",
        "img/duckstore/productDetail1.webp"
      ],
      "links": [
        { "type": "github", "url": "https://github.com/RaulEstevezA/final_project_cs50w" }
      ]
    },
    {
      "thumb":     "img/thumbs/online.webp",
      "thumb_alt": "OnlineStore screenshot",

      "title_en": "OnlineStore — Desktop Application (JavaFX)",
      "title_es": "OnlineStore — Aplicación de Escritorio (JavaFX)",

      "card_desc_en": "Java and JavaFX desktop application for managing customers, products, stock, and orders in an online store. It evolves from UML design to a graphical interface, using MVC architecture, MySQL persistence through JDBC and Hibernate/JPA, DAO/Factory patterns, and JUnit tests.",
      "card_desc_es": "Aplicación de escritorio en Java y JavaFX para gestionar clientes, productos, stock y pedidos de una tienda online. Evoluciona desde diseño UML hasta interfaz gráfica, con arquitectura MVC, persistencia MySQL mediante JDBC y Hibernate/JPA, patrones DAO/Factory y pruebas JUnit.",

      "card_tech": "Java, JavaFX, ORM, DAO, MVC",

      "modal_desc_en": "Java desktop application that simulates the back-office flow of an online store. Developed iteratively from UML design to a JavaFX interface, it separates presentation, controllers, business logic, and persistence with MVC while supporting customer, product, stock, and order operations.",
      "modal_desc_es": "Aplicación de escritorio en Java que simula el flujo de gestión interna de una tienda online. Desarrollada de forma iterativa desde el diseño UML hasta una interfaz JavaFX, separa presentación, controladores, lógica de negocio y persistencia mediante MVC, dando soporte a clientes, productos, stock y pedidos.",

      "modal_features_en": [
        "Customer management with creation, consultation, and classification",
        "Product and stock management backed by MySQL",
        "Order creation, consultation, and cancellation workflows",
        "DAO and Factory patterns with JDBC persistence",
        "Hibernate/JPA ORM layer preserving the MVC structure",
        "SQL scripts with sample data and stored procedures for safe stock updates",
        "JavaFX forms, tables, navigation, and validations with console-mode fallback",
        "JUnit tests across the Java implementation phases"
      ],
      "modal_features_es": [
        "Gestión de clientes con creación, consulta y clasificación",
        "Gestión de productos y stock respaldada por MySQL",
        "Flujos de creación, consulta y cancelación de pedidos",
        "Patrones DAO y Factory con persistencia JDBC",
        "Capa ORM con Hibernate/JPA manteniendo la estructura MVC",
        "Scripts SQL con datos de prueba y procedimientos almacenados para actualizar stock de forma segura",
        "Formularios, tablas, navegación y validaciones en JavaFX con modo consola alternativo",
        "Pruebas JUnit a lo largo de las fases de implementación Java"
      ],

      "modal_tech":   "Java, JavaFX, MySQL, Hibernate, JPA, JDBC, JUnit",
      "modal_images": [
        "img/onlineStore/menu_principal.webp",
        "img/onlineStore/anadir_articulo.webp",
        "img/onlineStore/gestion_pedidos.webp",
        "img/onlineStore/nuevo_pedido.webp",
        "img/onlineStore/gestion_clientes.webp"
      ],
      "links": [
        { "type": "github", "url": "https://github.com/RaulEstevezA/UOC_ojoaldato" }
      ]
    }
  ]
}
