{"id":46580101,"url":"https://github.com/code-by-fh/snoop","last_synced_at":"2026-03-07T11:01:24.967Z","repository":{"id":301544116,"uuid":"1009585869","full_name":"code-by-fh/snoop","owner":"code-by-fh","description":"Forked from orangecoding/fredy🕵️‍♂️ Snoop – [S]earch \u0026 [N]avigate [O]ffers [O]n [P]latforms Snoop automatically scans real estate sites like ImmoScout24, Immowelt, and eBay Kleinanzeigen and sends new listings straight to your Slack, Telegram, Discord, or Email. Stop searching — let Snoop find it for you!","archived":false,"fork":false,"pushed_at":"2026-01-31T15:26:01.000Z","size":12932,"stargazers_count":1,"open_issues_count":8,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-01T03:26:10.356Z","etag":null,"topics":["appartments","ebay-kleinanzeigen","estate","immonet","immoscout","immoscout24","immowelt","nodejs","pushover","real-estate","rental","self-hosted","snoop","wg-gesucht"],"latest_commit_sha":null,"homepage":"https://demo-snoop.app-by-fh.dev","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/code-by-fh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-27T11:22:51.000Z","updated_at":"2026-01-27T17:44:00.000Z","dependencies_parsed_at":"2025-10-04T14:28:39.376Z","dependency_job_id":"d1c3d421-8943-4d30-b267-d4e04c9fffac","html_url":"https://github.com/code-by-fh/snoop","commit_stats":null,"previous_names":["doublelayer/snoop","code-by-fh/snoop"],"tags_count":34,"template":false,"template_full_name":null,"purl":"pkg:github/code-by-fh/snoop","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code-by-fh%2Fsnoop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code-by-fh%2Fsnoop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code-by-fh%2Fsnoop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code-by-fh%2Fsnoop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/code-by-fh","download_url":"https://codeload.github.com/code-by-fh/snoop/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code-by-fh%2Fsnoop/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30212103,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T09:02:10.694Z","status":"ssl_error","status_checked_at":"2026-03-07T09:02:08.429Z","response_time":53,"last_error":"SSL_read: 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":["appartments","ebay-kleinanzeigen","estate","immonet","immoscout","immoscout24","immowelt","nodejs","pushover","real-estate","rental","self-hosted","snoop","wg-gesucht"],"created_at":"2026-03-07T11:01:06.895Z","updated_at":"2026-03-07T11:01:24.951Z","avatar_url":"https://github.com/code-by-fh.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🔊 Origin \u0026 Attribution\n\nThis project is based on [Fredy](https://github.com/orangecoding/fredy), created and maintained by [@orangecoding](https://github.com/orangecoding).\n\nThe original idea, concept, and core crawling engine originate from Fredy. Significant parts of the initial codebase in this repository are derived from that project and remain the work of the original author.\n\nThis repository started as a fork of Fredy and was later continued as a separate project with additional features and a different focus (e.g. frontend, dashboard, UX, and structural changes).\nThe upstream project Fredy is fully acknowledged as the original source.\n\nFredy is licensed under the Apache 2.0 , which allows reuse and modification. This notice exists to clearly attribute authorship and origin.\n\n# 🏠 Snoop – [S]earch \u0026 [N]avigate [O]ffers [O]n [P]latform\n\n**Snoop** is a modern, full-featured platform for property search, management, and analytics.\n\nSnoop scrapes multiple property services (Immonet, Immowelt, etc.) and sends new listings as soon as they appear.  \nThe list of providers is easily extendable, and a clean web UI allows you to configure and manage your search jobs effortlessly.\n\nWhen matching listings are found, Snoop sends them via Slack, Email, or Telegram (more adapters can be added).  \nAll listings are tracked to prevent duplicates — even across platforms — while enabling analytics and insights.\n\n---\n\n## ✨ What Sets Snoop Apart\n\n- **Revamped User Interface**: Built with React, TypeScript, and TailwindCSS for a clean, responsive, and modern experience.  \n- **Improved Database Layer**: Enhanced data management using MongoDB and Mongoose for scalability and reliability.  \n- **Modular Provider System**: Add or customize real estate providers with structured integration and automated testing.  \n- **Full-Stack Architecture**: RESTful API powered by Node.js and Express for smooth frontend-backend communication.  \n- **Analytics Dashboard**: Real-time visualizations and insights built with Recharts.  \n\nWhether you're searching for properties or managing listings as an admin — **Snoop delivers a secure, performant, and user-friendly platform** for modern real estate workflows.\n\n---\n\n## 🚀 Features\n\n### Core Features\n- **Property Search**: Advanced filters and map integration  \n- **Dashboard**: Real-time analytics and insights  \n- **User Management**: Secure authentication \u0026 role-based access  \n- **API Integration**: RESTful backend for all operations  \n- **Responsive Design**: Works seamlessly across devices  \n- **Unlimited Jobs**: Create as many search jobs as you want, each with its own configuration and provider selection  \n- **Multi-Provider Support**: Use any supported real estate platforms within your jobs (e.g., Immonet, Immowelt, etc.)  \n- **Flexible Notifications**: Send new listings through a variety of notifiers such as Slack, Telegram, Pushover, Email, and more  \n- **Job Controls**: Jobs can be easily activated or deactivated at any time  \n- **Job Statistics**: Every job includes detailed insights and activity statistics  \n- **Listing Management**: Mark listings as *favorites* or *seen* to keep track of your search  \n- **Multiple Views**: Switch between list view, grid view, and map view for optimal browsing  \n- **Registration Options**: Either admin-managed user accounts or user self-registration with email confirmation\n\n### Technical Highlights\n- **Frontend**: React, TypeScript, TailwindCSS  \n- **Backend**: Node.js, Express  \n- **Database**: MongoDB + Mongoose ODM  \n- **Authentication**: JWT-based security  \n- **Testing**: Mocha + Chai  \n\n---\n\n## 🖼️ App Preview Gallery\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"screenshots/dashboard_dark.png\" width=\"45%\" /\u003e\n  \u003cimg src=\"screenshots/dashboard_light.png\" width=\"45%\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"screenshots/jobs_grid_light.png\" width=\"45%\" /\u003e\n  \u003cimg src=\"screenshots/jobs_grid_dark.png\" width=\"45%\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"screenshots/listing_light_grid.png\" width=\"45%\" /\u003e\n  \u003cimg src=\"screenshots/listing_dark_grid.png\" width=\"45%\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"screenshots/listing_map_light.png\" width=\"45%\" /\u003e\n  \u003cimg src=\"screenshots/listing_map_dark.png\" width=\"45%\" /\u003e\n\u003c/p\u003e\n\n---\n\n## 🧰 Tech Stack\n\n### Frontend\n- React 18  \n- TypeScript  \n- TailwindCSS  \n- Vite  \n- React Router  \n- Axios  \n- Recharts  \n\n### Backend\n- Node.js  \n- Express  \n- Mongoose  \n- JWT  \n- Winston  \n- Puppeteer  \n\n### Development Tools\n- ESLint  \n- Prettier  \n- Nodemon  \n- Mocha  \n- Chai  \n\n---\n\n## ⚡ Quick Start with Docker Compose\n\nIf you want to get Snoop running instantly, the easiest way is via **Docker Compose**.\n\n### 🧩 Prerequisites\n- [Docker](https://www.docker.com/) ≥ 24  \n- [Docker Compose](https://docs.docker.com/compose/install/) ≥ 2.20  \n\n### ▶️ Run Snoop\n\n1. Clone the repository:\n   ```bash\n   git clone https://github.com/code-by-fh/snoop.git\n   cd snoop\n   ```\n\n2. Copy the environment configuration:\n   ```bash\n   cp .env.example .env\n   ```\n   Adjust your credentials and environment variables as needed (e.g., API keys, ports, notification adapters).\n\n3. Start the full stack with Docker Compose:\n   ```bash\n   docker-compose up -d\n   ```\n\n4. Access the application:\n   - 🌐 **Frontend:** [http://localhost:3000](http://localhost:3000)  \n   - ⚙️ **Backend:** [http://localhost:5000](http://localhost:5000)  \n   - 🗄️ **MongoDB:** [mongodb://localhost:27017](mongodb://localhost:27017)\n\n5. (Optional) View logs:\n   ```bash\n   docker-compose logs -f\n   ```\n\nThat’s it — your local Snoop instance is live 🎉\n\n---\n\n## 🧑‍💻 Manual Setup\n\nIf you prefer a manual setup for development or debugging:\n\n### Prerequisites\n- Node.js ≥ 18  \n- npm ≥ 9  \n- MongoDB ≥ 6  \n\n### Installation\n\n1. Clone the repository:\n   ```bash\n   git clone https://github.com/code-by-fh/snoop.git\n   cd snoop\n   ```\n\n2. Install dependencies:\n   ```bash\n   npm install\n   cd client\n   npm install\n   cd ..\n   cd server\n   npm install\n   cd ..\n   ```\n\n3. Copy and configure environment variables:\n   ```bash\n   cp .env.example .env\n   ```\n\n4. Run the application:\n   ```bash\n   npm run dev\n   ```\n\nAccess:\n- Frontend: [http://localhost:3000](http://localhost:3000)  \n- Backend: [http://localhost:5000](http://localhost:5000)\n\n---\n\n## 🔐 Initial Admin Account\n\nWhen Snoop starts for the first time, it automatically creates a default administrator account for initial access:\n\n- Username: admin\n- Password:\tPassword123!\n\n⚠️ Important:\n- You must log in with these credentials after the first start.\n- Immediately change the password in the user settings for security reasons.\n- Once changed, this default password cannot be restored automatically — please make sure to note the new one safely.\n- The default credentials are created only if no admin user exists in the database.\n\n## 👥 User Registration\n\nSnoop supports **two different user registration workflows**, allowing you to choose the method that best fits your environment or security requirements.\n\n### 🔐 1) Admin-Created Accounts  \nAn administrator can manually create new user accounts within the system.  \nAfter creation, the admin must **activate** the account.  \nThis approach is ideal for closed environments or teams that require controlled access.\n\n### 📧 2) User Self-Registration  \nSnoop also provides an optional self-registration flow where users can create an account themselves and activate it via **email confirmation**.\n\nTo enable self-registration, the following environment variables must be configured:\n\n```env\n# Email / SMTP configuration\nSMTP_HOST=localhost\nSMTP_PORT=1025\nSMTP_USER=\nSMTP_PASS=\n\n# Enable self-registration\nSELF_REGISTRATION_ENABLED=true\n```\n\n⚠️ Important Notes:\n\nYou are responsible for providing and configuring your own SMTP service (e.g., Mailhog, Mailtrap, Postfix, or any external provider).\n\nSelf-registration will not work without a functioning mail server.\n\nIf SELF_REGISTRATION_ENABLED=false or not defined, only admin-created accounts are allowed.\n\n## 🧪 Testing\n\nRun the full test suite:\n```bash\ncd server\nnpm test\n```\n\n---\n\n## 📄 License\n\nDistributed under the **Apache 2.0**.  \nSee [`LICENSE`](LICENSE) for details.\n\n---\n\n## 📬 Contact\n\n**Project Maintainer:** [Doublelayer](https://github.com/code-by-fh)  \n**Project Repository:** [https://github.com/code-by-fh/snoop](https://github.com/code-by-fh/snoop)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcode-by-fh%2Fsnoop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcode-by-fh%2Fsnoop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcode-by-fh%2Fsnoop/lists"}