{"id":18508668,"url":"https://github.com/noteable-io/minor-illusion","last_synced_at":"2025-04-09T03:32:07.541Z","repository":{"id":40264131,"uuid":"422344739","full_name":"noteable-io/minor-illusion","owner":"noteable-io","description":"Minimal front-end, back-end, and database example using same frameworks as production Noteable apps","archived":false,"fork":false,"pushed_at":"2023-08-02T00:12:01.000Z","size":1632,"stargazers_count":5,"open_issues_count":12,"forks_count":4,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-03-23T22:42:20.019Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Jupyter Notebook","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/noteable-io.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}},"created_at":"2021-10-28T20:20:17.000Z","updated_at":"2024-02-08T18:50:07.000Z","dependencies_parsed_at":"2023-02-08T04:17:08.926Z","dependency_job_id":null,"html_url":"https://github.com/noteable-io/minor-illusion","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noteable-io%2Fminor-illusion","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noteable-io%2Fminor-illusion/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noteable-io%2Fminor-illusion/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noteable-io%2Fminor-illusion/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/noteable-io","download_url":"https://codeload.github.com/noteable-io/minor-illusion/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247973864,"owners_count":21026735,"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","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":"2024-11-06T15:15:03.023Z","updated_at":"2025-04-09T03:32:07.239Z","avatar_url":"https://github.com/noteable-io.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Minor Illusion\n\n\u003e You create a sound or an image of an object \n\u003e within range that lasts for the duration.\n\u003e \n\u003e If you create an image of an object\n\u003e it must be no larger than a 5-foot cube.\n\n*Fun fact: all backend repos at Noteable are named after DnD spells because lead backend engineer @nicholaswold made a joke one time and CTO @MSeal ran with it*\n\n[![backend](https://github.com/noteable-io/minor-illusion/actions/workflows/backend-tests.yaml/badge.svg)](https://github.com/noteable-io/minor-illusion/actions/workflows/backend-tests.yaml) [![Docs](https://github.com/noteable-io/minor-illusion/actions/workflows/publish-docs.yaml/badge.svg)](https://noteable-io.github.io/minor-illusion/)\n\nThis is a toy `Todo` application that uses some of the same frameworks and concepts as our production code.  For the Noteable engineering team, this repo can be useful for onboarding, reproducing bugs for external partners, and prototyping systemic changes.  For anyone interested in Noteable, here's a peek into the stack you would be working with:\n\n  * Backend:\n    * [Hypercorn](https://pgjones.gitlab.io/hypercorn/) for the [ASGI](https://asgi.readthedocs.io/en/latest/) server\n    * [FastAPI](https://fastapi.tiangolo.com/) for the web framework\n    * [Pydantic](https://pydantic-docs.helpmanual.io/) for data validation\n    * [SQLAlchemy](https://www.sqlalchemy.org/) for database ORM\n    * [sqlalchemy-cockroachdb](https://github.com/cockroachdb/sqlalchemy-cockroachdb) + [asyncpg](https://magicstack.github.io/asyncpg/current/) for the database driver\n    * [Alembic](https://alembic.sqlalchemy.org/en/latest/) for database migration\n    * [SQLModel](https://sqlmodel.tiangolo.com/) (in development) for Pydantic + SQLAlchemy convergence!\n    * [Structlog](https://www.structlog.org/en/stable/) for logging\n    * [Poetry](https://python-poetry.org/) for package management\n    * [Pytest](https://docs.pytest.org/) for writing tests\n    * [tox](https://tox.wiki/en/latest/index.html) for running tests\n    \n  * Database:\n    * [CockroachDB](https://www.cockroachlabs.com/) \n\n  * Prototyping, exploration, and integration tests:\n    * [Jupyter](https://jupyter-docker-stacks.readthedocs.io/en/latest/)\n\n  * Frontend:\n    * [Next.js](https://nextjs.org/)\n\n  * Docs:\n    * [mkdocs](https://www.mkdocs.org/)\n\n  * Reverse-Proxy:\n    * [Traefik](https://traefik.io/) for reverse-proxy and load-balancing between backend instances\n  \n\n## Run\n\nClone this repository and `docker-compose up -d`.  See [Docker](https://docs.docker.com/get-docker/) and [docker-compose](https://docs.docker.com/compose/install/) documentation for installing those services if they aren't already on your development machine.  You can tail the logs for all services with `docker-compose logs -f`.\n\nThere are five services that will start up:\n    1. A reverse proxy / load-balance web-server (Traefik), transparent to an end user\n    2. Frontend (NextJS) UI that you can reach at `http://localhost:5000`\n    3. A pair of load-balanced Backend (FastAPI) apps that you can reach at `http://localhost:5000/api`, see `http://localhost:5000/api/docs` for OpenAPI/swagger\n    4. CockroachDB that is inacessible from outside of the Docker network\n    5. Jupyter Notebook container that you can reach at `http://localhost:8888`, although you'll need to look at `docker-compose logs jupyter` to get the url + access token (something like `http://127.0.0.1:8888/?token=c2a1a877ca8ad47818bd76df917d7aaeca6d8f4a17cb462e`)\n\n*The backend app will not be accessible until after Cockroach DB is online, accepting connections, and has gone through Alembic migrations.  Expect a 30-60 second delay between containers starting and being able to access `http://localhost:5000/api/docs`*\n\n## Docs\n\nSee [more documentation](https://noteable-io.github.io/minor-illusion/) created with `mkdocs` and hosted on Github pages, published through Github Actions.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoteable-io%2Fminor-illusion","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnoteable-io%2Fminor-illusion","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoteable-io%2Fminor-illusion/lists"}