├── .gitignore ├── img ├── .DS_Store ├── shapes │ ├── dots.png │ ├── shape-i.png │ ├── Rectangle.png │ ├── circle-1.png │ ├── circle-2.png │ ├── circle-3.png │ ├── circle-4.png │ ├── tringle-1.png │ ├── tringle-2.png │ └── tringle-3.png ├── icons │ ├── favicon.ico │ ├── arrow-icon.png │ ├── facebook-logo.png │ ├── github-logo.png │ ├── linkedIn-logo.png │ ├── twitter-logo.png │ └── instagram-logo.png ├── logos │ ├── RDS-logo.png │ ├── list-icon.png │ ├── RDS-logo-2x.png │ └── logo-header.png ├── index-page │ ├── welcome-image.png │ └── mobile-marketing.png └── discord-page │ ├── bg-top-inner.png │ └── discord-left.png ├── .prettierrc.json ├── js ├── constants.js ├── darkmode.js ├── login.js ├── navbar.js ├── faq.js └── faq.test.js ├── .github └── workflows │ └── check_code_format.yml ├── package.json ├── css ├── coc.css ├── navbar-linked-pages.css ├── faq.css ├── navbar.css ├── discord.css └── index.css ├── README.md ├── code-of-conduct.html ├── jest.config.js ├── CONTRIBUTING.md ├── discord.html ├── faq.html └── index.html /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | coverage/ -------------------------------------------------------------------------------- /img/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/.DS_Store -------------------------------------------------------------------------------- /img/shapes/dots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/shapes/dots.png -------------------------------------------------------------------------------- /img/icons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/icons/favicon.ico -------------------------------------------------------------------------------- /img/logos/RDS-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/logos/RDS-logo.png -------------------------------------------------------------------------------- /img/shapes/shape-i.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/shapes/shape-i.png -------------------------------------------------------------------------------- /img/icons/arrow-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/icons/arrow-icon.png -------------------------------------------------------------------------------- /img/logos/list-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/logos/list-icon.png -------------------------------------------------------------------------------- /img/shapes/Rectangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/shapes/Rectangle.png -------------------------------------------------------------------------------- /img/shapes/circle-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/shapes/circle-1.png -------------------------------------------------------------------------------- /img/shapes/circle-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/shapes/circle-2.png -------------------------------------------------------------------------------- /img/shapes/circle-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/shapes/circle-3.png -------------------------------------------------------------------------------- /img/shapes/circle-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/shapes/circle-4.png -------------------------------------------------------------------------------- /img/shapes/tringle-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/shapes/tringle-1.png -------------------------------------------------------------------------------- /img/shapes/tringle-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/shapes/tringle-2.png -------------------------------------------------------------------------------- /img/shapes/tringle-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/shapes/tringle-3.png -------------------------------------------------------------------------------- /img/icons/facebook-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/icons/facebook-logo.png -------------------------------------------------------------------------------- /img/icons/github-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/icons/github-logo.png -------------------------------------------------------------------------------- /img/icons/linkedIn-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/icons/linkedIn-logo.png -------------------------------------------------------------------------------- /img/icons/twitter-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/icons/twitter-logo.png -------------------------------------------------------------------------------- /img/logos/RDS-logo-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/logos/RDS-logo-2x.png -------------------------------------------------------------------------------- /img/logos/logo-header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/logos/logo-header.png -------------------------------------------------------------------------------- /img/icons/instagram-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/icons/instagram-logo.png -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "all", 3 | "tabWidth": 2, 4 | "semi": true, 5 | "singleQuote": true 6 | } 7 | -------------------------------------------------------------------------------- /img/index-page/welcome-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/index-page/welcome-image.png -------------------------------------------------------------------------------- /img/discord-page/bg-top-inner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/discord-page/bg-top-inner.png -------------------------------------------------------------------------------- /img/discord-page/discord-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/discord-page/discord-left.png -------------------------------------------------------------------------------- /img/index-page/mobile-marketing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RealDevSquad/website-welcome/HEAD/img/index-page/mobile-marketing.png -------------------------------------------------------------------------------- /js/constants.js: -------------------------------------------------------------------------------- 1 | const API_BASE_URL = 'http://localhost:3000'; 2 | const MY_BASE_URL = 'https://my.realdevsquad.com'; 3 | const MAIN_SITE = 'https://www.realdevsquad.com'; 4 | -------------------------------------------------------------------------------- /.github/workflows/check_code_format.yml: -------------------------------------------------------------------------------- 1 | # This workflow will run the npm run check script to check if the formatting of the code is correct or not. 2 | name: Code format check with Prettier 3 | on: 4 | push: 5 | branches: 6 | - '**' 7 | 8 | pull_request: 9 | branches: 10 | - '**' 11 | 12 | jobs: 13 | build: 14 | runs-on: ubuntu-latest 15 | 16 | strategy: 17 | matrix: 18 | node-version: [14.x] 19 | 20 | steps: 21 | - uses: actions/checkout@v2 22 | 23 | - name: Use Node.js ${{ matrix.node-version }} 24 | uses: actions/setup-node@v1 25 | with: 26 | node-version: ${{ matrix.node-version }} 27 | 28 | - run: npm install 29 | 30 | - name: Running the npm run check script 31 | run: npm run check 32 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "website-welcome", 3 | "version": "1.0.0", 4 | "description": "Welcome website of Real Dev Squad", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "cross-env NODE_OPTIONS=--experimental-vm-modules jest", 8 | "check": "prettier --check .", 9 | "fix": "prettier --write .", 10 | "tests:unit": "jest --config=jest.config.js", 11 | "tests:component": "jest --config=tests/jest.config.js" 12 | }, 13 | "type": "module", 14 | "keywords": [], 15 | "author": "", 16 | "license": "ISC", 17 | "devDependencies": { 18 | "jest": "^29.3.1", 19 | "jest-environment-jsdom": "^29.3.1", 20 | "pre-commit": "^1.2.2", 21 | "prettier": "2.2.1" 22 | }, 23 | "pre-commit": [ 24 | "check" 25 | ], 26 | "dependencies": { 27 | "cross-env": "^7.0.3" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /js/darkmode.js: -------------------------------------------------------------------------------- 1 | document.addEventListener('DOMContentLoaded', () => { 2 | if (getCookie('theme') === 'light') { 3 | setCookie('theme', 'light', 30); 4 | document.body.classList.remove('dark-theme'); 5 | } else if (getCookie('theme') === 'dark') { 6 | setCookie('theme', 'dark', 30); 7 | document.body.classList.add('dark-theme'); 8 | } else { 9 | setCookie('theme', 'light', 30); 10 | } 11 | }); 12 | 13 | function setCookie(name, value, days = 30) { 14 | const domain = '.realdevsquad.com'; 15 | const date = new Date(); 16 | date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000); 17 | const expires = date.toUTCString(); 18 | document.cookie = `${name}=${value}; expires=${expires}; domain=${domain}; path=/`; 19 | } 20 | 21 | function getCookie(name) { 22 | const cookieName = name + '='; 23 | const splitCookie = document.cookie.split(';'); 24 | for (let i = 0; i < splitCookie.length; i++) { 25 | var c = splitCookie[i]; 26 | while (c.charAt(0) == ' ') c = c.substring(1, c.length); 27 | if (c.indexOf(cookieName) == 0) 28 | return c.substring(cookieName.length, c.length); 29 | } 30 | return null; 31 | } 32 | -------------------------------------------------------------------------------- /css/coc.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --color-bg: #fff; 3 | --color-text: #000; 4 | --color-bg-card: #fff; 5 | --color-links: #1d1283; 6 | --color-events: #e30162; 7 | } 8 | 9 | .dark-theme { 10 | --color-bg: #1c1b22; 11 | --color-text: #e1e1ec; 12 | --color-bg-card: #312f3b; 13 | --color-links: #0080ff; 14 | --color-events: #ff0090; 15 | } 16 | 17 | * { 18 | margin: 0; 19 | padding: 0; 20 | box-sizing: border-box; 21 | } 22 | 23 | body { 24 | font: 16px 'Roboto', sans-serif; 25 | background-color: var(--color-bg); 26 | } 27 | 28 | main { 29 | display: flex; 30 | justify-content: center; 31 | padding: 20px; 32 | margin: 20px; 33 | } 34 | 35 | .dropdown { 36 | top: 56px; 37 | } 38 | main article { 39 | max-width: 750px; 40 | } 41 | 42 | .welcome-title { 43 | text-align: center; 44 | font-size: 2rem; 45 | color: var(--color-text); 46 | } 47 | 48 | .coc-header { 49 | text-align: center; 50 | font-weight: 700; 51 | padding: 20px; 52 | color: var(--color-text); 53 | } 54 | 55 | .coc-list { 56 | text-align: left; 57 | color: var(--color-text); 58 | } 59 | 60 | a { 61 | text-decoration: none; 62 | color: var(--color-links); 63 | } 64 | 65 | .coc-list-elements { 66 | margin: 20px 0; 67 | } 68 | 69 | footer { 70 | position: relative; 71 | margin-top: 40px; 72 | bottom: 0; 73 | width: 100%; 74 | padding: 15px; 75 | text-align: center; 76 | color: var(--color-text); 77 | } 78 | 79 | @media only screen and (max-width: 600px) { 80 | .coc-list-elements { 81 | margin-left: 20px; 82 | margin-right: 15px; 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Better Uptime Badge](https://betteruptime.com/status-badges/v1/monitor/5hux.svg)](https://betteruptime.com/?utm_source=status_badge) 2 | 3 | # Welcome Site 4 | 5 | https://welcome.realdevsquad.com/ 6 | 7 | # Want to contribute or Learn how to? 8 | 9 | Read about our Contributing Process: [Here](CONTRIBUTING.md) 10 | 11 | # Frequently Asked Questions 12 | 13 | https://welcome.realdevsquad.com/faq 14 | 15 | # Help with Discord 16 | 17 | https://welcome.realdevsquad.com/discord 18 | 19 | # Code of conduct at RDS 20 | 21 | https://welcome.realdevsquad.com/code-of-conduct.html 22 | 23 | # Running the project 24 | 25 | - Kindly refer this before you start : https://github.com/Real-Dev-Squad/website-welcome/blob/develop/CONTRIBUTING.md 26 | 27 | - Run `npm install` after opening the repository in your editor. This will install all the necessary packages for the project which are mentioned in the `package.json` file of the project. 28 | 29 | # Scripts used in project 30 | 31 | - `npm run check` checks the formatting of all the files in the project. This script runs in a pre-commit hook. It will warn about the improper formatting present in the file. 32 | - `npm run fix` can be run for fixing the formatting before commiting your changes or to solve the formatting errors one may get while commiting the changes. 33 | 34 | #### Note ⚠️: Please make sure to run `npm run fix` before committing your files. Otherwise if there are any formatting issues in your code, GitHub checks will fail on your PR (pull request). You will then have to run the `fix` script to fix those issues and push the formatted code again and now the checks should pass. 35 | 36 | ### Note: If you get CORS error for API calls during development, please consider reading [this](https://github.com/Real-Dev-Squad/website-code-docs/tree/main/docs/dev/https-dev-url-cors) documentation. 37 | -------------------------------------------------------------------------------- /js/login.js: -------------------------------------------------------------------------------- 1 | const setUserGreeting = (username, firstName, userProfilePicture) => { 2 | if (username) { 3 | const userLoginEl = document.querySelectorAll('.btn-login'); 4 | 5 | const greetingEl = document.querySelectorAll('.user-greet'); 6 | const msgGreetMsgEl = document.querySelectorAll('.user-greet-msg'); 7 | const userImgEl = document.querySelectorAll('.user-profile-pic'); 8 | 9 | const greetMsg = `Hello, ${firstName}!`; 10 | msgGreetMsgEl.forEach((element) => { 11 | element.innerText = greetMsg; 12 | }); 13 | 14 | const userImgURL = userProfilePicture; 15 | userImgEl.forEach((element) => { 16 | element.src = userImgURL; 17 | }); 18 | 19 | greetingEl.forEach((element) => { 20 | element.style.display = 'block'; 21 | }); 22 | userLoginEl.forEach((element) => { 23 | element.style.display = 'none'; 24 | }); 25 | } 26 | }; 27 | 28 | const showSignInButton = () => { 29 | const loginButtons = document.querySelectorAll('.btn-login-text'); 30 | loginButtons.forEach((element) => { 31 | element.classList.remove('hidden'); 32 | }); 33 | }; 34 | const hideSkeleton = () => { 35 | const skeletonHolder = document.querySelector('.skeleton-holder'); 36 | skeletonHolder.style.display = 'none'; 37 | }; 38 | 39 | const fetchData = () => { 40 | fetch('https://api.realdevsquad.com/users?profile=true', { 41 | headers: { 'content-type': 'application/json' }, 42 | credentials: 'include', 43 | }) 44 | .then((res) => res.json()) 45 | .then((res) => { 46 | const { username, first_name, picture } = res; 47 | if (res.error) { 48 | hideSkeleton(); 49 | showSignInButton(); 50 | throw new Error(res.error); 51 | } 52 | if (res.incompleteUserDetails) { 53 | return window.location.replace('https://my.realdevsquad.com/signup'); 54 | } 55 | setUserGreeting(username, first_name, picture.url); 56 | }) 57 | .catch((error) => { 58 | hideSkeleton(); 59 | showSignInButton(); 60 | console.error(error); 61 | }); 62 | }; 63 | 64 | window.addEventListener('DOMContentLoaded', fetchData); 65 | -------------------------------------------------------------------------------- /js/navbar.js: -------------------------------------------------------------------------------- 1 | const hamburger = document.querySelector('.hamburger'); 2 | const navMenu = document.querySelector('.nav-menu'); 3 | 4 | window.addEventListener('DOMContentLoaded', (event) => { 5 | const checkURL = window.location.href; 6 | const productionURL = 'https://welcome.realdevsquad.com/'; 7 | let userLoginEl = document.getElementById('user-login'); 8 | const clientId = 9 | checkURL === productionURL 10 | ? '23c78f66ab7964e5ef97' 11 | : '8b97fd58a86f1d06b0e2'; 12 | userLoginEl.href = `https://github.com/login/oauth/authorize?client_id=${clientId}&state=${checkURL}`; 13 | }); 14 | 15 | hamburger.addEventListener('click', () => { 16 | hamburger.classList.toggle('active'); 17 | navMenu.classList.toggle('active'); 18 | }); 19 | 20 | const signout = () => { 21 | fetch(`${API_BASE_URL}/auth/signout`, { 22 | method: 'GET', 23 | credentials: 'include', 24 | }).then(() => { 25 | location.reload(); 26 | }); 27 | }; 28 | 29 | document.getElementById('signout-option').addEventListener('click', () => { 30 | signout(); 31 | }); 32 | 33 | const myStatusButton = document.getElementById('my-status'); 34 | myStatusButton.addEventListener('click', () => { 35 | window.location.href = MY_BASE_URL; 36 | }); 37 | 38 | const myProfileButton = document.getElementById('my-profile'); 39 | myProfileButton.addEventListener('click', () => { 40 | window.location.href = `${MY_BASE_URL}/profile`; 41 | }); 42 | 43 | const myTasksButton = document.getElementById('my-tasks'); 44 | myTasksButton.addEventListener('click', () => { 45 | window.location.href = `${MY_BASE_URL}/tasks`; 46 | }); 47 | 48 | const myIdentityButton = document.getElementById('my-identity'); 49 | myIdentityButton.addEventListener('click', () => { 50 | window.location.href = `${MY_BASE_URL}/identity`; 51 | }); 52 | 53 | const mainSiteButton = document.getElementById('main-site'); 54 | mainSiteButton.addEventListener('click', () => { 55 | window.location.href = MAIN_SITE; 56 | }); 57 | 58 | document.querySelectorAll('.user-greet').forEach((greet) => { 59 | greet.addEventListener('click', () => { 60 | document.querySelector('.dropdown').classList.toggle('hide'); 61 | }); 62 | }); 63 | 64 | const dropdownTrigger = document.querySelectorAll('.user-greet'); 65 | document.addEventListener('click', (event) => { 66 | if ( 67 | dropdownTrigger[0] != event.target.parentElement && 68 | dropdownTrigger[1] != event.target.parentElement && 69 | !document.querySelector('.dropdown').classList.contains('hide') 70 | ) { 71 | document.querySelector('.dropdown').classList.add('hide'); 72 | } 73 | }); 74 | -------------------------------------------------------------------------------- /js/faq.js: -------------------------------------------------------------------------------- 1 | const faqLinks = document.querySelectorAll('.faq_link'); 2 | const currentLocation = window.location.hash; 3 | 4 | // to open accordian by pressing spacebar 5 | window.addEventListener('keydown', (e) => { 6 | const ancTag = document.querySelector( 7 | `a[href="${e?.target?.attributes?.href?.value}"]`, 8 | ); 9 | if (e.code == 'Space' && ancTag) { 10 | e.preventDefault(); 11 | ancTag?.click(); 12 | } 13 | }); 14 | 15 | // for adding tabindex=-1 to other faqlinks so that others faqlinks can't be accessed by tab 16 | const removeFocusForOthers = (target) => { 17 | faqLinks.forEach((faqLink) => { 18 | if (faqLink.getAttribute('href') != target.getAttribute('href')) { 19 | const faqTextSiblingElement = faqLink.nextElementSibling; 20 | const ancTag = faqTextSiblingElement.querySelectorAll(`a`); 21 | ancTag.forEach((element) => { 22 | element.setAttribute('tabindex', '-1'); 23 | }); 24 | } 25 | }); 26 | }; 27 | 28 | faqLinks.forEach((faqLink) => { 29 | const faqTextSiblingElement = faqLink.nextElementSibling; 30 | const faqExpandIcon = faqLink.firstElementChild.lastElementChild; 31 | 32 | faqLink.addEventListener('click', (event) => { 33 | const tabIndexing = faqLink.nextElementSibling.querySelectorAll('a'); 34 | const currentlyActiveFaqLink = document.querySelector('.faq_link.show'); 35 | const currentlyActiveFaqButton = document.querySelector('.faq-btn.show'); 36 | 37 | if (currentlyActiveFaqLink && currentlyActiveFaqLink !== faqLink) { 38 | currentlyActiveFaqLink.classList.toggle('show'); 39 | currentlyActiveFaqButton.classList.toggle('show'); 40 | currentlyActiveFaqLink.nextElementSibling.style.maxHeight = 0; 41 | } 42 | 43 | faqLink.classList.toggle('show'); 44 | faqExpandIcon.classList.toggle('show'); 45 | tabIndexing.forEach((element) => { 46 | const previousTabIndex = element.getAttribute('tabindex'); 47 | element.setAttribute('tabindex', previousTabIndex == '1' ? '-1' : '1'); 48 | }); 49 | 50 | if ( 51 | faqLink.classList.contains('show') && 52 | faqExpandIcon.classList.contains('show') 53 | ) { 54 | faqTextSiblingElement.style.maxHeight = 55 | faqTextSiblingElement.scrollHeight + 'px'; 56 | } else { 57 | faqTextSiblingElement.style.maxHeight = 0; 58 | } 59 | 60 | removeFocusForOthers(faqLink); 61 | }); 62 | 63 | const faqLinkValue = faqLink.hash; 64 | 65 | if (currentLocation === faqLinkValue) { 66 | const ancTag = document.querySelector(`a[href="${faqLinkValue}"]`); 67 | ancTag.click(); 68 | } 69 | }); 70 | 71 | export default removeFocusForOthers; 72 | -------------------------------------------------------------------------------- /js/faq.test.js: -------------------------------------------------------------------------------- 1 | import removeFocusForOthers from './faq'; 2 | import { describe, expect, it, jest } from '@jest/globals'; 3 | 4 | describe('handle keydown event', () => { 5 | let ancTag, event, spy, events; 6 | beforeEach(() => { 7 | ancTag = document.createElement('a'); 8 | spy = jest.spyOn(document, 'querySelector').mockReturnValue(ancTag); 9 | ancTag.setAttribute('href', '/example'); 10 | ancTag.click = jest.fn(); 11 | document.body.appendChild(ancTag); 12 | event = { key: ' ', preventDefault: jest.fn() }; 13 | }); 14 | 15 | afterEach(() => { 16 | spy.mockRestore(); 17 | }); 18 | 19 | it('should not call preventDefault and ancTag.click method when key is not space', () => { 20 | event.key = 'Enter'; 21 | window.addEventListener('keydown', event); 22 | expect(event.preventDefault).not.toHaveBeenCalled(); 23 | }); 24 | }); 25 | 26 | it('removes focus for all elements except the target', () => { 27 | const faqLinks = [ 28 | { 29 | getAttribute: () => 'link', 30 | nextElementSibling: { 31 | querySelectorAll: () => [ 32 | { setAttribute: jest.fn() }, 33 | { setAttribute: jest.fn() }, 34 | ], 35 | }, 36 | }, 37 | ]; 38 | const target = faqLinks[0]; 39 | 40 | removeFocusForOthers(target); 41 | 42 | faqLinks.forEach((faqLink, index) => { 43 | if (index === 0) { 44 | expect( 45 | faqLink.nextElementSibling.querySelectorAll()[0].setAttribute, 46 | ).not.toHaveBeenCalled(); 47 | } 48 | }); 49 | }); 50 | 51 | describe('faqLinks', () => { 52 | let faqLinks, faqExpandIcon, tabIndexing, faqLink; 53 | beforeEach(() => { 54 | document.body.innerHTML = ` 55 |
56 | 59 |
60 |
61 |
62 | `; 63 | faqLinks = document.querySelectorAll('.faq_link'); 64 | tabIndexing = document.querySelectorAll('.tabindex'); 65 | faqLinks = document.querySelectorAll('.faq_link'); 66 | faqExpandIcon = document.querySelector('.faq_expand_icon'); 67 | faqLink = faqLinks[0]; 68 | }); 69 | 70 | it('should toggle the show class on faqLink and faqExpandIcon', () => { 71 | faqLinks.forEach((faqLink) => { 72 | faqLink.classList.toggle('show'); 73 | faqExpandIcon.classList.toggle('show'); 74 | }); 75 | expect(faqLink.classList.contains('show')).toBe(true); 76 | expect(faqExpandIcon.classList.contains('show')).toBe(true); 77 | }); 78 | 79 | it('should toggle tabindex on tabIndexing elements', () => { 80 | faqLinks.forEach((faqLink) => { 81 | tabIndexing.forEach((element) => { 82 | const previousTabIndex = element.getAttribute('tabindex'); 83 | element.setAttribute('tabindex', previousTabIndex == '1' ? '-1' : '1'); 84 | }); 85 | expect(faqLink.classList.contains('tabindex')).toBe(true); 86 | expect(tabIndexing[0].getAttribute('tabindex')).toBe('1'); 87 | }); 88 | }); 89 | }); 90 | -------------------------------------------------------------------------------- /css/navbar-linked-pages.css: -------------------------------------------------------------------------------- 1 | nav { 2 | font-weight: 700; 3 | } 4 | 5 | nav li a { 6 | margin: 10px; 7 | display: block; 8 | border-radius: 0.5rem; 9 | color: #ffffff; 10 | text-align: center; 11 | padding: 19px 16px; 12 | text-decoration: none; 13 | } 14 | 15 | nav li { 16 | float: left; 17 | } 18 | 19 | nav li a:hover { 20 | color: #49a82e; 21 | } 22 | 23 | .nav-menu { 24 | list-style-type: none; 25 | margin: 0; 26 | padding: 0; 27 | overflow: hidden; 28 | background-color: #1d1283; 29 | } 30 | 31 | .nav-logo-li { 32 | padding: 12px 20px; 33 | } 34 | 35 | .nav-logo-li a { 36 | margin: 0px; 37 | padding: 0px; 38 | } 39 | 40 | .nav-login-li { 41 | float: right; 42 | } 43 | 44 | .nav-login-li a { 45 | padding: 12px; 46 | } 47 | 48 | .nav-login, 49 | .home-tab { 50 | display: none; 51 | } 52 | 53 | .btn-login-text { 54 | border-radius: 6px; 55 | padding: 5px; 56 | background-color: #1d1283; 57 | color: white; 58 | cursor: pointer; 59 | border: 2px solid white; 60 | } 61 | 62 | .user-greet { 63 | display: none; 64 | color: #ffffff; 65 | margin: 23px; 66 | } 67 | 68 | .user-greet a { 69 | text-decoration: none; 70 | color: #fff; 71 | padding: 0; 72 | } 73 | 74 | .user-profile-pic { 75 | width: 32px; 76 | height: 32px; 77 | border-radius: 50%; 78 | display: inline; 79 | vertical-align: middle; 80 | } 81 | 82 | .user-greet-msg { 83 | display: inline; 84 | vertical-align: middle; 85 | margin-right: 10px; 86 | } 87 | 88 | .active-tab { 89 | color: #49a82e; 90 | text-decoration: underline; 91 | text-decoration-thickness: 3px; 92 | text-underline-offset: 10px; 93 | } 94 | 95 | .hamburger { 96 | display: none; 97 | } 98 | 99 | .bar { 100 | display: block; 101 | width: 25px; 102 | height: 3px; 103 | margin: 5px auto; 104 | background-color: #fff; 105 | } 106 | 107 | @media screen and (max-width: 970px) { 108 | nav { 109 | background: #1d1283; 110 | } 111 | 112 | .hamburger { 113 | margin: 20px; 114 | display: inline-block; 115 | cursor: pointer; 116 | } 117 | 118 | .nav-menu { 119 | background: white; 120 | display: none; 121 | width: 100%; 122 | padding: 10px 0px; 123 | box-shadow: 0px 10px 15px rgba(0, 0, 0, 0.5); 124 | } 125 | 126 | .nav-menu.active, 127 | .home-tab { 128 | display: block; 129 | } 130 | 131 | nav li a { 132 | padding: 10px 40px; 133 | text-align: left; 134 | color: #1d1283; 135 | text-decoration: none; 136 | display: block; 137 | } 138 | 139 | .nav-login { 140 | display: block; 141 | margin: 20px; 142 | position: absolute; 143 | top: 0; 144 | right: 0px; 145 | } 146 | 147 | .nav-login-li, 148 | .nav-logo-li { 149 | display: none; 150 | } 151 | 152 | .active-tab { 153 | text-decoration: none; 154 | } 155 | 156 | nav li { 157 | float: none; 158 | } 159 | 160 | .main-banner, 161 | .logo-img { 162 | margin-top: 40px; 163 | } 164 | 165 | .user-greet { 166 | margin: 0px; 167 | } 168 | } 169 | -------------------------------------------------------------------------------- /css/faq.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --color-bg: #fff; 3 | --color-text: #000; 4 | --color-bg-card: #fff; 5 | --color-links: #1d1283; 6 | --color-events: #e30162; 7 | } 8 | 9 | .dark-theme { 10 | --color-bg: #1c1b22; 11 | --color-text: #e1e1ec; 12 | --color-bg-card: #312f3b; 13 | --color-links: #0080ff; 14 | --color-events: #ff0090; 15 | } 16 | * { 17 | margin: 0; 18 | padding: 0; 19 | box-sizing: border-box; 20 | } 21 | 22 | body { 23 | font: 16px 'Roboto', sans-serif; 24 | position: relative; 25 | background-color: var(--color-bg); 26 | } 27 | 28 | main { 29 | display: flex; 30 | flex-direction: column; 31 | justify-content: center; 32 | width: 100%; 33 | } 34 | 35 | html { 36 | position: relative; 37 | min-height: 100%; 38 | } 39 | .dropdown { 40 | top: 56px; 41 | } 42 | a { 43 | text-decoration: none; 44 | color: var(--color-links); 45 | font-weight: 400; 46 | } 47 | 48 | h1 { 49 | text-align: center; 50 | } 51 | 52 | .container { 53 | padding: 0 15px; 54 | margin: 0 auto; 55 | } 56 | 57 | .text-center { 58 | text-align: center; 59 | } 60 | 61 | .topic { 62 | margin-top: 4%; 63 | font-size: 1.48rem; 64 | font-weight: 400; 65 | margin-bottom: 1.5rem; 66 | color: var(--color-text); 67 | } 68 | 69 | .faq { 70 | background: #fff; 71 | border-radius: 0.5rem; 72 | box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); 73 | padding: 1rem; 74 | margin-bottom: 2rem; 75 | } 76 | 77 | .faq__title h3 { 78 | font-weight: 400; 79 | margin: 0; 80 | font-size: inherit; 81 | cursor: pointer; 82 | } 83 | 84 | .faq__title { 85 | justify-content: space-between; 86 | min-height: 2.5rem; 87 | font-weight: bold; 88 | display: flex; 89 | align-items: center; 90 | position: relative; 91 | cursor: pointer; 92 | } 93 | 94 | .faq__title::after { 95 | font-size: 2rem; 96 | position: absolute; 97 | right: 1rem; 98 | } 99 | 100 | .question { 101 | color: black; 102 | } 103 | 104 | .faq__text { 105 | word-spacing: 1px; 106 | max-height: 0; 107 | overflow: hidden; 108 | transition: max-height 0.4s ease-out; 109 | } 110 | 111 | .faq__text p { 112 | border-top: 1px solid rgb(24 121 255); 113 | padding-top: 1rem; 114 | } 115 | 116 | .faq-btn { 117 | height: 25px; 118 | width: 25px; 119 | font-size: 1.3rem; 120 | background: transparent; 121 | color: #041187; 122 | border: 1px solid #e30062; 123 | display: flex; 124 | justify-content: center; 125 | align-items: center; 126 | } 127 | 128 | .faq-btn::before { 129 | content: '+'; 130 | } 131 | 132 | .faq-btn.show::before { 133 | content: '-'; 134 | } 135 | 136 | .faq__list { 137 | margin: 10px 0 0 0; 138 | padding: 0; 139 | list-style: none; 140 | } 141 | 142 | .faq__list li { 143 | padding-left: 17px; 144 | position: relative; 145 | margin-bottom: 5px; 146 | } 147 | 148 | .faq__list li::before { 149 | content: ''; 150 | background: url(../../img/logos/list-icon.png); 151 | width: 15px; 152 | height: 15px; 153 | display: inline-block; 154 | top: 2px; 155 | position: absolute; 156 | left: 0; 157 | background-size: cover; 158 | } 159 | 160 | footer { 161 | position: relative; 162 | margin-top: 40px; 163 | bottom: 0; 164 | width: 100%; 165 | padding: 15px; 166 | text-align: center; 167 | color: var(--color-text); 168 | } 169 | 170 | .welcome-title { 171 | margin: 1em 0; 172 | text-align: center; 173 | font-weight: 400; 174 | color: var(--color-text); 175 | } 176 | 177 | @media (max-width: 625px) { 178 | .faq__btn { 179 | flex: 0 0 24px; 180 | margin-left: 15px; 181 | } 182 | } 183 | 184 | @media (min-width: 1200px) { 185 | .container { 186 | max-width: 80%; 187 | } 188 | } 189 | 190 | @media (max-width: 375px) { 191 | .question { 192 | width: 90%; 193 | } 194 | } 195 | -------------------------------------------------------------------------------- /css/navbar.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --color-nav: #1d1283; 3 | --color-nav-text: #ffffff; 4 | --dropdown-hover: #d0e7ff; 5 | --color-white: #ffffff; 6 | --color-black: #0d6efd; 7 | --color-lime-green: #49a82e; 8 | --skeleton-bg: #483bc0; 9 | --skeleton-shine-color: #edeef1; 10 | } 11 | 12 | nav { 13 | font-family: 'roboto'; 14 | font-weight: 700; 15 | } 16 | 17 | .nav-menu { 18 | margin: 0; 19 | padding: 0; 20 | list-style-type: none; 21 | overflow: hidden; 22 | } 23 | 24 | nav li { 25 | float: left; 26 | } 27 | 28 | .rds-logo { 29 | height: 100px; 30 | width: 100px; 31 | margin: 20px; 32 | } 33 | 34 | .nav-element { 35 | display: block; 36 | text-decoration: none; 37 | color: #ffffff; 38 | margin: 55px 40px; 39 | } 40 | 41 | .nav-element.active-tab { 42 | color: #49a82e; 43 | text-decoration: underline; 44 | text-decoration-thickness: 3px; 45 | text-underline-offset: 10px; 46 | } 47 | 48 | .nav-element:hover { 49 | color: #49a82e; 50 | } 51 | 52 | .nav-login { 53 | position: absolute; 54 | right: 0; 55 | top: 0; 56 | margin: 50px 40px; 57 | } 58 | 59 | .btn-login-text { 60 | border-radius: 6px; 61 | padding: 5px; 62 | background-color: #1d1283; 63 | color: white; 64 | cursor: pointer; 65 | border: 2px solid white; 66 | } 67 | .hidden { 68 | display: none; 69 | } 70 | .skeleton-holder { 71 | display: flex; 72 | align-items: center; 73 | } 74 | .skeleton-rectangle { 75 | width: 105px; 76 | height: 42px; 77 | margin-right: 0.9rem; 78 | border-radius: 4px; 79 | background: var(--skeleton-bg); 80 | background-image: linear-gradient( 81 | to right, 82 | var(--skeleton-bg) 0%, 83 | var(--skeleton-shine-color) 20%, 84 | var(--skeleton-bg) 40%, 85 | var(--skeleton-bg) 100% 86 | ); 87 | background-repeat: no-repeat; 88 | background-size: 300px 104px; 89 | 90 | animation-duration: 1.5s; 91 | animation-fill-mode: forwards; 92 | animation-iteration-count: infinite; 93 | animation-name: placeholderShimmer; 94 | animation-timing-function: linear; 95 | } 96 | .skeleton-circle { 97 | width: 30px; 98 | height: 30px; 99 | border-radius: 50%; 100 | 101 | background: var(--skeleton-bg); 102 | background-image: linear-gradient( 103 | to right, 104 | var(--skeleton-bg) 0%, 105 | var(--skeleton-shine-color) 20%, 106 | var(--skeleton-bg) 40%, 107 | var(--skeleton-bg) 100% 108 | ); 109 | background-repeat: no-repeat; 110 | background-size: 300px 104px; 111 | 112 | animation-duration: 1.5s; 113 | animation-fill-mode: forwards; 114 | animation-iteration-count: infinite; 115 | animation-name: placeholderShimmer; 116 | animation-timing-function: linear; 117 | } 118 | .user-greet { 119 | font-weight: 700; 120 | display: none; 121 | color: #ffffff; 122 | } 123 | 124 | .user-greet a { 125 | text-decoration: none; 126 | color: #fff; 127 | padding: 0; 128 | } 129 | 130 | .user-profile-pic { 131 | width: 32px; 132 | height: 32px; 133 | border-radius: 50%; 134 | display: inline; 135 | vertical-align: middle; 136 | } 137 | 138 | .user-greet-msg { 139 | display: inline; 140 | vertical-align: middle; 141 | margin-right: 10px; 142 | } 143 | 144 | .hamburger { 145 | display: none; 146 | } 147 | 148 | .bar { 149 | display: block; 150 | width: 25px; 151 | height: 3px; 152 | margin: 5px auto; 153 | background-color: #fff; 154 | } 155 | 156 | .home-tab { 157 | display: none; 158 | } 159 | 160 | .dropdown { 161 | width: 150px; 162 | border-radius: 10px; 163 | color: #000; 164 | position: absolute; 165 | top: 88px; 166 | right: 39px; 167 | z-index: 100; 168 | display: flex; 169 | flex-direction: column; 170 | padding: 1rem 0; 171 | font-size: 0.87rem; 172 | justify-content: center; 173 | background-color: #fffbfb; 174 | box-shadow: rgba(60, 64, 67, 0.3) 0 1px 2px 0, 175 | rgba(60, 64, 67, 0.15) 0 2px 6px 2px; 176 | } 177 | 178 | .dropdown-list { 179 | padding: 0; 180 | margin: 0; 181 | } 182 | 183 | .dropdown-link { 184 | text-decoration: none; 185 | display: block; 186 | cursor: pointer; 187 | } 188 | 189 | .line { 190 | border: 0; 191 | border-bottom: 1px solid; 192 | margin: auto; 193 | opacity: 0.25; 194 | color: inherit; 195 | width: 90%; 196 | padding: 0; 197 | } 198 | 199 | .dropdown-item-btn { 200 | width: 100%; 201 | font-weight: 700; 202 | background-color: var(--color-white); 203 | color: var(--color-black); 204 | border: none; 205 | line-height: 19.575px; 206 | padding: 1rem 2rem; 207 | font-size: 0.87rem; 208 | text-align: start; 209 | cursor: pointer; 210 | border-radius: 0.5rem; 211 | } 212 | 213 | .dropdown-item-btn:hover { 214 | background-color: var(--dropdown-hover); 215 | transition: background-color 0.38s ease-in; 216 | } 217 | 218 | .hide { 219 | display: none; 220 | } 221 | 222 | .active-tab { 223 | color: var(--color-lime-green); 224 | text-decoration: underline; 225 | text-decoration-thickness: 3px; 226 | text-underline-offset: 10px; 227 | } 228 | 229 | .dropdown a { 230 | text-align: center; 231 | text-decoration: none; 232 | } 233 | 234 | .nav-login-li:hover, 235 | nav li a:hover { 236 | cursor: pointer; 237 | } 238 | 239 | @media (max-width: 1024px) { 240 | .nav-menu { 241 | display: none; 242 | background-color: #e1e1ec; 243 | padding: 10px 0px; 244 | box-shadow: 0px 10px 15px rgb(0 0 0 / 50%); 245 | } 246 | 247 | .nav-menu a { 248 | color: #1d1283; 249 | } 250 | 251 | .logo-link { 252 | display: none; 253 | } 254 | 255 | .hamburger { 256 | display: inline-block; 257 | margin: 20px; 258 | cursor: pointer; 259 | } 260 | 261 | .nav-login { 262 | margin: 20px 20px; 263 | } 264 | 265 | nav li { 266 | float: none; 267 | } 268 | 269 | .nav-element { 270 | padding: 10px 40px; 271 | margin: 10px; 272 | } 273 | 274 | .nav-element.active-tab { 275 | text-decoration: none; 276 | } 277 | 278 | .nav-menu.active, 279 | .home-tab { 280 | display: block; 281 | } 282 | 283 | .welcome-text { 284 | margin-top: 20px; 285 | } 286 | } 287 | 288 | @media (max-width: 625px) { 289 | .btn-text2 { 290 | display: none; 291 | } 292 | } 293 | 294 | @media (max-width: 1023px) { 295 | .dropdown { 296 | top: 60px; 297 | right: 22px; 298 | } 299 | } 300 | 301 | @keyframes placeholderShimmer { 302 | 0% { 303 | background-position: -468px 0; 304 | } 305 | 306 | 100% { 307 | background-position: 468px 0; 308 | } 309 | } 310 | -------------------------------------------------------------------------------- /code-of-conduct.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Code of Conduct 8 | 9 | 10 | 11 | 12 | 13 | 17 | 18 | 19 | 20 | 33 | 105 |
106 |
107 |

Code of Conduct at RDS

108 |

109 | We are dedicated to building a positive environment that inculcates 110 | open learning and high respect for one another. So we expect our 111 | members to maintain a certain decorum. 112 |

113 | 114 | 152 |
153 |
154 | 155 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | -------------------------------------------------------------------------------- /css/discord.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --color-bg: #fff; 3 | --color-text: #000; 4 | --color-bg-card: #fff; 5 | --color-links: #1d1283; 6 | --color-events: #e30162; 7 | } 8 | 9 | .dark-theme { 10 | --color-bg: #1c1b22; 11 | --color-text: #e1e1ec; 12 | --color-bg-card: #312f3b; 13 | --color-links: #0080ff; 14 | --color-events: #ff0090; 15 | } 16 | * { 17 | margin: 0; 18 | padding: 0; 19 | box-sizing: border-box; 20 | } 21 | 22 | body { 23 | font: 16px 'Roboto', sans-serif; 24 | background-color: var(--color-bg); 25 | } 26 | .dropdown { 27 | top: 56px; 28 | } 29 | 30 | a { 31 | text-decoration: none; 32 | color: var(--color-links); 33 | } 34 | 35 | .animation-container .animation-heading-container { 36 | align-items: center; 37 | justify-content: center; 38 | display: flex; 39 | flex-wrap: wrap; 40 | position: relative; 41 | z-index: 2; 42 | height: 100%; 43 | } 44 | 45 | .animation-container { 46 | position: relative; 47 | height: 300px; 48 | background: url(../img/discord-page/bg-top-inner.png) no-repeat center center; 49 | background-size: cover; 50 | color: #ffffff; 51 | overflow: hidden; 52 | padding: 3.5rem 0; 53 | } 54 | 55 | .animation-heading-container { 56 | display: flex; 57 | flex-direction: column; 58 | justify-content: center; 59 | align-items: center; 60 | } 61 | 62 | .new-heading { 63 | font-weight: 400; 64 | color: var(--color-text); 65 | font-size: 2.125rem; 66 | margin-top: 3.5rem; 67 | width: 95%; 68 | } 69 | 70 | .rds-name { 71 | color: #e30062; 72 | } 73 | 74 | .discord-info-para { 75 | margin-top: 2rem; 76 | width: 80%; 77 | } 78 | 79 | .discord-info-para p { 80 | font-size: 1.25rem; 81 | color: var(--color-text); 82 | } 83 | 84 | .center-block { 85 | display: flex; 86 | justify-content: center; 87 | align-items: center; 88 | flex-direction: column; 89 | text-align: center; 90 | } 91 | 92 | .get-started-heading { 93 | font-weight: 400; 94 | color: var(--color-links); 95 | font-size: 2.125rem; 96 | margin: 2rem 0; 97 | display: flex; 98 | align-items: center; 99 | justify-content: center; 100 | width: 97%; 101 | } 102 | 103 | .rds-channels-list { 104 | padding: 0; 105 | margin: 0; 106 | list-style: none; 107 | } 108 | 109 | .rds-channels-list li { 110 | margin: 0 0 0.75rem 0; 111 | } 112 | 113 | .end-block { 114 | background-color: var(--color-bg); 115 | margin-top: 3rem; 116 | display: flex; 117 | align-items: center; 118 | justify-content: center; 119 | color: var(--color-text); 120 | } 121 | 122 | .discord-image { 123 | margin-top: 4rem; 124 | object-fit: cover; 125 | width: 90%; 126 | margin: 20px auto; 127 | } 128 | 129 | .image-div { 130 | width: 40%; 131 | } 132 | 133 | .rds-info-block { 134 | width: 35%; 135 | } 136 | 137 | footer { 138 | position: relative; 139 | margin-top: 40px; 140 | bottom: 0; 141 | width: 100%; 142 | padding: 15px; 143 | text-align: center; 144 | color: var(--color-text); 145 | } 146 | 147 | @keyframes moveLeftBounce { 148 | 0% { 149 | transform: translateX(0); 150 | } 151 | 50% { 152 | transform: translateX(5px); 153 | } 154 | 100% { 155 | transform: translateX(0); 156 | } 157 | } 158 | @keyframes animationFramesOne { 159 | 0% { 160 | transform: translate(0px, 0px) rotate(0deg); 161 | } 162 | 20% { 163 | transform: translate(73px, -1px) rotate(36deg); 164 | } 165 | 40% { 166 | transform: translate(141px, 72px) rotate(72deg); 167 | } 168 | 60% { 169 | transform: translate(83px, 122px) rotate(108deg); 170 | } 171 | 80% { 172 | transform: translate(-40px, 72px) rotate(144deg); 173 | } 174 | 100% { 175 | transform: translate(0px, 0px) rotate(0deg); 176 | } 177 | } 178 | @keyframes rotateme { 179 | from { 180 | transform: rotate(0deg); 181 | } 182 | to { 183 | transform: rotate(360deg); 184 | } 185 | } 186 | 187 | .animation-heading { 188 | font-size: 2.5rem; 189 | margin: 0; 190 | text-align: center; 191 | } 192 | 193 | .animation-shapes { 194 | position: absolute; 195 | } 196 | 197 | .animation-shape-1 { 198 | top: 40px; 199 | right: 84px; 200 | max-width: 40px; 201 | z-index: 1; 202 | animation: rotateme 25s linear infinite; 203 | } 204 | 205 | .animation-shape-2 { 206 | top: 55px; 207 | right: 95px; 208 | max-width: 25px; 209 | animation: rotateme 25s linear infinite; 210 | } 211 | 212 | .animation-shape-3 { 213 | top: 160px; 214 | left: 350px; 215 | animation: animationFramesOne 15s infinite linear; 216 | } 217 | 218 | .animation-shape-4 { 219 | top: 50%; 220 | left: 50%; 221 | -webkit-animation: animationFramesOne 25s infinite linear; 222 | animation: animationFramesOne 25s infinite linear; 223 | } 224 | 225 | .animation-shape-5 { 226 | top: 70px; 227 | right: 50px; 228 | animation: animationFramesOne 25s infinite linear; 229 | } 230 | 231 | .animation-shape-6 { 232 | left: 20px; 233 | bottom: 30px; 234 | animation: rotateme 25s linear infinite; 235 | max-width: 50px; 236 | } 237 | 238 | .animation-shape-7 { 239 | bottom: 1rem; 240 | right: 1rem; 241 | animation: moveLeftBounce 3s linear infinite; 242 | } 243 | 244 | .animation-shape-8 { 245 | top: 10px; 246 | left: 10px; 247 | animation: animationFramesOne 25s infinite linear; 248 | } 249 | 250 | @media (max-width: 768px) { 251 | .end-block { 252 | display: flex; 253 | flex-direction: column; 254 | } 255 | .image-div { 256 | width: 60%; 257 | } 258 | .rds-info-block { 259 | flex: 0 0 100%; 260 | min-width: 80%; 261 | } 262 | } 263 | 264 | @media (max-width: 625px) { 265 | .get-started-heading { 266 | font-size: 20px; 267 | font-weight: 700; 268 | } 269 | .new-heading { 270 | font-size: 1.75rem; 271 | font-weight: 700; 272 | margin-left: 0.6rem; 273 | } 274 | .help-heading { 275 | font-size: 20px; 276 | margin-right: 0.4rem; 277 | } 278 | .animation-heading { 279 | font-size: 2rem; 280 | } 281 | .server-heading { 282 | display: block; 283 | } 284 | } 285 | 286 | @media (max-width: 375px) { 287 | .discord-info-para { 288 | font-size: 1rem; 289 | } 290 | 291 | .new-heading { 292 | width: 97%; 293 | margin-bottom: 2rem; 294 | font-size: 1.5rem; 295 | font-weight: 700; 296 | margin-left: 0.6rem; 297 | } 298 | 299 | .help-heading { 300 | font-size: 20px; 301 | margin-right: 0.4rem; 302 | } 303 | 304 | .animation-heading { 305 | font-size: 2rem; 306 | } 307 | 308 | .end-block { 309 | display: flex; 310 | flex-direction: column; 311 | } 312 | 313 | .rds-info-block { 314 | min-width: 75%; 315 | } 316 | 317 | .image-div { 318 | width: 80%; 319 | margin-top: 1rem; 320 | } 321 | 322 | .get-started-heading { 323 | font-size: 20px; 324 | font-weight: 700; 325 | } 326 | 327 | .server-heading { 328 | display: block; 329 | } 330 | } 331 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | export default { 7 | // testEnvironment: 'jest-environment-node', 8 | transform: {}, 9 | // "testEnvironment": "jest-environment-jsdom-sixteen", 10 | verbose: true, 11 | transformIgnorePatterns: ['node_modules/(?!@ngrx|(?!deck.gl)|ng-dynamic)'], 12 | // All imported modules in your tests should be mocked automatically 13 | // automock: false, 14 | 15 | // Stop running tests after `n` failures 16 | // bail: 0, 17 | 18 | // The directory where Jest should store its cached dependency information 19 | // cacheDirectory: "C:\\Users\\mgnat\\AppData\\Local\\Temp\\jest", 20 | 21 | // Automatically clear mock calls, instances, contexts and results before every test 22 | clearMocks: true, 23 | 24 | // Indicates whether the coverage information should be collected while executing the test 25 | collectCoverage: true, 26 | 27 | // An array of glob patterns indicating a set of files for which coverage information should be collected 28 | // collectCoverageFrom: undefined, 29 | 30 | // The directory where Jest should output its coverage files 31 | coverageDirectory: 'coverage', 32 | 33 | // An array of regexp pattern strings used to skip coverage collection 34 | // coveragePathIgnorePatterns: [ 35 | // "\\\\node_modules\\\\" 36 | // ], 37 | 38 | // Indicates which provider should be used to instrument code for coverage 39 | coverageProvider: 'v8', 40 | 41 | // A list of reporter names that Jest uses when writing coverage reports 42 | // coverageReporters: [ 43 | // "json", 44 | // "text", 45 | // "lcov", 46 | // "clover" 47 | // ], 48 | 49 | // An object that configures minimum threshold enforcement for coverage results 50 | // coverageThreshold: undefined, 51 | 52 | // A path to a custom dependency extractor 53 | // dependencyExtractor: undefined, 54 | 55 | // Make calling deprecated APIs throw helpful error messages 56 | // errorOnDeprecated: false, 57 | 58 | // The default configuration for fake timers 59 | // fakeTimers: { 60 | // "enableGlobally": false 61 | // }, 62 | 63 | // Force coverage collection from ignored files using an array of glob patterns 64 | // forceCoverageMatch: [], 65 | 66 | // A path to a module which exports an async function that is triggered once before all test suites 67 | // globalSetup: undefined, 68 | 69 | // A path to a module which exports an async function that is triggered once after all test suites 70 | // globalTeardown: undefined, 71 | 72 | // A set of global variables that need to be available in all test environments 73 | // globals: {}, 74 | 75 | // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. 76 | // maxWorkers: "50%", 77 | 78 | // An array of directory names to be searched recursively up from the requiring module's location 79 | // moduleDirectories: [ 80 | // "node_modules" 81 | // ], 82 | 83 | // An array of file extensions your modules use 84 | // moduleFileExtensions: [ 85 | // "js", 86 | // "mjs", 87 | // "cjs", 88 | // "jsx", 89 | // "ts", 90 | // "tsx", 91 | // "json", 92 | // "node" 93 | // ], 94 | 95 | // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module 96 | // moduleNameMapper: {}, 97 | 98 | // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader 99 | // modulePathIgnorePatterns: [], 100 | 101 | // Activates notifications for test results 102 | // notify: false, 103 | 104 | // An enum that specifies notification mode. Requires { notify: true } 105 | // notifyMode: "failure-change", 106 | 107 | // A preset that is used as a base for Jest's configuration 108 | // preset: undefined, 109 | 110 | // Run tests from one or more projects 111 | // projects: undefined, 112 | 113 | // Use this configuration option to add custom reporters to Jest 114 | // reporters: undefined, 115 | 116 | // Automatically reset mock state before every test 117 | // resetMocks: false, 118 | 119 | // Reset the module registry before running each individual test 120 | // resetModules: false, 121 | 122 | // A path to a custom resolver 123 | // resolver: undefined, 124 | 125 | // Automatically restore mock state and implementation before every test 126 | // restoreMocks: false, 127 | 128 | // The root directory that Jest should scan for tests and modules within 129 | // rootDir: undefined, 130 | 131 | // A list of paths to directories that Jest should use to search for files in 132 | // roots: [ 133 | // "" 134 | // ], 135 | 136 | // Allows you to use a custom runner instead of Jest's default test runner 137 | // runner: "jest-runner", 138 | 139 | // The paths to modules that run some code to configure or set up the testing environment before each test 140 | // setupFiles: [], 141 | 142 | // A list of paths to modules that run some code to configure or set up the testing framework before each test 143 | // setupFilesAfterEnv: [], 144 | 145 | // The number of seconds after which a test is considered as slow and reported as such in the results. 146 | // slowTestThreshold: 5, 147 | 148 | // A list of paths to snapshot serializer modules Jest should use for snapshot testing 149 | // snapshotSerializers: [], 150 | 151 | // The test environment that will be used for testing 152 | testEnvironment: 'jsdom', 153 | 154 | // Options that will be passed to the testEnvironment 155 | // testEnvironmentOptions: {}, 156 | 157 | // Adds a location field to test results 158 | // testLocationInResults: false, 159 | 160 | // The glob patterns Jest uses to detect test files 161 | // testMatch: [ 162 | // "**/__tests__/**/*.[jt]s?(x)", 163 | // "**/?(*.)+(spec|test).[tj]s?(x)" 164 | // ], 165 | 166 | // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped 167 | // testPathIgnorePatterns: [ 168 | // "\\\\node_modules\\\\" 169 | // ], 170 | 171 | // The regexp pattern or array of patterns that Jest uses to detect test files 172 | // testRegex: [], 173 | 174 | // This option allows the use of a custom results processor 175 | // testResultsProcessor: undefined, 176 | 177 | // This option allows use of a custom test runner 178 | // testRunner: "jest-circus/runner", 179 | 180 | // A map from regular expressions to paths to transformers 181 | // transform: undefined, 182 | 183 | // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation 184 | // transformIgnorePatterns: [ 185 | // "\\\\node_modules\\\\", 186 | // "\\.pnp\\.[^\\\\]+$" 187 | // ], 188 | 189 | // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them 190 | // unmockedModulePathPatterns: undefined, 191 | 192 | // Indicates whether each individual test should be reported during the run 193 | // verbose: undefined, 194 | 195 | // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode 196 | // watchPathIgnorePatterns: [], 197 | 198 | // Whether to use watchman for file crawling 199 | // watchman: true, 200 | }; 201 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # How can I contribute? 2 | 3 | - You can add questions and answers in FAQ. 4 | - You can style the pages using CSS. 5 | - If you find a bug anywhere, you can fix it. 6 | - You can add a feature once you get approval from the community. 7 | 8 | # File Structure 9 | 10 | ``` 11 | ├── index.html For homepage HTML page 12 | ├── css All the styling goes here 13 | ├── img All the images go here 14 | │   ├── discord-page 15 | | ├── icons 16 | | ... 17 | ├── js All JavaScript goes here 18 | ├──.prettierrc.json For formatting code 19 | ├── code-of-conduct.html For code of conduct HTML page 20 | ├── discord.html For the discord help HTML page 21 | ├── faq.html For FAQs HTML page 22 | ├── CONTRIBUTING.md Contribution file 23 | ├── README.md README file for the repository 24 | ├── package-lock.json For storing an exact versioned dependency tree 25 | ├── package.json For installing dependencies 26 | ``` 27 | 28 | # How can you make your first **Pull Request** 29 | 30 | **Note**: Steps 1, 2 and 3 are **one-time** steps required for setup. If you have already cloned the repo and added upstream, consider following this documentation from step 4. 31 | 32 | 1. **Forking repository** 33 | 34 | Fork this repository using the **Fork** option at the top-right corner of this page. This will create your own copy of this repository. You'll be redirected to your forked repository. Copy the link of this repository (which will look like `https://github.com//website-welcome/`) as you'll need it in the step 2. 35 | 36 | ![how-to-fork](https://i.imgur.com/VfoTxmy.png) 37 | 38 | 2. **Cloning repository** 39 | 40 | Clone your forked repository, this will download your copy of repository in your computer. To do this, open your terminal (command prompt/bash/git bash) and enter the following command, paste your link after the word **clone** without the **<>**. 41 | 42 | ``` 43 | git clone 44 | ``` 45 | 46 | Once you have cloned the repository, now you should go into the folder containing the repository. You can do that with: 47 | 48 | ``` 49 | cd website-welcome 50 | ``` 51 | 52 | 3. **Adding remote repository** 53 | 54 | Add the Real Dev Squad repository as a remote repository, so that you can anytime pull the latest changes from the Real Dev Squad repository which is being deployed. This needs to be done only for the first time. 55 | 56 | ``` 57 | git remote add upstream https://github.com/Real-Dev-Squad/website-welcome/ 58 | ``` 59 | 60 | 4. **Getting the latest code from the develop branch** (Can be skipped if you've cloned the repo just now) 61 | 62 | If it's been quite a while after you have cloned the repo/made the last pull request, it's recommended to take a pull from the develop branch. Reason being, there may be some changes which could have merged after you had cloned the repo/made the last pull request. 63 | 64 | To do so, make sure you're in the develop branch by checking out to the **develop** branch: 65 | 66 | ``` 67 | git checkout develop 68 | ``` 69 | 70 | Once you're in the **develop** branch, it's time to take a pull: 71 | 72 | ``` 73 | git pull upstream develop 74 | ``` 75 | 76 | Now that you've made sure that you've got latest changes, we can proceed to creating our branch 77 | 78 | 5. **Creating a new branch** 79 | 80 | Let's create a new branch to work on. We require a different branch so that we always have a stable, working version in the default (develop) branch. We're not supposed to touch the **main** branch as it is the one getting deployed on production. 81 | 82 | ``` 83 | git checkout -b 84 | ``` 85 | 86 | We will try to name the branch according to the task we are going to perform in it. If it is going to be a `feature`, the branch name should begin with `feat` or `feature`. If it is going to be a `fix`, the branch name should begin with `fix` or `bugfix`. The branch name should be self-explanatory. 87 | For example, if I want to work on a `feature` called `login-form`, the branch name will be **feature/login-form**. If it is going to be a `fix` in `navbar`, the branch name will be `fix/navbar`. 88 | Command example: 89 | 90 | ``` 91 | git checkout -b feature/login-form 92 | ``` 93 | 94 | 6. **Just do it!** 95 | 96 | Perform the tasks you wanted to, can be anything, ranging from fixing simple typo to re-designing the whole page! 97 | 98 | 7. **Committing your changes** 99 | 100 | Now you have made the changes, though they are saved in your system, Git doesn't know what changes you've done. So you have to **commit** your changes. First step is to add the files which you want to add to the staging area, the dot after **add** in the first command tells Git to check for changes in all the files. The second step is about committing your changes. The message part is short description of your commit, like "adds a login form on homepage". Please make sure NOT to have commit messages like "fix issue#34". When we look at the commit history, we should understand what a particular commit is supposed to do based on the commit message. 101 | 102 | ``` 103 | git add . 104 | git commit -m "Write message about your commit" 105 | ``` 106 | 107 | 8. **Making sure you have the latest changes from the develop branch** 108 | 109 | It may so happen that since the last time you cloned the repo/took a pull from develop, some changes may be merged in the develop branch. So to be on the safer side, we should have those changes as well. 110 | 111 | In order to do that, we first checkout to **develop** branch by: 112 | 113 | ``` 114 | git checkout develop 115 | ``` 116 | 117 | Once we're in develop, it's time to take a pull: 118 | 119 | ``` 120 | git pull upstream develop 121 | ``` 122 | 123 | Now that our **local** develop branch is in sync with **remote** develop branch (of the Real Dev Squad Repository), we should let our branch know about the changes from the develop branch (if any). To do so we first checkout to our branch: 124 | 125 | ``` 126 | git checkout 127 | ``` 128 | 129 | Once we're in our branch, we **rebase** our branch on top of the current develop branch (we change the base of our branch, so that it appears as if we have worked from the time the latest changes were merged in the develop branch). To do so: 130 | 131 | ``` 132 | git rebase develop 133 | ``` 134 | 135 | You should solve the merge conflicts, if any. 136 | 137 | 9. **Pushing the code** 138 | 139 | Now that we have made our changes plus we have the latest changes made by other contributors, we should push our code from **local** branch to the same branch on our **GitHub fork**. We do so by: 140 | 141 | ``` 142 | git push origin 143 | ``` 144 | 145 | For example, if the branch name is `feat/login-form`, we enter `git push origin feat/login-form` 146 | 147 | The **origin** refers to your GitHub fork. You can check it by entering `git remote -v`, you should see the link to your fork against **origin**. 148 | 149 | 10. **Making a pull request** 150 | 151 | Your GitHub fork now has the changes, but you want those changes to be merged in the Real Dev Squad repository, right? There's a twist, you can't directly merge your code in the Real Dev Squad. Imagine you own a company whose code is open sourced, would you like if anyone could code make changes in the directly without asking you? For the same reason, **Pull Requests** exist. You `request` the repository maintainers/admins to `pull` your code in their repository. 152 | 153 | To make a pull request, go to your **forked repository** and you'll see ** had recent pushes less than a minute ago** . Right next to it will be an option to **Compare & pull request**. Click on it, submit your pull request (also known as _PR_) explaining what you've done. Again, the PR title should be self-explanatory but concise. If you want to write details, you can add it in the description. If you're making some UI (User Interface) changes, please make sure to add a short screen recording. If that's not possible, at least add some screenshots. 154 | 155 | ![how-to-create-pull-request](https://i.imgur.com/zYSuNY7.png) 156 | 157 | 11. **Review stage** 158 | 159 | Now the maintainers/admins will review your pull request. They might suggest some changes if required. You should then make the required changes in the **same branch**, commit them and push your changes to the **same branch** (follow the steps 7, 8 and 9 for the same). 160 | 161 | 12. **Congratulations on your first Pull Request in Real Dev Squad! 🎉** 162 | -------------------------------------------------------------------------------- /discord.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Discord 8 | 9 | 10 | 11 | 12 | 13 | 17 | 18 | 19 | 20 | 35 | 107 | 108 |
109 | 140 |
141 |

