{"id":24989031,"url":"https://github.com/engineervix/webinar","last_synced_at":"2025-03-29T11:40:27.103Z","repository":{"id":238604909,"uuid":"796970666","full_name":"engineervix/webinar","owner":"engineervix","description":"A simple webinar registration management tool, with calendar integration and instant organizer notifications.","archived":false,"fork":false,"pushed_at":"2025-03-13T20:26:40.000Z","size":1646,"stargazers_count":0,"open_issues_count":11,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-13T21:32:03.691Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/engineervix.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2024-05-07T00:46:53.000Z","updated_at":"2025-03-09T00:41:47.000Z","dependencies_parsed_at":"2024-05-29T04:31:02.452Z","dependency_job_id":"8263a2da-c94f-4c5c-a537-7e5f2f01e416","html_url":"https://github.com/engineervix/webinar","commit_stats":null,"previous_names":["engineervix/webinar"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/engineervix%2Fwebinar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/engineervix%2Fwebinar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/engineervix%2Fwebinar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/engineervix%2Fwebinar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/engineervix","download_url":"https://codeload.github.com/engineervix/webinar/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246180898,"owners_count":20736459,"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":"2025-02-04T12:13:51.317Z","updated_at":"2025-03-29T11:40:26.630Z","avatar_url":"https://github.com/engineervix.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# webinar\n\n\u003e A simple webinar registration management tool, with calendar integration and instant organizer notifications.\n\n[![Continuous Integration](https://github.com/engineervix/webinar/actions/workflows/main.yml/badge.svg)](https://github.com/engineervix/webinar/actions/workflows/main.yml)\n[![Docs](https://github.com/engineervix/webinar/actions/workflows/gh-pages.yml/badge.svg)](https://github.com/engineervix/webinar/actions/workflows/gh-pages.yml)\n\n[![python3](https://img.shields.io/badge/python-3.12-brightgreen.svg)](https://python.org/)\n[![Node v20](https://img.shields.io/badge/Node-v20-teal.svg)](https://nodejs.org/en/blog/release/v20.0.0)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![code style: prettier](https://img.shields.io/badge/code%20style-prettier-ff69b4.svg)](https://prettier.io/)\n\n[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/)\n[![Conventional Changelog](https://img.shields.io/badge/changelog-conventional-brightgreen.svg)](https://github.com/conventional-changelog)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\n\u003c!-- START doctoc generated TOC please keep comment here to allow auto update --\u003e\n\u003c!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --\u003e\n\n- [Introduction](#introduction)\n- [Development](#development)\n  - [First things first](#first-things-first)\n  - [Getting Started](#getting-started)\n  - [Commits, Releases and Changelogs](#commits-releases-and-changelogs)\n  - [Tips](#tips)\n- [Project Technical Documentation](#project-technical-documentation)\n- [TODO](#todo)\n\n\u003c!-- END doctoc generated TOC please keep comment here to allow auto update --\u003e\n\n## Introduction\n\nThis is a [Python](https://www.python.org/) project built using [Django](https://www.djangoproject.com/).\n\n- As with most web projects, the frontend dependencies, tasks, etc. are managed using [Node.js](https://nodejs.org/). This project uses [Webpack](https://webpack.js.org/) to bundle frontend assets.\n- UI: [Tailwind CSS](https://tailwindcss.com/) + [DaisyUI](https://daisyui.com/)\n- Tests via [pytest](https://pytest.org/)\n- Linting and formatting:\n  - _python_: [Black](https://black.readthedocs.io/) and [ruff](https://github.com/astral-sh/ruff)\n  - _frontend_: [ESLint](https://eslint.org/), [Stylelint](https://stylelint.io/), [prettier](https://prettier.io/) and [djLint](https://www.djlint.com/).\n- Task execution and automation using [`invoke`](http://www.pyinvoke.org/).\n- [Continuous integration (CI)](https://www.atlassian.com/continuous-delivery/continuous-integration) via [Github Actions](https://github.com/features/actions) / [Gitlab CI/CD](https://docs.gitlab.com/ee/ci/).\n\n## Development\n\n### First things first\n\nStart by ensuring that you have Docker and Docker Compose:\n\n```sh\n# check that you have docker on your machine\ndocker -v\n\n# check that you have docker-compose on your machine\ndocker-compose -v\n```\n\nFor the best developer experience, you need to have [Python 3.12](https://www.python.org/) and [Poetry](https://python-poetry.org/) installed on your machine. If, for some reason, you have a different python version, you can use [pyenv](https://github.com/pyenv/pyenv) to install multiple python versions on your machine. Once you have Python 3.12 installed, create a [**virtual environment**](https://realpython.com/python-virtual-environments-a-primer/).\n\nYou'll also need **Node.js 20** on your machine. You can use tools such as [nvm](https://github.com/nvm-sh/nvm), [volta](https://volta.sh/), etc. to simplify managing Node.js versions on your machine.\n\n### Getting Started\n\nHere, we assume that you have `git` on your machine, and that you have created a Python 3.12 virtual environment.\n\nNow, upon cloning this repository (or forking + cloning your fork), navigate to the cloned project directory.\n\n1. In your [**virtual environment**](https://realpython.com/python-virtual-environments-a-primer/), install Python dependencies\n\n   ```bash\n   poetry install --with dev,test,docs\n   ```\n\n2. Install Node.js dependencies\n\n   ```bash\n   npm install\n   ```\n\n3. Build the images and spin up the containers:\n\n   ```sh\n   inv up --build\n   ```\n\n   This is basically the same as running `docker-compose up -d --build`, but is obviously much shorter 😎. The above is made possible by [Invoke](https://www.pyinvoke.org/), which is [used extensively on this project to automate some tasks](#tips). Also note that `inv` is short for `invoke` — the two can be used interchangeably.\n\n   Running the above command may take a while, you might wanna grab a cup of tea ☕.\n\n   \u003e **Note**\n   \u003e\n   \u003e every time you want to spin up the containers, you can just run `inv up` without specifying the `--build` argument. Only add the `--build` argument if you wanna rebuild the images.\n\nIf everything goes well, you should be able to get into the `web` container and access the shell.\n\n```sh\ninv exec web bash\n```\n\nOnce you're in the container,\n\n- apply database migrations via `./manage.py migrate`,\n- [create a cache table](https://docs.djangoproject.com/en/5.0/topics/cache/#creating-the-cache-table) via `./manage.py createcachetable`\n- create a `superuser` via `./manage.py createsuperuser`,\n- run the following to simultaneously launch the [django development server](https://docs.djangoproject.com/en/5.0/ref/django-admin/#django-admin-runserver) and the [webpack dev server](https://webpack.js.org/configuration/dev-server/):\n\n```sh\ninv start\n```\n\nYou can access the dev server at \u003chttp://127.0.0.1:8000\u003e. This project uses [MailDev](https://github.com/maildev/maildev) for viewing and testing emails generated during development. The `MailDev` server is accessible at \u003chttp://127.0.0.1:1080\u003e.\n\n### Commits, Releases and Changelogs\n\nThis project follows the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) specification for structured and [semantic](https://semver.org/spec/v2.0.0.html) commit messages. It also utilizes a [conventional changelog](https://github.com/conventional-changelog/conventional-changelog#getting-started) to keep track of changes and releases in a standardized way.\n\nCreating a release is as simple as running\n\n```bash\ninv bump main\n```\n\nAssuming you are working with the `main` branch.\n\nIf it's your first release:\n\n```bash\ninv bump main --first\n```\n\nThis will\n\n- create a `v0.0.0` and a `v0.1.0` tag\n- update the changelog accordingly\n- push the changes to your origin and create a release, complete with release notes.\n\nFor the first release, you can also supply the `--major` argument and this will create a `v1.0.0` tag instead of `v0.1.0`\n\n### Tips\n\n- Run `invoke -l` to see all available [Invoke](https://www.pyinvoke.org/) tasks. These are defined in the [tasks.py](tasks.py) file.\n- You'll want to setup [pre-commit](https://pre-commit.com/) by running `pre-commit install` followed by `pre-commit install --hook-type commit-msg`. Optionally run `pre-commit run --all-files` to make sure your pre-commit setup is okay.\n- You'll probably also want to install Node.js 20 on your machine, together with the dependencies. We recommend using [fnm](https://github.com/Schniz/fnm) or [volta](https://volta.sh/) to simplify managing Node.js versions on your machine.\n\n## Project Technical Documentation\n\nThe project's documentation is powered by [mkdocs](https://www.mkdocs.org/), and lives in the [`docs`](./docs/) directory.\n\nYou can view it by running the following in the `web` container:\n\n```bash\nmkdocs serve\n```\n\nThe documentation will be available at: \u003chttp://127.0.0.1:8001/\u003e\n\n---\n\n## TODO\n\n- [ ] Toggle light/dark mode\n- [ ] Optimize Tailwind setup\n- [ ] Google Sheets integration\n- [ ] Write more tests\n- [ ] Update docs\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fengineervix%2Fwebinar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fengineervix%2Fwebinar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fengineervix%2Fwebinar/lists"}