{"id":20950143,"url":"https://github.com/aeecleclair/hyperion","last_synced_at":"2026-04-01T21:55:26.320Z","repository":{"id":38368254,"uuid":"470995413","full_name":"aeecleclair/Hyperion","owner":"aeecleclair","description":"API for ÉCLAIR's platform","archived":false,"fork":false,"pushed_at":"2026-02-04T20:56:54.000Z","size":4770,"stargazers_count":19,"open_issues_count":88,"forks_count":9,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-02-05T08:48:36.449Z","etag":null,"topics":["api","fastapi","myecl","python","sqlalchemy"],"latest_commit_sha":null,"homepage":"https://myecl.fr","language":"Python","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/aeecleclair.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":"SECURITY.md","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":"2022-03-17T12:58:09.000Z","updated_at":"2026-02-03T15:08:09.000Z","dependencies_parsed_at":"2024-03-15T16:01:12.276Z","dependency_job_id":"e2aa455e-c418-453a-89ef-6f593429f81e","html_url":"https://github.com/aeecleclair/Hyperion","commit_stats":null,"previous_names":[],"tags_count":103,"template":false,"template_full_name":null,"purl":"pkg:github/aeecleclair/Hyperion","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aeecleclair%2FHyperion","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aeecleclair%2FHyperion/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aeecleclair%2FHyperion/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aeecleclair%2FHyperion/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aeecleclair","download_url":"https://codeload.github.com/aeecleclair/Hyperion/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aeecleclair%2FHyperion/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29489781,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-15T19:29:10.908Z","status":"ssl_error","status_checked_at":"2026-02-15T19:29:10.419Z","response_time":118,"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":["api","fastapi","myecl","python","sqlalchemy"],"created_at":"2024-11-19T00:45:50.650Z","updated_at":"2026-03-01T13:06:19.986Z","avatar_url":"https://github.com/aeecleclair.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hyperion\n\n[![codecov](https://codecov.io/gh/aeecleclair/Hyperion/graph/badge.svg?token=Q49AK8EAU1)](https://codecov.io/gh/aeecleclair/Hyperion)\n\n## Presentation\n\nHyperion is the API of an open-source project launched by ÉCLAIR, the computer science association of Ecole Centrale de Lyon. This project aims to provide students of business and engineering schools a digital tool to simplify the association process. In a way, we could say that Hyperion is trying to create a social network for school associations.\n\nThe structure of this project is modular. Hyperion has a core that performs vital functions (authentication, database migration, authorization, etc). The other functions of Hyperion are realized in what we call modules. You can contribute to the project by adding modules if you wish.\n\n## 0. Prerequisites\n\n- Git\n- Python, at least 3.12\n- Remove Anaconda from your computer\n\n## 1. Creating a virtual environment for Python 3.14\n\n\u003e [!NOTE]\n\u003e You can also create a 3.12 or 3.13 venv if 3.14 does not work for you!\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### Windows\n\n\u003c/summary\u003e\n\nCreate the virtual environment.\n\n\u003e You need to be in Hyperion main folder\n\n```bash\npy -3.14 -m venv .venv\n```\n\nActivate it\n\n```bash\n.\\.venv\\Scripts\\activate\n```\n\n\nIf you get an error saying roughly:\n\n```\nbecause the execution of scripts is disabled on this system. Please see \"get-help about_signing\" for more details.\n```\n\nThen in a Powershell, run this to allow scripts executions for your user:\n\n```ps1\nSet-ExecutionPolicy Unrestricted -Scope CurrentUser\n```\n\nand try again.\n\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### Linux\n\n\u003c/summary\u003e\n\nCreate the virtual environment\n\n\u003e You need to be in Hyperion main folder\n\n```bash\npy -3.14 -m venv .venv\n```\n\nActivate it\n\n```bash\nsource ./.venv/bin/activate\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### macOS (using Pyenv)\n\n\u003c/summary\u003e\n\nInstall Pyenv\n\n```bash\nbrew install pyenv\nbrew install pyenv-virtualenv\n```\n\nEdit `~/.zhsrc` and add at the end of the file :\n\n```bash\neval \"$(pyenv init -)\"\neval \"$(pyenv virtualenv-init -)\"\n```\n\nCreate the virtual environment\n\n```bash\npyenv virtualenv 3.14.2 hyperion\n```\n\nActivate it\n\n```bash\npyenv activate hyperion\n```\n\n\u003c/details\u003e\n\n## 2. Install dependencies\n\nBefore installing the dependencies, you need to check a few things to make things easier :\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### About Jellyfish and Rust (Windows only)\n\n\u003c/summary\u003e\n\nIf you don't have Rust installed on your Windows PC and don't want to install it, decrease the version of `jellyfish` to `0.10.0` in the [`requirements.txt`](requirements.txt) file:\n\n```\njellyfish==0.10.0                    # String Matching\n```\n\n\u003e if you don't know, go ahead with the next steps and see if an error mentioning Rust is raised.\n\n\u003c/details\u003e\n\n### About Weasyprint and Pango\n\nWeasyprint is only used to generate PDF files from HTML for some modules. As such, it is rarely needed for development, and its installation can be skipped. To do so, simply comment the line importing it (add a `#`) in the [`requirements.txt`](requirements.txt) file.\n\nIf you need to use it, follow the installation steps at https://doc.courtbouillon.org/weasyprint/stable/first_steps.html#installation.\n\nFor Windows, the best way is through MSYS2. Mac users can simply install using Homebrew.\n\n### Install dependencies (for real)\n\nInstall the dependencies you'll need using `pip` (the common requirements are included in the development requirements):\n\n```bash\npip install -r requirements-dev.txt\n```\n\n\u003e [!WARNING]\n\u003e If you changed the version of Jellyfish or excluded Weasyprint, don't forget to set it back before committing your changes.\n\n```\njellyfish==1.0.4                    # String Matching\n```\n\n\u003e If you need to remove all modules from your virtual environnement, delete your `.venv` folder.\n\n## 3. Install and configure a database\n\nChoose either SQLite or PostgreSQL.\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### SQLite\n\n\u003c/summary\u003e\n\n#### Advantages\n\nIt is a binary.\nThis means:\n\n- SQLite is lightweight\n- It is directly understood by your machine, no special configuration is needed.\n\n#### Disadvantages\n\nBeing so light, it does not support some features nowadays common for relational databases:\n\n- Drop your database on every migration: Alembic uses features incompatible with SQLite\n\n#### Installation and configuration\n\nThere is nothing to do, it works out of the box.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### PostgreSQL\n\n\u003c/summary\u003e\n\n#### Advantages\n\nIts advantages are many:\n\n- Very powerful database: it supports all the features you'll ever need.\n- Used in production for Hyperion.\n- Widely used in production in enterprise-grade services: useful competence on your résumé.\n- Supports migrations with Alembic.\n- A powerful CLI tool.\n\n#### Disadvantages\n\nNone (not so heavy, configuration not so hard).\n\n#### Configuration\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n##### Without Docker: native binaries\n\n\u003c/summary\u003e\n\n1. Download the installer: https://www.enterprisedb.com/downloads/postgres-postgresql-downloads\n2. Launch it and trust the wizard\n   - Keep the default folders and ports, install it all, etc...\n   - ...but put a concise password you'd remember, choose your language\n   - Don't use the \"Stack Builder\" (not needed)\n3. On Windows: in your path, add `C:\\Program Files\\PostgreSQL\\17\\bin` and `C:\\Program Files\\PostgreSQL\\17\\lib` (if you installed Postgres 17 in that location)\n4. Create a database named `hyperion`\n\n```sh\npsql -U postgres -c \"create database hyperion;\"\n```\n\n\u003e [!TIP]\n\u003e SQL keywords are case-insensitive by convention.\n\u003e No need to write `CREATE DATABASE hyperion;`\n\nNow your Hyperion database can be explored by hand (as the `postgres` user, using your password you chose) with:\n\n```bash\npsql -U postgres -d hyperion\n```\n\nthen running SQL or Postgres commands in this shell, or\n\n```bash\npsql -U postgres -d hyperion -c \"select firstname from core_user;\"\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n##### With Docker\n\n\u003c/summary\u003e\n\n\u003e [!WARNING]\n\u003e Work in progress\n\n```\nservices:\n  hyperion-db:\n    image: postgres:15.1\n    container_name: hyperion-db\n    restart: unless-stopped\n    healthcheck:\n      test: [ \"CMD-SHELL\", \"pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}\" ]\n      interval: 5s\n      timeout: 5s\n      retries: 5\n    environment:\n      POSTGRES_USER: ${POSTGRES_USER}\n      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}\n      POSTGRES_HOST: ${POSTGRES_HOST}\n      POSTGRES_DB: ${POSTGRES_DB}\n      PGTZ: ${POSTGRES_TZ}\n    ports:\n      - 5432:5432\n    volumes:\n      - ./hyperion-db:/var/lib/postgresql/data\n```\n\n\u003c/details\u003e\n\u003c/details\u003e\n\n## 4. Complete the dotenv (`.env`) and the `config.yaml`\n\n\u003e [!IMPORTANT]\n\u003e Copy the [`.env.template`](.env.template) file in a new `.env` file, likewise copy [`config.template.yaml`](config.template.yaml) in a new `config.yaml`.\n\n```bash\ncp .env.template .env \u0026\u0026 cp config.template.yaml config.yaml\n```\n\n\u003e [!TIP]\n\u003e These template files were carefully crafted to work for you with minimal personal changes to bring, and some preconfigured services.\n\nFor later reference, these settings are documented in [app/core/utils/config.py](app/core/utils/config.py).\nCheck this file to know what can and should be set using these two files.\n\n### The `.env` file\n\nThe `.env` contains environment variables which can be accessed by the OS to convey them to other services that need them, such as the database.\n\n#### With SQLite\n\nAgain there's nothing to do.\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n#### With PostgreSQL\n\n\u003c/summary\u003e\n\nSet your user, password, host and db.\n\nFor instance, **with the installer** you should have something like:\n\n```sh\nPOSTGRES_USER=\"postgres\"\nPOSTGRES_PASSWORD=\"\"\nPOSTGRES_HOST=\"localhost\"\nPOSTGRES_DB=\"hyperion\"\n```\n\nWhile **with Docker** you should have rather something like:\n\n```sh\nPOSTGRES_USER=\"hyperion\"\nPOSTGRES_PASSWORD=\"\"\nPOSTGRES_HOST=\"hyperion-db\" # Should be set to the name of the postgres container\nPOSTGRES_DB=\"hyperion\"\n```\n\n\u003c/details\u003e\n\n### The `config.yaml` file\n\nThe `config.yaml` contains environment variables that are internal to the Python runtime _because_ they are only used in the Python code.\n\n1. `ACCESS_TOKEN_SECRET_KEY` and `RSA_PRIVATE_PEM_STRING`: An example of each is provided.\n   You can generate your own if you want, or just change a couple characters in the examples, or deliberately leave it as it is.\n2. `SQLITE_DB`: **tells Hyperion whether to use SQLite or PostgreSQL**.\n   - If you use **SQLite**: this field should be a (relative) filename, by default we named it `app.db`, you can change this name.\n     Hyperion will create this file for you and use it as the database.\n     Any PostgreSQL-related configuration will be ignored.\n   - If you use **PostgreSQL**: empty this field.\n     Hyperion will fallback to PostgreSQL settings.\n3. `USE_FACTORIES`: `True` by default, factories seed your database, if empty, with mocked data.\n   This is useful on SQLite to repopulate your new database after dropping the previous one, of to create automatically your own user with admin privileges (see `FACTORIES_DEMO_USERS` below).\n4. `FACTORIES_DEMO_USERS`: **Replace the first user's data with yours** (not commented) or add your own.\n   These future users will be created automatically when launching Hyperion with an empty database.\n   Plus, your user will be there with your password and be admin out of the box.\n\n## 5. Launch the API\n\n\u003e [!WARNING]\n\u003e Beforehand, check that your venv is activated.\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### Using VS Code\n\n\u003c/summary\u003e\n\n1. In the activity bar (the leftmost part), click the _Run and Debug_ icon (the play button).\n2. Click the green play button.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### Using the command-line interface\n\n\u003c/summary\u003e\n\n```bash\nfastapi dev\n```\n\n\u003c/details\u003e\n\n### Finally...\n\nCheck that your Hyperion instance is up and running by navigating to http://localhost:8000/information.\n\nIn your config.yaml, set `USE_FACTORIES: False`.\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n## 6. Create your own user (if not yet the case using factories)\n\n\u003c/summary\u003e\n\nThere are at least 5 distinct ways to do so outside the use of factories, ranked here from easiest (~GUI) to hardest (~CLI).\n\n\u003e [!IMPORTANT]\n\u003e Using factories is the recommended way.\n\u003e All others methods are legacy and kept here for historical reasons (excepted using Titan, which is the way users create their account in production).\n\u003e Feel free to create other users other ways for learning purposes.\n\nNote that registration and activation are distinct steps when calling calls to the API, so for fun you may register one way and activate your account another way (if you create your user directly in database, this distinction is not relevant).\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### Using CalypSSO\n\n\u003c/summary\u003e\n\n#### Registering your account\n\nGo to http://localhost:8000/calypsso/register and type a valid email address to register (start the creation of) your account.\n\n#### Activating your account\n\nGo back to the shell running your Hyperion instance, in the logs look for a link looking like http://localhost:3000/calypsso/activate?activation_token=12345.\nOpen it and activate (end the creation of) your account.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### Using Titan\n\n\u003c/summary\u003e\n\n1. Click \"_Se connecter_\" on the login page: you land CalypSSO's login page.\n2. Click \"_Créer un compte_\" and create your account using CalypSSO as above.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### Using the API through the swagger\n\n\u003c/summary\u003e\n\n#### Registering your account\n\n1. Go to http://localhost:8000/docs: this is called the _swagger_, a web interface to interact with the API, it is a layer on top of the \"automatic documentation\" (the _OpenAPI specification_) generated by FastAPI at http://localhost:8000/openapi.json.\n2. Search `/users/create`.\n3. Open it, click \"Try it out\".\n4. Fill in your email address, and click \"Execute\".\n\n#### Activating your account\n\n1. Go back to the shell running your Hyperion instance, in the logs look for a link looking like http://localhost:3000/calypsso/activate?activation_token=12345.\n2. Copy this activation token.\n3. Go again on the swagger and search `/users/activate`.\n4. Open it, click \"Try it out\".\n5. Fill in your information, using the `activation_token` you copied (click \"Schema\" next to \"Edit Value\" so see what fields are optional), and click \"Execute\".\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### Using the API in command line\n\n\u003c/summary\u003e\n\n\u003e [!TIP]\n\u003e On Windows, `curl` is different.\n\u003e To get the same results as on Linux and MacOS:\n\u003e\n\u003e - either replace `curl` with `curl.exe`\n\u003e - or run the `curl` commands below in a bash (using WSL or using Git Bash)\n\n#### Registering your account\n\n```bash\ncurl --json '{\"email\": \"prenom.nom@etu.ec-lyon.fr\"}' http://localhost:8000/users/create\n```\n\n#### Activating your account\n\n1. Go back to the shell running your Hyperion instance, in the logs look for a link looking like http://localhost:3000/calypsso/activate?activation_token=12345.\n2. Copy this activation token.\n3. Use this `activation_token` in:\n\n```bash\ncurl --json '{\n    \"name\": \"\u003cName\u003e\",\n    \"firstname\": \"\u003cFirstname\u003e\",\n    \"nickname\": \"\u003cNickname\u003e\",\n    \"activation_token\": \"\u003cActivationToken\u003e\",\n    \"password\": \"\u003cPassword\u003e\",\n    \"birthday\": \"\u003c2019-08-24\u003e\",\n    \"phone\": \"\u003cPhone\u003e\",\n    \"promo\": 0,\n    \"floor\": \"\"\n}' http://localhost:8000/users/activate\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### Using a database client in command line\n\n\u003c/summary\u003e\n\n\u003e [!WARNING]\n\u003e Work in progress\n\n1. Open a shell connected to your database for Hyperion\n   - PostgreSQL: see above, generally `psql -U \u003cusername\u003e -d hyperion`.\n   - SQLite: ...\n2. Insert your own user into the users' table (for `centrale_lyon` school, generate your own user UUID and salted hash, feel free to add insert values into nullable columns) :\n\n```sql\ninsert into core_user (id, firstname, name, nickname, email, password_hash, school_id, account_type) values ('01234567-89ab-cdef-0123-456789abcdef', '\u003cFistname\u003e', '\u003cName\u003e', '\u003cNickname\u003e', '\u003cemail\u003e', '$2b$\u003csaltlength\u003e$\u003cyourpasswordsaltedhash\u003e', 'd9772da7-1142-4002-8b86-b694b431dfed', 'student');\n```\n\n\u003c/details\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n## 7. Make your user admin (if not yet the case using factories)\n\n\u003c/summary\u003e\n\n\u003e [!IMPORTANT]\n\u003e Again, using factories is the recommended way.\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### If there is exactly one user in the database\n\n\u003c/summary\u003e\n\nThen you can make it admin using the following command:\n\n```bash\ncurl -X POST http://localhost:8000/users/make-admin\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n### Using a database client in command line\n\n\u003c/summary\u003e\n\n\u003e [!WARNING]\n\u003e Work in progress\n\n1. Open a shell connected to your database for Hyperion\n   - PostgreSQL: see above, generally `psql -U \u003cusername\u003e -d hyperion`.\n   - SQLite: ...\n2. Get the UUID for your own user, then insert it and the UUID for the admin grouptype in the memberships table :\n\n```sql\ninsert into core_membership (user_id, group_id) values ('\u003cYour user_id\u003e', '0a25cb76-4b63-4fd3-b939-da6d9feabf28');\n```\n\n\u003c/details\u003e\n\u003c/details\u003e\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n# Beyond initial configuration\n\n\u003c/summary\u003e\n\n## Install Docker or an equivalent\n\nInstall docker and the compose plugin (https://docs.docker.com/compose/install/)\n\n[`compose.yaml`](compose.yaml) includes the minimal settings required to run Hyperion using docker compose.\n\n\u003e During dev, [`compose.dev.yaml`](compose.dev.yaml) can be used to run the database, the redis server etc... If you really want to run the project without docker, you can do it but you will have to install the database, redis, etc ... yourself or disable corresponding features in the .env file (which is not recommended).\n\n## Linting and formating\n\nTo lint and format, we currently use `Ruff`. We also use `Mypy` for the type checking.\n\nBefore each PR or git push you will need to run `ruff check --fix \u0026\u0026 ruff format` in order to format/lint your code and `mypy .` in order to verify that there is no type mismatch.\n\n## Use Alembic migrations\n\nSee [migrations README](./migrations/README)\n\n\u003e [!WARNING]\n\u003e On SQLite databases, you have to drop the database and recreate it to apply the new DDL.\n\n## OpenAPI specification\n\nAPI endpoints are parsed following the OpenAPI specifications at `http://127.0.0.1:8000/openapi.json`.\n\nA Swagger UI is available at `http://127.0.0.1:8000/docs`. For authentication to work, a valid `AUTH_CLIENT` must be defined in the `.env`, with `http://127.0.0.1:8000/docs/oauth2-redirect` as the redirect URI, and `scope=API` must be added to the authentication request.\n\n## Configure Firebase notifications\n\nHyperion support push notification using Firebase Messaging service.\n\nTo enable the service:\n\n1. Add `USE_FIREBASE=true` to the .env file\n2. Create a service account on Firebase console:\n   1. Go to [Google cloud, IAM and administration, Service account](https://console.cloud.google.com/iam-admin/serviceaccounts) and add a new Service Account with Messaging API capabilities.\n   2. Choose _Manage keys_ and create a new JSON key.\n   3. Rename the file `firebase.json` and add it at Hyperion root\n\n## Use websocket\n\nWhen using multiples workers, a Redis server must be configured to broadcast messages between workers.\n\n## Google API usage\n\nHyperion can use Google API to run App Script and upload files to Google Drive.\nSee [app/core/google_api/README.md](app/core/google_api/README.md) for more information.\n\n---\n\n## Hyperion deployment\n\nFor production we encourage to use multiple Uvicorn workers. You can use our [docker image](Dockerfile) and [docker-compose file](compose.yaml) files to run Hyperion with Unicorn.\n\nYou should use our [init file](app/app.py) to ensure that database initialization and migrations are only run once.\n\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faeecleclair%2Fhyperion","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faeecleclair%2Fhyperion","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faeecleclair%2Fhyperion/lists"}