142 | New to Real Dev Squad ? 143 |
Don't worry we are here to help you.
144 |

145 |
146 |

147 | Discord is a chat app, similar 148 | to apps such as Skype, or app widely used for professional 149 | communications like Slack. 150 |

151 |

152 | It’s geared towards multiple users, providing them with ways to find 153 | each other, coordinate and talk while using it. 154 |

155 |

156 | It supports video calls, voice chat, and text, allowing users to get 157 | in touch however they please. 158 |

159 |

160 | We have created different channels based on the 161 | task making things much easier to keep information straight & 162 | segregated. 163 |

164 |
165 |
166 |
167 |
168 | Discord 173 |
174 | 175 |

Let's get started with Discord

176 | 177 |

Discord has the server named Real Dev Squad.

178 |

There are multiple categories inside it

179 |
    180 |
  • 181 | Live: Which lets you connect with the 182 | members.You can seperatly get connected on call with members of 183 | specific channel. 184 |
  • 185 | 186 |
  • Admin: All Channels related to admin.
  • 187 | 188 |
  • 189 | Main: It has channels for general 190 | disussion,progress-updates ,newcomers & Support. 191 |
      192 |
    1. 193 | #general: It carries general discussions. 194 |
    2. 195 |
    3. 196 | #newcomers: All info related to newcomers are floated 197 | in it. 198 |
    4. 199 |
    5. 200 | #progress-updates: All info related to current 201 | ongoing task,discussions are posted here. 202 |
    6. 203 |
    7. 204 | #support: In case you are stuck on need some help 205 | everyone is there to help you keep running. 206 |
    8. 207 |
    208 |
  • 209 | 210 |
  • 211 | Text Channels: Contains multiple other channels 212 | in it. 213 |
  • 214 | 215 |
  • 216 | Learning: It contains different technology 217 | related channels plus channel for interview preparation. 218 |
  • 219 | 220 |
  • 221 | Dev groups: It contains channels for different 222 | projects. 223 |
  • 224 | 225 |
  • 226 | Tasks Channels : Channels for seperate tasks. 227 |
  • 228 |
