{"id":30695985,"url":"https://github.com/felipesanchez-dev/micafe-api","last_synced_at":"2025-09-02T07:33:51.854Z","repository":{"id":310579254,"uuid":"1040408584","full_name":"felipesanchez-dev/micafe-api","owner":"felipesanchez-dev","description":null,"archived":false,"fork":false,"pushed_at":"2025-08-19T02:06:40.000Z","size":1654,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-19T02:28:11.490Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://micafe-api.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/felipesanchez-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-18T23:57:30.000Z","updated_at":"2025-08-19T02:06:43.000Z","dependencies_parsed_at":"2025-08-19T02:28:20.028Z","dependency_job_id":null,"html_url":"https://github.com/felipesanchez-dev/micafe-api","commit_stats":null,"previous_names":["felipesanchez-dev/micafe-api"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/felipesanchez-dev/micafe-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipesanchez-dev%2Fmicafe-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipesanchez-dev%2Fmicafe-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipesanchez-dev%2Fmicafe-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipesanchez-dev%2Fmicafe-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/felipesanchez-dev","download_url":"https://codeload.github.com/felipesanchez-dev/micafe-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipesanchez-dev%2Fmicafe-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273250239,"owners_count":25072167,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-02T02:00:09.530Z","response_time":77,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-09-02T07:32:47.509Z","updated_at":"2025-09-02T07:33:51.829Z","avatar_url":"https://github.com/felipesanchez-dev.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ☕ MiCafe API - Colombian Coffee Price Indicators\n\n\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"https://raw.githubusercontent.com/felipesanchez-dev/micafe-api/refs/heads/main/src/image/logo-api.png\" alt=\"MiCafe API Banner\" width=\"25%\"/\u003e\n\n[![Build Status](https://github.com/felipesanchez-dev/micafe-api/actions/workflows/ci-cd.yml/badge.svg)](https://github.com/felipesanchez-dev/micafe-api/actions/workflows/ci-cd.yml)\n[![Coverage](https://img.shields.io/badge/coverage-82.6%25-brightgreen.svg)](https://github.com/felipesanchez-dev/micafe-api)\n[![Node.js Version](https://img.shields.io/badge/node-%3E%3D18.0.0-brightgreen.svg)](https://nodejs.org/)\n[![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=flat\u0026logo=typescript\u0026logoColor=white)](https://www.typescriptlang.org/)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![API Status](https://img.shields.io/badge/API-Live-brightgreen.svg)](https://micafe-api.vercel.app)\n[![Vercel Deploy](https://img.shields.io/badge/Deployed%20on-Vercel-000000?style=flat\u0026logo=vercel\u0026logoColor=white)](https://micafe-api.vercel.app)\n\n**Real-time Colombian Coffee Price API built with Clean Architecture**\n\n_Developed with by [Juan Felipe Reyes Sánchez](https://github.com/felipesanchez-dev)_\n\n[🚀 **Live Demo**](https://micafe-api.vercel.app) • [📖 **API Docs**](https://micafe-api.vercel.app/docs) • [🐛 **Report Bug**](https://github.com/felipesanchez-dev/micafe-api/issues) • [✨ **Request Feature**](https://github.com/felipesanchez-dev/micafe-api/issues)\n\n\u003c/div\u003e\n\n---\n\n## 🌟 Overview\n\n**MiCafe API** is a robust, production-ready RESTful API that provides real-time Colombian coffee price indicators by scraping data from the official **National Federation of Coffee Growers of Colombia** website. Built with **Clean Architecture** principles, this API demonstrates enterprise-level software engineering practices and serves as a comprehensive example of modern Node.js development.\n\n### 🎯 **Key Features**\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e🏗️\u003cbr\u003e\u003cb\u003eClean Architecture\u003c/b\u003e\u003cbr\u003eSOLID principles implementation\u003c/td\u003e\n\u003ctd align=\"center\"\u003e⚡\u003cbr\u003e\u003cb\u003eReal-time Scraping\u003c/b\u003e\u003cbr\u003eLive data from official sources\u003c/td\u003e\n\u003ctd align=\"center\"\u003e🔄\u003cbr\u003e\u003cb\u003eSmart Caching\u003c/b\u003e\u003cbr\u003eIn-memory TTL-based caching\u003c/td\u003e\n\u003ctd align=\"center\"\u003e🛡️\u003cbr\u003e\u003cb\u003eError Resilience\u003c/b\u003e\u003cbr\u003eRetry mechanisms \u0026 fallbacks\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e📊\u003cbr\u003e\u003cb\u003eComprehensive Testing\u003c/b\u003e\u003cbr\u003e82.6% code coverage\u003c/td\u003e\n\u003ctd align=\"center\"\u003e🐳\u003cbr\u003e\u003cb\u003eDocker Ready\u003c/b\u003e\u003cbr\u003eMulti-stage containerization\u003c/td\u003e\n\u003ctd align=\"center\"\u003e🚀\u003cbr\u003e\u003cb\u003eCI/CD Pipeline\u003c/b\u003e\u003cbr\u003eAutomated testing \u0026 deployment\u003c/td\u003e\n\u003ctd align=\"center\"\u003e📚\u003cbr\u003e\u003cb\u003eInteractive Docs\u003c/b\u003e\u003cbr\u003eOpenAPI/Swagger integration\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e🎨\u003cbr\u003e\u003cb\u003eFavicon Support\u003c/b\u003e\u003cbr\u003eColombian coffee theme\u003c/td\u003e\n\u003ctd align=\"center\"\u003e⚡\u003cbr\u003e\u003cb\u003eVercel Deployed\u003c/b\u003e\u003cbr\u003eEdge functions \u0026 global CDN\u003c/td\u003e\n\u003ctd align=\"center\"\u003e📱\u003cbr\u003e\u003cb\u003eMobile Optimized\u003c/b\u003e\u003cbr\u003eResponsive API responses\u003c/td\u003e\n\u003ctd align=\"center\"\u003e🔒\u003cbr\u003e\u003cb\u003eProduction Ready\u003c/b\u003e\u003cbr\u003eSecurity headers \u0026 CORS\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n### 🆕 **Latest Updates \u0026 Features**\n\n- ✨ **Favicon Implementation**: Custom Colombian coffee-themed favicon with fallback support\n- 🚀 **Vercel Deployment**: Lightning-fast edge deployment with global CDN\n- 📝 **Enhanced Logging**: Structured logging with Pino for better debugging\n- 🛡️ **Security Headers**: Helmet.js integration for production security\n- 🎯 **Error Handling**: Improved error middleware with detailed logging\n- 📊 **Performance Monitoring**: Real-time metrics and health checks\n\n---\n\n## 🏛️ Architecture Overview\n\n### **Why Clean Architecture?**\n\nThe MiCafe API implements **Clean Architecture** (also known as Hexagonal or Onion Architecture) to achieve:\n\n- **🔗 Loose Coupling**: Dependencies point inward, making the system flexible and maintainable\n- **🧪 Testability**: Business logic is isolated and easily testable without external dependencies\n- **🔄 Flexibility**: Easy to swap implementations (databases, web frameworks, external services)\n- **📈 Scalability**: Clear separation of concerns allows for independent scaling of components\n- **🛠️ Maintainability**: Changes in one layer don't cascade through the entire system\n\n### **Architecture Layers**\n\n```mermaid\ngraph TB\n    subgraph \"🌐 External Layer\"\n        EXT[External Services\u003cbr/\u003eFederación de Cafeteros\u003cbr/\u003eHTTP Clients]\n    end\n\n    subgraph \"🎯 Interface Layer\"\n        REST[REST Controllers]\n        MW[Middleware]\n        RT[Routes]\n        DTO[DTOs]\n    end\n\n    subgraph \"🏗️ Infrastructure Layer\"\n        REPO[Repositories\u003cbr/\u003eImplementation]\n        CACHE[Cache Service]\n        LOG[Logger Service]\n        HTTP[HTTP Client]\n    end\n\n    subgraph \"🚀 Application Layer\"\n        UC[Use Cases]\n        SRV[Application Services]\n    end\n\n    subgraph \"💎 Domain Layer\"\n        ENT[Entities]\n        INT[Interfaces]\n        ERR[Domain Errors]\n        VAL[Value Objects]\n    end\n\n    EXT --\u003e REST\n    REST --\u003e UC\n    UC --\u003e REPO\n    UC --\u003e CACHE\n    REPO --\u003e EXT\n\n\n    class ENT,INT,ERR,VAL domain\n    class UC,SRV application\n    class REPO,CACHE,LOG,HTTP infrastructure\n    class REST,MW,RT,DTO interface\n    class EXT external\n```\n\n### **Dependency Flow**\n\n```mermaid\nflowchart TD\n    A[🌐 HTTP Request] --\u003e B[🎯 Controller]\n    B --\u003e C[🚀 Use Case]\n    C --\u003e D[🏗️ Repository]\n    D --\u003e E[🌐 External API]\n    E --\u003e D\n    D --\u003e C\n    C --\u003e F[🏗️ Cache Service]\n    C --\u003e G[💎 Domain Service]\n    G --\u003e H[💎 Entity]\n    H --\u003e G\n    G --\u003e C\n    C --\u003e B\n    B --\u003e I[🌐 HTTP Response]\n\n\n    class A,I request\n    class B controller\n    class C usecase\n    class D,F repository\n    class G,H domain\n    class E response\n```\n\n---\n\n## 💻 Technology Stack\n\n\u003cdiv align=\"center\"\u003e\n\n![Node.js](https://img.shields.io/badge/Node.js-18.x-339933?style=for-the-badge\u0026logo=nodedotjs\u0026logoColor=white)\n![TypeScript](https://img.shields.io/badge/TypeScript-5.4-3178C6?style=for-the-badge\u0026logo=typescript\u0026logoColor=white)\n![Express](https://img.shields.io/badge/Express-4.19-000000?style=for-the-badge\u0026logo=express\u0026logoColor=white)\n\n### **Data \u0026 Scraping**\n\n![Cheerio](https://img.shields.io/badge/Cheerio-1.0-FF6B6B?style=for-the-badge\u0026logo=jquery\u0026logoColor=white)\n![Axios](https://img.shields.io/badge/Axios-1.6-5A29E4?style=for-the-badge\u0026logo=axios\u0026logoColor=white)\n\n### **Testing \u0026 Quality**\n\n![Jest](https://img.shields.io/badge/Jest-29.7-C21325?style=for-the-badge\u0026logo=jest\u0026logoColor=white)\n![ESLint](https://img.shields.io/badge/ESLint-8.57-4B32C3?style=for-the-badge\u0026logo=eslint\u0026logoColor=white)\n![Supertest](https://img.shields.io/badge/Supertest-6.0-FF6B6B?style=for-the-badge\u0026logo=jest\u0026logoColor=white)\n\n### **DevOps \u0026 Deployment**\n\n![Docker](https://img.shields.io/badge/Docker-Multi--stage-2496ED?style=for-the-badge\u0026logo=docker\u0026logoColor=white)\n![GitHub Actions](https://img.shields.io/badge/GitHub_Actions-CI/CD-2088FF?style=for-the-badge\u0026logo=github-actions\u0026logoColor=white)\n![Nginx](https://img.shields.io/badge/Nginx-Reverse_Proxy-009639?style=for-the-badge\u0026logo=nginx\u0026logoColor=white)\n\n\u003c/div\u003e\n\n---\n\n## 🔄 Application Flow\n\n### **Coffee Price Retrieval Sequence**\n\n```mermaid\nsequenceDiagram\n    participant U as 👤 User\n    participant C as 🎯 Controller\n    participant UC as 🚀 Use Case\n    participant Cache as 💾 Cache Service\n    participant R as 🏗️ Repository\n    participant EXT as 🌐 Federación API\n    participant N as 💎 Normalizer\n\n    U-\u003e\u003eC: GET /precio-hoy\n    C-\u003e\u003eUC: getCoffeePriceToday()\n\n    UC-\u003e\u003eCache: get(\"coffee_price_today\")\n    alt Cache Hit\n        Cache--\u003e\u003eUC: Cached Data ✅\n        UC--\u003e\u003eC: Normalized Data\n    else Cache Miss\n        UC-\u003e\u003eR: scrapeCoffeePrice()\n        R-\u003e\u003eEXT: HTTP GET Request\n\n        alt Success\n            EXT--\u003e\u003eR: HTML Response\n            R--\u003e\u003eUC: Scraped Raw Data\n            UC-\u003e\u003eN: normalizeCoffeePrice()\n            N--\u003e\u003eUC: Normalized Data\n            UC-\u003e\u003eCache: set(\"coffee_price_today\", data, TTL)\n            UC--\u003e\u003eC: Normalized Data ✅\n        else Failure (Retry)\n            EXT--\u003e\u003eR: Error ❌\n            R-\u003e\u003eEXT: Retry (up to 3 times)\n            alt All Retries Failed\n                R--\u003e\u003eUC: ScrapingError ❌\n                UC--\u003e\u003eC: Error Response\n            end\n        end\n    end\n\n    C--\u003e\u003eU: JSON Response\n```\n\n### **Error Handling Flow**\n\n```mermaid\nflowchart TD\n    A[🚀 API Request] --\u003e B{🛡️ Try Scraping}\n\n    B --\u003e|Success| C[✅ Parse HTML]\n    B --\u003e|Network Error| D[⏳ Retry Logic]\n    B --\u003e|Timeout| D\n\n    D --\u003e E{🔄 Attempts \u003c 3?}\n    E --\u003e|Yes| F[⏱️ Wait 1s]\n    F --\u003e B\n    E --\u003e|No| G[❌ Network Error]\n\n    C --\u003e H{📊 Valid Data?}\n    H --\u003e|Yes| I[🔄 Normalize Data]\n    H --\u003e|No| J[❌ Scraping Error]\n\n    I --\u003e K[💾 Cache Result]\n    K --\u003e L[✅ Success Response]\n\n    G --\u003e M[📝 Log Error]\n    J --\u003e M\n    M --\u003e N[❌ Error Response]\n\n    classDef success fill:#2ECC71,stroke:#27AE60,stroke-width:2px,color:#fff\n    classDef error fill:#E74C3C,stroke:#C0392B,stroke-width:2px,color:#fff\n    classDef process fill:#3498DB,stroke:#2980B9,stroke-width:2px,color:#fff\n    classDef decision fill:#F39C12,stroke:#E67E22,stroke-width:2px,color:#fff\n\n    class L success\n    class G,J,N error\n    class C,D,F,I,K,M process\n    class B,E,H decision\n```\n\n---\n\n## 📊 Data Sources \u0026 Processing\n\n### **Source Data Structure**\n\nThe API scrapes real-time data from the official **Federación Nacional de Cafeteros** website, specifically targeting this HTML structure:\n\n```html\n\u003cdiv class=\"col-12 lista-container\"\u003e\n  \u003cul class=\"lista\"\u003e\n    \u003cli class=\"title\"\u003e\u003cstrong\u003eINDICADORES:\u003c/strong\u003e\u003c/li\u003e\n\n    \u003cli tabindex=\"1\"\u003e\n      \u003cspan class=\"name\"\u003ePrecio interno de referencia:\u003c/span\u003e\n      \u003cstrong\u003e$2.780.000\u003c/strong\u003e\n      \u003cspan class=\"detail hidden\"\u003e\n        \u003cstrong\u003eFecha:\u003c/strong\u003e 2025-08-18\u003cbr /\u003e\n        \u003ca href=\"https://federaciondecafeteros.org/.../precio_cafe.pdf\"\u003ePDF\u003c/a\u003e\n      \u003c/span\u003e\n    \u003c/li\u003e\n\n    \u003cli tabindex=\"2\"\u003e\n      \u003cspan class=\"name\"\u003eBolsa de NY:\u003c/span\u003e\n      \u003cstrong\u003e343,60\u003c/strong\u003e\n      \u003cspan class=\"detail hidden\"\u003e\n        \u003cstrong\u003eFecha:\u003c/strong\u003e 2025-08-18\u003cbr /\u003e\n      \u003c/span\u003e\n    \u003c/li\u003e\n\n    \u003c!-- Additional indicators... --\u003e\n  \u003c/ul\u003e\n\u003c/div\u003e\n```\n\n### **Data Transformation Pipeline**\n\n```mermaid\nflowchart LR\n    A[🌐 Raw HTML] --\u003e B[🔍 CSS Selectors]\n    B --\u003e C[📝 Extract Text]\n    C --\u003e D[🧹 Clean Values]\n    D --\u003e E[🔢 Parse Numbers]\n    E --\u003e F[📅 Format Dates]\n    F --\u003e G[📊 Structured JSON]\n\n    subgraph \"Normalization Rules\"\n        H[\"$2.780.000 → 2780000\"]\n        I[\"343,60 → 343.60\"]\n        J[\"2025-08-18 → ISO Date\"]\n    end\n\n    D -.-\u003e H\n    E -.-\u003e I\n    F -.-\u003e J\n\n\n    class A input\n    class B,C,D,E,F process\n    class G output\n    class H,I,J rule\n```\n\n### **Output Data Model**\n\n```typescript\ninterface CoffeePriceIndicator {\n  precioInternoReferencia: {\n    valor: number; //  (COP, integer)\n    moneda: string; // \"COP\"\n    fecha: string; // \"2025-08-18\" (ISO date)\n  };\n  bolsaNY: {\n    valor: number; // (decimal)\n    unidad: string; // \"cents/lb\"\n    fecha: string; // \"2025-08-18\"\n  };\n  tasaCambio: {\n    valor: number; //  (integer)\n    moneda: string; // \"COP/USD\"\n    fecha: string; // \"2025-08-18\"\n  };\n  mecic: {\n    valor: number; // 0 (integer)\n    fecha: string; // \"2024-07-12\"\n  };\n  fuente: {\n    url: string; // \"https://federaciondecafeteros.org\"\n    pdfPrecio?: string; // PDF link if available\n  };\n}\n```\n\n---\n\n## 🛠️ API Reference\n\n### **Base URL**\n\n```\nProduction:  https://micafe-api.vercel.app\nDevelopment: http://localhost:3000\n```\n\n### **Endpoints Overview**\n\n| Endpoint      | Method | Description                   | Response Time | Cache    |\n| ------------- | ------ | ----------------------------- | ------------- | -------- |\n| `/`           | GET    | API metadata and service info | ~50ms         | No       |\n| `/status`     | GET    | Health check and system stats | ~30ms         | No       |\n| `/precio-hoy` | GET    | Real-time coffee prices       | ~2-5s         | 5min TTL |\n| `/docs`       | GET    | Interactive API documentation | ~100ms        | No       |\n\n### **📋 GET /** - Service Information\n\nReturns comprehensive metadata about the API service.\n\n**Response Example:**\n\n```json\n{\n  \"name\": \"MiCafe API\",\n  \"version\": \"1.0.0\",\n  \"description\": \"API para obtener indicadores del café de Colombia\",\n  \"author\": \"Juan Felipe Reyes Sanchez\",\n  \"github\": \"https://github.com/felipesanchez-dev/micafe-api\",\n  \"endpoints\": {\n    \"/\": \"Información del servicio\",\n    \"/status\": \"Estado de scraping y salud\",\n    \"/precio-hoy\": \"Obtiene el precio de café de hoy vía scraping\"\n  },\n  \"status\": \"online\",\n  \"retrySystem\": \"Enabled (3 attempts)\",\n  \"timestamp\": \"2025-08-18T23:09:01.364Z\"\n}\n```\n\n### **🩺 GET /status** - Health Check\n\nProvides real-time system health and performance metrics.\n\n**Response Example:**\n\n```json\n{\n  \"status\": \"healthy\",\n  \"uptime\": 3600,\n  \"timestamp\": \"2025-08-18T23:09:01.364Z\",\n  \"version\": \"1.0.0\",\n  \"cacheStats\": {\n    \"size\": 1,\n    \"keys\": [\"coffee_price_today\"]\n  }\n}\n```\n\n### **☕ GET /precio-hoy** - Coffee Prices (Main Endpoint)\n\nRetrieves current Colombian coffee price indicators in real-time.\n\n**Success Response (200):**\n\n```json\n{\n  \"success\": true,\n  \"message\": \"Precio obtenido exitosamente\",\n  \"data\": {\n    \"precioInternoReferencia\": {\n      \"valor\": 0,\n      \"moneda\": \"COP\",\n      \"fecha\": \"2025-08-18\"\n    },\n    \"bolsaNY\": {\n      \"valor\": 0,\n      \"unidad\": \"cents/lb\",\n      \"fecha\": \"2025-08-18\"\n    },\n    \"tasaCambio\": {\n      \"valor\": 0,\n      \"moneda\": \"COP/USD\",\n      \"fecha\": \"2025-08-18\"\n    },\n    \"mecic\": {\n      \"valor\": 0,\n      \"fecha\": \"2024-07-12\"\n    },\n    \"fuente\": {\n      \"url\": \"https://federaciondecafeteros.org\",\n      \"pdfPrecio\": \"https://federaciondecafeteros.org/.../precio_cafe.pdf\"\n    }\n  },\n  \"timestamp\": \"2025-08-18T23:10:01.091Z\",\n  \"version\": \"1.0.0\",\n  \"author\": \"Juan Felipe Reyes Sanchez\",\n  \"github\": \"https://github.com/felipesanchez-dev/micafe-api\"\n}\n```\n\n**Error Response (500/503):**\n\n```json\n{\n  \"success\": false,\n  \"message\": \"No fue posible obtener el precio del café\",\n  \"error\": {\n    \"code\": \"SCRAPE_FAILED\",\n    \"detail\": \"Network timeout after 3 retry attempts\"\n  },\n  \"timestamp\": \"2025-08-18T23:10:01.091Z\",\n  \"version\": \"1.0.0\",\n  \"author\": \"Juan Felipe Reyes Sanchez\",\n  \"github\": \"https://github.com/felipesanchez-dev/micafe-api\"\n}\n```\n\n### **📚 Error Codes Reference**\n\n| Code               | HTTP Status | Description                 | Retry Recommended |\n| ------------------ | ----------- | --------------------------- | ----------------- |\n| `SCRAPE_FAILED`    | 500         | General scraping error      | ✅ Yes            |\n| `NETWORK_ERROR`    | 503         | Network connectivity issues | ✅ Yes            |\n| `VALIDATION_ERROR` | 400         | Invalid request data        | ❌ No             |\n| `NOT_FOUND`        | 404         | Endpoint not found          | ❌ No             |\n| `INTERNAL_ERROR`   | 500         | Unexpected server error     | ✅ Yes            |\n\n---\n\n## 🚀 Quick Start\n\n### **Prerequisites**\n\n- **Node.js** ≥ 18.0.0\n- **npm** ≥ 8.0.0\n- **Git** (for cloning)\n\n## ⚡ Quick Try - Live API\n\n¿Quieres probar la API inmediatamente? ¡Aquí tienes algunos endpoints en vivo!\n\n### **🚀 Try It Now**\n\n```bash\n# Get today's coffee prices (live data)\ncurl https://micafe-api.vercel.app/precio-hoy\n\n# Check API status\ncurl https://micafe-api.vercel.app/status\n\n# Get service information\ncurl https://micafe-api.vercel.app/\n```\n\n### **🌐 Interactive Testing**\n\n\u003cdiv align=\"center\"\u003e\n\n[![Open in Postman](https://img.shields.io/badge/Open%20in-Postman-FF6C37?style=for-the-badge\u0026logo=postman\u0026logoColor=white)](https://www.postman.com/felipesanchez-dev/workspace/micafe-api)\n[![Test in Browser](https://img.shields.io/badge/Test%20in-Browser-4285F4?style=for-the-badge\u0026logo=googlechrome\u0026logoColor=white)](https://micafe-api.vercel.app/precio-hoy)\n[![View Docs](https://img.shields.io/badge/API-Documentation-009688?style=for-the-badge\u0026logo=swagger\u0026logoColor=white)](https://micafe-api.vercel.app/docs)\n\n\u003c/div\u003e\n\n### **📱 Mobile-First Response**\n\nLos endpoints están optimizados para dispositivos móviles con respuestas compactas y tiempos de carga mínimos.\n\n### **🏃‍♂️ Fast Track Installation**\n\n```bash\n# Clone the repository\ngit clone https://github.com/felipesanchez-dev/micafe-api.git\ncd micafe-api\n\n# Install dependencies\nnpm install\n\n# Setup environment\ncp .env\n\n# Start development server\nnpm run dev\n\n# 🎉 API is now running at http://localhost:3000\n```\n\n### **🐳 Docker Quick Start**\n\n```bash\n# Using Docker Compose (Recommended)\ndocker-compose up -d\n\n# Or build and run manually\ndocker build -t micafe-api .\ndocker run -p 3000:3000 micafe-api\n```\n\n### **⚡ One-Line Deploy to Railway**\n\n```bash\n# Deploy to Railway (requires Railway CLI)\nrailway login \u0026\u0026 railway up\n```\n\n---\n\n## 🧪 Testing Strategy\n\nOur comprehensive testing strategy ensures reliability and maintainability:\n\n### **Test Pyramid**\n\n```mermaid\ngraph TB\n    subgraph \" \"\n        E2E[\"🔺 E2E Tests\u003cbr/\u003e(4 tests)\u003cbr/\u003eAPI Endpoints \u0026 Integration\"]\n    end\n\n    subgraph \"  \"\n        INT1[\"🔹 Integration Tests\"]\n        INT2[\"(8 tests)\"]\n        INT3[\"Repository \u0026 HTTP Client Integration\"]\n    end\n\n    subgraph \"   \"\n        UNIT1[\"🔸 Unit Tests\"]\n        UNIT2[\"(10 tests)\"]\n        UNIT3[\"Domain Services \u0026 Use Cases\"]\n        UNIT4[\"Business Logic \u0026 Validation\"]\n    end\n\n    E2E --\u003e INT1\n    INT1 --\u003e UNIT1\n\n\n    class E2E e2e\n    class INT1,INT2,INT3 integration\n    class UNIT1,UNIT2,UNIT3,UNIT4 unit\n```\n\n### **Coverage Report**\n\n```\n-----------------------------------|---------|----------|---------|---------|-----------\nFile                               | % Stmts | % Branch | % Funcs | % Lines | Uncovered\n-----------------------------------|---------|----------|---------|---------|-----------\nAll files                          |   82.6  |   42.85  |  81.81  |  83.02  |\n Domain Services                   |   88.46 |   60     |  100    |  91.3   |\n Application Use Cases             |   100   |   50     |  100    |  100    |\n Infrastructure Services           |   74.28 |   46.66  |  72.72  |  74.28  |\n Interface Controllers             |   75.86 |   10     |  100    |  75.86  |\n-----------------------------------|---------|----------|---------|---------|-----------\n```\n\n### **Running Tests**\n\n```bash\n# Run all tests\nnpm test\n\n# Watch mode for development\nnpm run test:watch\n\n# Coverage report\nnpm run test:coverage\n\n# Run specific test suites\nnpm test -- --testPathPattern=unit\nnpm test -- --testPathPattern=e2e\n```\n\n### **Test Categories**\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003e🧪 Unit Tests\u003c/th\u003e\n\u003cth\u003e🔗 Integration Tests\u003c/th\u003e\n\u003cth\u003e🌐 E2E Tests\u003c/th\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\n- ✅ Domain Services\n- ✅ Use Cases\n- ✅ Cache Service\n- ✅ Normalization Logic\n- ✅ Error Handling\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n- ✅ Repository Integration\n- ✅ HTTP Client Mocking\n- ✅ Error Scenarios\n- ✅ Retry Logic\n- ✅ Cache Integration\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n- ✅ API Endpoints\n- ✅ Response Validation\n- ✅ Error Responses\n- ✅ Performance Testing\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n---\n\n## ⚙️ Configuration\n\n### **Environment Variables**\n\nThe API uses environment variables for configuration. Copy `.env.example` to `.env` and customize:\n\n```bash\n# Server Configuration\nNODE_ENV=development          # development | production | test\nPORT=3000                     # Server port\n\n# Cache Configuration\nCACHE_TTL_MS=300000          # Cache TTL in milliseconds (5 minutes)\n\n# Scraping Configuration\nSCRAPING_TIMEOUT_MS=10000    # HTTP request timeout\nMAX_RETRIES=3                # Maximum retry attempts\nRETRY_DELAY_MS=1000         # Delay between retries\n\n# External Services\nFEDERACION_CAFETEROS_URL=https://federaciondecafeteros.org\n\n# Logging\nLOG_LEVEL=info              # error | warn | info | debug\n```\n\n### **🎛️ Configuration Matrix**\n\n| Environment | Cache TTL | Timeout | Retries | Log Level |\n| ----------- | --------- | ------- | ------- | --------- |\n| Development | 30s       | 10s     | 3       | debug     |\n| Testing     | 1s        | 5s      | 1       | error     |\n| Production  | 5min      | 10s     | 3       | info      |\n\n---\n\n## 📈 Performance \u0026 Monitoring\n\n### **Performance Metrics**\n\n- **Average Response Time**: ~2.5s (fresh data) / ~50ms (cached)\n- **Cache Hit Ratio**: ~85% (production workload)\n- **Success Rate**: 99.2% (with retry logic)\n- **Memory Usage**: ~45MB (baseline)\n\n### **Caching Strategy**\n\n```mermaid\nflowchart TD\n    A[📥 Request] --\u003e B{💾 Cache Hit?}\n\n    B --\u003e|Yes 85%| C[⚡ Return Cached\u003cbr/\u003e~50ms]\n    B --\u003e|No 15%| D[🌐 Scrape Fresh Data\u003cbr/\u003e~2.5s]\n\n    D --\u003e E[💾 Update Cache\u003cbr/\u003eTTL: 5min]\n    E --\u003e F[📤 Return Fresh Data]\n\n    G[🔄 Background Process] --\u003e H[🧹 Cache Cleanup\u003cbr/\u003eExpired entries]\n\n    classDef fast fill:#2ECC71,stroke:#27AE60,stroke-width:2px\n    classDef slow fill:#E74C3C,stroke:#C0392B,stroke-width:2px\n    classDef process fill:#3498DB,stroke:#2980B9,stroke-width:2px\n\n    class C fast\n    class D slow\n    class E,F,H process\n```\n\n### **Monitoring Endpoints**\n\n- **Health Check**: `GET /status` - System health and metrics\n- **Performance**: Response times logged with Pino\n- **Error Tracking**: Structured error logging\n- **Cache Statistics**: Cache hit/miss ratios\n\n---\n\n## 🚢 Deployment\n\n### **Production Deployment Options**\n\n\u003cdiv align=\"center\"\u003e\n\n[![Deploy to Vercel](https://img.shields.io/badge/Deploy%20to-Vercel-000000.svg?style=for-the-badge\u0026logo=vercel)](https://vercel.com/new/clone?repository-url=https://github.com/felipesanchez-dev/micafe-api)\n[![Deploy to Railway](https://img.shields.io/badge/Deploy%20to-Railway-0B0D0E.svg?style=for-the-badge\u0026logo=railway)](https://railway.app/new/template)\n[![Deploy to Heroku](https://img.shields.io/badge/Deploy%20to-Heroku-7056bf.svg?style=for-the-badge\u0026logo=heroku)](https://heroku.com/deploy?template=https://github.com/felipesanchez-dev/micafe-api)\n\n\u003c/div\u003e\n\n### **🔧 Manual Deployment**\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e🐳 Docker Production Setup\u003c/b\u003e\u003c/summary\u003e\n\n```bash\n# Build production image\ndocker build -t micafe-api:production .\n\n# Run with environment variables\ndocker run -d \\\n  --name micafe-api \\\n  -p 3000:3000 \\\n  -e NODE_ENV=production \\\n  -e CACHE_TTL_MS=300000 \\\n  micafe-api:production\n\n# With docker-compose\ndocker-compose -f docker-compose.prod.yml up -d\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e🚀 Traditional Server Deployment\u003c/b\u003e\u003c/summary\u003e\n\n```bash\n# On your server\ngit clone https://github.com/felipesanchez-dev/micafe-api.git\ncd micafe-api\n\n# Install dependencies\nnpm ci --only=production\n\n# Build the application\nnpm run build\n\n# Start with PM2 (recommended)\nnpm install -g pm2\npm2 start dist/index.js --name \"micafe-api\"\npm2 startup\npm2 save\n```\n\n\u003c/details\u003e\n\n### **🌐 Reverse Proxy Configuration**\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eNginx Configuration\u003c/b\u003e\u003c/summary\u003e\n\n```nginx\nserver {\n    listen 80;\n    server_name yourdomain.com;\n\n    location / {\n        proxy_pass http://localhost:3000;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection 'upgrade';\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n        proxy_cache_bypass $http_upgrade;\n    }\n}\n```\n\n\u003c/details\u003e\n\n---\n\n## 🤝 Contributing\n\nWe welcome contributions from the community! Here's how you can help improve MiCafe API:\n\n### **🐛 Bug Reports**\n\nFound a bug? Please [create an issue](https://github.com/felipesanchez-dev/micafe-api/issues/new?template=bug_report.md) with:\n\n- **Description**: Clear description of the bug\n- **Steps to Reproduce**: Step-by-step instructions\n- **Expected vs Actual**: What you expected vs what happened\n- **Environment**: OS, Node.js version, etc.\n\n### **✨ Feature Requests**\n\nHave an idea? [Open a feature request](https://github.com/felipesanchez-dev/micafe-api/issues/new?template=feature_request.md) with:\n\n- **Problem**: What problem does this solve?\n- **Solution**: Detailed description of your proposed solution\n- **Alternatives**: Other solutions you've considered\n\n### **🔧 Development Workflow**\n\n1. **Fork** the repository\n2. **Clone** your fork: `git clone https://github.com/YOUR-USERNAME/micafe-api.git`\n3. **Branch**: `git checkout -b feature/amazing-feature`\n4. **Install**: `npm install`\n5. **Develop**: Make your changes\n6. **Test**: `npm test` (ensure all tests pass)\n7. **Commit**: `git commit -m 'feat: add amazing feature'`\n8. **Push**: `git push origin feature/amazing-feature`\n9. **PR**: Open a Pull Request\n\n### **📝 Commit Convention**\n\nWe use [Conventional Commits](https://www.conventionalcommits.org/):\n\n- `feat:` New features\n- `fix:` Bug fixes\n- `docs:` Documentation updates\n- `test:` Test additions/updates\n- `refactor:` Code refactoring\n- `perf:` Performance improvements\n\n---\n\n## 📊 Repository Statistics\n\n\u003cdiv align=\"center\"\u003e\n\n### **📈 Real-Time Repository Metrics**\n\n![GitHub stars](https://img.shields.io/github/stars/felipesanchez-dev/micafe-api?style=for-the-badge\u0026logo=github\u0026color=gold\u0026labelColor=1e1e2e\u0026label=Stars)\n![GitHub forks](https://img.shields.io/github/forks/felipesanchez-dev/micafe-api?style=for-the-badge\u0026logo=git\u0026color=teal\u0026labelColor=1e1e2e\u0026label=Forks)\n![GitHub issues](https://img.shields.io/github/issues/felipesanchez-dev/micafe-api?style=for-the-badge\u0026logo=github\u0026color=orange\u0026labelColor=1e1e2e\u0026label=Issues)\n![GitHub pull requests](https://img.shields.io/github/issues-pr/felipesanchez-dev/micafe-api?style=for-the-badge\u0026logo=github\u0026color=purple\u0026labelColor=1e1e2e\u0026label=Pull%20Requests)\n\n![GitHub commit activity](https://img.shields.io/github/commit-activity/m/felipesanchez-dev/micafe-api?style=for-the-badge\u0026logo=github\u0026color=blue\u0026labelColor=1e1e2e\u0026label=Commits%2FMonth)\n![GitHub last commit](https://img.shields.io/github/last-commit/felipesanchez-dev/micafe-api?style=for-the-badge\u0026logo=github\u0026color=green\u0026labelColor=1e1e2e\u0026label=Last%20Commit)\n![GitHub contributors](https://img.shields.io/github/contributors/felipesanchez-dev/micafe-api?style=for-the-badge\u0026logo=github\u0026color=red\u0026labelColor=1e1e2e\u0026label=Contributors)\n![GitHub watchers](https://img.shields.io/github/watchers/felipesanchez-dev/micafe-api?style=for-the-badge\u0026logo=github\u0026color=pink\u0026labelColor=1e1e2e\u0026label=Watchers)\n\n### **💻 Code Metrics**\n\n![GitHub top language](https://img.shields.io/github/languages/top/felipesanchez-dev/micafe-api?style=for-the-badge\u0026logo=typescript\u0026color=3178c6\u0026labelColor=1e1e2e)\n![Languages count](https://img.shields.io/github/languages/count/felipesanchez-dev/micafe-api?style=for-the-badge\u0026logo=code\u0026color=blue\u0026labelColor=1e1e2e\u0026label=Languages)\n![Code size](https://img.shields.io/github/languages/code-size/felipesanchez-dev/micafe-api?style=for-the-badge\u0026logo=files\u0026color=lightblue\u0026labelColor=1e1e2e\u0026label=Code%20Size)\n![Repo size](https://img.shields.io/github/repo-size/felipesanchez-dev/micafe-api?style=for-the-badge\u0026logo=database\u0026color=yellow\u0026labelColor=1e1e2e\u0026label=Repo%20Size)\n\n### **📊 Repository Health \u0026 Activity**\n\n![GitHub release](https://img.shields.io/github/v/release/felipesanchez-dev/micafe-api?style=for-the-badge\u0026logo=rocket\u0026color=success\u0026labelColor=1e1e2e\u0026label=Latest%20Release)\n![GitHub license](https://img.shields.io/github/license/felipesanchez-dev/micafe-api?style=for-the-badge\u0026logo=law\u0026color=blue\u0026labelColor=1e1e2e\u0026label=License)\n![GitHub downloads](https://img.shields.io/github/downloads/felipesanchez-dev/micafe-api/total?style=for-the-badge\u0026logo=download\u0026color=brightgreen\u0026labelColor=1e1e2e\u0026label=Downloads)\n![GitHub commit activity (branch)](https://img.shields.io/github/commit-activity/w/felipesanchez-dev/micafe-api?style=for-the-badge\u0026logo=activity\u0026color=ff69b4\u0026labelColor=1e1e2e\u0026label=Weekly%20Activity)\n\n### **📈 Live Repository Dashboard**\n\n![Repository Stats](https://github-readme-stats.vercel.app/api/pin/?username=felipesanchez-dev\u0026repo=micafe-api\u0026theme=catppuccin_mocha\u0026hide_border=true\u0026show_owner=true\u0026card_width=500)\n\n### **🔥 Repository Activity Graph**\n\n![Activity Graph](https://github-readme-activity-graph.vercel.app/graph?username=felipesanchez-dev\u0026repo=micafe-api\u0026theme=react-dark\u0026hide_border=true\u0026title_color=58a6ff\u0026color=79c0ff\u0026line=1f6feb\u0026point=f85149\u0026area_color=0d1117\u0026area=true\u0026custom_title=MiCafe%20API%20Activity%20Graph)\n\n### **� Language Distribution**\n\n![Top Languages](https://github-readme-stats.vercel.app/api/top-langs/?username=felipesanchez-dev\u0026repo=micafe-api\u0026layout=compact\u0026theme=catppuccin_mocha\u0026hide_border=true\u0026card_width=500\u0026title_color=58a6ff)\n\n\u003c/div\u003e\n\n### **📈 Development Metrics (Real-Time)**\n\n- **Repository Age**: ![GitHub Created At](https://img.shields.io/github/created-at/felipesanchez-dev/micafe-api?style=flat\u0026logo=calendar\u0026color=blue)\n- **Latest Release**: ![GitHub Release Date](https://img.shields.io/github/release-date/felipesanchez-dev/micafe-api?style=flat\u0026logo=rocket\u0026color=green)\n- **Total Commits**: ![GitHub commit activity](https://img.shields.io/github/commit-activity/t/felipesanchez-dev/micafe-api?style=flat\u0026logo=git\u0026color=orange)\n- **Open Issues**: ![GitHub issues](https://img.shields.io/github/issues-raw/felipesanchez-dev/micafe-api?style=flat\u0026logo=github\u0026color=red)\n- **Closed Issues**: ![GitHub closed issues](https://img.shields.io/github/issues-closed-raw/felipesanchez-dev/micafe-api?style=flat\u0026logo=github\u0026color=green)\n- **Pull Requests**: ![GitHub pull requests](https://img.shields.io/github/issues-pr/felipesanchez-dev/micafe-api?style=flat\u0026logo=github\u0026color=purple)\n\n### **💾 Repository Size \u0026 Complexity**\n\n- **Lines of Code**: ![Lines of code](https://img.shields.io/tokei/lines/github/felipesanchez-dev/micafe-api?style=flat\u0026logo=code\u0026color=blue)\n- **Repository Size**: ![GitHub repo size](https://img.shields.io/github/repo-size/felipesanchez-dev/micafe-api?style=flat\u0026logo=database\u0026color=yellow)\n- **Code Size**: ![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/felipesanchez-dev/micafe-api?style=flat\u0026logo=files\u0026color=lightblue)\n- **Dependencies**: ![Dependencies](https://img.shields.io/librariesio/github/felipesanchez-dev/micafe-api?style=flat\u0026logo=npm\u0026color=red)\n\n### **🏆 Community \u0026 Engagement**\n\n- **Stars History**: ⭐ Track repository growth over time\n- **Fork Network**: 🔀 Active community contributions\n- **Watch Activity**: 👀 Developer interest and monitoring\n- **Download Stats**: 📥 Package usage and adoption\n\n### **🏆 Quality Metrics**\n\n- **Code Quality**: A+ (TypeScript strict mode)\n- **Security**: ✅ No known vulnerabilities (npm audit)\n- **Performance**: 98/100 (Lighthouse performance)\n- **Maintainability**: 9.5/10 (Clean Architecture)\n- **Reliability**: 99.9% uptime (Vercel edge functions)\n\n### **🌍 Live API \u0026 Repository Health**\n\n\u003cdiv align=\"center\"\u003e\n\n[![API Status](https://img.shields.io/website?url=https%3A%2F%2Fmicafe-api.vercel.app\u0026style=for-the-badge\u0026logo=vercel\u0026logoColor=white\u0026label=API%20Status)](https://micafe-api.vercel.app)\n[![Build Status](https://img.shields.io/github/actions/workflow/status/felipesanchez-dev/micafe-api/ci.yml?style=for-the-badge\u0026logo=github-actions\u0026logoColor=white\u0026label=Build)](https://github.com/felipesanchez-dev/micafe-api/actions)\n[![Deployment](https://img.shields.io/github/deployments/felipesanchez-dev/micafe-api/Production?style=for-the-badge\u0026logo=vercel\u0026logoColor=white\u0026label=Deployment)](https://github.com/felipesanchez-dev/micafe-api/deployments)\n\n\u003c/div\u003e\n\n### **🏆 Repository Quality Metrics**\n\n- **Code Quality**: ![Codacy grade](https://img.shields.io/codacy/grade/[PROJECT_ID]?style=flat\u0026logo=codacy\u0026color=green)\n- **Security**: ![Snyk Vulnerabilities](https://img.shields.io/snyk/vulnerabilities/github/felipesanchez-dev/micafe-api?style=flat\u0026logo=snyk\u0026color=green)\n- **Dependencies**: ![Dependencies Status](https://img.shields.io/librariesio/github/felipesanchez-dev/micafe-api?style=flat\u0026logo=libraries\u0026color=blue)\n- **Test Coverage**: ![Coverage](https://img.shields.io/badge/coverage-82.6%25-brightgreen.svg?style=flat\u0026logo=jest)\n\n---\n\n## 🤔 FAQ\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e❓ How fresh is the data?\u003c/b\u003e\u003c/summary\u003e\n\nData is scraped in real-time from the official Federación de Cafeteros website. However, we use a 5-minute cache to prevent overwhelming their servers. This means data is never older than 5 minutes.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e❓ What happens if the source website changes?\u003c/b\u003e\u003c/summary\u003e\n\nThe scraping logic is designed to be resilient to minor changes. If major changes occur, we have comprehensive monitoring that will alert us immediately, and we'll update the scraping logic accordingly.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e❓ Is there a rate limit?\u003c/b\u003e\u003c/summary\u003e\n\nCurrently, there are no rate limits implemented. However, with the 5-minute cache, making frequent requests won't provide newer data anyway. Rate limiting may be added in future versions.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e❓ Can I use this in production?\u003c/b\u003e\u003c/summary\u003e\n\nYes! This API is production-ready with proper error handling, logging, monitoring, and testing. However, please be considerate of the load you place on the service.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e❓ How do I report issues or contribute?\u003c/b\u003e\u003c/summary\u003e\n\nPlease use our [GitHub Issues](https://github.com/felipesanchez-dev/micafe-api/issues) for bug reports and feature requests. For contributions, see our [Contributing Guide](#-contributing).\n\n\u003c/details\u003e\n\n---\n\n## 📄 License\n\nThis project is licensed under the **Apache License 2.0** - see the [LICENSE](LICENSE) file for details.\n\n### **License Summary**\n\n- ✅ **Commercial Use**: You can use this software commercially\n- ✅ **Modification**: You can modify the source code\n- ✅ **Distribution**: You can distribute the software\n- ✅ **Patent Grant**: Express grant of patent rights from contributors\n- ✅ **Private Use**: You can use this software privately\n\n**Required:**\n\n- 📄 **License Notice**: Include the license and copyright notice\n- 📄 **State Changes**: Document any changes made to the code\n\n---\n\n## 👨‍💻 About the Developer\n\n\u003cdiv align=\"center\"\u003e\n\n### 🚀 **Juan Felipe Reyes Sánchez**\n\n\u003cimg src=\"https://github.com/felipesanchez-dev.png\" alt=\"Juan Felipe Reyes Sánchez\" width=\"150\" style=\"border-radius: 50%\"/\u003e\n\n**Full-Stack Software Engineer | Clean Architecture Enthusiast**\n\n\u003cimg src=\"https://readme-typing-svg.herokuapp.com?font=Fira+Code\u0026weight=500\u0026size=18\u0026pause=1000\u0026color=0066FF\u0026center=true\u0026vCenter=true\u0026width=700\u0026lines=Building+scalable+web+applications+with+TypeScript;Clean+Architecture+%26+SOLID+Principles+advocate;API+Design+%26+Performance+Optimization;Always+learning%2C+always+growing+🚀\" /\u003e\n\n**📍 Ibagué, Tolima, Colombia 🇨🇴**\n\n[![Portfolio](https://img.shields.io/badge/🌍_Portfolio-felipesanchezdev.site-FF6B35?style=for-the-badge\u0026logoColor=white\u0026logo=firefox)](https://felipesanchezdev.site)\n[![Email](https://img.shields.io/badge/📧_Email-jfelipe9.121@gmail.com-D14836?style=for-the-badge\u0026logo=gmail\u0026logoColor=white)](mailto:jfelipe9.121@gmail.com)\n\n[![LinkedIn](https://img.shields.io/badge/💼_LinkedIn-felipereyessa-0077B5?style=for-the-badge\u0026logo=linkedin\u0026logoColor=white)](https://www.linkedin.com/in/felipereyessa/)\n[![GitHub](https://img.shields.io/badge/💻_GitHub-felipesanchez--dev-181717?style=for-the-badge\u0026logo=github\u0026logoColor=white)](https://github.com/felipesanchez-dev)\n\n[![WhatsApp](https://img.shields.io/badge/📱_WhatsApp-+57_310_245_2542-25D366?style=for-the-badge\u0026logo=whatsapp\u0026logoColor=white)](https://wa.me/573102452542)\n[![Twitter](https://img.shields.io/badge/🐦_Twitter-@felipesanchez--dev-1DA1F2?style=for-the-badge\u0026logo=twitter\u0026logoColor=white)](https://twitter.com/felipesanchez_dev)\n\n### **🛠️ Core Technologies \u0026 Expertise**\n\n![TypeScript](https://img.shields.io/badge/TypeScript-Expert-3178C6?style=for-the-badge\u0026logo=typescript\u0026logoColor=white)\n![React](https://img.shields.io/badge/React-Expert-61DAFB?style=for-the-badge\u0026logo=react\u0026logoColor=black)\n![Node.js](https://img.shields.io/badge/Node.js-Advanced-339933?style=for-the-badge\u0026logo=nodedotjs\u0026logoColor=white)\n![Next.js](https://img.shields.io/badge/Next.js-Advanced-000000?style=for-the-badge\u0026logo=nextdotjs\u0026logoColor=white)\n\n![Express](https://img.shields.io/badge/Express.js-Proficient-000000?style=for-the-badge\u0026logo=express\u0026logoColor=white)\n![Jest](https://img.shields.io/badge/Jest-Testing-C21325?style=for-the-badge\u0026logo=jest\u0026logoColor=white)\n![Docker](https://img.shields.io/badge/Docker-DevOps-2496ED?style=for-the-badge\u0026logo=docker\u0026logoColor=white)\n![Vercel](https://img.shields.io/badge/Vercel-Deployment-000000?style=for-the-badge\u0026logo=vercel\u0026logoColor=white)\n\n### **📊 Development Philosophy**\n\n- 🏗️ **Clean Architecture**: Building maintainable and scalable applications\n- 🧪 **Test-Driven Development**: Quality through comprehensive testing\n- 🚀 **Performance First**: Optimized code and efficient algorithms\n- 📚 **Continuous Learning**: Staying updated with latest technologies\n\n**\"Crafting digital solutions that make a difference, one clean line of code at a time.\"**\n\n\u003c/div\u003e\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n## 🌟 **Support the Project**\n\nIf you find MiCafe API useful, please consider:\n\n⭐ **Star this repository**\n🐛 **Report bugs**\n💡 **Suggest features**\n🤝 **Contribute code**\n📢 **Share with others**\n\n---\n\n### **🎯 Live Repository Statistics**\n\n[![GitHub stars](https://img.shields.io/github/stars/felipesanchez-dev/micafe-api?style=social\u0026logo=github)](https://github.com/felipesanchez-dev/micafe-api/stargazers)\n[![GitHub forks](https://img.shields.io/github/forks/felipesanchez-dev/micafe-api?style=social\u0026logo=github)](https://github.com/felipesanchez-dev/micafe-api/network/members)\n[![GitHub watchers](https://img.shields.io/github/watchers/felipesanchez-dev/micafe-api?style=social\u0026logo=github)](https://github.com/felipesanchez-dev/micafe-api/watchers)\n[![GitHub issues](https://img.shields.io/github/issues/felipesanchez-dev/micafe-api?style=social\u0026logo=github)](https://github.com/felipesanchez-dev/micafe-api/issues)\n\n### **📊 Repository Insights Dashboard**\n\n\u003cdiv align=\"center\"\u003e\n\n![Repository Insights](https://repobeats.axiom.co/api/embed/[REPO_ID].svg \"MiCafe API Repository Analytics\")\n\n*Real-time repository analytics updated automatically*\n\n\u003c/div\u003e\n\n---\n\n© 2025 Juan Felipe Reyes Sánchez. Licensed under Apache 2.0.\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffelipesanchez-dev%2Fmicafe-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffelipesanchez-dev%2Fmicafe-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffelipesanchez-dev%2Fmicafe-api/lists"}