{"id":20915979,"url":"https://github.com/indico/newdle","last_synced_at":"2025-04-04T11:11:14.452Z","repository":{"id":37768893,"uuid":"197015705","full_name":"indico/newdle","owner":"indico","description":"Open Source Collaborative enterprise meeting scheduling tool.","archived":false,"fork":false,"pushed_at":"2025-02-04T12:51:10.000Z","size":6084,"stargazers_count":94,"open_issues_count":49,"forks_count":73,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-03-28T10:05:22.320Z","etag":null,"topics":["hacktoberfest"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/indico.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":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-07-15T14:32:57.000Z","updated_at":"2025-03-12T06:12:54.000Z","dependencies_parsed_at":"2025-02-23T18:10:22.335Z","dependency_job_id":"52285fa0-6078-457f-8685-abcb19b94af5","html_url":"https://github.com/indico/newdle","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/indico%2Fnewdle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indico%2Fnewdle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indico%2Fnewdle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indico%2Fnewdle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/indico","download_url":"https://codeload.github.com/indico/newdle/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247166168,"owners_count":20894654,"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":["hacktoberfest"],"created_at":"2024-11-18T16:19:13.166Z","updated_at":"2025-04-04T11:11:14.418Z","avatar_url":"https://github.com/indico.png","language":"JavaScript","funding_links":[],"categories":["hacktoberfest","Open Science","Education and Research"],"sub_categories":["Event Management"],"readme":"# Newdle ![CI Status](https://github.com/indico/newdle/workflows/CI/badge.svg) [![License](https://img.shields.io/github/license/indico/newdle.svg)](https://github.com/indico/newdle/blob/master/LICENSE) [![Made at CERN!](https://img.shields.io/badge/CERN-Open%20Source-%232980b9.svg)](https://home.cern)\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"/newdle/client/src/images/logo_color.svg\" width=\"300\"\u003e\u003cbr\u003e\n\u003c/p\u003e\n\u003cbr\u003e\n\n**Newdle** is the new, shiny tool brought to you by the [Indico Team](https://getindico.io/about) @ [CERN](https://home.cern) 🎉\nHere at CERN we **hold a lot of meetings**. While [Indico](https://getindico.io) makes it super easy to manage those meetings, we still **lose a lot of time** 📈 trying to schedule them, which usually involves numerous emails and private messages. That is what newdle has been created for: to streamline the process of choosing **the perfect date and time** 🗓 for your next meeting/event.\n\nNewdle is part of the [MALT project](https://malt.web.cern.ch).\n\n![A sneak peek of Newdle](./sneakpeek.gif)\n\n## Why another tool?\n\nIt's true that there are already several commercial and Open Source solutions available that provide ad-hoc \"polls\".\nHowever, we have noticed that none of those tools seem to offer, at the same time, a user-friendly and modern interface\nand the additional freedom and flexibility that come with being part of an Open Source ecosystem. Additionally, none of\nthem seem to seamlessly integrate with other enterprise systems.\n\n**Integration**\n\nnewdle can currently fetch free-busy information from **Exchange servers**. This information can be used while deciding\non candidate slots (\"when is everyone free?\") as well as when answering to a \"poll\" (\"when am I free?\"). We are\ncurrently working on integrating with other providers.\n\nnewdle is also developed by the same people who are behind [Indico](https://getindico.io), and that's not by pure\nchance. newdle naturally complements Indico, as it targets what comes immediately before the actual creation of a\nmeeting. This is why we would like to have the possibility to **create meetings on Indico** once a final date is\ndecided (still work in progress!).\n\n\n## Development\n\nWe chose Python 3.12 as the backend language, so make sure you have it installed (`pyenv` helps if your distribution does not include it). To prepare the development environment it is enough to run `make` which takes care of installing all required dependencies inside a new virtualenv. Typically that will be the `.venv` directory unless you override the environment variable `VENV` *e.g.* `VENV=.virtualenv make`. Activate your virtualenv using ``source .venv/bin/activate`` since this is required to run the various `flask` comments that come later.\n\nMake sure you have the `python` binary in your PATH. You can also use the `PYTHON` environment variable to override the location of the\n`python` binary. *e.g.:*\n```bash\n$ PYTHON=/usr/bin/python3.12 make\n```\n\n## Database schema\n\nBefore running the alembic migrations make sure you have created a database called `newdle` (or adjust the config file). Having done that, run `flask db upgrade` to upgrade the schema.\n\n## Running the development server\n\nTo run the dev servers, use `make flask-server` and `make react-server` (in separate terminals). You can use the `FLASK_HOST`, `FLASK_PORT` and `REACT_PORT` environment variables to override where the dev servers will listen (make sure to set it for both dev servers, since the React server needs to know where the Flask app is running).\n\nOnce everything is running, you can access the webapp on `http://127.0.0.1:3000` if you did not change any of the ports.\n\nUse the `BROWSER` environment variable if you want to prevent new browser windows being opened every time you run `make react-server`.\n\n```bash\nBROWSER=none make react-server\n```\n\n## Other available `make` targets\n\nWe provide a couple of additional `make` targets that should streamline the development process:\n\n - `make clean` - removes all generated files\n - `make distclean` - runs `clean` target first and removes config files afterwards\n - `make lint` - runs linters, which report possible code style issues\n - `make format` - runs code formatters over the entire codebase (ruff, prettier)\n - `make test` - runs Python and React tests\n - `make build` - builds a Python wheel which then could be used to install `newdle` in production\n\n## Develop with `docker compose` [beta]\n\n - `make docker-dev-run` - Build and runs the containers. Once everything is running, you can access the webapp on `http://127.0.0.1:3000`\n - `make docker-dev-clean` - Stops and destroys the images and containers\n - `make docker-dev-shell-react` - Bash the `react-server` container\n - `make docker-dev-shell-flask` - Bash the `flask-server` container\n\n## Run newdle with `docker compose`\n\u003e :info: Production **like** environment\n\n - `make docker-run` - Build and runs the containers. Once everything is running, you can access the webapp on `http://127.0.0.1:8080`\n - `make docker-clean` - Stops and destroys the images and containers\n - `make docker-shell` - Bash the `newdle` container\n\n|||\n|-|-|\n|\u003ca href=\"https://home.cern\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/indico/assets/master/cern_badge.png\" width=\"64\"\u003e\u003c/a\u003e|Made at [CERN](https://home.cern)\u003cbr\u003e[Take part!](https://careers.cern/)|\n|||\n\n## Note\n\n\u003e In applying the MIT license, CERN does not waive the privileges and immunities\n\u003e granted to it by virtue of its status as an Intergovernmental Organization\n\u003e or submit itself to any jurisdiction.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Findico%2Fnewdle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Findico%2Fnewdle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Findico%2Fnewdle/lists"}