229 |
230 |
231 |
232 |
233 | 234 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | -------------------------------------------------------------------------------- /css/index.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --color-bg: #fff; 3 | --color-text: #000; 4 | --color-bg-card: #fff; 5 | --color-links: #1d1283; 6 | --color-events: #e30162; 7 | } 8 | 9 | .dark-theme { 10 | --color-bg: #1c1b22; 11 | --color-text: #e1e1ec; 12 | --color-bg-card: #312f3b; 13 | --color-links: #0080ff; 14 | --color-events: #ff0090; 15 | } 16 | * { 17 | margin: 0px; 18 | padding: 0px; 19 | } 20 | 21 | body { 22 | box-sizing: border-box; 23 | font-family: 'raleway'; 24 | background-color: var(--color-bg); 25 | } 26 | 27 | h1 { 28 | font-size: 4.5rem; 29 | } 30 | 31 | h2 { 32 | font-size: 4rem; 33 | } 34 | 35 | /* first screen css */ 36 | .first-screen { 37 | background-color: #1d1283; 38 | } 39 | 40 | .heading-handles-container { 41 | display: flex; 42 | align-items: center; 43 | justify-content: center; 44 | } 45 | 46 | .seperators, 47 | .rds-logo-banner { 48 | display: none; 49 | } 50 | 51 | .welcome-text { 52 | font-size: 2.5rem; 53 | width: 45%; 54 | color: #ffffff; 55 | } 56 | 57 | .welcome { 58 | color: #e30062; 59 | } 60 | 61 | .to-the { 62 | font-weight: 400; 63 | } 64 | 65 | .welcome-image { 66 | width: 35%; 67 | margin: 20px; 68 | } 69 | 70 | .handles-container a { 71 | display: inline-flex; 72 | justify-content: center; 73 | align-items: center; 74 | font-weight: 700; 75 | font-size: 1.1rem; 76 | text-decoration: none; 77 | color: #ffffff; 78 | cursor: pointer; 79 | } 80 | 81 | .social-icon { 82 | padding: 5px; 83 | } 84 | 85 | .news-feeds-container { 86 | display: flex; 87 | justify-content: space-evenly; 88 | align-items: center; 89 | font-size: 1.1rem; 90 | font-weight: 700; 91 | margin: 20px auto; 92 | background-color: #ffffff; 93 | padding: 10px 20px; 94 | border-radius: 10px; 95 | width: 80%; 96 | } 97 | 98 | .new-tag { 99 | background: linear-gradient(130deg, #f3036b, #dc7faf, #e30062); 100 | padding: 10px 15px; 101 | border-radius: 5px; 102 | } 103 | 104 | .checkout-tag { 105 | display: flex; 106 | align-items: center; 107 | color: #1d1283; 108 | text-decoration: none; 109 | cursor: pointer; 110 | } 111 | 112 | .spacing { 113 | height: 20px; 114 | } 115 | 116 | /* second screen css */ 117 | .second-screen { 118 | width: 100%; 119 | margin: 30px 0px; 120 | } 121 | 122 | .docs-heading { 123 | padding: 40px 0px; 124 | font-size: 2.8rem; 125 | text-align: center; 126 | font-weight: 600; 127 | color: var(--color-text); 128 | } 129 | 130 | .cards { 131 | width: 60%; 132 | margin: 20px auto; 133 | display: flex; 134 | justify-content: space-around; 135 | align-items: center; 136 | } 137 | 138 | .card { 139 | background-color: #e30062; 140 | width: 28%; 141 | text-align: center; 142 | padding: 25px 0px; 143 | border-radius: 15px; 144 | color: white; 145 | text-decoration: none; 146 | font-size: 1.2rem; 147 | font-weight: 600; 148 | } 149 | 150 | .card:hover { 151 | transform: translateY(-3px); 152 | box-shadow: 3px 5px rgba(0, 0, 0, 0.8); 153 | } 154 | 155 | .card:active { 156 | transform: translateY(-2px); 157 | box-shadow: 1px 3px rgba(0, 0, 0, 0.8); 158 | } 159 | 160 | .info-note-section { 161 | margin: 40px 0px; 162 | display: flex; 163 | align-items: center; 164 | justify-content: center; 165 | font-size: 1.8rem; 166 | line-height: 2.5rem; 167 | font-weight: 600; 168 | color: #091133; 169 | background-color: var(--color-bg); 170 | } 171 | 172 | .info-note { 173 | width: 40%; 174 | font-size: 2rem; 175 | line-height: 3rem; 176 | color: var(--color-text); 177 | } 178 | 179 | .info-image { 180 | width: 40%; 181 | } 182 | 183 | .info-note-img { 184 | width: 90%; 185 | margin: 20px auto; 186 | } 187 | 188 | .info-note-link { 189 | color: #e30062; 190 | text-decoration: none; 191 | } 192 | 193 | /*third screen*/ 194 | .event-screen { 195 | width: 90%; 196 | margin: 60px 0px; 197 | } 198 | 199 | .event-heading { 200 | font-size: 2.5rem; 201 | color: #e30062; 202 | } 203 | 204 | .upcoming-event, 205 | .previous-event { 206 | color: var(--color-text); 207 | padding: 30px 0px 10px 0px; 208 | font-size: 1.5rem; 209 | } 210 | 211 | .events-box { 212 | justify-content: center; 213 | align-items: center; 214 | display: flex; 215 | flex-wrap: wrap; 216 | } 217 | 218 | .link-seperators { 219 | font-size: 20px; 220 | color: #e30062; 221 | font-weight: 900; 222 | } 223 | 224 | .stay-tune-text { 225 | color: #e30062; 226 | font-size: 1.2rem; 227 | font-weight: bold; 228 | } 229 | 230 | .events { 231 | margin: 0px 4px; 232 | font-size: 1.2rem; 233 | font-weight: bold; 234 | color: var(--color-links); 235 | } 236 | 237 | .video-holder { 238 | background-color: var(--color-bg); 239 | padding-bottom: 40px; 240 | } 241 | 242 | .video-content { 243 | width: 96%; 244 | margin: auto; 245 | } 246 | 247 | .video-text { 248 | color: var(--color-text); 249 | font-weight: 600; 250 | font-size: 2.5rem; 251 | padding: 40px 0px; 252 | } 253 | 254 | iframe { 255 | width: 45%; 256 | height: 316px; 257 | } 258 | 259 | .footer-img { 260 | width: 100%; 261 | } 262 | 263 | footer { 264 | text-align: center; 265 | padding: 20px; 266 | } 267 | 268 | @media (max-width: 1250px) { 269 | h1 { 270 | font-size: 3.5rem; 271 | } 272 | 273 | h2 { 274 | font-size: 3rem; 275 | } 276 | 277 | .handles-container a { 278 | font-size: 1rem; 279 | } 280 | } 281 | 282 | @media (max-width: 1024px) { 283 | .rds-logo-banner { 284 | display: block; 285 | margin: 25px auto 0px auto; 286 | } 287 | 288 | h1 { 289 | font-size: 4rem; 290 | } 291 | 292 | h2 { 293 | font-size: 3.5rem; 294 | } 295 | 296 | .heading-handles-container { 297 | flex-direction: column; 298 | text-align: center; 299 | } 300 | 301 | .welcome-text { 302 | width: 80%; 303 | } 304 | 305 | .welcome-image { 306 | width: 40%; 307 | } 308 | 309 | .news-feeds-container { 310 | font-size: 0.9rem; 311 | } 312 | 313 | .card { 314 | padding: 15px 1px; 315 | width: 150%; 316 | font-size: 1rem; 317 | margin: 10px 4px; 318 | } 319 | 320 | .event-screen { 321 | max-width: 100%; 322 | } 323 | 324 | .event { 325 | display: block; 326 | margin-top: 10px; 327 | text-align: center; 328 | } 329 | } 330 | 331 | @media (max-width: 768px) { 332 | .welcome-image { 333 | width: 60%; 334 | } 335 | 336 | .news-feeds-container { 337 | flex-direction: column; 338 | } 339 | 340 | .new-tag, 341 | .news-feeds-txt, 342 | .checkout-tag, 343 | .arrow-icon { 344 | margin: 5px; 345 | } 346 | 347 | .second-screen { 348 | width: 100%; 349 | margin: 20px 0px; 350 | } 351 | 352 | .docs-heading { 353 | font-size: 1.8rem; 354 | } 355 | 356 | .cards { 357 | display: flex; 358 | flex-direction: column; 359 | align-items: center; 360 | justify-content: space-between; 361 | } 362 | 363 | .card { 364 | padding: 15px 0px; 365 | width: 85%; 366 | font-size: 1.1rem; 367 | margin: 10px 0px; 368 | } 369 | 370 | .info-note-section { 371 | margin: 20px 0px; 372 | display: flex; 373 | flex-direction: column-reverse; 374 | font-size: 1.2rem; 375 | line-height: 1.5rem; 376 | } 377 | 378 | .info-note { 379 | padding: 30px 0px; 380 | width: 70%; 381 | text-align: center; 382 | } 383 | 384 | .info-image { 385 | width: 70%; 386 | } 387 | 388 | .info-note-img { 389 | width: 100%; 390 | } 391 | 392 | .events { 393 | font-size: 1.1rem; 394 | } 395 | 396 | .event-heading { 397 | font: 2rem; 398 | } 399 | 400 | .upcoming-event, 401 | .previous-event { 402 | padding: 20px 0px 10px 0px; 403 | font-size: 1.3rem; 404 | } 405 | 406 | .video-text { 407 | font-size: 2rem; 408 | } 409 | 410 | iframe { 411 | width: 70%; 412 | } 413 | } 414 | 415 | @media (max-width: 625px) { 416 | h1 { 417 | font-size: 3.5rem; 418 | } 419 | 420 | h2 { 421 | font-size: 3rem; 422 | } 423 | 424 | .handles-container a { 425 | font-size: 0.9rem; 426 | } 427 | } 428 | 429 | @media (max-width: 425px) { 430 | h1 { 431 | font-size: 2.5rem; 432 | } 433 | 434 | h2 { 435 | font-size: 2rem; 436 | } 437 | 438 | .handles-container { 439 | display: inline-flex; 440 | } 441 | 442 | .handles-container a { 443 | font-size: 0; 444 | margin: 5px 10px; 445 | } 446 | 447 | .link-seperators { 448 | display: none; 449 | } 450 | 451 | .seperators { 452 | color: #e30062; 453 | display: block; 454 | font-weight: 900; 455 | } 456 | 457 | .second-screen { 458 | margin: 20px 0px; 459 | } 460 | 461 | .docs-heading { 462 | padding: 10px 0px; 463 | font-size: 1.5rem; 464 | } 465 | 466 | .cards { 467 | display: flex; 468 | flex-direction: column; 469 | align-items: center; 470 | justify-content: space-between; 471 | } 472 | 473 | .card { 474 | padding: 15px 0px; 475 | width: 85%; 476 | font-size: 1rem; 477 | margin: 10px 0px; 478 | } 479 | 480 | .info-note-section { 481 | margin: 25px 0px; 482 | display: flex; 483 | flex-direction: column-reverse; 484 | align-items: center; 485 | justify-content: center; 486 | font-size: 1rem; 487 | line-height: 1.2rem; 488 | } 489 | 490 | .info-note { 491 | width: 90%; 492 | } 493 | 494 | .info-image { 495 | width: 70%; 496 | } 497 | 498 | .events { 499 | font-size: 1rem; 500 | } 501 | 502 | .event-heading { 503 | font-size: 1.5rem; 504 | } 505 | 506 | .upcoming-event, 507 | .previous-event { 508 | padding: 20px 0px 10px 0px; 509 | font-size: 1.2rem; 510 | } 511 | 512 | .video-text { 513 | font-size: 1.25rem; 514 | } 515 | 516 | iframe { 517 | width: 85%; 518 | height: 200px; 519 | } 520 | } 521 | 522 | @media (max-width: 375px) { 523 | .welcome-text { 524 | width: 95%; 525 | } 526 | 527 | .second-screen { 528 | margin: 20px 0px; 529 | } 530 | 531 | .info-note-section { 532 | margin: 20px 0px; 533 | display: flex; 534 | flex-direction: column-reverse; 535 | font-size: 1rem; 536 | line-height: 1.2rem; 537 | } 538 | 539 | .info-note { 540 | width: 90%; 541 | font-size: 1rem; 542 | line-height: 1rem; 543 | } 544 | 545 | .info-image { 546 | width: 70%; 547 | } 548 | } 549 | .info-repo { 550 | color: var(--color-text); 551 | } 552 | .info-repo-link { 553 | color: var(--color-links); 554 | } 555 | -------------------------------------------------------------------------------- /faq.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | FAQ 8 | 9 | 10 | 11 | 12 | 13 | 17 | 18 | 19 | 20 | 33 | 129 | 130 |
131 |

