{"id":20011494,"url":"https://github.com/ttyobiwan/esorcerer","last_synced_at":"2026-04-08T16:01:47.065Z","repository":{"id":145318704,"uuid":"592885993","full_name":"ttyobiwan/esorcerer","owner":"ttyobiwan","description":"Event sourcing dashboard powered with various plugins.","archived":false,"fork":false,"pushed_at":"2023-05-08T19:03:39.000Z","size":51,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-03-02T02:17:21.343Z","etag":null,"topics":["celery","celerybeat","ddd","docker","fastapi","pytest","python","redis","tortoise-orm"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ttyobiwan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2023-01-24T18:42:51.000Z","updated_at":"2023-02-05T13:15:05.000Z","dependencies_parsed_at":null,"dependency_job_id":"a00c604b-f304-4172-829c-e782e478a1a2","html_url":"https://github.com/ttyobiwan/esorcerer","commit_stats":null,"previous_names":["tobiwandev/esorcerer","ttyobiwan/esorcerer"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ttyobiwan/esorcerer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ttyobiwan%2Fesorcerer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ttyobiwan%2Fesorcerer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ttyobiwan%2Fesorcerer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ttyobiwan%2Fesorcerer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ttyobiwan","download_url":"https://codeload.github.com/ttyobiwan/esorcerer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ttyobiwan%2Fesorcerer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31562697,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["celery","celerybeat","ddd","docker","fastapi","pytest","python","redis","tortoise-orm"],"created_at":"2024-11-13T07:26:12.357Z","updated_at":"2026-04-08T16:01:47.047Z","avatar_url":"https://github.com/ttyobiwan.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🔮 esorcerer\n\n[![python](https://img.shields.io/static/v1?label=python\u0026message=3.11\u0026color=informational\u0026logo=python\u0026logoColor=white)](https://www.python.org/)\n[![black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/python/black)\n[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit\u0026logoColor=white)](https://github.com/pre-commit/pre-commit)\n[![Checked with mypy](https://www.mypy-lang.org/static/mypy_badge.svg)](https://mypy-lang.org/)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v0.json)](https://github.com/charliermarsh/ruff)\n![Continuous Integration](https://github.com/tobiaxs/esorcerer/workflows/CI/badge.svg?branch=main)\n\n## 📝 Table of Contents\n\n- [About](#about)\n- [Installation](#installation)\n\n## 📖 About \u003ca name = \"about\"\u003e\u003c/a\u003e\n\nEvent sourcing dashboard powered with various plugins.\n\nThe basic functionalities are exposing API to create events and attaching hooks to react when a specific event occurs. It may look overengineered (and it probably is), but the main idea was to create an app that uses many popular technologies and tools and integrates them into FastAPI app using ports and adapters architecture. Maybe someone can find this setup useful as a boilerplate for another overengineered project.\n\nList of plugins:\n\n- Database ORM (Tortoise-ORM) ✅\n- Tasks (Celery, Redis) ✅\n- Caching (Redis) ✅\n- Search (ElasticSearch) ❌\n- Emails (Sendgrid) ❌\n\nPS: I'm still working on it, so don't judge me.\n\n## 💾 Installation \u003ca name = \"installation\"\u003e\u003c/a\u003e\n\nCreate a new virtual environment (assuming you already have Python installed e.g. via `pyenv`)\n\n```bash\npython -m venv venv\n```\n\nActivate it\n\n```bash\nsource ./venv/bin/activate\n```\n\nInstall requirements for local setup\n\n```bash\npip install -r ./requirements/local.txt\n```\n\nCreate `.env` file and populate it with proper values. Example file can be found in [here](./infra/example.env).\n\nBuild images\n\n```bash\nmake build\n```\n\nStart containers\n\n```bash\nmake up\n```\n\nAfter that you should be able to reach \u003chttp://localhost:8000/eso/api/docs\u003e, which leads to the Swagger docs.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fttyobiwan%2Fesorcerer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fttyobiwan%2Fesorcerer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fttyobiwan%2Fesorcerer/lists"}