├── .all-contributorsrc ├── .dockerignore ├── .env.development ├── .eslintignore ├── .eslintrc.js ├── .gitconfig ├── .github ├── CODEOWNERS ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── #2PlaysAMonth.yml │ ├── bug-report.yml │ ├── docs.yml │ ├── feature-request.yml │ ├── new-play.yml │ └── refactor.yml ├── dependabot.yml ├── pull_request_template.md ├── release-drafter.yml └── workflows │ ├── author-assign.yml │ ├── contributions.yml │ ├── greetings.yml │ ├── issue-lock.yml │ ├── label-hacktoberfest.yml │ ├── playwright-e2e.yml │ ├── release-drafter.yml │ └── stale-issue-and-pr.yml ├── .gitignore ├── .gitpod.yml ├── .husky └── pre-commit ├── .prettierrc ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Dockerfile.DEV ├── Dockerfile.PROD ├── LICENSE ├── README.md ├── SECURITY.md ├── docker-compose-dev.yml ├── docker-compose-prod.yml ├── docs ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md └── SECURITY.md ├── e2e ├── README.md ├── pageobjects │ ├── enums │ │ └── constant.ts │ └── pages │ │ ├── home.ts │ │ ├── ideas.ts │ │ ├── plays.ts │ │ └── testimonials.ts └── tests │ ├── homepage.spec.ts │ ├── ideaspage.spec.ts │ ├── playspage.spec.ts │ └── testimonialspage.spec.ts ├── index.html ├── netlify.toml ├── package.json ├── playwright.config.ts ├── pnpm-lock.yaml ├── postcss.config.js ├── public ├── favicon.ico ├── index.html ├── logo.png ├── logo152x152.png ├── logo16x16.png ├── logo192x192.png ├── logo24x24.png ├── logo32x32.png ├── logo48x48.png ├── manifest.json ├── maskable_icon.png ├── og-image.png ├── robots.txt ├── sitemap.xml └── sponsors-partners │ ├── bugfender.png │ ├── indiafoss.png │ ├── nhost.png │ ├── react-nexus.png │ ├── react-summit.png │ └── stackstream.png ├── src ├── App.css ├── App.jsx ├── ErrorBoundary │ ├── ErrorBoundary.jsx │ └── ErrorFallback.jsx ├── common │ ├── 404 │ │ ├── 404.css │ │ └── PageNotFound.jsx │ ├── Testimonial │ │ ├── Testimonial.css │ │ ├── TestimonialCard.jsx │ │ ├── TestimonialModal.jsx │ │ ├── TestimonialSection.jsx │ │ └── Testimonials.jsx │ ├── activities │ │ ├── 2playsamonth │ │ │ ├── BannerLogo.png │ │ │ └── HeroCoders.png │ │ ├── ActivityBanner.jsx │ │ ├── activitiesConfig.js │ │ ├── activityBanner.css │ │ ├── banner.png │ │ └── hackathon │ │ │ ├── Logo.png │ │ │ ├── Logo.svg │ │ │ └── img-hero-coders.png │ ├── badges-dashboard │ │ ├── Badge.jsx │ │ ├── BadgeCard.jsx │ │ ├── BadgeDetails.jsx │ │ ├── Badges.jsx │ │ ├── ClaimedBadges.jsx │ │ ├── OverView.jsx │ │ ├── badge.css │ │ ├── img │ │ │ ├── Finisher - 512x512.png │ │ │ ├── Participant - 512x512.png │ │ │ ├── Winner – 512x512.png │ │ │ ├── p.jpg │ │ │ ├── pf.jpg │ │ │ └── pfw.jpg │ │ └── index.jsx │ ├── components │ │ ├── Comment.jsx │ │ ├── LevelBadge.jsx │ │ ├── Like │ │ │ └── Like.jsx │ │ ├── Notification.jsx │ │ ├── PlayForms.jsx │ │ ├── SocialShare.jsx │ │ └── YouTubeEmbed.jsx │ ├── const │ │ ├── git.js │ │ ├── index.js │ │ └── nhost.js │ ├── createplay │ │ ├── CreatePlay.jsx │ │ ├── create-play-form-template.js │ │ ├── create-play.scss │ │ └── utils.js │ ├── defaultBanner │ │ └── DefaultBanner.jsx │ ├── footer │ │ ├── ExtendedFooter.jsx │ │ └── Footer.jsx │ ├── header │ │ ├── Header.jsx │ │ ├── HeaderNav.jsx │ │ └── header.css │ ├── home │ │ ├── Contributors.jsx │ │ ├── Home.jsx │ │ ├── HomeBanner.jsx │ │ ├── HomeContent.jsx │ │ ├── HomeContributors.jsx │ │ ├── HomeFeatures.jsx │ │ ├── HomeIdeas.jsx │ │ ├── HomePlays.jsx │ │ ├── HomeSponsors.jsx │ │ ├── HomeTestimonials.jsx │ │ ├── Sponsors.jsx │ │ ├── home.css │ │ └── index.js │ ├── hooks │ │ ├── index.js │ │ ├── useCacheResponse.ts │ │ ├── useContributors.js │ │ ├── useFeaturedPlays.js │ │ ├── useFetch.js │ │ ├── useGitHub.js │ │ ├── useLikePlays.js │ │ └── useLocalStorage.js │ ├── index.js │ ├── modal │ │ └── index.jsx │ ├── playcreated │ │ ├── PlayCreated.jsx │ │ └── play-created.scss │ ├── playideas │ │ ├── PlayIdeas.jsx │ │ ├── ideas.json │ │ └── playIdeas.css │ ├── playleaderboard │ │ ├── LeaderBoard.jsx │ │ ├── TopPlayCreatorOfTheMonth.jsx │ │ ├── TopPlayCreators.jsx │ │ └── leaderBoard.css │ ├── playlists │ │ ├── DynamicBanner.jsx │ │ ├── FeaturedPlays.jsx │ │ ├── PlayCard.jsx │ │ ├── PlayHeader.jsx │ │ ├── PlayHeaderActions.jsx │ │ ├── PlayHeaderInfo.jsx │ │ ├── PlayList.jsx │ │ ├── PlayMeta.jsx │ │ ├── PlayShare.jsx │ │ ├── PlayThumbnail.jsx │ │ └── playlist.css │ ├── routing │ │ ├── RouteDefs.jsx │ │ └── hooks │ │ │ └── useLocationChange.js │ ├── search │ │ ├── FilterPlays.jsx │ │ ├── SearchBox.jsx │ │ ├── SearchPlays.jsx │ │ ├── filter-template.js │ │ ├── hooks │ │ │ └── usePlayFilter.js │ │ ├── search-context.jsx │ │ ├── search-helper.js │ │ └── search.css │ ├── services │ │ ├── badges.js │ │ ├── index.js │ │ ├── issues.js │ │ ├── levels.js │ │ ├── plays.js │ │ ├── request │ │ │ ├── index.js │ │ │ └── query │ │ │ │ ├── edit-play.js │ │ │ │ ├── fetch-badges-filter-by-user-id.js │ │ │ │ ├── fetch-filter-data.js │ │ │ │ ├── fetch-leaderboard-data.js │ │ │ │ ├── fetch-plays-filter.js │ │ │ │ ├── fetch-plays-paginated.js │ │ │ │ ├── fetch-plays-sorted.js │ │ │ │ ├── fetch-plays.js │ │ │ │ ├── fetch-user-filter-by-email.js │ │ │ │ ├── index.js │ │ │ │ ├── levels.js │ │ │ │ ├── like-play.js │ │ │ │ ├── play.js │ │ │ │ ├── tags.js │ │ │ │ └── testimonials.js │ │ ├── string.js │ │ └── tags.js │ ├── spinner │ │ ├── spinner.jsx │ │ └── spinner.scss │ ├── techstack │ │ ├── TechStackInfo.js │ │ ├── TechStacks.css │ │ └── TechStacks.jsx │ └── utils │ │ ├── commonUtils.js │ │ ├── coverImageUtil.js │ │ ├── fakeUser.js │ │ ├── formatCount.ts │ │ └── utilsConstants.js ├── constants │ └── index.js ├── globals.d.ts ├── images │ ├── bg-spikes.webp │ ├── icon-flower.svg │ ├── img-403.svg │ ├── img-404.svg │ ├── img-logo-light.svg │ ├── img-logo-sm.svg │ ├── img-logo.svg │ ├── img-oops.svg │ ├── img-twitter-header.png │ ├── nhost.svg │ ├── og-image.png │ ├── play-fallback-cover.png │ ├── thumb-play.png │ ├── twitter-thumb.png │ ├── umami.svg │ ├── underdevelpoment.png │ └── user.png ├── index.jsx ├── logo.svg ├── meta │ ├── DefMeta.jsx │ └── play-meta-util.js ├── plays │ ├── 2048 │ │ ├── Game2048Components │ │ │ ├── Cell.jsx │ │ │ ├── Game.jsx │ │ │ ├── GameHeader.jsx │ │ │ ├── GameOverlay.jsx │ │ │ ├── Grid.jsx │ │ │ ├── Modal.jsx │ │ │ ├── Row.jsx │ │ │ ├── Score.jsx │ │ │ └── VideoMusic.jsx │ │ ├── Game2048Styles │ │ │ ├── Modal.css │ │ │ ├── game-header.css │ │ │ ├── game-overlay.css │ │ │ └── game.css │ │ ├── GameAudio │ │ │ ├── VideoMusic.mp4 │ │ │ ├── gameOver.wav │ │ │ └── gameWin.wav │ │ ├── GameImages │ │ │ ├── 1024.gif │ │ │ ├── 128.gif │ │ │ ├── 16.gif │ │ │ ├── 2.gif │ │ │ ├── 2048.gif │ │ │ ├── 256.gif │ │ │ ├── 32.gif │ │ │ ├── 4.gif │ │ │ ├── 512.gif │ │ │ ├── 64.gif │ │ │ ├── 8.gif │ │ │ ├── eight.gif │ │ │ ├── fiveOne.gif │ │ │ ├── four.gif │ │ │ ├── oneTwo.gif │ │ │ ├── oneZero.gif │ │ │ ├── sixFour.gif │ │ │ ├── sixteen.gif │ │ │ ├── threeTwo.gif │ │ │ ├── two.gif │ │ │ ├── twoFive.gif │ │ │ └── twoZero.gif │ │ ├── GameTwentyFourtyEight.jsx │ │ ├── TwentyFourtyEight.jsx │ │ ├── cover.png │ │ ├── gameLogic.js │ │ ├── readme.md │ │ └── transformGrid.js │ ├── Selection-Sort-Visualizer │ │ ├── App.js │ │ ├── README.md │ │ ├── SelectionSortVisualizer.js │ │ └── select.css │ ├── accordian │ │ ├── Accordian.jsx │ │ ├── AccordianData.jsx │ │ ├── Readme.md │ │ ├── cover.png │ │ ├── data.js │ │ └── styles.css │ ├── airbnb-experiences-clone │ │ ├── AirbnbExperiencesClone.jsx │ │ ├── App.jsx │ │ ├── Readme.md │ │ ├── assets │ │ │ └── images │ │ │ │ ├── airbnb-logo.png │ │ │ │ ├── katie-zaferes.png │ │ │ │ ├── mountain-bike.png │ │ │ │ ├── photo-grid.png │ │ │ │ ├── star.png │ │ │ │ └── wedding-photography.png │ │ ├── components │ │ │ ├── Card.jsx │ │ │ ├── Hero.jsx │ │ │ └── Navbar.jsx │ │ ├── cover.png │ │ ├── data.js │ │ └── styles.css │ ├── analog-clock │ │ ├── AnalogClock.css │ │ ├── AnalogClock.jsx │ │ ├── Readme.md │ │ └── cover.png │ ├── basic-calculator │ │ ├── BasicCalculator.jsx │ │ ├── CalculatorBody.jsx │ │ ├── DigitButton.jsx │ │ ├── OperationButton.jsx │ │ ├── Readme.md │ │ ├── cover.png │ │ └── styles.css │ ├── bodymassindex-calculator │ │ ├── BodymassindexCalculator.js │ │ ├── Readme.md │ │ ├── cover.jpg │ │ └── styles.css │ ├── calculator-by-tea │ │ ├── CalaculatorByTeaInterface.ts │ │ ├── CalculatorByTea.tsx │ │ ├── CalculatorByTeaButtons.ts │ │ ├── Readme.md │ │ ├── cover.jpg │ │ ├── styles.css │ │ └── useCalcalulatorByTeaHook.ts │ ├── calendar │ │ ├── Calendar.scss │ │ ├── Calendar.tsx │ │ ├── CalendarDayTile.tsx │ │ ├── CalendarEvent.tsx │ │ ├── CalendarEventForm.tsx │ │ ├── CalendarEventInfo.tsx │ │ ├── CalendarEvents.tsx │ │ ├── CalendarEventsMore.tsx │ │ ├── CalendarGrid.tsx │ │ ├── CalendarNavigation.tsx │ │ ├── Context.tsx │ │ ├── EventType.ts │ │ ├── ModalContainer.tsx │ │ ├── Readme.md │ │ ├── cover.png │ │ └── utils.tsx │ ├── cheesylines │ │ ├── Cheesylines.js │ │ └── Readme.md │ ├── clock │ │ ├── CurrentTimer.jsx │ │ ├── Readme.md │ │ ├── clock.css │ │ └── cover.png │ ├── code-editor │ │ ├── Button.jsx │ │ ├── CodeEditor.jsx │ │ ├── Editor.jsx │ │ ├── Modal.jsx │ │ ├── Readme.md │ │ ├── close.png │ │ ├── cover.png │ │ ├── modal.css │ │ └── styles.css │ ├── codenchill │ │ ├── Codenchill.jsx │ │ ├── Main.jsx │ │ ├── Readme.md │ │ ├── app │ │ │ └── store.js │ │ ├── assets │ │ │ └── playing.gif │ │ ├── data │ │ │ └── track.js │ │ ├── features │ │ │ ├── AudioPlayerTracks │ │ │ │ ├── AudioplayerContainer.jsx │ │ │ │ └── TrackTile.jsx │ │ │ ├── DisplayTrackControls │ │ │ │ ├── TrackControlSlice.js │ │ │ │ └── TrackControls.jsx │ │ │ └── Timer │ │ │ │ ├── GuideModal.jsx │ │ │ │ ├── TimerContainer.jsx │ │ │ │ └── TimerControlSlice.js │ │ └── styles.css │ ├── color-palettes-generator │ │ ├── ColorPalettesGenerator.jsx │ │ ├── Readme.md │ │ ├── components │ │ │ ├── SingleColor.jsx │ │ │ └── utils.js │ │ ├── cover.png │ │ └── styles.css │ ├── context-with-real-usecases │ │ ├── ContextWithRealUsecases.jsx │ │ ├── Readme.md │ │ ├── Recipes.js │ │ ├── components │ │ │ ├── ContextInfoSlider.jsx │ │ │ ├── CuisineModal.jsx │ │ │ ├── Heading.jsx │ │ │ ├── Main │ │ │ │ ├── Main.jsx │ │ │ │ └── RecipeGrid.jsx │ │ │ └── Menu.jsx │ │ ├── context │ │ │ └── CuisineContext.jsx │ │ ├── contextWithRealUsecases.css │ │ └── cover.png │ ├── counter │ │ ├── Counter.jsx │ │ ├── CounterApp.jsx │ │ ├── Readme.md │ │ ├── counter.css │ │ └── cover.png │ ├── countries-statics │ │ ├── Context.jsx │ │ ├── CountriesStatics.jsx │ │ ├── Country.jsx │ │ ├── Map.jsx │ │ ├── Readme.md │ │ ├── SearchAndFilter.jsx │ │ ├── countriesStatistic.css │ │ ├── cover.png │ │ └── featues.json │ ├── cricket-game │ │ ├── CricketGame.jsx │ │ ├── Readme.md │ │ ├── assets │ │ │ ├── ball.svg │ │ │ ├── bat.svg │ │ │ ├── batsman.png │ │ │ ├── cricket-ground.jpg │ │ │ ├── cricket-logo.png │ │ │ ├── hitwicket.svg │ │ │ ├── homepage.jpg │ │ │ ├── pitch.svg │ │ │ └── wicket.svg │ │ ├── audios │ │ │ ├── crowd-cheering.mp3 │ │ │ ├── crowd-disappointed.mp3 │ │ │ ├── gametrackbg.mp3 │ │ │ ├── shotSound.mp3 │ │ │ └── wicketHit.mp3 │ │ ├── components │ │ │ ├── CommentaryTimeline.jsx │ │ │ ├── EndGameScreen.jsx │ │ │ ├── InfoBox.jsx │ │ │ ├── Modal.jsx │ │ │ ├── Pitch.jsx │ │ │ ├── Score.jsx │ │ │ ├── ScorePanel.jsx │ │ │ └── TopBar.jsx │ │ ├── game │ │ │ ├── commentary.js │ │ │ ├── gameLogic.js │ │ │ ├── levels.js │ │ │ └── utils.js │ │ └── styles.css │ ├── currencyconverter │ │ ├── Currencyconverter.js │ │ ├── InputBox.jsx │ │ ├── Readme.md │ │ ├── cover.png │ │ └── hooks │ │ │ └── useCurrencyInfo.jsx │ ├── custommemesgenerator │ │ ├── Custommemesgenerator.css │ │ ├── Custommemesgenerator.jsx │ │ ├── Header.jsx │ │ ├── Meme.jsx │ │ ├── Readme.md │ │ └── troll-face.png │ ├── dad-jokes │ │ ├── DadJokes.jsx │ │ ├── Readme.md │ │ ├── components │ │ │ ├── categoryModal │ │ │ │ ├── CategoryModal.css │ │ │ │ └── CategoryModal.jsx │ │ │ ├── jokeList │ │ │ │ ├── jokeList.css │ │ │ │ └── jokeList.jsx │ │ │ └── singleJoke │ │ │ │ ├── SingleJoke.css │ │ │ │ └── SingleJoke.jsx │ │ ├── cover.png │ │ ├── laughing-emoji.gif │ │ └── styles.css │ ├── daily-journa │ │ ├── DailyJournal.jsx │ │ ├── Readme.md │ │ ├── components │ │ │ ├── EntryDetails.jsx │ │ │ ├── EntryList.jsx │ │ │ └── JournalEntryForm.jsx │ │ └── styles.css │ ├── date-time-counter │ │ ├── CdTimerComp.jsx │ │ ├── CountDownTimer.jsx │ │ ├── DateTimeDisplay.jsx │ │ ├── Readme.md │ │ ├── cover.png │ │ ├── datetime.css │ │ └── hooks │ │ │ └── useCountDown.js │ ├── dev-jokes │ │ ├── DevJokes.tsx │ │ ├── Readme.md │ │ ├── Spinner.tsx │ │ ├── background.jpg │ │ ├── cover.png │ │ ├── devJokes.css │ │ └── spinner.css │ ├── devblog │ │ ├── App.jsx │ │ ├── Devblog.jsx │ │ ├── Pages │ │ │ ├── Article.jsx │ │ │ └── Home.jsx │ │ ├── Readme.md │ │ ├── components │ │ │ ├── Header.jsx │ │ │ ├── Loading.jsx │ │ │ └── Post.jsx │ │ ├── cover.png │ │ ├── dracula.css │ │ └── styles.css │ ├── dice-simulator │ │ ├── DiceContainer.jsx │ │ ├── DiceSimulator.jsx │ │ ├── Readme.md │ │ ├── cover.jpg │ │ └── styles.jsx │ ├── dictionary │ │ ├── Dictionary.js │ │ ├── DictionaryContainer.jsx │ │ └── Readme.md │ ├── digital-delight │ │ ├── DigitsDelight.jsx │ │ ├── Readme.md │ │ ├── components │ │ │ ├── CategoryFact.jsx │ │ │ ├── Categoryfact.css │ │ │ ├── DigitsDelightsConstant.js │ │ │ ├── Modal.css │ │ │ ├── Modal.jsx │ │ │ ├── Random.css │ │ │ ├── Random.jsx │ │ │ ├── TextFact.css │ │ │ ├── TextFact.jsx │ │ │ ├── Title.css │ │ │ ├── Title.jsx │ │ │ └── images │ │ │ │ ├── date.png │ │ │ │ ├── math.png │ │ │ │ └── year.png │ │ ├── cover.png │ │ └── styles.css │ ├── download-fetch-response │ │ ├── CustomHooks │ │ │ └── UseCustomFetchAPI.jsx │ │ ├── DownloadFetchResponse.jsx │ │ ├── Readme.md │ │ ├── cover.png │ │ └── response.scss │ ├── dynamic-routes │ │ ├── Data.js │ │ ├── DynamicRoutes.jsx │ │ ├── Navbar.jsx │ │ ├── Readme.md │ │ ├── cover.png │ │ └── dynamicRoutes.css │ ├── emoji-game │ │ ├── App.css │ │ ├── EmojiGame.jsx │ │ ├── Readme.md │ │ ├── components │ │ │ ├── Instruction.jsx │ │ │ ├── buttn.css │ │ │ ├── buttn.jsx │ │ │ ├── emoji.js │ │ │ ├── list.css │ │ │ ├── list.jsx │ │ │ ├── welcome.css │ │ │ └── welcome.jsx │ │ └── cover.png │ ├── emojipedia │ │ ├── Emojipedia.jsx │ │ ├── components │ │ │ ├── EmojiCard.jsx │ │ │ └── SkeletonCard.jsx │ │ ├── config.js │ │ ├── cover.png │ │ └── readme.md │ ├── expanding-cards │ │ ├── Expanding-Card-Images.jsx │ │ ├── ExpandingCards.css │ │ ├── ExpandingCards.jsx │ │ ├── Readme.md │ │ ├── cover.png │ │ └── images │ │ │ ├── photo-1511028931355-082bb4781053.jpg │ │ │ ├── photo-1559511331-7649f05944e3.jpg │ │ │ ├── photo-1567117439290-a8b5ef5bab89.jpg │ │ │ ├── photo-1608822246990-be7bc0d9b2d7.jpg │ │ │ └── photo-1611773951628-0d5b4c2507fb.jpg │ ├── expenses-tracker │ │ ├── ExpensesTracker.tsx │ │ ├── Readme.md │ │ ├── components │ │ │ └── modal.tsx │ │ └── cover.png │ ├── flip-card-effect │ │ ├── Card.jsx │ │ ├── FlipCardEffect.css │ │ ├── FlipCardEffect.jsx │ │ ├── Readme.md │ │ └── cover.png │ ├── fun-quiz │ │ ├── EndScreen.jsx │ │ ├── FrontScreen.jsx │ │ ├── FrontScreen.scss │ │ ├── FunQuiz.jsx │ │ ├── FunQuiz.scss │ │ ├── QuizScreen.jsx │ │ ├── QuizScreen.scss │ │ ├── Readme.md │ │ ├── _variables.scss │ │ ├── confuse.gif │ │ └── options.json │ ├── git-hub-profile-search │ │ ├── GithubProfileSearch.jsx │ │ ├── Readme.md │ │ ├── components │ │ │ ├── Input.jsx │ │ │ └── Results.jsx │ │ ├── context │ │ │ └── ResultContextProvider.jsx │ │ ├── cover.png │ │ └── styles.css │ ├── github-user-finder │ │ ├── GithubUserFinder.jsx │ │ ├── Readme.md │ │ ├── components │ │ │ ├── InputCard.css │ │ │ ├── InputCard.jsx │ │ │ └── ProfileCard.jsx │ │ ├── context │ │ │ └── ResultContext.jsx │ │ ├── cover.png │ │ └── styles.css │ ├── github-user-search │ │ ├── GitHubUserCard.jsx │ │ ├── GitHubUserSearch.jsx │ │ ├── Readme.md │ │ └── cover.png │ ├── hangman-game │ │ ├── HangmanGame.tsx │ │ ├── Readme.md │ │ ├── components │ │ │ ├── Drawing.tsx │ │ │ ├── Keyboard.tsx │ │ │ ├── Main.tsx │ │ │ └── Word.tsx │ │ ├── constants │ │ │ ├── constants.tsx │ │ │ └── wordList.json │ │ ├── cover.png │ │ ├── styled-components.tsx │ │ └── styles.css │ ├── image-carousel │ │ ├── ImageCarousel.tsx │ │ ├── Readme.md │ │ ├── common │ │ │ └── data.ts │ │ ├── cover.png │ │ └── styles.css │ ├── image-collector │ │ ├── ImageCollector.jsx │ │ ├── cover.png │ │ ├── readme.md │ │ └── styles.css │ ├── image-compressor │ │ ├── ImageCompressor.jsx │ │ ├── Util.js │ │ ├── cover.png │ │ ├── readme.md │ │ └── styles.css │ ├── image-gallery-using-unsplash-api │ │ ├── ImageGalleryUsingUnsplashApi.jsx │ │ ├── Readme.md │ │ ├── components │ │ │ ├── Photo.jsx │ │ │ └── searchBar.jsx │ │ ├── cover.png │ │ └── styles.css │ ├── image-gallery │ │ ├── Gallery.jsx │ │ ├── GalleryAPI.js │ │ ├── Imagegallery.jsx │ │ ├── Readme.md │ │ ├── cover.png │ │ └── styles.css │ ├── infinite-scroll-with-debouncing-concept │ │ ├── InfiniteScrollWithDebouncingConcept.jsx │ │ ├── Readme.md │ │ ├── assets │ │ │ └── loading-loader.gif │ │ ├── components │ │ │ └── InfiniteScroll.jsx │ │ └── styles.css │ ├── infinite-scrolling │ │ ├── InfiniteScrolling.jsx │ │ ├── Posts.jsx │ │ ├── cover.png │ │ ├── readme.md │ │ └── styles.css │ ├── inspirational-quotes │ │ ├── Card.tsx │ │ ├── InspirationalQuotes.tsx │ │ ├── Quotes.ts │ │ ├── Readme.md │ │ ├── Types.ts │ │ ├── card.css │ │ ├── cover.png │ │ └── inspirational-quotes.css │ ├── keeper │ │ ├── CreateArea.jsx │ │ ├── Header.jsx │ │ ├── Keeper.css │ │ ├── Keeper.jsx │ │ ├── Notes.jsx │ │ └── README.md │ ├── language-translater │ │ ├── LanguageTranslater.jsx │ │ ├── Languages.jsx │ │ ├── Readme.md │ │ ├── cover.png │ │ ├── icons │ │ │ ├── Copy.svg │ │ │ ├── Expand_down.svg │ │ │ ├── Horizontal_top_left_main.svg │ │ │ ├── Sort_alfa.svg │ │ │ ├── hero_img.jpg │ │ │ ├── logo.svg │ │ │ └── sound_max_fill.svg │ │ └── styles.css │ ├── markdown-editor │ │ ├── Downloader.jsx │ │ ├── MarkdownEditor.jsx │ │ ├── Output.jsx │ │ ├── Readme.md │ │ ├── cover.png │ │ └── styles.css │ ├── memory-game │ │ ├── NetlifyCardGame.jsx │ │ ├── NetlifyCardGame.scss │ │ ├── Readme.md │ │ ├── close.png │ │ ├── guideimages │ │ │ ├── s1.png │ │ │ ├── s2.png │ │ │ ├── s3.png │ │ │ └── s4.png │ │ ├── icons │ │ │ ├── q1.png │ │ │ ├── q2.png │ │ │ ├── q3.png │ │ │ ├── q4.png │ │ │ ├── q5.png │ │ │ ├── q6.png │ │ │ ├── q7.png │ │ │ └── q8.png │ │ ├── modal.jsx │ │ ├── modal.scss │ │ ├── question.png │ │ └── question1.png │ ├── motivate-me │ │ ├── MotivateMe.jsx │ │ ├── README.md │ │ ├── assets │ │ │ └── background1.jpg │ │ ├── components │ │ │ ├── cards │ │ │ │ ├── index.css │ │ │ │ └── index.jsx │ │ │ ├── header │ │ │ │ ├── index.css │ │ │ │ └── index.jsx │ │ │ └── search-bar │ │ │ │ ├── index.css │ │ │ │ └── index.jsx │ │ ├── container │ │ │ ├── index.jsx │ │ │ └── motivational_quote_card_container_main.css │ │ ├── cover.png │ │ ├── data.js │ │ └── motivate_me_style.css │ ├── movies │ │ ├── Movie.jsx │ │ ├── MovieContainer.jsx │ │ ├── Readme.md │ │ ├── cover.png │ │ └── movies.css │ ├── multiplayer-tic-tac-toe │ │ ├── MultiplayerTicTacToe.tsx │ │ ├── Readme.md │ │ ├── components │ │ │ ├── ButtonGroup.tsx │ │ │ ├── FinalMessage.tsx │ │ │ ├── GameGrid.tsx │ │ │ ├── Icon.tsx │ │ │ └── PlayAgainButton.tsx │ │ ├── cover.png │ │ └── data.ts │ ├── multiselect-component │ │ ├── MultiselectComponent.tsx │ │ ├── Readme.md │ │ ├── components │ │ │ ├── CloseOptionsIcon.tsx │ │ │ ├── MultiSelect.tsx │ │ │ └── OpenOptionsIcon.tsx │ │ ├── cover.png │ │ └── styles.scss │ ├── navbar │ │ ├── Backgrounds.js │ │ ├── NavBar.css │ │ ├── NavBar.jsx │ │ ├── Readme.md │ │ ├── assest │ │ │ ├── Calendar.png │ │ │ ├── Chart.png │ │ │ ├── Chat.png │ │ │ ├── Search.png │ │ │ ├── Setting.png │ │ │ ├── User.png │ │ │ ├── img.png │ │ │ └── logo.png │ │ ├── backgroundImages │ │ │ ├── bg_create.png │ │ │ ├── bg_dashboard.png │ │ │ ├── bg_ideas.png │ │ │ ├── bg_join.png │ │ │ └── bg_search.png │ │ └── navListItems.jsx │ ├── news-feed-application │ │ ├── NewsFeedApplication.jsx │ │ ├── component │ │ │ ├── CustomToggleButtonGroup.jsx │ │ │ └── NewsCard.jsx │ │ ├── countriesAndCategories.js │ │ ├── cover.png │ │ ├── readme.md │ │ └── styles.css │ ├── notehack │ │ ├── Notehack.jsx │ │ ├── Readme.md │ │ ├── components │ │ │ ├── addNote │ │ │ │ ├── AddNote.css │ │ │ │ └── AddNote.jsx │ │ │ ├── header │ │ │ │ ├── Header.css │ │ │ │ └── Header.jsx │ │ │ ├── noteList │ │ │ │ ├── NoteList.css │ │ │ │ └── NoteList.jsx │ │ │ └── singleNote │ │ │ │ ├── SingleNote.css │ │ │ │ └── SingleNote.jsx │ │ ├── cover.png │ │ └── styles.css │ ├── object-detector │ │ ├── ObjectDetector.jsx │ │ ├── Readme.md │ │ └── cover.png │ ├── org-tree │ │ ├── BasicTree.jsx │ │ ├── Readme.md │ │ ├── basic-tree.css │ │ ├── cover.png │ │ └── org.js │ ├── pagination │ │ ├── Pagination.jsx │ │ ├── Readme.md │ │ ├── components │ │ │ ├── Card.jsx │ │ │ └── Users.jsx │ │ ├── cover.png │ │ ├── hooks │ │ │ └── useFetch.js │ │ └── utils │ │ │ └── paginate.js │ ├── password-generator │ │ ├── PasswordGenerator.jsx │ │ ├── Readme.md │ │ ├── data.json │ │ └── password-generator-style.css │ ├── personal-profile-card │ │ ├── PersonalProfileCard.tsx │ │ ├── Readme.md │ │ ├── components │ │ │ ├── profile-card.tsx │ │ │ └── profile-form.tsx │ │ ├── cover.png │ │ ├── images │ │ │ ├── edit.svg │ │ │ ├── placeholder_cover.jpg │ │ │ └── placeholder_profile.png │ │ ├── index.css │ │ └── types │ │ │ └── index.ts │ ├── photoshopapp │ │ ├── Constants.js │ │ ├── Photoshopapp.jsx │ │ ├── Readme.md │ │ ├── SidebarItem.jsx │ │ ├── Slider.jsx │ │ ├── cover.png │ │ └── styles.css │ ├── pixy │ │ ├── Pixy.jsx │ │ ├── Readme.md │ │ ├── components │ │ │ ├── drawing-panel │ │ │ │ ├── DrawingPanel.css │ │ │ │ └── DrawingPanel.jsx │ │ │ ├── pixel │ │ │ │ ├── Pixel.css │ │ │ │ └── Pixel.jsx │ │ │ └── row │ │ │ │ ├── Row.css │ │ │ │ └── Row.jsx │ │ ├── cover.png │ │ └── styles.css │ ├── play-dictionary │ │ ├── PlayDictionary.css │ │ ├── PlayDictionary.jsx │ │ ├── Readme.md │ │ ├── ThemeConstant.js │ │ └── cover.png │ ├── play-fair-cipher │ │ ├── PlayFairCipher.tsx │ │ ├── cover.png │ │ ├── readme.md │ │ └── styles.css │ ├── pokemon-stats │ │ ├── PokemonStats.tsx │ │ ├── Readme.md │ │ ├── components │ │ │ ├── Pokemoncard.tsx │ │ │ ├── Search.tsx │ │ │ ├── pokecard.css │ │ │ └── search.css │ │ ├── cover.png │ │ ├── images │ │ │ └── background.jpg │ │ ├── styles.css │ │ └── types.d.ts │ ├── qr-code-generator │ │ ├── QrCodeGenerator.jsx │ │ ├── Readme.md │ │ ├── cover.png │ │ └── styles.css │ ├── quiz-app │ │ ├── QuizApp.tsx │ │ ├── cover.png │ │ └── types.ts │ ├── quizeo │ │ ├── Quizeo.jsx │ │ ├── Readme.md │ │ ├── components │ │ │ ├── directory │ │ │ │ ├── directory.component.jsx │ │ │ │ └── directory.styles.css │ │ │ ├── header │ │ │ │ ├── header.component.jsx │ │ │ │ └── header.styles.css │ │ │ ├── menu-item │ │ │ │ ├── menu-item.styles.css │ │ │ │ └── menuItem.component.jsx │ │ │ └── questions │ │ │ │ ├── questions.component.jsx │ │ │ │ └── questions.styles.css │ │ ├── cover.png │ │ ├── data │ │ │ └── movie.data.jsx │ │ ├── pages │ │ │ ├── moviePage │ │ │ │ └── moviePage.component.jsx │ │ │ └── score-page │ │ │ │ ├── score.component.jsx │ │ │ │ └── score.styles.css │ │ ├── quizeo.css │ │ └── redux │ │ │ ├── directory │ │ │ ├── directory-reducer.js │ │ │ └── directory-selectors.js │ │ │ ├── movie │ │ │ ├── movie-reducer.js │ │ │ └── movieSelector.js │ │ │ ├── questions │ │ │ ├── question-types.js │ │ │ ├── question.utils.js │ │ │ └── questions-action.js │ │ │ ├── root-reducer.js │ │ │ └── store.js │ ├── quote-generator │ │ ├── QuoteGenerator.jsx │ │ ├── Readme.md │ │ └── quoteGenerator.css │ ├── random-avatar │ │ ├── RandomAvatar.js │ │ ├── Readme.md │ │ └── styles.css │ ├── random-meme-generator │ │ ├── RandomMemeGenerator.jsx │ │ ├── cover.png │ │ ├── random-meme-generator.css │ │ └── readme.md │ ├── random-quote-card-generator │ │ ├── Components │ │ │ ├── CardContainer.jsx │ │ │ ├── SideBarDesign.jsx │ │ │ └── SideBarOperation.jsx │ │ ├── RandomQuoteCardGenerator.jsx │ │ ├── Readme.md │ │ └── data.js │ ├── react-gradients │ │ ├── GradientComponent.jsx │ │ ├── ReactGradients.jsx │ │ ├── Readme.md │ │ ├── cover.png │ │ └── gradients.json │ ├── react-multistep-form │ │ ├── FormWrapper.tsx │ │ ├── ReactMultistepForm.tsx │ │ ├── Readme.md │ │ ├── accountInfo.tsx │ │ ├── contactInfo.tsx │ │ ├── cover.png │ │ ├── customHook │ │ │ └── useMultistepForm.ts │ │ ├── personalInfo.tsx │ │ └── react-multistep-form.css │ ├── react-todo-app │ │ ├── ReactTodoApp.jsx │ │ ├── Readme.md │ │ ├── components │ │ │ ├── Input.jsx │ │ │ ├── Todo.jsx │ │ │ └── TodoList.jsx │ │ └── react-todo.css │ ├── react-transitions │ │ ├── PrioitySearch.jsx │ │ ├── ReactTransitions.jsx │ │ ├── Readme.md │ │ ├── TransitionSearch.jsx │ │ ├── cover.png │ │ └── styles.css │ ├── registration-form │ │ ├── Readme.md │ │ ├── Registration-form.css │ │ ├── RegistrationForm.jsx │ │ └── cover.png │ ├── roll-the-dice │ │ ├── Readme.md │ │ ├── RollTheDice.jsx │ │ ├── assets │ │ │ ├── 1.png │ │ │ ├── 2.png │ │ │ ├── 3.png │ │ │ ├── 4.png │ │ │ ├── 5.png │ │ │ ├── 6.png │ │ │ ├── close.png │ │ │ ├── guide │ │ │ │ ├── guide-1.jpg │ │ │ │ ├── guide-2.jpg │ │ │ │ ├── guide-3.jpg │ │ │ │ ├── guide-4.jpg │ │ │ │ ├── guide-5.jpg │ │ │ │ ├── guide-6.jpg │ │ │ │ ├── guide-7.jpg │ │ │ │ └── guide-8.jpg │ │ │ ├── help.png │ │ │ └── trophy.png │ │ ├── components │ │ │ ├── App.jsx │ │ │ ├── Game.jsx │ │ │ ├── Guide.jsx │ │ │ ├── Player.jsx │ │ │ ├── SelectPlayer.jsx │ │ │ └── Winner.jsx │ │ ├── constant │ │ │ └── guide.js │ │ ├── context │ │ │ └── diceContext.jsx │ │ ├── cover.png │ │ ├── hooks │ │ │ ├── useGame.js │ │ │ ├── useRandom.js │ │ │ └── useStep.js │ │ ├── roll-the-dice.css │ │ └── utils │ │ │ └── randomNumber.js │ ├── savings-calculator │ │ ├── SavingsCalculator.jsx │ │ ├── components │ │ │ ├── SavingOptions │ │ │ │ ├── index.jsx │ │ │ │ ├── savingOptions.scss │ │ │ │ └── tests │ │ │ │ │ └── SavingOptionsTest.test.jsx │ │ │ └── Total │ │ │ │ ├── index.jsx │ │ │ │ ├── tests │ │ │ │ └── TotalTest.test.jsx │ │ │ │ └── total.scss │ │ ├── cover.png │ │ ├── images │ │ │ ├── arrow-down.png │ │ │ └── piggy-bank.png │ │ ├── readme.md │ │ ├── styles │ │ │ ├── _variables.scss │ │ │ └── savingsCalculator.scss │ │ └── utils │ │ │ ├── getCalculatedSaving.js │ │ │ └── getCurrencySymbol.js │ ├── schulte-tables │ │ ├── GameTable.jsx │ │ ├── Readme.md │ │ ├── SchulteTables.jsx │ │ ├── components │ │ │ ├── Button.jsx │ │ │ ├── SchulteTable.jsx │ │ │ └── Timer.jsx │ │ ├── cover.png │ │ ├── styles.css │ │ └── utils │ │ │ ├── generateColor.js │ │ │ ├── shuffleArray.js │ │ │ └── timeFormatter.js │ ├── self-clicking-button │ │ ├── Readme.md │ │ ├── SelfClickingButton.jsx │ │ ├── cover.png │ │ └── styles.css │ ├── shopping-cart │ │ ├── Readme.md │ │ ├── ShoppingCart.tsx │ │ ├── ShoppingCartTypes.interface.ts │ │ ├── components │ │ │ ├── CartItem.tsx │ │ │ ├── Container.tsx │ │ │ └── Navbar.tsx │ │ ├── context.tsx │ │ ├── cover.png │ │ ├── data.ts │ │ └── reducer.ts │ ├── sierpinski-triangle │ │ ├── README.md │ │ ├── SierpinskiTriangle.tsx │ │ ├── Triangle.ts │ │ ├── constants.ts │ │ └── utils │ │ │ └── index.ts │ ├── simple-calculator │ │ ├── Readme.md │ │ ├── SimpleCalculator.jsx │ │ ├── components │ │ │ ├── Buttons.jsx │ │ │ ├── Calculator.jsx │ │ │ └── Display.jsx │ │ ├── cover.png │ │ └── styles │ │ │ ├── Buttons.css │ │ │ ├── Calculator.css │ │ │ └── Display.css │ ├── simple-live-chat │ │ ├── Readme.md │ │ ├── SimpleLiveChat.jsx │ │ ├── _variables.scss │ │ ├── components │ │ │ ├── chat │ │ │ │ ├── chat-body.jsx │ │ │ │ ├── chat-body.scss │ │ │ │ ├── chat-footer.jsx │ │ │ │ ├── chat-footer.scss │ │ │ │ ├── chat-header.jsx │ │ │ │ ├── chat-header.scss │ │ │ │ ├── chat.jsx │ │ │ │ ├── chat.scss │ │ │ │ ├── components │ │ │ │ │ └── User.jsx │ │ │ │ └── hooks │ │ │ │ │ └── useDateFormat.js │ │ │ ├── signin-button.jsx │ │ │ ├── signin-button.scss │ │ │ └── user │ │ │ │ ├── user.jsx │ │ │ │ └── user.scss │ │ ├── firebase.js │ │ ├── images │ │ │ ├── github.png │ │ │ ├── icon.png │ │ │ ├── send.svg │ │ │ ├── twitter.png │ │ │ └── user_icon.png │ │ └── simpleLiveChat.scss │ ├── simple-seo-component │ │ ├── Readme.md │ │ ├── SimpleSeoComponent.jsx │ │ ├── blog.png │ │ └── styles.css │ ├── smart-converter │ │ ├── Readme.md │ │ ├── SmartConverter.jsx │ │ ├── components │ │ │ └── TextForm.jsx │ │ ├── cover.png │ │ └── styles.css │ ├── smart-todo-list │ │ ├── App.jsx │ │ ├── Readme.md │ │ ├── SmartTodoList.jsx │ │ ├── assets │ │ │ └── logo.png │ │ ├── components │ │ │ ├── Alert.jsx │ │ │ ├── DeleteModal.jsx │ │ │ ├── Filter.jsx │ │ │ └── TodoList.jsx │ │ ├── context │ │ │ └── appContext.jsx │ │ ├── cover.png │ │ ├── helper │ │ │ └── dateFormater.js │ │ └── styles.css │ ├── social-card │ │ ├── CardDetails.jsx │ │ ├── CardForm.jsx │ │ ├── Readme.md │ │ ├── SocialCard.jsx │ │ ├── context │ │ │ └── SocialContext.js │ │ ├── cover.png │ │ └── social-card.css │ ├── star-rating │ │ ├── Readme.md │ │ ├── StarRating.jsx │ │ ├── cover.png │ │ └── styles.css │ ├── states │ │ ├── Readme.md │ │ ├── States.jsx │ │ ├── cover.png │ │ └── states.css │ ├── steps │ │ ├── App.tsx │ │ ├── Readme.md │ │ ├── Steps.tsx │ │ ├── components │ │ │ ├── Button.tsx │ │ │ ├── StepMessage.tsx │ │ │ └── StepsWrapper.tsx │ │ ├── cover.png │ │ └── styles.css │ ├── sticky-notes │ │ ├── App.jsx │ │ ├── Readme.md │ │ ├── StickyNotes.jsx │ │ ├── components │ │ │ ├── Form.jsx │ │ │ └── Note.jsx │ │ ├── cover.png │ │ └── styles.css │ ├── tenzies-game │ │ ├── Components │ │ │ ├── Dice.jsx │ │ │ └── Main.jsx │ │ ├── Readme.md │ │ ├── TenziesGame.jsx │ │ ├── cover.png │ │ └── styles.css │ ├── text-analyzer │ │ ├── Readme.md │ │ ├── TextAnalyzer.jsx │ │ ├── components │ │ │ ├── Actions.jsx │ │ │ ├── Result.jsx │ │ │ ├── Spinner.jsx │ │ │ ├── TextArea.jsx │ │ │ └── results │ │ │ │ ├── Entities.jsx │ │ │ │ ├── Paraphaser.jsx │ │ │ │ ├── Sentiments.jsx │ │ │ │ └── TextImage.jsx │ │ ├── context │ │ │ ├── playContext.js │ │ │ └── textStates.jsx │ │ ├── cover.png │ │ ├── images │ │ │ └── background.jpg │ │ └── styles │ │ │ ├── Button.css │ │ │ ├── spinner.css │ │ │ └── styles.css │ ├── text-avatar │ │ ├── Readme.md │ │ ├── TextAvatar.tsx │ │ ├── components │ │ │ ├── Avatar │ │ │ │ ├── index.tsx │ │ │ │ └── style.scss │ │ │ └── UserCard │ │ │ │ ├── index.tsx │ │ │ │ └── style.scss │ │ ├── constants.ts │ │ ├── cover.png │ │ ├── hooks │ │ │ └── useFetchUser.ts │ │ ├── style.scss │ │ ├── types.ts │ │ └── utils │ │ │ └── index.ts │ ├── tic-tac-toe-game │ │ ├── Readme.md │ │ ├── TicTacToeGame.jsx │ │ ├── components │ │ │ └── Game.jsx │ │ ├── cover.png │ │ └── styles │ │ │ └── tic-tac-toe-tj.css │ ├── tip-calculator │ │ ├── Readme.md │ │ ├── TipCalculator.jsx │ │ ├── components │ │ │ ├── BillAmount.jsx │ │ │ ├── DisplayCard.jsx │ │ │ ├── PeopleAmount.jsx │ │ │ └── TipAmount.jsx │ │ └── styles.css │ ├── travel-advisor │ │ ├── Readme.md │ │ ├── TravelAdvisor.jsx │ │ ├── api │ │ │ └── travel_api.js │ │ ├── components │ │ │ ├── DropDown.jsx │ │ │ ├── Map.jsx │ │ │ └── Search.jsx │ │ ├── cover.png │ │ ├── styles.css │ │ └── styles │ │ │ ├── dropdown.css │ │ │ └── search.css │ ├── tube2tunes │ │ ├── Readme.md │ │ ├── Tube2tunes.jsx │ │ ├── components │ │ │ ├── Loader.jsx │ │ │ ├── loader.css │ │ │ ├── tubeTuneLogo.svg │ │ │ └── utils.js │ │ ├── cover.png │ │ └── styles.css │ ├── typing-speed-test │ │ ├── TypingSpeedTest.jsx │ │ ├── components │ │ │ ├── ResultModal.jsx │ │ │ ├── Statistics.jsx │ │ │ └── TypingTest.jsx │ │ ├── context │ │ │ └── TypingTestContext.js │ │ ├── cover.png │ │ ├── readme.md │ │ ├── styles.css │ │ └── utils │ │ │ └── index.js │ ├── url-shortner │ │ ├── Readme.md │ │ ├── UrlShortner.jsx │ │ └── cover.jpg │ ├── video-preview │ │ ├── Card.tsx │ │ ├── CardContainer.tsx │ │ ├── Readme.md │ │ ├── VideoPreview.tsx │ │ ├── cover.png │ │ ├── styles.css │ │ └── utils │ │ │ └── constants.ts │ ├── weather │ │ ├── Weather.jsx │ │ ├── components │ │ │ ├── CityInput.jsx │ │ │ ├── ForecastData.jsx │ │ │ ├── ForecastItem.jsx │ │ │ ├── WeatherDetail.jsx │ │ │ └── WeatherOutput.jsx │ │ ├── readme.md │ │ ├── styles.scss │ │ └── utils │ │ │ └── index.js │ ├── why-react │ │ ├── Readme.md │ │ ├── WhyReact.jsx │ │ ├── cover.png │ │ └── why-react.css │ ├── why-typescript │ │ ├── Readme.md │ │ ├── WhyTypescript.tsx │ │ ├── data.json │ │ └── wizard │ │ │ ├── contract.tsx │ │ │ ├── index.css │ │ │ ├── index.tsx │ │ │ └── page.tsx │ ├── wordle │ │ ├── Readme.md │ │ ├── Wordle.tsx │ │ ├── assets │ │ │ ├── backspace.svg │ │ │ └── share.svg │ │ ├── components │ │ │ ├── ClipboardModal.tsx │ │ │ ├── EndScreen.tsx │ │ │ ├── KeyboardKey.tsx │ │ │ ├── WordleRow.tsx │ │ │ └── WordleTile.tsx │ │ ├── data │ │ │ └── words.ts │ │ ├── styles.css │ │ ├── types.ts │ │ └── utils.ts │ └── zoomlogin │ │ ├── MainPage.js │ │ ├── Readme.md │ │ ├── Zoomlogin.js │ │ ├── assets │ │ ├── apple-logo.png │ │ ├── apple-logo.svg │ │ ├── cancelCircle.svg │ │ ├── chatbot │ │ │ ├── cancelCircle.svg │ │ │ ├── document-new-svgrepo-com.svg │ │ │ ├── document-svgrepo-com.svg │ │ │ ├── down-arrow.svg │ │ │ ├── downloadArrow.svg │ │ │ ├── microphone.svg │ │ │ ├── smile-circle-svgrepo-com.svg │ │ │ └── zoomsupport.png │ │ ├── circle-information-svgrepo-com.svg │ │ ├── copyright.svg │ │ ├── down-arrow.svg │ │ ├── downloadArrow.svg │ │ ├── eye-password-hide-svgrepo-com.svg │ │ ├── eye-password-show-svgrepo-com.svg │ │ ├── facebook-logo.svg │ │ ├── github.svg │ │ ├── google-logo.png │ │ ├── google-logo.svg │ │ ├── icons8-linkedin.svg │ │ ├── linkedin-logo.png │ │ ├── linkedin.svg │ │ ├── linkedinImg.png │ │ ├── microphone.svg │ │ ├── sso-logo.svg │ │ ├── window-open.png │ │ ├── zoom-help-1.png │ │ ├── zoom-help-2.png │ │ ├── zoom-img.png │ │ ├── zoom-logo.png │ │ ├── zoom-svgrepo-com.svg │ │ ├── zoomAd.png │ │ ├── zoomImg.png │ │ └── zoomsupport.png │ │ ├── components │ │ ├── App.js │ │ ├── CopyText.js │ │ ├── Footer.js │ │ ├── Zoom │ │ │ ├── ZoomHeader.js │ │ │ ├── ZoomLanguageDropdown.js │ │ │ ├── ZoomPage.js │ │ │ ├── ZoomSignin.js │ │ │ └── ZoomSpinner.js │ │ └── chatbot │ │ │ ├── ActionProvider.jsx │ │ │ ├── ChatbotOverride.css │ │ │ ├── DogPicture.jsx │ │ │ ├── FlightBotAvatar.jsx │ │ │ ├── Header.jsx │ │ │ ├── MessageParser.jsx │ │ │ ├── MyUserAvatar.jsx │ │ │ ├── config.js │ │ │ └── widget │ │ │ ├── AccountBlockedOption.jsx │ │ │ ├── AccountDisabledOption.jsx │ │ │ ├── AccountLockedOptions.jsx │ │ │ ├── BlockedResetPasswordOption.jsx │ │ │ ├── CustomMessages.jsx │ │ │ ├── Error1003Option.jsx │ │ │ ├── InitialButtonOptions.jsx │ │ │ ├── InitialCustomMessages.jsx │ │ │ ├── ResetPasswordDepth1Options.jsx │ │ │ └── ResetPasswordDepth2Options.jsx │ │ └── styles.css ├── registerServiceWorker.js ├── reportWebVitals.js ├── service-worker.js └── setupTests.js ├── tailwind.config.js └── tsconfig.json /.dockerignore: -------------------------------------------------------------------------------- 1 | Dockerfile 2 | Dockerfile.DEV 3 | Dockerfile.PROD 4 | Dockerfile.prod 5 | .dockerignore 6 | node_modules 7 | yarn.lock 8 | package-lock.json 9 | npm-debug.log 10 | README.md 11 | .next 12 | build -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .github 3 | service-worker.js 4 | registerServiceWorker.js 5 | reportWebVitals.js 6 | setupTests.js 7 | .build; 8 | package-lock.json; 9 | package.json; 10 | yarn.lock; 11 | tailwind.config.js; 12 | tsconfig.json; 13 | postcss.config.js; 14 | Dockerfile.DEV; 15 | Dockerfile.PROD; 16 | -------------------------------------------------------------------------------- /.gitconfig: -------------------------------------------------------------------------------- 1 | [core] 2 | filemode = false 3 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # Lines starting with '#' are comments. 2 | 3 | # Each line is a file pattern followed by one or more owners. 4 | 5 | # These owners will be the default owners for everything in the repo. 6 | 7 | @atapas @koustov @Sachin-chaurasiya 8 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [reactplay] 4 | open_collective: react-play 5 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | # Update GitHub Actions 4 | - package-ecosystem: "github-actions" 5 | directory: "/" 6 | schedule: 7 | interval: "weekly" 8 | -------------------------------------------------------------------------------- /.github/workflows/author-assign.yml: -------------------------------------------------------------------------------- 1 | name: 'Author Assign' 2 | 3 | on: 4 | pull_request_target: 5 | types: [opened, reopened] 6 | 7 | jobs: 8 | assign-author: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: toshimaru/auto-author-assign@v2.1.0 12 | with: 13 | repo-token: '${{ secrets.GITHUB_TOKEN }}' 14 | -------------------------------------------------------------------------------- /.gitpod.yml: -------------------------------------------------------------------------------- 1 | tasks: 2 | - init: npm install --legacy-peer-deps 3 | command: npm run start 4 | 5 | ports: 6 | - port: 3000 7 | onOpen: open-preview 8 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | yarn pre-commit -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": true, 3 | "tabWidth": 2, 4 | "printWidth": 100, 5 | "singleQuote": true, 6 | "trailingComma": "none" 7 | } 8 | -------------------------------------------------------------------------------- /Dockerfile.DEV: -------------------------------------------------------------------------------- 1 | FROM node:lts-alpine 2 | 3 | RUN apk add --no-cache libc6-compat 4 | 5 | ENV NODE_ENV development 6 | 7 | WORKDIR /usr/src/app 8 | 9 | COPY ./package.json /usr/src/app/ 10 | 11 | RUN yarn install --frozen-lockfile 12 | 13 | EXPOSE 3000 -------------------------------------------------------------------------------- /Dockerfile.PROD: -------------------------------------------------------------------------------- 1 | FROM buildkite/puppeteer as build 2 | 3 | WORKDIR /app/code 4 | COPY . /app/code 5 | 6 | RUN npm install 7 | RUN npm run build 8 | 9 | FROM nginx:stable-alpine 10 | COPY --from=build /app/code/build /usr/share/nginx/html 11 | EXPOSE 80 12 | 13 | CMD ["nginx", "-g", "daemon off;"] -------------------------------------------------------------------------------- /docker-compose-dev.yml: -------------------------------------------------------------------------------- 1 | version: '3.3' 2 | 3 | networks: 4 | react-play-network: 5 | 6 | services: 7 | ### For development 8 | web-dev: 9 | build: 10 | context: . 11 | dockerfile: ./Dockerfile.DEV 12 | command: yarn run start 13 | container_name: react-play-frontend-app-dev 14 | image: react-play-frontend-app-dev:v1 15 | restart: always 16 | volumes: 17 | - ./:/usr/src/app 18 | - /usr/src/app/node_modules 19 | ports: 20 | - '3000:3000' 21 | networks: 22 | - react-play-network 23 | -------------------------------------------------------------------------------- /docker-compose-prod.yml: -------------------------------------------------------------------------------- 1 | version: '3.3' 2 | 3 | networks: 4 | react-play-network: 5 | 6 | services: 7 | ### For production 8 | web-prod: 9 | build: 10 | context: . 11 | dockerfile: ./Dockerfile.PROD 12 | container_name: react-play-frontend-app-prod 13 | image: react-play-frontend-app-prod:v1 14 | restart: always 15 | ports: 16 | - '80:80' 17 | networks: 18 | - react-play-network 19 | -------------------------------------------------------------------------------- /e2e/pageobjects/enums/constant.ts: -------------------------------------------------------------------------------- 1 | export enum Constant { 2 | TRENDING_PLAYS_CARD_COUNT = 5, 3 | PARTNERS_SPONSERS_LINKS_COUNT = 10 4 | } 5 | -------------------------------------------------------------------------------- /e2e/pageobjects/pages/testimonials.ts: -------------------------------------------------------------------------------- 1 | import { Locator, Page } from '@playwright/test'; 2 | 3 | export class Testimonials { 4 | testimonialsTitle: Locator; 5 | testimonialsBtn: Locator; 6 | testimonialCards: Locator; 7 | constructor(page: Page) { 8 | this.testimonialsTitle = page.getByRole('heading', { name: 'What Our Community Says!' }); 9 | this.testimonialsBtn = page.getByRole('button', { name: 'Testimonial' }); 10 | this.testimonialCards = page.locator('[class*="grid"]'); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [[redirects]] 2 | from = "/*" 3 | to = "/index.html" 4 | status = 200 5 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {} 5 | } 6 | }; 7 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/public/favicon.ico -------------------------------------------------------------------------------- /public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/public/logo.png -------------------------------------------------------------------------------- /public/logo152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/public/logo152x152.png -------------------------------------------------------------------------------- /public/logo16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/public/logo16x16.png -------------------------------------------------------------------------------- /public/logo192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/public/logo192x192.png -------------------------------------------------------------------------------- /public/logo24x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/public/logo24x24.png -------------------------------------------------------------------------------- /public/logo32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/public/logo32x32.png -------------------------------------------------------------------------------- /public/logo48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/public/logo48x48.png -------------------------------------------------------------------------------- /public/maskable_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/public/maskable_icon.png -------------------------------------------------------------------------------- /public/og-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/public/og-image.png -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | Sitemap: https://reactplay.io/sitemap.xml 4 | -------------------------------------------------------------------------------- /public/sponsors-partners/bugfender.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/public/sponsors-partners/bugfender.png -------------------------------------------------------------------------------- /public/sponsors-partners/indiafoss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/public/sponsors-partners/indiafoss.png -------------------------------------------------------------------------------- /public/sponsors-partners/nhost.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/public/sponsors-partners/nhost.png -------------------------------------------------------------------------------- /public/sponsors-partners/react-nexus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/public/sponsors-partners/react-nexus.png -------------------------------------------------------------------------------- /public/sponsors-partners/react-summit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/public/sponsors-partners/react-summit.png -------------------------------------------------------------------------------- /public/sponsors-partners/stackstream.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/public/sponsors-partners/stackstream.png -------------------------------------------------------------------------------- /src/App.jsx: -------------------------------------------------------------------------------- 1 | import './App.css'; 2 | import { Outlet } from 'react-router-dom'; 3 | 4 | function App() { 5 | return ( 6 |
7 | 8 |
9 | ); 10 | } 11 | 12 | export default App; 13 | -------------------------------------------------------------------------------- /src/ErrorBoundary/ErrorBoundary.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { ErrorBoundary } from 'react-error-boundary'; 3 | import ErrorFallback from './ErrorFallback'; 4 | 5 | const ErrorBoundry = ({ children }) => { 6 | const onErrorReset = () => { 7 | /** 8 | * Had to do this because we have placed the ErrorBoundary at the top level 9 | * and we can't use the react-router hooks outside of the Router 10 | */ 11 | window.location.href = '/'; 12 | }; 13 | 14 | return ( 15 | 16 | {children} 17 | 18 | ); 19 | }; 20 | 21 | export default ErrorBoundry; 22 | -------------------------------------------------------------------------------- /src/common/activities/2playsamonth/BannerLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/src/common/activities/2playsamonth/BannerLogo.png -------------------------------------------------------------------------------- /src/common/activities/2playsamonth/HeroCoders.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/src/common/activities/2playsamonth/HeroCoders.png -------------------------------------------------------------------------------- /src/common/activities/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/src/common/activities/banner.png -------------------------------------------------------------------------------- /src/common/activities/hackathon/Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/src/common/activities/hackathon/Logo.png -------------------------------------------------------------------------------- /src/common/activities/hackathon/img-hero-coders.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/src/common/activities/hackathon/img-hero-coders.png -------------------------------------------------------------------------------- /src/common/badges-dashboard/BadgeCard.jsx: -------------------------------------------------------------------------------- 1 | const BadgeCard = ({ id, coverImage, tag, level }) => { 2 | return ( 3 |
4 | {`${tag} 5 | {tag} 6 | {level} 7 |
8 | ); 9 | }; 10 | 11 | export default BadgeCard; 12 | -------------------------------------------------------------------------------- /src/common/badges-dashboard/ClaimedBadges.jsx: -------------------------------------------------------------------------------- 1 | import BadgeCard from './BadgeCard'; 2 | 3 | const ClaimedBadges = ({ badges }) => { 4 | return ( 5 | <> 6 | {badges.length === 0 ? ( 7 |

No badges claimed yet

8 | ) : ( 9 | badges.map((badge) => { 10 | return ( 11 | 17 | ); 18 | }) 19 | )} 20 | 21 | ); 22 | }; 23 | 24 | export default ClaimedBadges; 25 | -------------------------------------------------------------------------------- /src/common/badges-dashboard/OverView.jsx: -------------------------------------------------------------------------------- 1 | import BadgeCard from './BadgeCard'; 2 | 3 | const OverView = ({ badges }) => { 4 | return ( 5 | <> 6 | {badges.length === 0 ? ( 7 |

You have not earned badges

8 | ) : ( 9 | badges.map((badge) => { 10 | return ( 11 | 17 | ); 18 | }) 19 | )} 20 | 21 | ); 22 | }; 23 | 24 | export default OverView; 25 | -------------------------------------------------------------------------------- /src/common/badges-dashboard/badge.css: -------------------------------------------------------------------------------- 1 | .app-header-btn { 2 | display: flex; 3 | flex-direction: row; 4 | align-items: center; 5 | border: solid 1px var(--color-brand-primary); 6 | border-radius: 2rem; 7 | grid-gap: 0.4rem; 8 | padding: 0.4rem 1.2rem; 9 | font-size: var(--fs-sm); 10 | text-decoration: none; 11 | width: unset; 12 | height: unset; 13 | transition: all 0.12s ease-in-out; 14 | } 15 | 16 | .app-header-btn--primary { 17 | border: solid 2px var(--color-brand-primary); 18 | background-color: var(--color-brand-primary); 19 | color: var(--color-neutral-80); 20 | grid-gap: 0.3rem; 21 | margin-left: 0.4rem; 22 | } 23 | -------------------------------------------------------------------------------- /src/common/badges-dashboard/img/Finisher - 512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/src/common/badges-dashboard/img/Finisher - 512x512.png -------------------------------------------------------------------------------- /src/common/badges-dashboard/img/Participant - 512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/src/common/badges-dashboard/img/Participant - 512x512.png -------------------------------------------------------------------------------- /src/common/badges-dashboard/img/Winner – 512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/src/common/badges-dashboard/img/Winner – 512x512.png -------------------------------------------------------------------------------- /src/common/badges-dashboard/img/p.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/src/common/badges-dashboard/img/p.jpg -------------------------------------------------------------------------------- /src/common/badges-dashboard/img/pf.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/src/common/badges-dashboard/img/pf.jpg -------------------------------------------------------------------------------- /src/common/badges-dashboard/img/pfw.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reactplay/react-play/591fff35f9cb31c7410144f77f57c0362e7b1adf/src/common/badges-dashboard/img/pfw.jpg -------------------------------------------------------------------------------- /src/common/components/Notification.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { ToastContainer } from 'react-toastify'; 3 | 4 | function Notification() { 5 | return ( 6 | 18 | ); 19 | } 20 | 21 | export default Notification; 22 | -------------------------------------------------------------------------------- /src/common/components/YouTubeEmbed.jsx: -------------------------------------------------------------------------------- 1 | const YouTubeEmbed = ({ videoId, title }) => { 2 | return ( 3 |
4 |