Frequently Asked Questions

132 | 133 |
134 |
135 |

About RDS

136 |
137 | 138 |
139 |

What is Real Dev Squad?

140 | 141 |
142 |
143 |
144 |

145 | Real Dev Squad is a community of developers, where we come 146 | together to learn, use that in building projects, prepare for 147 | interviews, help each-other, put those projects online and try 148 | to help the set of new developers or freshers, helping them get 149 | better jobs and higher salaries with quality work. We come from 150 | all walks of lives and all kinds of background, with one thing 151 | in common: Wanting to work with others and improve ourselves. 152 |

153 |
154 |
155 |
156 | 157 |
158 |

How do I contribute to RDS?

159 | 160 |
161 |
162 |
163 |

164 | As of now we're having 7 projects. Every project and the 165 | corresponding tech stack is mentioned below : 166 |

167 | 168 | 169 | 186 |
187 |
188 |
189 | 190 |
191 |

192 | I get what the squad is about, but how do I join the squad? 193 |

194 | 195 |
196 |
197 |
198 |

199 | We communicate over a Discord channel. If you wish to join the 200 | Discord channel, please contact any of our 201 | members 204 | to get invitation link. 205 |

206 |
207 |
208 |
209 |
210 | 211 |
212 |
213 |
214 |

Git Related Questions

