{"id":29313734,"url":"https://github.com/chhedadhruv/inspirational-quotes-api","last_synced_at":"2026-04-29T21:03:13.428Z","repository":{"id":302806574,"uuid":"1013682481","full_name":"chhedadhruv/inspirational-quotes-api","owner":"chhedadhruv","description":"🎯 A modern, secure REST API serving 2000+ inspirational quotes with Docker support, rate limiting, and health monitoring. Built with Node.js \u0026 Express.","archived":false,"fork":false,"pushed_at":"2025-07-05T04:42:54.000Z","size":180,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-20T08:45:59.831Z","etag":null,"topics":["api","backend","daily-quotes","docker","dotenv","express","health-check","helmet","inspiration","inspirational-quotes","javascript","json-api","motivation","nodejs","pagination","productivity","quotes","rate-limiting","rest-api","self-improvement"],"latest_commit_sha":null,"homepage":"https://quotes.dhruvchheda.com/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chhedadhruv.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":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-04T09:42:56.000Z","updated_at":"2025-07-15T09:49:00.000Z","dependencies_parsed_at":"2025-07-04T10:52:00.298Z","dependency_job_id":null,"html_url":"https://github.com/chhedadhruv/inspirational-quotes-api","commit_stats":null,"previous_names":["chhedadhruv/inspirational-quotes-api"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/chhedadhruv/inspirational-quotes-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chhedadhruv%2Finspirational-quotes-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chhedadhruv%2Finspirational-quotes-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chhedadhruv%2Finspirational-quotes-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chhedadhruv%2Finspirational-quotes-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chhedadhruv","download_url":"https://codeload.github.com/chhedadhruv/inspirational-quotes-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chhedadhruv%2Finspirational-quotes-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32443576,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T20:22:27.477Z","status":"ssl_error","status_checked_at":"2026-04-29T20:22:26.507Z","response_time":110,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["api","backend","daily-quotes","docker","dotenv","express","health-check","helmet","inspiration","inspirational-quotes","javascript","json-api","motivation","nodejs","pagination","productivity","quotes","rate-limiting","rest-api","self-improvement"],"created_at":"2025-07-07T10:12:41.379Z","updated_at":"2026-04-29T21:03:13.410Z","avatar_url":"https://github.com/chhedadhruv.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# 📚 Quote API\n\n*A modern, secure, and feature-rich REST API for inspirational quotes*\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Node.js](https://img.shields.io/badge/Node.js-18+-green.svg)](https://nodejs.org/)\n[![Express](https://img.shields.io/badge/Express-5.1.0-blue.svg)](https://expressjs.com/)\n[![Docker](https://img.shields.io/badge/Docker-Ready-blue.svg)](https://www.docker.com/)\n[![Cloudflare](https://img.shields.io/badge/Cloudflare-Tunnel-orange.svg)](https://www.cloudflare.com/)\n\n[Features](#-features) • [Quick Start](#-quick-start) • [API Documentation](#-api-documentation) • [Configuration](#-configuration) • [Docker](#-docker-deployment)\n\n\u003c/div\u003e\n\n---\n\n## ✨ Features\n\n\u003cdiv align=\"center\"\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\n### 🎯 **Core Features**\n- 🎲 Random quote generation\n- 🔍 Advanced search capabilities\n- 🏷️ Tag-based filtering\n- 📅 Date-based queries\n- 📏 Length filtering\n- 👤 Author-based search\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n### 🛠️ **Technical Features**\n- ⚙️ Environment configuration\n- 🏥 Health monitoring\n- 🐛 Debug mode\n- 🎨 Pretty JSON responses\n- 📝 Enhanced response objects\n- 🔒 Security-first design\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\n### 🚀 **Deployment**\n- 🐳 Docker ready\n- ☁️ Cloudflare tunnel integration\n- 📊 Pagination support\n- 🔄 Hot reload for development\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n### 🔒 **Security**\n- 🛡️ Rate limiting\n- 🔐 Secure headers\n- 🚫 Input validation\n- 🌐 CORS protection\n- 🔒 Environment-based security\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\n---\n\n## 🚀 Quick Start\n\n### Prerequisites\n\n![Node.js](https://img.shields.io/badge/Node.js-18+-green?style=flat-square\u0026logo=node.js)\n![npm](https://img.shields.io/badge/npm-latest-red?style=flat-square\u0026logo=npm)\n![Docker](https://img.shields.io/badge/Docker-optional-blue?style=flat-square\u0026logo=docker)\n\n### Installation\n\n```bash\n# 1️⃣ Clone the repository\ngit clone \u003crepository-url\u003e\ncd quote-api\n\n# 2️⃣ Install dependencies\nnpm install\n\n# 3️⃣ Set up environment variables\ncp .env.example .env\n# Edit .env file with your preferred settings\n\n# 4️⃣ Start the development server\nnpm start\n\n# 🎉 Your API is now running at http://localhost:3000\n```\n\n### Alternative: One-liner setup\n```bash\ngit clone \u003crepository-url\u003e \u0026\u0026 cd quote-api \u0026\u0026 npm install \u0026\u0026 cp .env.example .env \u0026\u0026 npm start\n```\n\n---\n\n## 🐳 Docker Deployment\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e🔧 Using Docker Compose (Recommended)\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\n# Build and start services\ndocker-compose up -d\n\n# View logs\ndocker-compose logs -f quote-api\n\n# Stop services\ndocker-compose down\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e📦 Manual Docker Build\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\n# Build the image\ndocker build -t quote-api .\n\n# Run the container\ndocker run -p 3000:3000 --env-file .env quote-api\n```\n\n\u003c/details\u003e\n\n---\n\n## 📖 API Documentation\n\n### 🌐 Base URL\n```\nhttp://localhost:3000/api\n```\n\n\u003e **💡 Pro Tip:** The API prefix is configurable via the `API_PREFIX` environment variable (default: `/api`)\n\n### 📋 Endpoints Overview\n\n\u003cdiv align=\"center\"\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eCategory\u003c/th\u003e\n\u003cth\u003eEndpoint\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003cth\u003eExample\u003c/th\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd rowspan=\"2\"\u003e🎲 \u003cstrong\u003eRandom\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eGET /api/quote/random\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGet a random quote\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"#-random-quote\"\u003eView\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eGET /api/quotes\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGet all quotes (paginated)\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"#-get-all-quotes\"\u003eView\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd rowspan=\"3\"\u003e🔍 \u003cstrong\u003eSearch\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eGET /api/quotes/search\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSearch quotes by content\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"#-search-quotes\"\u003eView\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eGET /api/quotes/author/:name\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGet quotes by author\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"#-quotes-by-author\"\u003eView\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eGET /api/quotes/tag/:tag\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGet quotes by tag\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"#-quotes-by-tag\"\u003eView\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd rowspan=\"3\"\u003e📊 \u003cstrong\u003eFilter\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eGET /api/quotes/date/:date\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGet quotes by date\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"#-quotes-by-date\"\u003eView\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eGET /api/quotes/length\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFilter by character length\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"#-filter-by-length\"\u003eView\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eGET /api/quote/:id\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGet specific quote by ID\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"#-get-quote-by-id\"\u003eView\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd rowspan=\"2\"\u003e🏷️ \u003cstrong\u003eMeta\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eGET /api/tags\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGet all available tags\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"#-get-all-tags\"\u003eView\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eGET /health\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eHealth check endpoint\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"#-health-check\"\u003eView\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\n---\n\n### 🔍 Detailed Endpoint Documentation\n\n#### 🎲 Random Quote\n```http\nGET /api/quote/random\n```\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e📝 Response Example\u003c/strong\u003e\u003c/summary\u003e\n\n```json\n{\n  \"_id\": \"quote-id-123\",\n  \"content\": \"The only way to do great work is to love what you do.\",\n  \"author\": \"Steve Jobs\",\n  \"tags\": [\"work\", \"passion\", \"success\"],\n  \"length\": 49,\n  \"dateAdded\": \"2023-01-01\"\n}\n```\n\n\u003c/details\u003e\n\n#### 📚 Get All Quotes\n```http\nGET /api/quotes?page=1\u0026limit=10\n```\n\n**Parameters:**\n- `page` (optional): Page number (default: 1)\n- `limit` (optional): Number of quotes per page (default: all)\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e📝 Response Example\u003c/strong\u003e\u003c/summary\u003e\n\n```json\n{\n  \"page\": 1,\n  \"limit\": 10,\n  \"total\": 100,\n  \"results\": [\n    {\n      \"_id\": \"quote-id-123\",\n      \"content\": \"Quote content here...\",\n      \"author\": \"Author Name\",\n      \"tags\": [\"tag1\", \"tag2\"],\n      \"length\": 50,\n      \"dateAdded\": \"2023-01-01\"\n    }\n  ]\n}\n```\n\n\u003c/details\u003e\n\n#### 🔍 Search Quotes\n```http\nGET /api/quotes/search?q=success\n```\n\n**Parameters:**\n- `q` (required): Search query\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e📝 Response Example\u003c/strong\u003e\u003c/summary\u003e\n\n```json\n{\n  \"query\": \"success\",\n  \"total\": 15,\n  \"results\": [...]\n}\n```\n\n\u003c/details\u003e\n\n#### 👤 Quotes by Author\n```http\nGET /api/quotes/author/steve-jobs\n```\n\n#### 🏷️ Quotes by Tag\n```http\nGET /api/quotes/tag/motivation\n```\n\n#### 🆔 Get Quote by ID\n```http\nGET /api/quote/{id}\n```\n\n#### 📅 Quotes by Date\n```http\nGET /api/quotes/date/2023-01-01\n```\n\n#### 📏 Filter by Length\n```http\nGET /api/quotes/length?min=50\u0026max=100\n```\n\n**Parameters:**\n- `min` (optional): Minimum character length\n- `max` (optional): Maximum character length\n\n#### 🏷️ Get All Tags\n```http\nGET /api/tags\n```\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e📝 Response Example\u003c/strong\u003e\u003c/summary\u003e\n\n```json\n{\n  \"total\": 25,\n  \"tags\": [\"inspiration\", \"motivation\", \"success\", \"wisdom\", \"life\"]\n}\n```\n\n\u003c/details\u003e\n\n#### 🏥 Health Check\n```http\nGET /health\n```\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e📝 Response Example\u003c/strong\u003e\u003c/summary\u003e\n\n```json\n{\n  \"status\": \"healthy\",\n  \"timestamp\": \"2024-01-15T10:30:00.000Z\",\n  \"uptime\": 3600,\n  \"environment\": \"development\",\n  \"version\": \"v1\"\n}\n```\n\n\u003c/details\u003e\n\n---\n\n## ⚙️ Configuration\n\n### 🔧 Environment Variables\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e📋 View All Environment Variables\u003c/strong\u003e\u003c/summary\u003e\n\nCopy the `.env.example` file to `.env` and customize the values:\n\n```bash\ncp .env.example .env\n```\n\n**Available Environment Variables:**\n\n```env\n# 🖥️ Server Configuration\nPORT=3000                    # Server port\nNODE_ENV=development         # Environment mode (development/production)\n\n# 🔒 Rate Limiting Configuration\nRATE_LIMIT_WINDOW=60000     # Rate limit window in milliseconds\nRATE_LIMIT_MAX=60           # Maximum requests per window\n\n# 🛡️ Security Headers\nHELMET_ENABLED=true         # Enable/disable security headers\n\n# 🌐 CORS Configuration\nCORS_ORIGIN=*               # Allowed origins\nCORS_METHODS=GET,POST,PUT,DELETE,OPTIONS\nCORS_ALLOWED_HEADERS=Content-Type,Authorization,X-Requested-With\n\n# 📡 API Configuration\nAPI_VERSION=v1              # API version for display\nAPI_PREFIX=/api             # API route prefix\n\n# 🛠️ Development Tools\nDEBUG=false                 # Enable debug logging\nPRETTY_PRINT_JSON=true      # Pretty print JSON in development\n\n# 📊 Monitoring\nHEALTH_CHECK_ENABLED=true   # Enable health check endpoint\nMETRICS_ENABLED=false       # Enable metrics collection\n```\n\n\u003c/details\u003e\n\n### 🔒 Security Features\n\n\u003cdiv align=\"center\"\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\n**🛡️ Built-in Security**\n- Rate limiting (configurable)\n- Secure headers via Helmet.js\n- Input validation\n- CORS protection\n- No information leakage\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n**⚙️ Configurable Security**\n- Environment-based toggles\n- Flexible rate limiting\n- Custom CORS policies\n- Debug mode controls\n- Production optimizations\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\n### 🛠️ Development Features\n\n\u003cdiv align=\"center\"\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\n**🐛 Debug \u0026 Testing**\n- Debug mode logging\n- Pretty JSON formatting\n- Environment awareness\n- Hot reload support\n- Health monitoring\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n**📊 Monitoring**\n- Built-in health checks\n- Process monitoring\n- Environment info\n- Enhanced error messages\n- Rate limit headers\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\n---\n\n## 🌐 Cloudflare Tunnel Setup\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e☁️ Configure Cloudflare Tunnel\u003c/strong\u003e\u003c/summary\u003e\n\n1. **Configure your tunnel in `cloudflared/config.yml`**\n2. **Update `docker-compose.yml` with your tunnel ID**\n3. **Deploy with Docker Compose**\n\n```bash\ndocker-compose up -d\n```\n\n\u003c/details\u003e\n\n## 🏡 Home Server Deployment (Self-Hosting)\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e⚙️ Deploy from Your Home PC using Docker + Cloudflare Tunnel\u003c/strong\u003e\u003c/summary\u003e\n\n### 🔧 Requirements\n\n- Ubuntu/Linux-based home server\n- Docker + Docker Compose\n- Cloudflared installed and authenticated\n- Cloudflare DNS set up with your domain (e.g., quotes.dhruvchheda.com)\n\n### 📁 Folder Structure\n\n```bash\nquote-stack/\n├── quote-api/                   # Express API source\n├── cloudflared/\n│   ├── config.yml               # Tunnel configuration\n│   └── quote-api-tunnel.json    # Tunnel credentials\n└── docker-compose.yml          # Service orchestration\n```\n\n### 📝 cloudflared/config.yml\n\n```yaml\ntunnel: \u003cyour-tunnel-id\u003e\ncredentials-file: /etc/cloudflared/quote-api-tunnel.json\n\ningress:\n  - hostname: \u003cyour-domain\u003e\n    service: http://quote-api:3000\n  - service: http_status:404\n```\n\n### 🚀 Deploy\n\n```bash\ndocker-compose up -d\n```\n\n✅ **Your API will be available publicly at:**\nhttps://\u003cyour-domain\u003e\n\n### 🔄 Auto-Start on Reboot (Optional)\n\nEnable automatic startup of Docker and cloudflared on server reboot:\n\n```bash\nsudo systemctl enable docker\nsudo systemctl enable cloudflared\n```\n\n\u003c/details\u003e\n\n---\n\n## 📁 Project Structure\n\n```\nquote-api/\n├── 📄 index.js              # Main application file\n├── 📊 quotes.json           # Quote database\n├── 🐳 Dockerfile            # Docker configuration\n├── 🐳 docker-compose.yml    # Multi-service setup\n├── 📦 package.json          # Dependencies\n├── 📚 README.md            # Documentation\n├── 🔧 .env.example         # Environment variables template\n├── 🔧 .env                 # Environment variables (local)\n└── 🚫 .gitignore           # Git ignore rules\n```\n\n---\n\n## 🚀 Available Scripts\n\n```bash\n# 🎯 Production\nnpm start              # Start the production server\n\n# 🛠️ Development\nnpm run dev            # Start development server with hot reload\n\n# 🧪 Testing\nnpm test              # Run tests (to be implemented)\n```\n\n---\n\n## 💡 Usage Examples\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e🟨 JavaScript/Node.js\u003c/strong\u003e\u003c/summary\u003e\n\n```javascript\n// Get a random quote\nconst response = await fetch('http://localhost:3000/api/quote/random');\nconst quote = await response.json();\nconsole.log(`\"${quote.content}\" - ${quote.author}`);\n\n// Search for quotes\nconst searchResponse = await fetch('http://localhost:3000/api/quotes/search?q=success');\nconst searchResults = await searchResponse.json();\nconsole.log(`Found ${searchResults.total} quotes about success`);\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e🐍 Python\u003c/strong\u003e\u003c/summary\u003e\n\n```python\nimport requests\n\n# Get a random quote\nresponse = requests.get('http://localhost:3000/api/quote/random')\nquote = response.json()\nprint(f'\"{quote[\"content\"]}\" - {quote[\"author\"]}')\n\n# Get quotes by author\neinstein_quotes = requests.get('http://localhost:3000/api/quotes/author/einstein')\nprint(f\"Found {einstein_quotes.json()['total']} Einstein quotes\")\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e📡 cURL\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\n# Get a random quote\ncurl -X GET http://localhost:3000/api/quote/random\n\n# Search quotes with pretty output\ncurl -X GET \"http://localhost:3000/api/quotes/search?q=motivation\" | jq\n\n# Get health status\ncurl -X GET http://localhost:3000/health\n```\n\n\u003c/details\u003e\n\n---\n\n## 🚀 Performance \u0026 Monitoring\n\n\u003cdiv align=\"center\"\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\n**⚡ Performance**\n- Fast response times\n- Memory efficient\n- Scalable architecture\n- Docker-ready deployment\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n**📊 Monitoring**\n- Health check endpoint\n- Debug mode logging\n- Rate limit headers\n- Environment info\n- Process monitoring\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\n### 📈 Monitoring Commands\n\n```bash\n# View Docker logs\ndocker-compose logs -f\n\n# Check health status\ncurl http://localhost:3000/health\n\n# Monitor in debug mode\nDEBUG=true npm start\n```\n\n---\n\n## 🤝 Contributing\n\nWe welcome contributions! Please follow these steps:\n\n1. **🍴 Fork** the repository\n2. **🌟 Create** a feature branch (`git checkout -b feature/amazing-feature`)\n3. **📝 Commit** your changes (`git commit -m 'Add amazing feature'`)\n4. **🚀 Push** to the branch (`git push origin feature/amazing-feature`)\n5. **🔄 Open** a Pull Request\n\n### 📋 Development Guidelines\n\n- Follow existing code style\n- Add tests for new features\n- Update documentation\n- Ensure all tests pass\n- Use meaningful commit messages\n\n---\n\n## 📝 License\n\nThis project is licensed under the **MIT License** - see the [LICENSE](LICENSE) file for details.\n\n---\n\n## 🙏 Acknowledgments\n\n- **Express.js** - Fast, unopinionated web framework\n- **Helmet.js** - Security middleware\n- **Docker** - Containerization platform\n- **Cloudflare** - CDN and security services\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n### 🌟 **Star this repository if you find it helpful!**\n\n**Built with ❤️ using Node.js and Express**\n\n*Happy coding! 🚀*\n\n\u003c/div\u003e ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchhedadhruv%2Finspirational-quotes-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchhedadhruv%2Finspirational-quotes-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchhedadhruv%2Finspirational-quotes-api/lists"}