{"id":25878231,"url":"https://github.com/arthursvpb/search360","last_synced_at":"2026-04-09T12:02:25.647Z","repository":{"id":279950501,"uuid":"934356622","full_name":"arthursvpb/search360","owner":"arthursvpb","description":"Search360 is a full-stack web application that enables users to search the web using DuckDuckGo and store query history. The project includes persistent query history with caching for improved performance.","archived":false,"fork":false,"pushed_at":"2025-02-21T17:13:16.000Z","size":825,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-28T18:01:56.366Z","etag":null,"topics":["docker","material-ui","mui","nestjs","nodejs","react","redis","redux","sqlite","typescript","vite"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/arthursvpb.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}},"created_at":"2025-02-17T17:35:40.000Z","updated_at":"2025-02-26T14:39:20.000Z","dependencies_parsed_at":"2025-02-28T18:04:10.453Z","dependency_job_id":"c93938da-2080-4cc3-a972-b114d86bbe82","html_url":"https://github.com/arthursvpb/search360","commit_stats":null,"previous_names":["arthursvpb/search360"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/arthursvpb/search360","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthursvpb%2Fsearch360","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthursvpb%2Fsearch360/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthursvpb%2Fsearch360/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthursvpb%2Fsearch360/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arthursvpb","download_url":"https://codeload.github.com/arthursvpb/search360/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthursvpb%2Fsearch360/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272131802,"owners_count":24878988,"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-08-25T02:00:12.092Z","response_time":1107,"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":["docker","material-ui","mui","nestjs","nodejs","react","redis","redux","sqlite","typescript","vite"],"created_at":"2025-03-02T12:23:00.099Z","updated_at":"2025-12-30T19:52:08.668Z","avatar_url":"https://github.com/arthursvpb.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e🐥 Search360\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#-running\"\u003eRunning\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;|\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"#-technologies\"\u003eTechnologies\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;|\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"#-license\"\u003eLicense\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#-license\"\u003e\n    \u003cimg alt=\"License\" src=\"https://img.shields.io/static/v1?label=license\u0026message=MIT\u0026color=ee964b\u0026labelColor=000000\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Search360\" src=\".github/images/preview.png\" width=\"100%\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\nSearch360 is a full-stack web application that enables users to search the web using DuckDuckGo and stores query history. The project includes pagination, search highlighting, and persistent query history with caching for improved performance.\n\u003c/p\u003e\n\n## 🚀 Features\n\n✅ **Search using DuckDuckGo API**  \n✅ **Fast \u0026 efficient caching with Redis**  \n✅ **Search highlighting** (like Chrome’s Find feature)  \n✅ **Persistent query history stored in SQLite**  \n✅ **Built with React, Redux, NestJS, SQLite, and Redis**\n\n## 📈 System Design Overview\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Search360-SystemDesign\" src=\".github/images/system-design.png\" width=\"100%\"\u003e\n\u003c/p\u003e\n\n## 💻 **Running**\n\n### **Requirements**\n\n- `docker`\n- `node \u003e= 20`\n\n#### 1️⃣ Clone the Repository\n\n```bash\ngit clone https://github.com/arthursvpb/search360.git\ncd search360\n```\n\n#### 2️⃣ Set Up Environment Variables\n\nCopy the `.env.example` file to a `.env` in the `api` folder.\n\n#### 3️⃣ Start the Application\n\n```bash\n# Run the back-end\ncd ./api \u0026\u0026 npm run docker:start # docker:reset for a clean start-up\n# Go back to the root folder\ncd ..\n# Run the front-end\ncd ./www \u0026\u0026 npm install \u0026\u0026 npm run dev\n```\n\n- **Frontend:** Runs on `http://localhost:5173/`\n- **Backend:** Runs on `http://localhost:3000/`\n\n## ⚡ **Caching with Redis**\n\nTo improve performance, **Redis is used for query caching**:\n\n- **Search queries are cached** to prevent redundant API calls.\n- **Past queries are stored in Redis** and reloaded instantly when the application restarts.\n\n### **Clear Cache Manually**\n\nRun the following command:\n\n```bash\ndocker exec -it redis redis-cli FLUSHALL\n```\n\nThis will **reset all cached queries**.\n\n## 🛠️ **API Endpoints**\n\n### **🔎 Search**\n\nSupports both **GET** and **POST** requests.\n\n#### **`GET /search?q=your-query`**\n\n#### **`POST /search`**\n\n```json\n{\n  \"q\": \"your-query\"\n}\n```\n\n#### **Response (Same for Both Methods)**\n\n```json\n{\n  \"results\": [\n    {\n      \"title\": \"Example Title\",\n      \"url\": \"https://example.com\"\n    }\n  ]\n}\n```\n\n### 📜 **Query History**\n\n`GET /history`\n\n```json\n{\n  \"history\": [\n    {\n      \"id\": 1,\n      \"searchTerm\": \"example query\",\n      \"createdAt\": \"2025-02-21T12:34:56.789Z\"\n    },\n    {\n      \"id\": 2,\n      \"searchTerm\": \"another query\",\n      \"createdAt\": \"2025-02-21T12:30:00.123Z\"\n    }\n  ]\n}\n```\n\n## ✨ **Technologies**\n\n- **Frontend:** React, Redux, Material UI\n- **Backend:** NestJS, SQLite, Redis\n- **API:** DuckDuckGo\n- **Containerization:** Docker\n\n## 📝 **License**\n\nThis project is under the MIT license. See the [LICENSE](LICENSE) file for more details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farthursvpb%2Fsearch360","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farthursvpb%2Fsearch360","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farthursvpb%2Fsearch360/lists"}