{"id":13395757,"url":"https://github.com/opencfp/opencfp","last_synced_at":"2026-01-10T14:24:23.653Z","repository":{"id":8283233,"uuid":"9820191","full_name":"opencfp/opencfp","owner":"opencfp","description":"Repo for OpenCFP project, a PHP-based conference talk submission system","archived":false,"fork":false,"pushed_at":"2023-01-04T21:41:11.000Z","size":9818,"stargazers_count":540,"open_issues_count":33,"forks_count":185,"subscribers_count":31,"default_branch":"master","last_synced_at":"2024-07-31T18:15:47.189Z","etag":null,"topics":["call-for-papers","conferences","php"],"latest_commit_sha":null,"homepage":null,"language":"PHP","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/opencfp.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-05-02T18:50:26.000Z","updated_at":"2024-05-13T11:43:05.000Z","dependencies_parsed_at":"2023-01-11T18:46:19.722Z","dependency_job_id":null,"html_url":"https://github.com/opencfp/opencfp","commit_stats":null,"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opencfp%2Fopencfp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opencfp%2Fopencfp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opencfp%2Fopencfp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opencfp%2Fopencfp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/opencfp","download_url":"https://codeload.github.com/opencfp/opencfp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221417188,"owners_count":16816826,"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":["call-for-papers","conferences","php"],"created_at":"2024-07-30T18:00:31.128Z","updated_at":"2025-12-17T03:34:30.179Z","avatar_url":"https://github.com/opencfp.png","language":"PHP","funding_links":[],"categories":["Event Organisation","Software","PHP","Conference Management"],"sub_categories":["Conference Management","XMPP"],"readme":"# [![OpenCFP Banner](docs/img/banner.png)](https://github.com/opencfp/opencfp)\n\nOpenCFP is a PHP-based conference talk submission system.\n\n*OpenCFP is now in maintenance mode with only security fixes being accepted*\n\n---\n[![GitHub Actions](https://github.com/opencfp/opencfp/workflows/OpenCFP%20CI/badge.svg)](https://github.com/opencfp/opencfp/actions) [![GitHub release](https://img.shields.io/github/release/opencfp/opencfp.svg)](https://github.com/opencfp/opencfp/releases/latest)\n\n## README Contents\n\n * [Features](#features)\n * [Screenshots](#screenshots)\n * [Contributing](#contributing)\n * [Minimum Requirements](#requirements)\n * [Privacy Restrictions](#privacy)\n * [Installation](#installation)\n   * [Grab Latest Release](#grab-latest-release)\n   * [Cloning the Repository](#cloning-the-repository)\n   * [Specify Environment](#specify-environment)\n   * [Installing Composer Dependencies](#installing-composer-dependencies)\n   * [Specify Web Server Document Root](#specify-web-server-document-root)\n   * [Create a Database](#create-a-database)\n   * [Configure Environment](#configure-environment)\n   * [Run Migrations](#run-migrations)\n   * [Using Vagrant](#using-vagrant)\n   * [Final Touches](#final-touches)\n   * [Building Docker Image](#building-docker-image)\n * [Command-line Utilities](#command-line-utilities)\n   * [Admin Group Management](#admin-group-management)\n   * [Reviewer Group Management](#reviewer-group-management)\n   * [User Management](#user-management)\n   * [Clear Caches](#clear-caches)\n   * [Scripts to Rule Them All](#scripts-rule-all)\n * [Compiling Frontend Assets](#compiling-frontend-assets)\n * [Testing](#testing)\n * [Troubleshooting](#troubleshooting)\n\n\n## [Features](#features)\n\n * Speaker registration system that gathers contact information.\n * Dashboard that allows speakers to submit talk proposals and manage their profile.\n * Administrative dashboard for reviewing submitted talks and making selections.\n * Command-line utilities for administering the system.\n\n## [Screenshots](#screenshots)\n\nYou can find screenshots of the application in our [wiki](https://github.com/opencfp/opencfp/wiki/Screenshots)\n\n\n## [Contributing](#contributing)\n\nSee [`CONTRIBUTING.md`](.github/CONTRIBUTING.md).\n\n## [Minimum Requirements](#requirements)\n\n * PHP 7.4\n * Apache 2+ with `mod_rewrite` enabled and an `AllowOverride all` directive in your `\u003cDirectory\u003e` block is the recommended web server\n * Composer requirements are listed in [composer.json](composer.json).\n * You may need to install `php7.0-intl` extension for PHP. (`php-intl` on CentOS/RHEL-based distributions)\n * Either the GD image library or the Imagick PHP extension for the [Intervention image library](http://image.intervention.io/getting_started/installation))\n\n## [Privacy Restrictions](#privacy)\n\nWe request that anyone who installs OpenCFP to not share any of the \npersonal information that is collected from users with any third\nparties without explicit permission from users and to also be aware of the existence of the European\nUnion's [General Data Protection Regulation](https://en.wikipedia.org/wiki/General_Data_Protection_Regulation)\nas it could potentially impact your ability to accept submissions\nfrom anyone residing within the European Union.\n\nTools to make it easier to comply with the GDPR are in the process\nof being created.\n\nWe recommend that you delete any data stored in a database associated\nwith an OpenCFP instance within 15 months of accepting submissions from\nusers.\n\n\n## [Installation](#installation)\n\n### [Grab Latest Release](#grab-latest-release)\n\nIt is recommended for you to always install the latest marked release. Go to `https://github.com/opencfp/opencfp/releases` to download it.\n\n### [Cloning the Repository](#cloning-the-repository)\n\nClone this project into your working directory. We recommend always running the `master` branch as it was frequent contributions.\n\nExample:\n\n```\n$ git clone git@github.com:opencfp/opencfp.git\nCloning into 'opencfp'...\nremote: Counting objects: 4794, done.\nremote: Total 4794 (delta 0), reused 0 (delta 0)\nReceiving objects: 100% (4794/4794), 1.59 MiB | 10.37 MiB/s, done.\nResolving deltas: 100% (2314/2314), done.\nChecking connectivity... done.\n```\n\n### [Specify Environment](#specify-environment)\n\nOpenCFP can be configured to run in multiple environments. The application environment (`CFP_ENV`) must be specified\nas an environment variable. If not specified, the default is `development`.\n\nAn example Apache configuration is provided at `/web/htaccess.dist`. Copy this file to `/web/.htaccess` or otherwise\nconfigure your web server in the same way and change the `CFP_ENV` value to specify a different environment. The\ndefault has been pre-set for development.\n\n```\nSetEnv CFP_ENV production\n```\n\nYou will also need to set the `CFP_ENV` variable in the shell you are using when doing an install. Here are some\nways to do that with common shells assuming we're using `production`:\n\n* bash: `export CFP_ENV=production`\n* zsh:  `export CFP_ENV = production`\n* fish: `set -x CFP_ENV production`\n\nAgain, just use your preferred environment in place of `production` if required.\n\n### [Installing Composer Dependencies](#installing-composer-dependencies)\n\nFrom the project directory, run the following command. You may need to download `composer.phar` first from http://getcomposer.org\n\n```bash\n$ php composer.phar run setup-env\n```\n\nIf you have composer installed globally you can run:\n\n```bash\n$ composer run setup-env\n```\n\nOr you can run\n\n```bash\n$ ./script/setup\n```\n\nDue to current dependencies you will see the following warning message when installing\nthis project's dependencies via Composer:\n\n```bash\nCarbon 1 is deprecated, see how to migrate to Carbon 2.\nhttps://carbon.nesbot.com/docs/#api-carbon-2\n    You can run './vendor/bin/upgrade-carbon' to get help in updating carbon and other frameworks and libraries that depend on it.\n```\n\n\n### [Specify Web Server Document Root](#specify-web-server-document-root)\n\nSet up your desired webserver to point to the `/web` directory.\n\n[Apache 2+](https://httpd.apache.org/) Example:\n\n```\n\u003cVirtualHost *:80\u003e\n    DocumentRoot /path/to/web\n    ServerName cfp.conference.com\n\n    # Other Directives Here\n\u003c/VirtualHost\u003e\n```\n\nnginx Example:\n\n```\nserver {\n\tserver_name cfp.sitename.com;\n\troot /var/www/opencfp/web;\n\tlisten 80;\n\tindex index.php index.html index.htm;\n\n\taccess_log /var/log/nginx/access.cfp.log;\n\terror_log /var/log/nginx/error.cfp.log;\n\n\tlocation / {\n\t\ttry_files $uri $uri/ /index.php?$query_string;\n\t}\n\n\tlocation ~ \\.php$ {\n\t\ttry_files $uri =404;\n\n\t\tfastcgi_param CFP_ENV production;\n\t\tfastcgi_split_path_info ^(.+\\.php)(/.+)$;\n\t\tfastcgi_pass unix:/var/run/php71-fpm.sock;\n\t\tfastcgi_read_timeout 150;\n\t\tfastcgi_index index.php;\n\t\tfastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;\n\t\tinclude fastcgi_params;\n\t}\n\n}\n```\n\n### [Running Locally](#running-locally)\n\nAfter having gone through the setup steps and database migrations, you can test out OpenCFP locally by installing the [Symfony binary](https://symfony.com/download)\nand using the following command:\n\n```\nsymfony server:start\n```\n\nBy default it should start up a web server running your site at `https://127.0.0.1:8000`\n\n### [Create a Database](#create-a-database)\n\nCreate a new database for the application to use. You will need to have the following handy to continue configuring\nyour installation of OpenCFP:\n\n * Database server hostname\n * Database name\n * Credentials to an account that can access the above database\n\n\n### [Configure Environment](#configure-environment)\n\nDepending on which environment you specified above, you will need to make a copy of the distributed configuration\nschema to enter your own details into.\n\nFor example, if you specified `SetEnv CFP_ENV production`:\n\n```bash\n$ cp config/production.yml.dist config/production.yml\n```\n\nAfter making a local copy, edit `config/production.yml` and specify your own details. Here are some important options\nto consider:\n\n| Option                | Description                       |\n|:----------------------|:----------------------------------|\n| `application.enddate` | This is the date your call for proposals would end on. |\n| `application.coc_link`| Set this to the link for your conference code of conduct to require speakers to agree to the code of conduct at registration |\n| `secure_ssl`          | This should be enabled, if possible. Requires a valid SSL certificate. |\n| `database.*`          | This is the database information you collected above. |\n| `mail.*`              | This is SMTP configuration for sending mail. The application sends notifications on various system events. |\n| `opencfpcentral.*`    | Settings related to using OpenCFP Central for single-sign-on |\n| `talk.categories.*`   | dbkey: Display Name mapping for your talk categories |\n| `talk.types.*`        | dbkey: Display Name mapping for your talk types |\n| `talk.levels.*`       | dbkey: Display Name mapping for your talk levels |\n\n\nFor example, if you wanted to setup Mailgun as your email provider, your mail configuration would look something like this:\n\n```\nmail:\n    host: smtp.mailgun.org\n    port: 587\n    username: do-not-reply@cfp.myfancyconference.com\n    password: \"a1b2c3d4\"\n    encryption: tls\n    auth_mode: ~\n```\n\nAs the project migrates from using Eloquent to Doctrine you also need to edit the following files to ensure the database\ncredentials are correct, creating a version of the modified file in the same location but without the `.dist` suffix.\n\n`resources/config/config_testing.yml.dist`\n`resources/config/config_development.yml.dist`\n`resources/config/config_production.yml.dist`\n\n\n### [Running behind a trusted proxy](#run-trusted-proxy)\n\nIf you are running OpenCFP behind a proxy server which adds X-Forwarded-For headers (this could be a cloud based load balancer or a service such as Cloudflare) you will need to set the environment variable TRUST_PROXIES to true this will ensure that OpenCFP trusts the headers set by these proxies for the original IP address and ssl mode. Setting this will trust these headers regardless of where the original request originates, so it's advisable to either lock down your instance so that only the trusted proxy can access it or modify the list of trusted proxies in the index.php file to only include the ip addresses of your proxies.\n\n\n### [Run Migrations](#run-migrations)\n\nThis project uses [Doctrine Migrations](https://www.doctrine-project.org/projects/migrations.html) to handle migrations. \n\nTo run the existing migrations, make sure you are in the root directory for the project and run the following:\n\n```\n$ bin/console doctrine:migrations:migrate --env=\u003cenvironment\u003e \n```\n\nwhere \u003cenvironment\u003e is one of `testing`, `development`, or `production`. The default environment is `development` \n\n\n### [Using Vagrant](#using-vagrant)\n\nAfter running `$ composer run setup-env` (or `$ ./script/setup`) from the project root run `php vendor/bin/homestead make`. \nThis will create a `Homestead.yaml` based on settings from `Homestead.yaml.example`. Do not version control `Homestead.yaml`\n\nRun `vagrant up`\nAdd `192.168.10.10 opencfp.test` to your operating system's hosts file (/etc/hosts)\nPoint your browser to `http://opencfp.test`\n\nEdit your `config/development.yml` to use Homestead's database \u0026 mail settings:\n\n```\ndatabase:\n  host: 127.0.0.1\n  database: cfp\n  dsn: mysql:dbname=cfp;host=127.0.0.1\n  user: homestead\n  password: secret\n\nlog:\n  level: debug\n\nmail:\n  host: localhost\n  port: 1025\n  username: ~\n  password: ~\n  encryption: ~\n  auth_mode: ~\n```\n\nMailhog (local mail catching) can be viewed at http://opencfp.test:8025\n\nFor more usage information please see the [Laravel Homestead Docs](http://laravel.com/docs/homestead)\n\nYou also need to edit the following files for Doctrine support\n\n\n\n### [Final Touches](#final-touches)\n\n * The web server must be able to write to the directories:\n    * `/web/uploads`\n    * `/cache/:environment` (e.g. `/cache/production`)\n    * `/log`\n * You may need to alter the `memory_limit` of the web server to allow image processing of head-shots. This is largely\n   dictated by the size of the images people upload. Typically 512M works.\n * Customize templates and `/web/assets/css/app.css` to your heart's content.\n\n### [Building Docker Image](#building-docker-image)\n\n\n#### What is Docker\n\nQuoting [OpenSource](https://opensource.com/resources/what-docker):\n\n\"[Docker](https://www.docker.com) is a tool designed to make it easier to create, deploy, and run applications by using containers. \nContainers allow a developer to package up an application with all of the parts it needs, such as libraries and \nother dependencies, and ship it all out as one package. By doing so, thanks to the container, \nthe developer can rest assured that the application will run on any other Linux machine regardless of any customized \nsettings that machine might have that could differ from the machine used for writing and testing the code.\"\n\n#### Requirements\n\n1. You will need to download and install [Docker](https://www.docker.com/get-docker) locally.\n2. You will need to download and install [docker-compose](https://docs.docker.com/compose/install/) too.\n\n#### Build \u0026 Run the image\n\nOpenCfp provides a ready-to-use docker-compose.yml file.\nIf you need to add configuration options specific to your working environment (network ...) add them to a docker-compose.override.yml file.\nInstead of updating the *ENV_PROD*.yaml.dist to set your environment, with the docker file, you only have to modify the environment variable in the docker-compose.yml.\n\n\nYou also have to add a value to the variables:\n```\nservices :\n  php:\n    ...\n    environment:\n    - ...\n    - ADMIN_USERNAME=changeMe \n    - ADMIN_PASSWORD=changeMe \n    - ADMIN_EMAIL=changeMe\n    - ...\n```\nwhich will be useful values for the creation of a development administrator.\n\nThen you can build the docker images by using a [docker-compose](https://docs.docker.com/compose/install/) command which will build the image, create a admin user in development or test, compiling the Frontend Assets and run the containers automatically for you:\n\n```\n$  docker-compose up\n```\nOnce the container is up and ready, go to **http://localhost:8080/** to see your server ready to use\n\nIf an administrator already exists, an error message will be displayed to you. You can ignore it if you've used docker-compose before.\n\nSometimes you only want to rebuild the images to create your container. To do that use\n\n```sh\n$ docker-compose build\n```\n\n#### Run PHP commands within the Container\n\nTo run any command in the app container you can use the docker-compose \n[exec](https://docs.docker.com/compose/reference/exec/) command, for example to clear the cache for your\nenvironment:\n\n```bash\n$ docker-compose exec php bin/console cache:clear \n```\nOR\n\n#### Running the image directly\n\nYou can run the image (after you build it) and link it to an already running database container using the docker \n[run](https://docs.docker.com/engine/reference/commandline/run/) command like:\n\n```bash\n$ docker run \n -e CFP_ENV=development \n -e CFP_DB_HOST=database \n -e CFP_DB_PASS=changeMe \n -e CFP_DATABASE=opencfp\n -e CFP_DB_USER=opencfp\n -e MAIL_HOST=~\n -e MAIL_PORT=~ \n -e MAIL_USERNAME=~\n -e MAIL_PASSWORD=~\n -e MAIL_ENCRYPTION=~\n -e MAIL_AUTH_MODE=~\n -e ADMIN_NAME=changeMe\n -e ADMIN_LAST_NAME=changeMe\n -e ADMIN_PASSWORD=changeMe\n -e ADMIN_EMAIL=changeMe@changeMe\n --name cfp --link database:database -p 80:80 -d opencfp/opencfp:latest\n```\n\nWhere `database` is the name of the running database container. \n\n\n#### Access MySQL container\n\nTo access the MySQL container from outside the application container you can use the following information:\n\n- **Host**: 127.0.0.1\n- **User**: (the one you specfied in the docker-compose file)\n- **Password**:(the one you specfied in the docker-compose file) \n \n\nFor using docker in your development environment check [DOCKER.md](DOCKER.md) file. \n\n_PS_: You can always modify the file `docker-compose.override.yml` and have your own setup.\n\n\n## [Command-line Utilities](#command-line-utilities)\n\nOpenCFP comes bundled with a few command-line utilities to administer the system. A full list of commands (along with help for each)\ncan be found by running the following in the project root:\n\n```\n$ bin/console\n```\n\n### [Admin Group Management](#admin-group-management)\n\nAdministrators are authorized to review speaker information in addition to specifying talk favorites and making selections.\n\nAdding `speaker@opencfp.org` to the admin group:\n\n```\n$ bin/console user:promote --env=production speaker@opencfp.org admin\n```\n\nRemoving `speaker@opencfp.org` from the admin group:\n\n```\n$ bin/console user:demote --env=production speaker@opencfp.org admin\n```\n\n### [Reviewer Group Management](#reviewer-group-management)\nReviewers are authorized to see talks and give ratings to them.\n\nAdding `speaker@opencfp.org` to the reviewer group:\n\n```\n$ bin/console user:promote --env=production speaker@opencfp.org reviewer\n```\n\nRemoving `speaker@opencfp.org` from the reviewer group:\n\n```\n$ bin/console user:demote --env=production speaker@opencfp.org reviewer\n```\n\n\n### [User Management](#user-management)\n\nUsers are needed for you system, and sometimes you want to add users via command line.\n\nAdding a speaker:\n\n```\n$ bin/console user:create --first_name=\"Speaker\" --last_name=\"Name\" --email=\"speaker@opencfp.org\" --password=\"somePassw0rd!\"\n```\n\nAdd an admin:\n\n```\n$ bin/console user:create --first_name=\"Admin\" --last_name=\"Name\" --email=\"admin@opencfp.org\" --password=\"somePassw0rd!\" --admin\n```\n\nAdd a reviewer:\n\n```\n$ bin/console user:create --first_name=\"Admin\" --last_name=\"Name\" --email=\"admin@opencfp.org\" --password=\"somePassw0rd!\" --reviewer\n```\n\n### [Clear Caches](#clear-caches)\n\nOpenCFP uses Twig as a templating engine and HTML Purifier for input filtering. Both of these packages maintain a cache.\nIf you need to clear all application caches:\n\n```\n$ bin/console cache:clear\n```\n\n### [Scripts to Rule Them All](#scripts-rule-all)\n\nOpenCFP follows the [Scripts to Rule Them All](https://github.com/github/scripts-to-rule-them-all) pattern. This allows\nfor an easy to follow convention for common tasks when developing applications.\n\n#### Initial Setup\nThis command will install all dependencies, run database migrations, and alert you of any missing configs.\n\n```\n$ composer run setup-env\n```\n\n#### Update Application\nThis command will update all dependencies and run new migrations\n\n```\n$ composer run update-env\n```\n\n#### Run Tests\nThis command will run the PHPUnit test suite using distributed phpunit config, `phpunit.xml.dist`, if\nno phpunit.xml is found in the root.\n\n```\n$ composer run test\n```\n\n## [Compiling Frontend Assets](#compiling-frontend-assets)\n\nOpenCFP ships with a pre-compiled CSS file. However, we now include the Sass / PostCSS used to compile front-end assets. You are free to modify these source files to change brand colors or modify your instance however you see fit. Remember, you can do **nothing** and take advantage of the pre-compiled CSS we ship. You only need these instructions if you want to customize or contribute to the look and feel of OpenCFP. Let's take a look at this new workflow for OpenCFP.\n\nInstall Node dependencies using `yarn`.\n\n```bash\nyarn install\n```\n\nNow dependencies are installed and we're ready to compile assets. Check out the `scripts` section of `package.json`. A normal development workflow is to run either `yarn run watch` or `yarn run watch-poll` (for OS that don't have `fs-events`) and begin work. When you make changes to Sass files, Webpack will recompile assets, but it doesn't compress the output. To do that, run `yarn run prod` (an alias for `yarn run production`). This will run the same compilation, but will compress the output.\n\nThe main `app.scss` file is at [`resources/assets/sass/app.scss`](resources/assets/sass/app.scss). We use [Laravel Mix](https://github.com/JeffreyWay/laravel-mix) to compile our Sass. Mix is configurable to run without Laravel, so we take advantage of that because it really makes dealing with Webpack a lot simpler. Our Mix configuration is at [`webpack.mix.js`](webpack.mix.js). In it, we run our `app.scss` through a Sass compilation step, we copy FontAwesome icons and finally run the compiled CSS through [Tailwind CSS](https://tailwindcss.com), a PostCSS plugin.\n\nTailwindCSS is a new utility-first CSS framework that uses CSS class composition to piece together interfaces. Check out [their documentation](https://tailwindcss.com/docs/what-is-tailwind/) for more information on how to use the framework. We use it extensively across OpenCFP and it saves a lot of time and keeps us from having to maintain *too much* CSS. If you take a look through our `app.scss`, you'll see a lot of calls to [`@apply`](https://tailwindcss.com/docs/functions-and-directives#apply). This is NOT a Sass construct. It's a TailwindCSS function used to mixin existing classes into our custom CSS.\n\n## [Testing](#testing)\n\nThere is a test suite that uses PHPUnit in the /tests directory. To set up\nyour environment for testing:\n\n1. Create a testing database, and update the name and credentials in\n   /config/testing.yml\n2. The recommended way to run the tests is:\n\n```\n$ composer run test\n```\n\nThe default phpunit.xml.dist file is in the root directory for the project.\n\n## [Troubleshooting](#troubleshooting)\n\n**I'm getting weird permissions-related errors to do with HTML Purifier.**\n\nYou may need to edit directory permissions for some vendor packages such as HTML Purifier. Check the `/cache` directory's\npermissions first.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopencfp%2Fopencfp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopencfp%2Fopencfp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopencfp%2Fopencfp/lists"}