215 |
216 | 221 |
222 |

223 | I don't know Git. Can I still contribute? 224 |

225 | 226 |
227 |
228 |
229 |

230 | Learning Git is highly recommended, but if you do not know it 231 | yet, please follow 232 | this 236 | 237 | guide to get started with Git. 238 |

239 |
240 |
241 |
242 |
243 |
244 |
245 | 246 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Welcome to Real Dev Squad 9 | 10 | 11 | 12 | 13 | 17 | 21 | 25 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 | 78 | 131 | 132 | 158 |
159 | 160 | RDS_Logo 167 | 168 |
169 | 170 |

171 | Welcome 172 | to the 173 |

174 |

175 | Real Dev Squad 176 |

177 |
178 | 191 | 192 | | 193 | 194 | 195 | 208 | 209 | | 210 | 211 | 212 | 225 | 226 | | 227 | 228 | 229 | 242 |
243 |
244 | Welcome_Image 249 |
250 | 251 |
252 | New 253 | 1 Year Anniversary 254 | -- 255 | New Features Available for YOU! 256 | 257 | Check them out 258 | Arrow_Icon 265 | 266 |
267 |
268 |
269 | 270 |
271 |

Check Out Our Docs

272 | 273 |
274 | FAQ 275 | Discord 276 | Code of Conduct 277 |
278 | 279 |
280 | 281 | Ready to level up your dev skills? 282 | Join 287 | the Real Dev Squad - head over to for an epic coding adventure! or 288 | check our FAQ section. 289 | 290 | 291 | infoNoteImg 296 | 297 |
298 |
299 | 300 |
301 |
302 |

You can check out all our events below!!

303 |
304 |

Upcoming Events:

305 |
306 |
Stay tuned!
307 | 308 |
309 |

Previous Events:

310 |
311 | 312 |
313 | APIs made Easier 319 | 320 |   321 | | 322 | 323 |   324 | 325 | Dynamic Programming 331 | 332 |   333 | | 334 | 335 |   336 | 337 | 342 | NodeJS Workshop Part1 343 | 344 | 345 |   346 | | 347 | 348 |   349 | 350 | Web-Mini-Conf-July-2020 356 | 357 |   358 | | 359 | 360 |   361 | 362 | 367 | React Hooks Session 368 | 369 | 370 |   371 | | 372 | 373 |   374 | 375 | 380 | SSR the right way 381 | 382 |
383 |
384 | 385 |
386 |
387 |
Check out what Real Dev Squad is :
388 | 395 |
396 |
397 | 398 | Special_Shape 403 |
404 | 405 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | --------------------------------------------------------------------------------