├── .dockerignore ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ ├── config.yml │ ├── feature_request.yml │ └── other.yml ├── PULL_REQUEST_TEMPLATE.md └── workflows │ ├── deploy.yml │ ├── release.yml │ └── welcome-first-time-contributors.yml ├── .gitignore ├── .gitpod.yml ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── README.md ├── generate.js ├── kubernetes ├── deployment.yaml ├── ingress.yaml └── service.yaml ├── package-lock.json ├── package.json ├── public ├── app.json ├── data │ ├── anja-twitter-space-19-12-21.json │ ├── eddiehub-community-call-27-11-21.json │ ├── eddiehub-public-speaking-call-20-11-2021.json │ ├── eddiejaoude-discord-centered-20-11-2021.json │ ├── eddiejaoude-youtube-live-17-12-21.json │ └── francesco-live-20-11-2021.json ├── index.html └── robots.txt └── src ├── App.css ├── App.js ├── Components └── Footer.js ├── index.css ├── index.js └── reportWebVitals.js /.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | npm-debug.log 3 | build 4 | .git 5 | .gitignore 6 | Dockerfile 7 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [eddiejaoude] 4 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.yml: -------------------------------------------------------------------------------- 1 | name: Bug report 2 | description: Create a bug report to help us address errors in the repository 3 | title: "[BUG] " 4 | labels: [bug] 5 | body: 6 | - type: textarea 7 | id: bugdescription 8 | attributes: 9 | label: Description of the bug 10 | description: "Provide a detailed description of the bug you're encountering" 11 | validations: 12 | required: true 13 | - type: textarea 14 | id: screenshots 15 | attributes: 16 | label: Please add screenshots (if applicable) 17 | validations: 18 | required: false 19 | - type: textarea 20 | id: context 21 | attributes: 22 | label: Additional information 23 | description: Is anything else we should know about this bug? 24 | validations: 25 | required: false 26 | - type: markdown 27 | attributes: 28 | value: | 29 | You can also join our Discord community [here](http://discord.eddiehub.org) 30 | Feel free to check out other cool repositories of the EddieHub Community [here](https://github.com/EddieHubCommunity) 31 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.yml: -------------------------------------------------------------------------------- 1 | name: Feature request 2 | description: Suggest features, propose improvements, discuss new ideas. 3 | title: "[FEATURE]" 4 | labels: [enhancement] 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: Provide a general summary of the issue in the Title above 9 | - type: textarea 10 | id: description 11 | attributes: 12 | label: Detailed description 13 | description: Provide a detailed description of the change or addition you are proposing 14 | validations: 15 | required: true 16 | - type: textarea 17 | id: context 18 | attributes: 19 | label: Context 20 | description: | 21 | Why is this change important to you? How would you use it? 22 | How can it benefit other users? 23 | validations: 24 | required: true 25 | - type: textarea 26 | id: possibleimpl 27 | attributes: 28 | label: Possible implementation 29 | description: Not obligatory, but suggest an idea for implementing addition or change 30 | validations: 31 | required: false 32 | - type: textarea 33 | id: extrainformation 34 | attributes: 35 | label: Additional information 36 | description: Is there anything else we should know about this feature? 37 | validations: 38 | required: false 39 | - type: markdown 40 | attributes: 41 | value: | 42 | You can also join our Discord community [here](http://discord.eddiehub.org) 43 | Feel free to check out other cool repositories of the EddieHub Community [here](https://github.com/EddieHubCommunity) 44 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/other.yml: -------------------------------------------------------------------------------- 1 | name: Other 2 | description: Use this for any other issues. PLEASE do not create blank issues 3 | title: "[OTHER]" 4 | labels: ["🚦 status: awaiting triage" ] 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: "# Other issue" 9 | - type: textarea 10 | id: issuedescription 11 | attributes: 12 | label: What would you like to share? 13 | description: Provide a clear and concise explanation of your issue. 14 | validations: 15 | required: true 16 | - type: textarea 17 | id: extrainfo 18 | attributes: 19 | label: Additional information 20 | description: Is there anything else we should know about this issue? 21 | validations: 22 | required: false 23 | - type: checkboxes 24 | id: consent 25 | attributes: 26 | label: Would you like to work on this issue? 27 | options: 28 | - label: Yes, I want to work on this issue! 29 | required: false 30 | - type: markdown 31 | attributes: 32 | value: | 33 | You can also join our Discord community [here](http://discord.eddiehub.org) 34 | Feel free to check out other cool repositories of the EddieHub Community [here](https://github.com/EddieHubCommunity) 35 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Fixes Issue 4 | 5 | 6 | 7 | 8 | 9 | ## Changes proposed 10 | 11 | 12 | 13 | 14 | 18 | 19 | ## Check List (Check all the boxes which are applicable) 20 | 21 | - [ ] My code follows the code style of this project. 22 | - [ ] My change requires a change to the documentation. 23 | - [ ] I have updated the documentation accordingly. 24 | - [ ] All new and existing tests passed. 25 | - [ ] This PR does not contain plagiarized content. 26 | - [ ] The title of my pull request is a short description of the requested changes. 27 | 28 | ## Screenshots 29 | 30 | 31 | 32 | ## Note to reviewers 33 | 34 | 35 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: Build & publish Docker image then deploy 2 | on: 3 | release: 4 | types: [published] 5 | 6 | jobs: 7 | build: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@v2 11 | - uses: actions/setup-node@v2 12 | with: 13 | node-version: "16" 14 | - name: install dependencies 15 | run: npm ci 16 | - name: run build 17 | run: npm run build 18 | - uses: actions/upload-artifact@main 19 | with: 20 | name: artifacts 21 | path: build/ 22 | 23 | push_to_registry: 24 | name: Push Docker image to GitHub Packages 25 | needs: build 26 | permissions: 27 | contents: read 28 | packages: write 29 | runs-on: ubuntu-latest 30 | steps: 31 | - name: check out the repo 32 | uses: actions/checkout@v2 33 | - name: get-npm-version 34 | id: package-version 35 | uses: martinbeentjes/npm-get-version-action@master 36 | - name: set up Docker builder 37 | uses: docker/setup-buildx-action@v1 38 | - name: log into GitHub Container Registry 39 | uses: docker/login-action@v1 40 | with: 41 | registry: ghcr.io 42 | username: ${{ github.repository_owner }} 43 | password: ${{ secrets.CR_PAT }} 44 | - name: push to Github Container Registry 45 | uses: docker/build-push-action@v2 46 | with: 47 | context: . 48 | push: true 49 | secrets: | 50 | 'GH_TOKEN=${{ secrets.GITHUB_TOKEN }}' 51 | build-args: "github_token=${{ secrets.GITHUB_TOKEN }}" 52 | tags: | 53 | ghcr.io/eddiehubcommunity/eventcalendar:v${{ steps.package-version.outputs.current-version}} 54 | ghcr.io/eddiehubcommunity/eventcalendar:latest 55 | deploy: 56 | name: deploy to kube cluster 57 | needs: push_to_registry 58 | runs-on: ubuntu-latest 59 | steps: 60 | - name: check out the repo 61 | uses: actions/checkout@v2 62 | - name: get-npm-version 63 | id: package-version 64 | uses: martinbeentjes/npm-get-version-action@master 65 | - uses: Azure/k8s-set-context@v1 66 | with: 67 | kubeconfig: ${{ secrets.KUBE_CONFIG }} 68 | - uses: Azure/k8s-deploy@v1.4 69 | with: 70 | namespace: "default" 71 | manifests: kubernetes/deployment.yaml 72 | images: "ghcr.io/eddiehubcommunity/eventcalendar:v${{ steps.package-version.outputs.current-version}}" 73 | kubectl-version: "latest" 74 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Releases 2 | on: 3 | push: 4 | branches: 5 | - main 6 | 7 | jobs: 8 | changelog: 9 | runs-on: ubuntu-latest 10 | 11 | steps: 12 | - uses: actions/checkout@v2 13 | 14 | - name: conventional Changelog Action 15 | id: changelog 16 | uses: TriPSs/conventional-changelog-action@v3.7.1 17 | with: 18 | github-token: ${{ secrets.CHANGELOG_RELEASE }} 19 | 20 | - name: create release 21 | uses: actions/create-release@v1 22 | if: ${{ steps.changelog.outputs.skipped == 'false' }} 23 | env: 24 | GITHUB_TOKEN: ${{ secrets.CHANGELOG_RELEASE }} 25 | with: 26 | tag_name: ${{ steps.changelog.outputs.tag }} 27 | release_name: ${{ steps.changelog.outputs.tag }} 28 | body: ${{ steps.changelog.outputs.clean_changelog }} 29 | -------------------------------------------------------------------------------- /.github/workflows/welcome-first-time-contributors.yml: -------------------------------------------------------------------------------- 1 | name: Welcome first time contributors 2 | 3 | on: 4 | pull_request_target: 5 | types: [ opened ] 6 | issues: 7 | types: [ opened ] 8 | 9 | jobs: 10 | welcome: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v1 14 | - uses: EddieHubCommunity/gh-action-community/src/welcome@main 15 | with: 16 | github-token: ${{ secrets.GITHUB_TOKEN }} 17 | issue-message: '

It''s great having you contribute to this project

Welcome to the community :nerd_face: :rocket:' 18 | pr-message: '

It''s great having you contribute to this project

Welcome to the community :nerd_face:' 19 | footer: 'If you would like to continue contributing to open source and would like to do it with an awesome inclusive community, you should join our Discord chat and our GitHub Organisation - we help and encourage each other to contribute to open source little and often 🤓 . Any questions let us know.' 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | 25 | public/events.json 26 | -------------------------------------------------------------------------------- /.gitpod.yml: -------------------------------------------------------------------------------- 1 | tasks: 2 | - init: npm install 3 | command: npm start 4 | 5 | ports: 6 | - port: 3000 7 | onOpen: open-preview 8 | 9 | github: 10 | prebuilds: 11 | master: true 12 | branches: true 13 | pullRequests: true 14 | pullRequestsFromForks: true 15 | addCheck: true 16 | addComment: false 17 | addBadge: true 18 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## [0.7.7](https://github.com/EddieHubCommunity/EventCalendar/compare/v0.7.6...v0.7.7) (2021-12-19) 2 | 3 | 4 | ### Bug Fixes 5 | 6 | * platform/type issue ([53601ea](https://github.com/EddieHubCommunity/EventCalendar/commit/53601eada8cb614bb1e4866ce38e090e503474e0)) 7 | 8 | 9 | 10 | ## [0.7.6](https://github.com/EddieHubCommunity/EventCalendar/compare/v0.7.5...v0.7.6) (2021-12-19) 11 | 12 | 13 | ### Bug Fixes 14 | 15 | * docs ([c628b0d](https://github.com/EddieHubCommunity/EventCalendar/commit/c628b0df0113089cf97c3aea2c8dca89fc2c7dca)) 16 | 17 | 18 | 19 | ## [0.7.5](https://github.com/EddieHubCommunity/EventCalendar/compare/v0.7.4...v0.7.5) (2021-12-17) 20 | 21 | 22 | ### Bug Fixes 23 | 24 | * eddiejaoude live stream ([9ae7131](https://github.com/EddieHubCommunity/EventCalendar/commit/9ae7131977d1e27c1d11a0b2f586c796f697080d)) 25 | 26 | 27 | 28 | ## [0.7.4](https://github.com/EddieHubCommunity/EventCalendar/compare/v0.7.3...v0.7.4) (2021-11-27) 29 | 30 | 31 | ### Bug Fixes 32 | 33 | * **event:** EddieHub community call ([#84](https://github.com/EddieHubCommunity/EventCalendar/issues/84)) ([6c82788](https://github.com/EddieHubCommunity/EventCalendar/commit/6c82788aafa62f89fa9c2909b64399dd5eb999f9)) 34 | 35 | 36 | 37 | ## [0.7.3](https://github.com/EddieHubCommunity/EventCalendar/compare/v0.7.2...v0.7.3) (2021-11-25) 38 | 39 | 40 | ### Bug Fixes 41 | 42 | * updated the link of contributors in `readme.md` ([#78](https://github.com/EddieHubCommunity/EventCalendar/issues/78)) ([#80](https://github.com/EddieHubCommunity/EventCalendar/issues/80)) ([7ed9922](https://github.com/EddieHubCommunity/EventCalendar/commit/7ed9922b4dbb5f5c0a559f4f25aa3b412f436196)) 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | We as members, contributors, and leaders pledge to make participation in our 6 | community a harassment-free experience for everyone, regardless of age, body 7 | size, visible or invisible disability, ethnicity, sex characteristics, gender 8 | identity and expression, level of experience, education, socio-economic status, 9 | nationality, personal appearance, race, caste, color, religion, or sexual identity 10 | and orientation. 11 | 12 | We pledge to act and interact in ways that contribute to an open, welcoming, diverse, 13 | inclusive, and healthy community. 14 | 15 | ## Our Standards 16 | 17 | Examples of behavior that contributes to a positive environment for our community include: 18 | 19 | * Demonstrating empathy and kindness toward other people 20 | * Being respectful of differing opinions, viewpoints, and experiences 21 | * Giving and gracefully accepting constructive feedback 22 | * Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience 23 | * Focusing on what is best not just for us as individuals, but for the overall community 24 | 25 | Examples of unacceptable behavior include: 26 | 27 | * The use of sexualized language or imagery, and sexual attention or advances of any kind 28 | * Trolling, insulting or derogatory comments, and personal or political attacks 29 | * Public or private harassment 30 | * Publishing others’ private information, such as a physical or email address, without their explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a professional setting 32 | 33 | ## Enforcement Responsibilities 34 | 35 | Community leaders are responsible for clarifying and enforcing our standards of 36 | acceptable behavior and will take appropriate and fair corrective action in 37 | response to any behavior that they deem inappropriate, threatening, offensive, 38 | or harmful. 39 | 40 | Community leaders have the right and responsibility to remove, edit, or reject 41 | comments, commits, code, wiki edits, issues, and other contributions that are 42 | not aligned to this Code of Conduct, and will communicate reasons for moderation 43 | decisions when appropriate. 44 | 45 | ## Scope 46 | 47 | This Code of Conduct applies within all community spaces, and also applies when an 48 | individual is officially representing the community in public spaces. Examples of 49 | representing our community include using an official e-mail address, posting via an 50 | official social media account, or acting as an appointed representative at an online 51 | or offline event. 52 | 53 | ## Enforcement 54 | 55 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 56 | reported to the community leaders responsible for enforcement at http://eddiejaoude.io/contact. 57 | All complaints will be reviewed and investigated promptly and fairly. 58 | 59 | All community leaders are obligated to respect the privacy and security of the reporter 60 | of any incident. 61 | 62 | ## Enforcement Guidelines 63 | 64 | Community leaders will follow these Community Impact Guidelines in determining 65 | the consequences for any action they deem in violation of this Code of Conduct: 66 | 67 | ### 1. Correction 68 | 69 | **Community Impact**: Use of inappropriate language or other behavior deemed 70 | unprofessional or unwelcome in the community. 71 | 72 | **Consequence**: A private, written warning from community leaders, providing 73 | clarity around the nature of the violation and an explanation of why the 74 | behavior was inappropriate. A public apology may be requested. 75 | 76 | ### 2. Warning 77 | 78 | **Community Impact**: A violation through a single incident or series 79 | of actions. 80 | 81 | **Consequence**: A warning with consequences for continued behavior. No 82 | interaction with the people involved, including unsolicited interaction with 83 | those enforcing the Code of Conduct, for a specified period of time. This 84 | includes avoiding interactions in community spaces as well as external channels 85 | like social media. Violating these terms may lead to a temporary or 86 | permanent ban. 87 | 88 | ### 3. Temporary Ban 89 | 90 | **Community Impact**: A serious violation of community standards, including 91 | sustained inappropriate behavior. 92 | 93 | **Consequence**: A temporary ban from any sort of interaction or public 94 | communication with the community for a specified period of time. No public or 95 | private interaction with the people involved, including unsolicited interaction 96 | with those enforcing the Code of Conduct, is allowed during this period. 97 | Violating these terms may lead to a permanent ban. 98 | 99 | ### 4. Permanent Ban 100 | 101 | **Community Impact**: Demonstrating a pattern of violation of community 102 | standards, including sustained inappropriate behavior, harassment of an 103 | individual, or aggression toward or disparagement of classes of individuals. 104 | 105 | **Consequence**: A permanent ban from any sort of public interaction within 106 | the community. 107 | 108 | ## Attribution 109 | 110 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 111 | version 2.1, available at 112 | [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. 113 | 114 | Community Impact Guidelines were inspired by [Mozilla's code of conduct 115 | enforcement ladder](https://github.com/mozilla/diversity). 116 | 117 | For answers to common questions about this code of conduct, see the FAQ at 118 | [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at 119 | [https://www.contributor-covenant.org/translations][translations]. 120 | 121 | [homepage]: https://www.contributor-covenant.org 122 | [v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html 123 | [FAQ]: https://www.contributor-covenant.org/faq 124 | [translations]: https://www.contributor-covenant.org/translations 125 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # 💥 How to Contribute 2 | 3 | [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/EddieHubCommunity/) [![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.png?v=103)](https://github.com/EddieHubCommunity/) 4 | 5 | - Take a look at the existing [Issues](https://github.com/EddieHubCommunity/EventCalendar/issues) or [create a new issue](https://github.com/EddieHubCommunity/EventCalendar/issues/new/choose)! 6 | - [Fork the Repo](https://github.com/EddieHubCommunity/EventCalendar/fork), create a branch for any issue that you are working on and commit your work. 7 | - Create a **[Pull Request](https://github.com/EddieHubCommunity/EventCalendar/compare)** (*PR*), which will be promptly reviewed and given suggestions for improvements by the community. 8 | - Add screenshots or screen captures to your Pull Request to help us understand the effects of the changes that are included in your commits. 9 | 10 | 11 | ## ⭐ HOW TO MAKE A PULL REQUEST: 12 | 13 | **1.** Start by making a fork the [**EventCalendar**](https://github.com/EddieHubCommunity/EventCalendar) repository. Click on the symbol at the top right corner. 14 | 15 | **2.** Clone your new fork of the repository: 16 | 17 | ```bash 18 | git clone https://github.com//EventCalendar 19 | ``` 20 | 21 | **3.** Set upstream command: 22 | ```bash 23 | git remote add upstream https://github.com/EddieHubCommunity/EventCalendar.git 24 | ``` 25 | 26 | **4.** Navigate to the new project directory: 27 | 28 | ```bash 29 | cd EventCalendar 30 | ``` 31 | 32 | **5.** Create a new branch: 33 | ```bash 34 | git checkout -b YourBranchName 35 | ``` 36 | 37 | **6.** Sync your fork or local repository with the origin repository: 38 | - In your forked repository click on "Fetch upstream" 39 | - Click "Fetch and merge". 40 | 41 | 42 | ### Alternatively, Git CLI way to Sync forked repository with origin repository: 43 | ```bash 44 | git fetch upstream 45 | ``` 46 | ```bash 47 | git merge upstream/main 48 | ``` 49 | ### [Github Docs](https://docs.github.com/en/github/collaborating-with-pull-requests/addressing-merge-conflicts/resolving-a-merge-conflict-on-github) for Syncing 50 | 51 | 52 | **7.** Make your changes to the source code. 53 | 54 | **8.** Stage your changes and commit: 55 | 56 | ```bash 57 | git add public 58 | ``` 59 | 60 | ```bash 61 | git commit -m "" 62 | ``` 63 | 64 | **9.** Push your local commits to the remote repository: 65 | 66 | ```bash 67 | git push origin YourBranchName 68 | ``` 69 | 70 | **10.** Create a [Pull Request](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request)! 71 | 72 | **11.** **Congratulations!** You've made your first contribution to [**EventCalendar**](https://github.com/EddieHubCommunity/EventCalendar/graphs/contributors)! 🙌🏼 73 | 74 | ***:trophy: After this, the maintainers will review the PR and will merge it if it helps move the EventCalendar project forward. Otherwise, it will be given constructive feedback and suggestions for the changes needed to add the PR to the codebase.*** 75 | 76 | ## :memo: Style Guide for Git Commit Messages 77 | 78 | **How you can add more value to your contribution logs:** 79 | 80 | - Use the present tense. (Example: "Add feature" instead of "Added feature") 81 | - Use the imperative mood. (Example: "Move item to...", instead of "Moves item to...") 82 | - Limit the first line (also called the Subject Line) to *50 characters or less*. 83 | - Capitalize the Subject Line. 84 | - Separate subject from body with a blank line. 85 | - Do not end the subject line with a period. 86 | - Wrap the body at *72 characters*. 87 | - Use the body to explain the *what*, *why*, *vs*, and *how*. 88 | - Reference [Issues](https://github.com/EddieHubCommunity/EventCalendar/issues) and [Pull Requests](https://github.com/EddieHubCommunity/EventCalendar/pulls) liberally after the first line. 89 | 90 | 91 | ## 💥 Issues 92 | For major changes, you are welcome to [open an issue](https://github.com/EddieHubCommunity/EventCalendar/issues/new/choose) about what you would like to contribute. Enhancements are always encouraged and appreciated. 93 | 94 | 95 | ## 🥇 All the best! 96 | 97 |

98 | 99 | [![built with love](https://forthebadge.com/images/badges/built-with-love.svg)](https://github.com/EddieHubCommunity/EventCalendar/) 100 | 101 |

102 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:15 as development 2 | LABEL org.opencontainers.image.source https://github.com/eddiehubcommunity/EventCalendar 3 | 4 | WORKDIR /usr/src/app 5 | 6 | COPY package*.json ./ 7 | RUN npm install --ignore-scripts 8 | COPY . . 9 | 10 | RUN sed -i 's/0.0.0/'`npm -s run env echo '$npm_package_version'`'/g' public/app.json 11 | RUN npm run build 12 | 13 | FROM node:15 as production 14 | LABEL org.opencontainers.image.source https://github.com/eddiehubcommunity/EventCalendar 15 | 16 | ARG NODE_ENV=production 17 | 18 | WORKDIR /usr/src/app 19 | 20 | COPY package*.json ./ 21 | RUN npm install --production --ignore-scripts 22 | COPY . . 23 | COPY --from=development /usr/src/app/build ./build 24 | CMD ["npm", "run", "start:prod"] 25 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 EddieHub 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/EddieHubCommunity/EventCalendar) 2 | # Community event calendar 3 | 4 | The goal of this project is to list all our awesome community virtual events like TwitterSpaces, Live Streams all in one place so we do not miss any events and also do not have clashes! 5 | 6 | ![screenshot](https://user-images.githubusercontent.com/624760/140585091-e114d767-895e-45ba-9a37-58ad4a192374.png) 7 | 8 | ## Adding your event 9 | 10 | To add your virtual event to the calendar, please create a `json` file in the `public/data` directory. 11 | 12 | Here is an example file... 13 | 14 | **TYPES** currently supports `youtube`, `twitter`, `discord`. 15 | **TIMEZONES** make sure you add the timezone to the `start` and `end` fields., then the browser will adjust the time to the timezone of the event. 16 | 17 | ```ts 18 | { 19 | "type": "youtube", // youtube, twitter, discord 20 | "author": { 21 | "name": "Eddie Jaoude", 22 | "url": "http://github.com/eddiejaoude" 23 | }, 24 | "url": "http://twitter.com/eddiejaoude", 25 | "title": "Awesome LIVE stream on stuff", 26 | "start": "2021-11-20T15:00:00+00:00", 27 | "end": "2021-11-20T16:00:00+00:00", 28 | "description": "We will use ReactJS to build a community calendar for all our virtual geek out sessions" 29 | } 30 | ``` 31 | 32 | ## QuickStart 33 | 34 | You can use the **Gitpod** badge or to do it manually... 35 | 36 | 1. Fork this repository 37 | 38 | 2. Clone your fork 39 | ```bash 40 | git clone https://github.com//EventCalendar 41 | ``` 42 | 43 | 3. Add the original repo as an upstream to your fork with 44 | ```bash 45 | git remote add upstream https://github.com/EddieHubCommunity/EventCalendar.git 46 | ``` 47 | 48 | 4. Run `npm ci` to install dependencies 49 | 50 | 5. Run `npm run generate` to generate the calendar list data (do not change this file, it will be ignored by git) 51 | 52 | 6. Run `npm start` to start the server 53 | 54 | 7. Visit http://localhost:3000 55 | 56 | ## 👨‍💻 Contributing 57 | 58 | - Contributions are what makes the open source community such an amazing place to learn, inspire, and create. 59 | - Any contributions you make are **greatly appreciated**. 60 | - Check out our [contribution guidelines](https://github.com/EddieHubCommunity/EventCalendar/blob/main/CONTRIBUTING.md) for more information. 61 | 62 | ## 🛡️ License 63 | 64 | This project is licensed under the MIT License - see the [`LICENSE`](LICENSE) file for details. 65 | 66 | ## 💪 Thanks to the all Contributors 67 | 68 | Thanks a lot for spending your time helping EventCalendar grow. Thanks a lot! Keep rocking 🍻 69 | 70 | [![Contributors](https://contrib.rocks/image?repo=EddieHubCommunity/EventCalendar)](https://github.com/EddieHubCommunity/EventCalendar/graphs/contributors) 71 | -------------------------------------------------------------------------------- /generate.js: -------------------------------------------------------------------------------- 1 | const path = require("path"); 2 | const fs = require("fs"); 3 | 4 | // load json files 5 | const readDirectoryPath = path.join(__dirname, "public", "data"); 6 | const files = fs.readdirSync(readDirectoryPath); 7 | const events = files.map((file) => 8 | JSON.parse( 9 | fs.readFileSync(`${path.join(__dirname, "public", "data", file)}`, "utf8") 10 | ) 11 | ); 12 | 13 | // generate list file 14 | const writeDirectoryPath = path.join(__dirname, "public", "events.json"); 15 | fs.writeFileSync(writeDirectoryPath, JSON.stringify(events)); 16 | -------------------------------------------------------------------------------- /kubernetes/deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: eddiehub-eventcalendar-deployment 5 | labels: 6 | app: eddiehub-eventcalendar 7 | spec: 8 | replicas: 2 9 | selector: 10 | matchLabels: 11 | app: eddiehub-eventcalendar 12 | template: 13 | metadata: 14 | labels: 15 | app: eddiehub-eventcalendar 16 | spec: 17 | containers: 18 | - name: api 19 | image: ghcr.io/eddiehubcommunity/eventcalendar:latest 20 | ports: 21 | - containerPort: 3000 22 | -------------------------------------------------------------------------------- /kubernetes/ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: eddiehub-eventcalendar-ingress 5 | annotations: 6 | nginx.ingress.kubernetes.io/rewrite-target: / 7 | spec: 8 | rules: 9 | - host: "eventcalendar.eddiehub.org" 10 | http: 11 | paths: 12 | - path: / 13 | pathType: Prefix 14 | backend: 15 | service: 16 | name: eddiehub-eventcalendar-service 17 | port: 18 | number: 3000 19 | -------------------------------------------------------------------------------- /kubernetes/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: eddiehub-eventcalendar-service 5 | spec: 6 | selector: 7 | app: eddiehub-eventcalendar 8 | ports: 9 | - protocol: TCP 10 | port: 3000 11 | targetPort: 3000 12 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "event-calendar", 3 | "version": "0.7.7", 4 | "private": true, 5 | "dependencies": { 6 | "@fullcalendar/core": "^5.10.1", 7 | "@fullcalendar/daygrid": "^5.10.1", 8 | "@fullcalendar/interaction": "^5.10.1", 9 | "@fullcalendar/react": "^5.10.1", 10 | "@fullcalendar/timegrid": "^5.10.1", 11 | "@testing-library/jest-dom": "^5.15.0", 12 | "@testing-library/react": "^11.2.7", 13 | "@testing-library/user-event": "^12.8.3", 14 | "primeflex": "^2.0.0", 15 | "primeicons": "^5.0.0", 16 | "primereact": "^7.0.0-rc.2", 17 | "react": "^17.0.2", 18 | "react-dom": "^17.0.2", 19 | "react-scripts": "4.0.3", 20 | "react-transition-group": "^4.4.2", 21 | "serve": "^13.0.2", 22 | "web-vitals": "^1.1.2" 23 | }, 24 | "scripts": { 25 | "generate": "node generate.js", 26 | "prestart": "node generate.js", 27 | "start": "react-scripts start", 28 | "build": "npm run generate && react-scripts build", 29 | "start:prod": "serve -s build", 30 | "test": "react-scripts test", 31 | "eject": "react-scripts eject" 32 | }, 33 | "eslintConfig": { 34 | "extends": [ 35 | "react-app", 36 | "react-app/jest" 37 | ] 38 | }, 39 | "browserslist": { 40 | "production": [ 41 | ">0.2%", 42 | "not dead", 43 | "not op_mini all" 44 | ], 45 | "development": [ 46 | "last 1 chrome version", 47 | "last 1 firefox version", 48 | "last 1 safari version" 49 | ] 50 | } 51 | } -------------------------------------------------------------------------------- /public/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.0.0" 3 | } 4 | -------------------------------------------------------------------------------- /public/data/anja-twitter-space-19-12-21.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "twitter", 3 | "author": { 4 | "name": "Anja", 5 | "url": "https://twitter.com/Lumarycodes" 6 | }, 7 | "url": "https://twitter.com/Lumarycodes/status/1472117629032837121", 8 | "title": "Want to switch careers into tech?", 9 | "start": "2021-12-19T15:00:00+00:00", 10 | "end": "2021-12-19T16:00:00+00:00", 11 | "description": "Want to switch careers into tech?" 12 | } 13 | -------------------------------------------------------------------------------- /public/data/eddiehub-community-call-27-11-21.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "discord", 3 | "author": { 4 | "name": "EddieHubCommunity", 5 | "url": "http://eddiehub.org" 6 | }, 7 | "url": "http://discord.eddiehub.org", 8 | "title": "An inclusive and safe space where people of all technical abilities are encouraged to join.", 9 | "start": "2021-11-20T15:06:30+05:30", 10 | "end": "2021-11-20T16:07:30+05:30", 11 | "description": "Eddie and his Mods host a multi community audio call on Discord. Everyone is welcome to join." 12 | } 13 | -------------------------------------------------------------------------------- /public/data/eddiehub-public-speaking-call-20-11-2021.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "discord", 3 | "author": { 4 | "name": "EddieHubCommunity", 5 | "url": "http://eddiehub.org" 6 | }, 7 | "url": "http://discord.eddiehub.org", 8 | "title": "Practice, share and learn public speaking skills in a safe and welcoming environment.", 9 | "start": "2021-11-20T15:06:30+05:30", 10 | "end": "2021-11-20T16:07:30+05:30", 11 | "description": "Practice, share and learn public speaking skills in a safe and welcoming environment. Join this inclusive audio only call in our Discord, organised and managed by community members" 12 | } 13 | -------------------------------------------------------------------------------- /public/data/eddiejaoude-discord-centered-20-11-2021.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "discord", 3 | "author": { 4 | "name": "Eddie Jaoude", 5 | "url": "http://twitter.com/eddiejaoude" 6 | }, 7 | "url": "https://www.eddiehub.org/centered-signup", 8 | "title": "FOCUS, GET THINGS DONE & HAVE A BREAK WITH EddieHub + Centered", 9 | "start": "2021-11-20T15:00:00+00:00", 10 | "end": "2021-11-20T16:00:00+00:00", 11 | "description": "Do you keep getting distracted and not finishing your tasks? Maybe you are a project maintainer and need to get through your GitHub notifications, you might be freelancing for a client or you might have course work or exam preparation to do. Let's get totally absorbed in our tasks together and be more productive, with the help of Centered! When it is time for a break, we will jump on an exclusive Discord audio call and chat." 12 | } 13 | -------------------------------------------------------------------------------- /public/data/eddiejaoude-youtube-live-17-12-21.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "youtube", 3 | "author": { 4 | "name": "Eddie Jaoude", 5 | "url": "http://eddiejaoude.io" 6 | }, 7 | "url": "https://www.youtube.com/watch?v=KU3aLQ_3ok0", 8 | "title": "Refactoring Markdown to Fullstack NextJS app using Gitpod", 9 | "start": "2021-12-17T16:00:00+00:00", 10 | "end": "2021-12-17T18:00:00+00:00", 11 | "description": "Refactoring Markdown to Fullstack NextJS app using Gitpod" 12 | } 13 | -------------------------------------------------------------------------------- /public/data/francesco-live-20-11-2021.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "youtube", 3 | "author": { 4 | "name": "Francesco Ciulla", 5 | "url": "http://twitter.com/FrancescoCiull4" 6 | }, 7 | "url": "https://www.youtube.com/watch?v=az-ILjdFCe8", 8 | "title": "4C Website - Let's code it", 9 | "start": "2021-11-20T15:00:00+08:00", 10 | "end": "2021-11-20T16:00:00+08:00", 11 | "description": "The second episode of me coding the 4C Website live" 12 | } 13 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | EddieHub Event Calendar 14 | 15 | 16 | 17 |
18 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /src/App.css: -------------------------------------------------------------------------------- 1 | .pointer { 2 | cursor: pointer; 3 | } 4 | 5 | .list-item { 6 | display: flex; 7 | align-items: center; 8 | padding: 0.5rem; 9 | width: 100%; 10 | } 11 | 12 | .list-item .list-detail { 13 | flex: 1 1 0; 14 | } 15 | 16 | .list-item .list-action { 17 | display: flex; 18 | flex-direction: column; 19 | align-items: flex-end; 20 | } 21 | 22 | .list-item .list-category-icon { 23 | vertical-align: middle; 24 | margin-right: 0.5rem; 25 | } 26 | 27 | .list-item .list-category { 28 | vertical-align: middle; 29 | line-height: 1; 30 | } 31 | -------------------------------------------------------------------------------- /src/App.js: -------------------------------------------------------------------------------- 1 | import "./App.css"; 2 | 3 | import React, { useState, useEffect } from "react"; 4 | 5 | import "primereact/resources/themes/saga-blue/theme.css"; 6 | import "primereact/resources/primereact.min.css"; 7 | import "primeicons/primeicons.css"; 8 | import "primeflex/primeflex.css"; 9 | import { DataView } from "primereact/dataview"; 10 | import { Menubar } from "primereact/menubar"; 11 | 12 | // eslint-disable-next-line 13 | import { Calendar } from "@fullcalendar/core"; 14 | import { FullCalendar } from "primereact/fullcalendar"; 15 | import dayGridPlugin from "@fullcalendar/daygrid"; 16 | import Footer from "./Components/Footer"; 17 | 18 | function App() { 19 | const fullCalendarOptions = { 20 | plugins: [dayGridPlugin], 21 | defaultView: "dayGridMonth", 22 | }; 23 | 24 | const colors = { 25 | twitter: { 26 | background: "blue", 27 | color: "white", 28 | }, 29 | youtube: { 30 | background: "red", 31 | color: "white", 32 | }, 33 | discord: { 34 | background: "#5865F2", 35 | color: "white", 36 | }, 37 | }; 38 | 39 | const [display, setDisplay] = useState("calendar"); 40 | const [events, setEvents] = useState([]); 41 | const navBar = [ 42 | // { 43 | // label: "Grid", 44 | // icon: "pi pi-fw pi-th-large", 45 | // command: () => { 46 | // setDisplay("grid"); 47 | // }, 48 | // }, 49 | { 50 | label: "Calendar", 51 | icon: "pi pi-fw pi-calendar", 52 | command: () => { 53 | setDisplay("calendar"); 54 | }, 55 | }, 56 | { 57 | label: "List", 58 | icon: "pi pi-fw pi-list", 59 | command: () => { 60 | setDisplay("list"); 61 | }, 62 | }, 63 | ]; 64 | 65 | useEffect(() => { 66 | fetch("/events.json") 67 | .then((response) => response.json()) 68 | .then((data) => 69 | data.sort((a, b) => new Date(a.start) - new Date(b.start)) 70 | ) 71 | .then((data) => setEvents(data)); 72 | }, []); 73 | 74 | const renderListItem = (data) => { 75 | return ( 76 |
77 |
78 | (window.location = data.url)} 86 | > 87 |
88 |
89 |
(window.location = data.url)} 92 | > 93 | {data.title} 94 |
95 | {data.description} 96 |
97 |
98 | {new Date(data.start).toDateString()} 99 | {new Date(data.start).toTimeString()} 100 | 101 | 102 | 108 | {data.type} 109 | 110 | 111 |
112 |
113 | ); 114 | }; 115 | 116 | const renderGridItem = (data) => { 117 | return
Not implemented yet
; 118 | }; 119 | 120 | return ( 121 | <> 122 |
123 | 127 | 128 | 129 | } 130 | /> 131 |
132 | 133 |
134 | {display !== "calendar" && ( 135 | new Date(item.start) > new Date())} 137 | layout={display} 138 | itemTemplate={display === "list" ? renderListItem : renderGridItem} 139 | paginator 140 | rows={10} 141 | /> 142 | )} 143 | 144 | {display === "calendar" && ( 145 | 150 | )} 151 |
152 | 153 |