├── .github ├── ISSUE_TEMPLATE │ ├── bug.yaml │ ├── documentationupdate.yaml │ ├── featurerequest.yaml │ └── styles.yml ├── dependabot.yml ├── pull_request_template.md └── workflows │ ├── auto-comments.yml │ ├── close_old_issues.yaml │ ├── codeql.yml │ ├── label-issues.yml │ ├── linting.yml │ └── main.yml ├── .gitignore ├── .gitpod.yml ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Express_js_Server ├── index.js ├── package-lock.json └── package.json ├── LICENSE ├── README.md └── frontend ├── build ├── Hourglass.gif ├── favicon.ico └── robots.txt ├── package.json ├── public ├── Hourglass.gif ├── favicon.ico ├── icon-192x192.png ├── icon-256x256.png ├── icon-384x384.png ├── icon-512x512.png ├── index.html ├── manifest.json ├── robots.txt └── sitemap.xml └── src ├── App.css ├── App.js ├── Components ├── BlogPage │ ├── Blog.js │ └── style.module.css ├── Blogs │ ├── BlogsElements.js │ ├── index.js │ ├── review.css │ └── review.js ├── ButtonElements.js ├── Consult_With_Doctor │ ├── Consult_With_Doctor.js │ ├── ConsultationForm.js │ ├── form.css │ └── styles.css ├── Contactus │ ├── Contact.css │ ├── Contact.js │ └── pexels-pixabay-326333 (2).webp ├── DarkMode │ ├── DarkMode.css │ ├── DarkMode.js │ ├── Moon.svg │ └── Sun.svg ├── Feedback │ ├── FeedbackElements.js │ ├── Toast.css │ └── index.js ├── Footer │ ├── FooterElements.js │ └── index.js ├── Forgot_password │ ├── ForgotPassword.js │ ├── ForgotPasswordelements.js │ ├── Forgot_password.css │ └── OTPVerfication.js ├── GoToTop.js ├── Habit_Tracker │ ├── HabitsData.js │ ├── index.js │ └── style.module.css ├── Herosection │ ├── HeroElements.js │ └── index.js ├── InfoSection │ ├── Data.js │ ├── InfoElements.js │ └── index.js ├── Loader │ ├── Loader.css │ └── Loader.js ├── Navbar │ ├── NavbarElements.js │ └── index.js ├── Profile │ ├── index.js │ └── profileElements.js ├── Services │ ├── CardAnimation.js │ ├── ServicesElements.js │ ├── Services_Data.js │ └── index.js ├── Signin │ ├── SigninElements.js │ └── index.js ├── Signup │ ├── Captcha.js │ ├── PhoneInput.css │ ├── SignupElements.js │ └── index.js ├── Team │ └── index.js ├── Testimonials │ ├── CardAnimation.js │ ├── CardStyle.js │ ├── ProductForSlider.js │ ├── ProductSlider.css │ ├── Swiper.css │ ├── TestimonialsElements.js │ └── index.js └── Workshops │ ├── Workshops.js │ └── styles.css ├── assests ├── googleLogo.png └── manifest.json ├── firebase-config.js ├── images ├── 5Ds.webp ├── Distraction tec.webp ├── Embracing_the_Power_of_Menstruation.webp ├── EnterOTP.webp ├── ErrorPage404-03.webp ├── Forgotpassword.webp ├── Hourglass.gif ├── No-yes.webp ├── SignIn.webp ├── SignUp.webp ├── WorkshopImg.webp ├── about.webp ├── captcha_Bg.webp ├── construct.webp ├── contact_image.webp ├── group-quiting.webp ├── image1.webp ├── image2.webp ├── image3.webp ├── image4.webp ├── isolation.webp ├── mental-health-advice.webp ├── mental-health.webp ├── natural remedies.webp ├── no-drinking.webp ├── non-alco-cocktail.webp └── smoking-is-Injurious-to-Health.webp ├── index.css ├── index.js ├── logo.svg ├── pages ├── Error404.js ├── ForgotPassword.js ├── HabitTracker.js ├── blogs.js ├── consult_with_doctor.js ├── contact.js ├── develop.js ├── feedback.js ├── index.js ├── profile.js ├── signin.js ├── signup.js └── team.js ├── reportWebVitals.js ├── service-worker.js ├── serviceWorkerRegistration.js └── videos ├── video.mp4 └── video1.mp4 /.github/ISSUE_TEMPLATE/bug.yaml: -------------------------------------------------------------------------------- 1 | name: "🐞 Bug Report" 2 | description: "Create a report to help us improve" 3 | title: "BUG:" 4 | labels: [Bug, Needs Triage] 5 | body: 6 | - type: checkboxes 7 | attributes: 8 | label: "Is there an existing issue for this?" 9 | description: "Please search to see if an issue already exists for the bug you encountered." 10 | options: 11 | - label: "I have searched the existing issues" 12 | required: true 13 | - type: textarea 14 | attributes: 15 | label: "What happened?" 16 | description: "A concise description of what you're experiencing." 17 | validations: 18 | required: true 19 | - type: textarea 20 | attributes: 21 | label: "Add ScreenShots" 22 | description: "Add sufficient SS to explain your issue." 23 | validations: 24 | required: true 25 | - type: dropdown 26 | id: browsers 27 | attributes: 28 | label: "What browser are you seeing the problem on?" 29 | multiple: true 30 | options: 31 | - "Firefox" 32 | - "Chrome" 33 | - "Microsoft Edge" 34 | - "Safari" 35 | - "Arc" 36 | - type: checkboxes 37 | attributes: 38 | label: "Record" 39 | options: 40 | - label: "I agree to follow this project's Code of Conduct" 41 | required: true 42 | - label: "I'm a GSSOC'23 contributor" 43 | - label: "I want to work on this issue" 44 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/documentationupdate.yaml: -------------------------------------------------------------------------------- 1 | name: "📑 Documentation Update" 2 | description: "Improve Documentation" 3 | title: "DOC:" 4 | labels: [DOC, Needs Triage] 5 | body: 6 | 7 | - type: textarea 8 | attributes: 9 | label: "What's wrong with the existing documentation" 10 | description: "Which things we need to add or delete" 11 | validations: 12 | required: true 13 | - type: textarea 14 | attributes: 15 | label: "Add ScreenShots" 16 | description: "Add sufficient SS to explain your issue." 17 | validations: 18 | required: true 19 | 20 | - type: checkboxes 21 | attributes: 22 | label: "Record" 23 | options: 24 | - label: "I agree to follow this project's Code of Conduct" 25 | required: true 26 | - label: "I'm a GSSOC'23 contributor" 27 | - label: "I want to work on this issue" 28 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/featurerequest.yaml: -------------------------------------------------------------------------------- 1 | name: "✨ Feature Request" 2 | description: "Suggest an idea for this project " 3 | title: "Feat:" 4 | labels: [Feat, Needs Triage] 5 | body: 6 | 7 | - type: textarea 8 | attributes: 9 | label: "Describe the feature" 10 | description: 11 | validations: 12 | required: true 13 | - type: textarea 14 | attributes: 15 | label: "Add ScreenShots" 16 | description: "Add sufficient SS to explain your issue." 17 | validations: 18 | required: true 19 | 20 | - type: checkboxes 21 | attributes: 22 | label: "Record" 23 | options: 24 | - label: "I agree to follow this project's Code of Conduct" 25 | required: true 26 | - label: "I'm a GSSOC'23 contributor" 27 | - label: "I want to work on this issue" 28 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/styles.yml: -------------------------------------------------------------------------------- 1 | name: Style Changing Request 2 | description: Suggest a style design 3 | title: '[style]: ' 4 | labels: ['enhancement'] 5 | 6 | body: 7 | - type: markdown 8 | attributes: 9 | value: | 10 | Thanks for taking the time to fill out this template! 11 | - type: textarea 12 | id: style-idea 13 | attributes: 14 | label: What's the style idea? 15 | placeholder: Add descriptions 16 | value: 'We need to improve' 17 | validations: 18 | required: true 19 | - type: textarea 20 | id: screenshots 21 | attributes: 22 | label: Add screenshots 23 | description: Add screenshots to show the demo 24 | placeholder: Add screenshots 25 | value: 'Add screenshots' 26 | - type: checkboxes 27 | id: terms 28 | attributes: 29 | label: Code of Conduct 30 | description: By submitting this issue, you agree to follow our Code of Conduct 31 | options: 32 | - label: I agree to follow this project's Code of Conduct 33 | required: true 34 | - label: I have read the [Contributing Guidelines](https://github.com/MonalikaPatnaik/UMatter/blob/main/CONTRIBUTING.md) 35 | required: true 36 | - label: I agree to follow this project's [Code of Conduct](https://github.com/MonalikaPatnaik/UMatter/blob/main/CODE_OF_CONDUCT.md) 37 | required: true 38 | - label: I'm a GSSoC'23 contributor 39 | - label: I want to work on this issue 40 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | # Update node dependencies 4 | - package-ecosystem: "npm" 5 | directory: "/" 6 | schedule: 7 | interval: "daily" 8 | allow: 9 | # Allow updates for Lodash 10 | - dependency-name: "lodash" 11 | # Allow updates for React and any packages starting "react" 12 | - dependency-name: "react*" 13 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Fixes Issue 4 | 5 | 6 | 7 | 8 | 9 | ## Changes proposed 10 | 11 | 12 | 13 | 14 | 19 | 20 | ## Check List (Check all the applicable boxes) 21 | 22 | - [ ] My code follows the code style of this project. 23 | - [ ] My change requires changes to the documentation. 24 | - [ ] I have updated the documentation accordingly. 25 | - [ ] All new and existing tests passed. -------------------------------------------------------------------------------- /.github/workflows/auto-comments.yml: -------------------------------------------------------------------------------- 1 | name: Auto Comment 2 | on: 3 | issues: 4 | types: 5 | - opened 6 | - closed 7 | - assigned 8 | pull_request: 9 | types: 10 | - opened 11 | - closed 12 | 13 | jobs: 14 | run: 15 | runs-on: ubuntu-latest 16 | steps: 17 | - name: Auto Comment on Issues Opened 18 | uses: wow-actions/auto-comment@v1 19 | with: 20 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 21 | issuesOpened: | 22 | 👋 @{{ author }} 23 | 24 | Thank you for raising an issue. We will investigate into the matter and get back to you as soon as possible. 25 | 26 | Please make sure you have given us as much context as possible. 27 | 28 | - name: Auto Comment on Issues Closed 29 | uses: wow-actions/auto-comment@v1 30 | with: 31 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 32 | issuesClosed: | 33 | 👋 @{{ author }} This issue is closed. 34 | 35 | - name: Auto Comment on Pull Request Merged 36 | uses: wow-actions/auto-comment@v1 37 | with: 38 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 39 | pullRequestMerged: | 40 | 👋 @{{ author }} 🎉 Congrats on your merged pull request! Thanks for the valuable contribution! 👏🎉 Congrats on your merged pull request! Thanks for the valuable contribution! 👏 41 | 42 | - name: Auto Comment on Pull Request Opened 43 | uses: wow-actions/auto-comment@v1 44 | with: 45 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 46 | pullRequestOpened: | 47 | Hello👋 @{{ author }}, I hope you are doing well! 48 |
49 | Thank you for raising your pull request and contributing to our Community 🎉 50 | 51 | Please make sure you have followed our contributing guidelines. We will review it as soon as possible. 52 | 53 | - name: Auto Comment on Issues Assigned 54 | uses: wow-actions/auto-comment@v1 55 | with: 56 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 57 | issuesAssigned: | 58 | Hello @{{ author }}, thank you for raising an issue. 🙌 I have assigned the issue to you. You can now start working on it. If you encounter any problems, please feel free to connect with us. 👍 59 | 60 | 61 | -------------------------------------------------------------------------------- /.github/workflows/close_old_issues.yaml: -------------------------------------------------------------------------------- 1 | name: Close Old Issues 2 | on: 3 | schedule: 4 | - cron: "0 0 * * *" 5 | 6 | jobs: 7 | close-issues: 8 | runs-on: ubuntu-latest 9 | 10 | steps: 11 | - name: Checkout Repository 12 | uses: actions/checkout@v3 13 | 14 | - name: Close Old Issues 15 | run: | 16 | open_issues=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ 17 | "https://api.github.com/repos/${{ github.repository }}/issues?state=open" \ 18 | | jq -r '.[] | .number') 19 | 20 | for issue in $open_issues; do 21 | # Get the last updated timestamp of the issue 22 | last_updated=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ 23 | "https://api.github.com/repos/${{ github.repository }}/issues/$issue" \ 24 | | jq -r '.updated_at') 25 | 26 | days_since_update=$(( ( $(date +%s) - $(date -d "$last_updated" +%s) ) / 86400 )) 27 | 28 | if [ $days_since_update -gt 7 ]; then # Modify the condition to check if days_since_update is greater than 7 29 | curl -s -X PATCH -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ 30 | -H "Accept: application/vnd.github.v3+json" \ 31 | -d '{"state":"closed"}' \ 32 | "https://api.github.com/repos/${{ github.repository }}/issues/$issue" 33 | fi 34 | done 35 | -------------------------------------------------------------------------------- /.github/workflows/codeql.yml: -------------------------------------------------------------------------------- 1 | # For most projects, this workflow file will not need changing; you simply need 2 | # to commit it to your repository. 3 | # 4 | # You may wish to alter this file to override the set of languages analyzed, 5 | # or to provide custom queries or build logic. 6 | # 7 | # ******** NOTE ******** 8 | # We have attempted to detect the languages in your repository. Please check 9 | # the `language` matrix defined below to confirm you have the correct set of 10 | # supported CodeQL languages. 11 | # 12 | name: "CodeQL" 13 | 14 | on: 15 | push: 16 | branches: [ "main" ] 17 | pull_request: 18 | # The branches below must be a subset of the branches above 19 | branches: [ "main" ] 20 | schedule: 21 | - cron: '43 3 * * 6' 22 | 23 | jobs: 24 | analyze: 25 | name: Analyze 26 | runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }} 27 | timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }} 28 | permissions: 29 | actions: read 30 | contents: read 31 | security-events: write 32 | 33 | strategy: 34 | fail-fast: false 35 | matrix: 36 | language: [ 'javascript' ] 37 | # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby', 'swift' ] 38 | # Use only 'java' to analyze code written in Java, Kotlin or both 39 | # Use only 'javascript' to analyze code written in JavaScript, TypeScript or both 40 | # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support 41 | 42 | steps: 43 | - name: Checkout repository 44 | uses: actions/checkout@v3 45 | 46 | # Initializes the CodeQL tools for scanning. 47 | - name: Initialize CodeQL 48 | uses: github/codeql-action/init@v2 49 | with: 50 | languages: ${{ matrix.language }} 51 | # If you wish to specify custom queries, you can do so here or in a config file. 52 | # By default, queries listed here will override any specified in a config file. 53 | # Prefix the list here with "+" to use these queries and those in the config file. 54 | 55 | # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs 56 | # queries: security-extended,security-and-quality 57 | 58 | 59 | # Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift). 60 | # If this step fails, then you should remove it and run the build manually (see below) 61 | - name: Autobuild 62 | uses: github/codeql-action/autobuild@v2 63 | 64 | # ℹ️ Command-line programs to run using the OS shell. 65 | # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun 66 | 67 | # If the Autobuild fails above, remove it and uncomment the following three lines. 68 | # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. 69 | 70 | # - run: | 71 | # echo "Run, Build Application using script" 72 | # ./location_of_script_within_repo/buildscript.sh 73 | 74 | - name: Perform CodeQL Analysis 75 | uses: github/codeql-action/analyze@v2 76 | with: 77 | category: "/language:${{matrix.language}}" -------------------------------------------------------------------------------- /.github/workflows/label-issues.yml: -------------------------------------------------------------------------------- 1 | name: Add Labels to Issues 2 | 3 | on: 4 | issues: 5 | types: [opened] 6 | 7 | jobs: 8 | add-labels: 9 | runs-on: ubuntu-latest 10 | permissions: 11 | issues: write 12 | 13 | steps: 14 | - name: Checkout repository 15 | uses: actions/checkout@v3 16 | 17 | - name: Add 'gssoc23' Label to Issue 18 | uses: actions/github-script@v4 19 | with: 20 | github-token: ${{ secrets.GITHUB_TOKEN }} 21 | script: | 22 | const { owner, repo } = context.repo; 23 | const issueNumber = context.payload.issue.number; 24 | const label = 'gssoc23'; 25 | 26 | const addLabelParams = { 27 | owner: owner, 28 | repo: repo, 29 | issue_number: issueNumber, 30 | labels: [label] 31 | }; 32 | 33 | await github.issues.addLabels(addLabelParams); 34 | 35 | console.log(`Added the 'gssoc23' label to Issue #${issueNumber}.`); 36 | -------------------------------------------------------------------------------- /.github/workflows/linting.yml: -------------------------------------------------------------------------------- 1 | name: Linting 2 | 3 | on: [push, pull_request] 4 | 5 | jobs: 6 | 7 | Linting: 8 | 9 | runs-on: ubuntu-latest 10 | 11 | steps: 12 | 13 | - name: Checkout 14 | uses: actions/checkout@v3 15 | with: 16 | ref: ${{ github.head_ref }} 17 | 18 | - name: Lint code with prettier 19 | run: npx prettier --write . 20 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: Node.js GitHub Action 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | path-ignore: 7 | - '.gitignore' 8 | - '*.md' 9 | - '*.txt' 10 | 11 | 12 | pull_request: 13 | branches: [main] 14 | path-ignore: 15 | - '.gitignore' 16 | - '*.md' 17 | - '*.txt' 18 | 19 | jobs: 20 | build: 21 | runs-on: ubuntu-latest 22 | 23 | steps: 24 | - name: Checkout repository 25 | uses: actions/checkout@v3 26 | 27 | - name: Setup Node.js 28 | uses: actions/setup-node@v3 29 | with: 30 | node-version: '14' 31 | 32 | - name: Install dependencies 33 | run: npm install 34 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | frontend/node_modules/ 5 | /.pnp 6 | .pnp.js 7 | Express_js_Server/node_modules/ 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env*.local 17 | .env 18 | .env.development.local 19 | .env.test.local 20 | .env.production.local 21 | 22 | npm-debug.log* 23 | yarn-debug.log* 24 | yarn-error.log* 25 | 26 | #file 27 | package-lock.json 28 | .vercel 29 | -------------------------------------------------------------------------------- /.gitpod.yml: -------------------------------------------------------------------------------- 1 | # This configuration file was automatically generated by Gitpod. 2 | # Please adjust to your needs (see https://www.gitpod.io/docs/introduction/learn-gitpod/gitpod-yaml) 3 | # and commit this file to your remote git repository to share the goodness with others. 4 | 5 | # Learn more from ready-to-use templates: https://www.gitpod.io/docs/introduction/getting-started/quickstart 6 | 7 | tasks: 8 | - init: npm install && npm run build 9 | command: npm run start 10 | 11 | 12 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | ## Contributor Covenant Code of Conduct 2 | 3 | ### Our Pledge 4 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. 5 | 6 | ### Our Standards 7 | Examples of behavior that contributes to creating a positive environment include: 8 | 9 | - Using welcoming and inclusive language 10 | - Being respectful of differing viewpoints and experiences 11 | - Gracefully accepting constructive criticism 12 | - Focusing on what is best for the community 13 | - Showing empathy towards other community members 14 | 15 | Examples of unacceptable behavior by participants include: 16 | 17 | - The use of sexualized language or imagery and unwelcome sexual attention or advances 18 | - Trolling, insulting/derogatory comments, and personal or political attacks 19 | - Public or private harassment 20 | - Publishing others' private information, such as a physical or electronic address, without explicit permission 21 | - Other conduct which could reasonably be considered inappropriate in a professional setting 22 | 23 | ### Our Responsibilities 24 | Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. 25 | 26 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. 27 | 28 | ### Scope 29 | This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. 30 | 31 | ### Enforcement 32 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at monalikapatnaik114@gamil.com. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. 33 | 34 | Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. 35 | 36 | ### Attribution 37 | This Code of Conduct is adapted from the Contributor Covenant, version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 38 | 39 | For answers to common questions about this code of conduct, see https://www.contributor-covenant.org/faq 40 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | ### 🧑‍💻 Contribution Guidelines 2 | 3 | ## Introduction 4 | We deeply value your enthusiasm for enhancing this project! We warmly welcome your valuable contributions and invite you to participate in elevating it to new heights. 5 | 6 | ## Getting Started 7 | There are some steps that you need to follow before making any contribution in this project, the following steps are important to get start. 8 | 9 | 10 | ### Step 1. Fork the Repository 11 | [Fork](https://github.com/MonalikaPatnaik/UMatter/fork) the repo first 12 | 13 | ### Step 2. Clone the forked Repository 14 | ``` 15 | git clone https://github.com//UMatter.git 16 | ``` 17 | ### Step 3. Set Up Remotes 18 | - Add a reference (remote) to the original repository: 19 | ``` 20 | git remote add upstream https://github.com/MonalikaPatnaik/UMatter.git 21 | ``` 22 | - Add a reference (remote) to your forked repository: 23 | ``` 24 | git remote add origin https://github.com//UMatter.git 25 | ``` 26 | 27 | ### Step 4. Check Remotes 28 | ``` 29 | git remote -v 30 | ``` 31 | 32 | ### Step 5. Keep Your Local Copy Updated 33 | ``` 34 | git pull upstream main 35 | ``` 36 | ### Step 6. Create a New Branch 37 | ``` 38 | git checkout -b 39 | ``` 40 | 41 | ## Making Changes 42 | Perform your desired changes to the code base. 43 | ### Step 7. Track Changes 44 | ``` 45 | # Track the changes 46 | git status 47 | 48 | # Add changes to Index 49 | git add . or git add 50 | ``` 51 | ### Step 8. Commit Changes 52 | ``` 53 | git commit -m "Write a meaningful but small commit message" 54 | ``` 55 | ### Step 9. Push Changes 56 | ``` 57 | git push -u origin 58 | ``` 59 | ### 10. Compare and Create 60 | - Click on "Compare And Pull Requests" 🔄 61 | - Make sure your pull request adheres to our contribution guidelines. Pull requests that do not meet the guidelines may be closed or discarded ❌ 62 | - Add an appropriate title and description to your pull request, explaining your changes with suitable explanations and screenshots 📝🖼️ 63 | - Click on "Create Pull Request" to submit your contribution for review ✅ 64 | 65 | We appreciate your understanding and cooperation in following our guidelines. Thank you for your contribution! 🙌 66 | Congratulations! You've made your PR with the desired changes. Once the PR is reviewed, it will be merged into the original codebase for everyone to see and use. 67 | 68 | ## Thank You! 69 | Thank you so much for contributing. We appreciate your valuable input, and we hope to see you again soon. 😊 70 | -------------------------------------------------------------------------------- /Express_js_Server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "express_js_server", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "bcrypt": "^5.1.0", 14 | "cors": "^2.8.5", 15 | "express": "^4.18.2", 16 | "jsonwebtoken": "^9.0.0", 17 | "nodemailer": "^6.9.2", 18 | "nodemon": "^2.0.22", 19 | "react-helmet": "^6.1.0", 20 | "sqlite": "^4.2.1", 21 | "sqlite3": "^5.1.6" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 MonalikaPatnaik 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /frontend/build/Hourglass.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MonalikaPatnaik/UMatter/df6f5eb9ccdae83b696891889cd1abd03c726daf/frontend/build/Hourglass.gif -------------------------------------------------------------------------------- /frontend/build/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MonalikaPatnaik/UMatter/df6f5eb9ccdae83b696891889cd1abd03c726daf/frontend/build/favicon.ico -------------------------------------------------------------------------------- /frontend/build/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /frontend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "homepage": ".", 3 | "name": "website", 4 | "version": "0.1.0", 5 | "proxy": "https://umatter.onrender.com", 6 | "private": true, 7 | "dependencies": { 8 | "@testing-library/jest-dom": "^5.16.5", 9 | "@testing-library/react": "^13.4.0", 10 | "@testing-library/user-event": "^13.5.0", 11 | "@types/react": "^18.2.7", 12 | "@types/react-dom": "^18.2.4", 13 | "dotenv": "^16.4.5", 14 | "firebase": "^10.1.0", 15 | "framer-motion": "^10.12.16", 16 | "react": "^18.2.0", 17 | "react-bootstrap": "^2.7.4", 18 | "react-bootstrap-icons": "^1.10.3", 19 | "react-dom": "^18.2.0", 20 | "react-helmet": "^6.1.0", 21 | "react-icons": "^4.10.1", 22 | "react-multi-carousel": "^2.8.4", 23 | "react-phone-number-input": "^3.3.0", 24 | "react-responsive-carousel": "^3.2.23", 25 | "react-router-dom": "^6.8.2", 26 | "react-router-hash-link": "^2.4.3", 27 | "react-scripts": "^5.0.1", 28 | "react-scroll": "^1.8.9", 29 | "react-slick": "^0.29.0", 30 | "react-toastify": "^9.1.3", 31 | "slick-carousel": "^1.8.1", 32 | "start": "^5.1.0", 33 | "styled-components": "^5.3.6", 34 | "swiper": "^9.4.1", 35 | "typed.js": "^2.0.16", 36 | "web-vitals": "^2.1.4" 37 | }, 38 | "scripts": { 39 | "start": "react-scripts start", 40 | "build": "react-scripts build", 41 | "test": "react-scripts test", 42 | "eject": "react-scripts eject" 43 | }, 44 | "eslintConfig": { 45 | "extends": [ 46 | "react-app", 47 | "react-app/jest" 48 | ] 49 | }, 50 | "browserslist": { 51 | "production": [ 52 | ">0.2%", 53 | "not dead", 54 | "not op_mini all" 55 | ], 56 | "development": [ 57 | "last 1 chrome version", 58 | "last 1 firefox version", 59 | "last 1 safari version" 60 | ] 61 | }, 62 | "devDependencies": { 63 | "gh-pages": "^5.0.0", 64 | "tailwindcss": "^3.3.2" 65 | }, 66 | "description": "
\r \r
", 67 | "main": "tailwind.config.js", 68 | "keywords": [], 69 | "author": "", 70 | "license": "ISC" 71 | } 72 | -------------------------------------------------------------------------------- /frontend/public/Hourglass.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MonalikaPatnaik/UMatter/df6f5eb9ccdae83b696891889cd1abd03c726daf/frontend/public/Hourglass.gif -------------------------------------------------------------------------------- /frontend/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MonalikaPatnaik/UMatter/df6f5eb9ccdae83b696891889cd1abd03c726daf/frontend/public/favicon.ico -------------------------------------------------------------------------------- /frontend/public/icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MonalikaPatnaik/UMatter/df6f5eb9ccdae83b696891889cd1abd03c726daf/frontend/public/icon-192x192.png -------------------------------------------------------------------------------- /frontend/public/icon-256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MonalikaPatnaik/UMatter/df6f5eb9ccdae83b696891889cd1abd03c726daf/frontend/public/icon-256x256.png -------------------------------------------------------------------------------- /frontend/public/icon-384x384.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MonalikaPatnaik/UMatter/df6f5eb9ccdae83b696891889cd1abd03c726daf/frontend/public/icon-384x384.png -------------------------------------------------------------------------------- /frontend/public/icon-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MonalikaPatnaik/UMatter/df6f5eb9ccdae83b696891889cd1abd03c726daf/frontend/public/icon-512x512.png -------------------------------------------------------------------------------- /frontend/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | UMatter 19 | 20 | 22 | 23 | 24 | 25 |
26 |
27 | 31 | 32 | -------------------------------------------------------------------------------- /frontend/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "theme_color": "#f69435", 3 | "background_color": "#f69435", 4 | "display": "standalone", 5 | "scope": "/", 6 | "start_url": "/", 7 | "name": "Umatter", 8 | "short_name": "umatter", 9 | "description": "UMatter is a one and all platform to help people quit bad habits by providing them with personalized sessions and one-to-one consultations with professionals.", 10 | "icons": [ 11 | { 12 | "src": "/icon-192x192.png", 13 | "sizes": "192x192", 14 | "type": "image/png" 15 | }, 16 | { 17 | "src": "/icon-256x256.png", 18 | "sizes": "256x256", 19 | "type": "image/png" 20 | }, 21 | { 22 | "src": "/icon-384x384.png", 23 | "sizes": "384x384", 24 | "type": "image/png" 25 | }, 26 | { 27 | "src": "/icon-512x512.png", 28 | "sizes": "512x512", 29 | "type": "image/png" 30 | } 31 | ] 32 | } -------------------------------------------------------------------------------- /frontend/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /frontend/public/sitemap.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | https://umatter-eight.vercel.app/ 8 | 2023-07-03T17:58:10+01:00 9 | 0.6 10 | 11 | 12 | https://umatter-eight.vercel.app/blogs 13 | 2023-07-03T17:58:10+01:00 14 | 1.0 15 | 16 | 17 | https://umatter-eight.vercel.app/feedback 18 | 2023-07-03T17:58:10+01:00 19 | 1.0 20 | 21 | 22 | https://umatter-eight.vercel.app/contact 23 | 2023-07-03T17:58:10+01:00 24 | 1.0 25 | 26 | 27 | https://umatter-eight.vercel.app/signin 28 | 2023-07-03T17:58:10+01:00 29 | 1.0 30 | 31 | 32 | https://umatter-eight.vercel.app/signup 33 | 2023-07-03T17:58:10+01:00 34 | 1.0 35 | 36 | 37 | https://umatter-eight.vercel.app/develop 38 | 2023-07-03T17:58:10+01:00 39 | 1.0 40 | 41 | 42 | https://umatter-eight.vercel.app/consultwithdoctor 43 | 2023-07-03T17:58:10+01:00 44 | 1.0 45 | 46 | 47 | https://umatter-eight.vercel.app/consultwithdoctor/consultationform 48 | 2023-07-03T17:58:10+01:00 49 | 0.4 50 | 51 | 52 | -------------------------------------------------------------------------------- /frontend/src/App.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css2?family=Poppins&display=swap"); 2 | @import url("https://fonts.googleapis.com/css2?family=Poppins:wght@700&display=swap"); 3 | @import url("https://fonts.googleapis.com/css2?family=League+Spartan:wght@500&family=Orbitron:wght@500&display=swap"); 4 | * { 5 | box-sizing: border-box; 6 | margin: 0; 7 | padding: 0; 8 | font-family: "Poppins", sans-serif; 9 | } 10 | /* body,html{ 11 | overflow-x: hidden; 12 | } */ 13 | ::-webkit-scrollbar { 14 | width: 8px; 15 | } 16 | 17 | ::-webkit-scrollbar-track { 18 | background: black; 19 | } 20 | 21 | ::-webkit-scrollbar-thumb { 22 | background: orange; 23 | border-radius: 10px; 24 | opacity: 0.5; 25 | } 26 | 27 | .dark-theme { 28 | --bg-clr: black; 29 | --text-clr: white; 30 | transition: all 0.3s ease-in-out; 31 | } 32 | 33 | .light-theme { 34 | --bg-clr: white; 35 | --text-clr: black; 36 | transition: all 0.3s ease-in-out; 37 | } 38 | 39 | .error-404-img { 40 | width: 100%; 41 | margin-top: 2rem; 42 | } 43 | @media only screen and (max-width: 560px) { 44 | .error-404-img { 45 | margin-top: 5rem; 46 | margin-bottom: 2rem; 47 | } 48 | } 49 | 50 | .Effect :hover { 51 | transform: scale(1.02); 52 | transition: all 0.2s ease-in-out; 53 | cursor: pointer; 54 | } 55 | .google-login-container{ 56 | display: flex; 57 | width: 80%; 58 | margin-top: 2.5rem; 59 | position: relative; 60 | } 61 | .login-button{ 62 | cursor: pointer; 63 | width: 100%; 64 | border-radius: 0.75rem; 65 | border-width: 2px; 66 | font-weight: 600; 67 | padding-bottom: 0.75rem; 68 | padding-top: 0.75rem ; 69 | --tw-border-opacity: 1; 70 | border-color: rgb(0 0 0 / var(--tw-border-opacity)); 71 | --tw-text-opacity: 1; 72 | color: rgb(0 0 0 / var(--tw-text-opacity)); 73 | } -------------------------------------------------------------------------------- /frontend/src/App.js: -------------------------------------------------------------------------------- 1 | import {lazy, Suspense} from 'react'; 2 | import './App.css'; 3 | import { HashRouter, Routes, Route } from 'react-router-dom'; 4 | import { Loader } from './Components/Loader/Loader'; 5 | import HabitTracker from './pages/HabitTracker'; 6 | 7 | 8 | const Home = lazy(()=>import("./pages")) 9 | const SigninPage = lazy(()=>import("./pages/signin")) 10 | const DevelopPage = lazy(()=>import("./pages/develop")) 11 | const Error404 = lazy(()=>import("./pages/Error404")) 12 | const BlogPage = lazy(()=>import("./pages/blogs")) 13 | const FeedbackPage = lazy(()=>import("./pages/feedback")) 14 | const Team = lazy(()=>import("./pages/team")) 15 | const SignupPage = lazy(()=>import("./pages/signup")) 16 | const Profile = lazy(()=>import("./pages/profile")) 17 | const Navbar = lazy(()=>import("./Components/Navbar")) 18 | const ContactPage = lazy(()=>import("./pages/contact")) 19 | const GetMail = lazy(()=>import("./Components/Forgot_password/ForgotPassword")) 20 | const Verify = lazy(()=>import("./Components/Forgot_password/OTPVerfication")) 21 | const Blog = lazy(()=>import("./Components/BlogPage/Blog")) 22 | const ConsultWithDoctor = lazy(()=>import('./pages/consult_with_doctor')) 23 | const Consultationform = lazy(()=>import('./Components/Consult_With_Doctor/ConsultationForm')) 24 | const Workshops = lazy(()=>import('./Components/Workshops/Workshops')) 25 | 26 | // import Contact from "./Components/Contactus/Contact"; 27 | // window.$crisp=[]; 28 | // window.CRISP_WEBSITE_ID="e79efdd2-abee-4a1e-b868-c7929585ebd9"; 29 | 30 | function App() { 31 | return ( 32 | 33 | 34 | 35 | }> 36 | 37 | 38 | } /> 39 | } /> 40 | } /> 41 | } /> 42 | } /> 43 | } /> 44 | } /> 45 | } /> 46 | } /> 47 | } /> 48 | } 51 | exact 52 | /> 53 | } 57 | /> 58 | } 62 | /> 63 | } /> 64 | } /> 65 | } /> 66 | } /> 67 | 68 | 69 | 70 | 71 | 72 | ); 73 | } 74 | 75 | export default App; -------------------------------------------------------------------------------- /frontend/src/Components/BlogPage/Blog.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import styles from "./style.module.css"; 3 | import Footer from '../Footer'; 4 | 5 | const blogcontent ={ 6 | tags:["Health"], 7 | title:"The Truth About Smoking: It's Not Just Bad for Your Lungs", 8 | metatitle:"There is no safe level of smoking. Even secondhand smoke can be harmful.", 9 | image:"https://cdn.pixabay.com/photo/2019/06/14/13/16/cigarette-4273574_1280.webp", 10 | content:[{ 11 | title:"Introduction", 12 | description:"Smoking is one of the leading causes of preventable deaths worldwide. It is a habit that affects not only the smoker but also those around them. Smoking can cause a wide range of health problems, from respiratory issues to heart disease and cancer. In this blog post, we will explore what smoking does to your body.", 13 | },{ 14 | title:"Respiratory System", 15 | description:"Smoking can cause significant damage to your respiratory system. It can lead to chronic bronchitis, emphysema, and lung cancer. Smoking causes inflammation in the airways, which can make it difficult to breathe. It can also damage the cilia, which are small hair-like structures that line the airways and help to clear mucus and dirt from the lungs. This can lead to a buildup of mucus and increase the risk of infection.", 16 | },{ 17 | title:"Reproductive System", 18 | description:"Smoking can also affect the reproductive system. It can reduce fertility in both men and women. In women, smoking can lead to complications during pregnancy, such as premature birth, low birth weight, and stillbirth. It can also increase the risk of ectopic pregnancy and miscarriage. In men, smoking can reduce sperm count and motility, which can make it more difficult to conceive. ", 19 | },{ 20 | title:"Cancer", 21 | description:"Smoking is one of the leading causes of cancer worldwide. It can increase the risk of lung cancer, throat cancer, mouth cancer, bladder cancer, and many other types of cancer. Smoking causes mutations in the DNA, which can lead to the growth of abnormal cells and the development of cancer. ", 22 | image:"https://cdn.pixabay.com/photo/2012/04/24/13/11/asbestos-39996_640.webp" 23 | },{ 24 | title:"Conclusion", 25 | description:"In conclusion, smoking can cause significant damage to your body. It can lead to respiratory issues, heart disease, reproductive problems, and cancer. Quitting smoking is one of the best things you can do for your health. It can reduce your risk of developing these health problems and improve your overall quality of life. If you are struggling to quit smoking, talk to your doctor or a smoking cessation specialist for help. " 26 | }] 27 | } 28 | 29 | function Blog() { 30 | return ( 31 | <> 32 |
33 | {/* Tags */} 34 |
35 | { 36 | blogcontent.tags.map((tag,index)=>{ 37 | return

{tag}

39 | }) 40 | } 41 |
42 | 43 | {/* TITLE */} 44 |
45 | {blogcontent.title} 46 |
47 | 48 | {/* Metatitle */} 49 |
50 | {blogcontent.metatitle} 51 |
52 | 53 | {/* Cover image */} 54 | blog images 55 | 56 | {/* Content --> combination of text , images(optional), title */} 57 | { 58 | blogcontent.content.map((block,index)=>{ 59 | return
60 |
61 | {block.title} 62 |
63 | { 64 | block.image && 65 | blog images 69 | } 70 | 71 |
72 | {block.description} 73 |
74 | 75 |
76 | }) 77 | 78 | } 79 |
80 |
81 | 82 | ) 83 | } 84 | 85 | export default Blog; 86 | -------------------------------------------------------------------------------- /frontend/src/Components/BlogPage/style.module.css: -------------------------------------------------------------------------------- 1 | .title{ 2 | font-family:'Trebuchet MS', sans-serif; 3 | } 4 | 5 | .contentTitle{ 6 | font-family:'Trebuchet MS', sans-serif; 7 | border-left: 6px rgba(0, 9, 130, 0.777) solid; 8 | 9 | } 10 | -------------------------------------------------------------------------------- /frontend/src/Components/Blogs/BlogsElements.js: -------------------------------------------------------------------------------- 1 | import styled from "styled-components"; 2 | 3 | export const BlogsContainer = styled.div` 4 | height: 100%; 5 | display: flex; 6 | flex-direction: column; 7 | justify-content: center; 8 | align-items: center; 9 | background: var(--bg-clr); 10 | `; 11 | 12 | export const ReadMoreButton = styled.button` 13 | background-color: #28b86b; 14 | cursor: pointer; 15 | color: white; 16 | border: none; 17 | padding: 10px 20px; 18 | border-radius: 4px; 19 | font-size: 16px; 20 | width: 50%; 21 | outline: none; 22 | opacity: 0; 23 | transition: opacity 0.3s ease-in-out; 24 | 25 | /* Position the button relative to its parent */ 26 | position: absolute; 27 | bottom: 25px; 28 | margin-left: 24%; 29 | 30 | /* Add a higher z-index to ensure it's above other elements */ 31 | z-index: 2; 32 | `; 33 | 34 | 35 | 36 | export const BlogsWrapper = styled.div` 37 | max-width: 1300px; 38 | margin: 0 auto; 39 | display: grid; 40 | justify-items:center; 41 | grid-template-columns: repeat(3, 1fr); 42 | grid-gap: 30px; 43 | padding: 0 20px; 44 | 45 | @media screen and (max-width: 900px) { 46 | grid-template-columns: repeat(2, 1fr); 47 | } 48 | @media screen and (max-width: 768px) { 49 | grid-template-columns: 1fr; 50 | padding: 0 10px; 51 | } 52 | 53 | > div:last-child { 54 | margin-bottom: 30px; 55 | } 56 | `; 57 | export const BlogsP = styled.p` 58 | font-size: 14px; 59 | text-align: center; 60 | opacity: 0; 61 | color: #fff; 62 | padding: 0 15px; 63 | margin-bottom: 3rem; 64 | transform: translateY(10px); 65 | transition: opacity 0.3s ease-in-out, transform 0.3s ease-in-out; 66 | `; 67 | export const BlogsIcon = styled.img` 68 | height: 100%; 69 | width: 100%; 70 | object-fit: cover; 71 | z-index: 0; 72 | position: absolute; 73 | `; 74 | 75 | export const BlogsH1 = styled.h1` 76 | margin: 50px 10px 30px 10px; 77 | opacity: 0; 78 | text-align: center; 79 | transform: translateY(10px); 80 | transition: opacity 0.3s ease-in-out, transform 0.3s ease-in-out; 81 | font-size: 18px; 82 | font-weight: 700; 83 | z-index: 10; 84 | // color: ${({ lightText }) => (lightText ? "#f7f8fa" : "#010606")}; 85 | color: white; 86 | 87 | @media screen and (max-width: 480px) { 88 | font-size: 15px; 89 | } 90 | `; 91 | 92 | 93 | 94 | 95 | export const BlogsCard = styled.div` 96 | vertical-align: middle; 97 | box-shadow: 0 0 30px -5px rgba(0, 0, 0, 0.4); 98 | overflow: hidden; 99 | position: relative; 100 | transition: all 0.35s; 101 | height: 23rem; 102 | cursor: pointer; 103 | 104 | @media screen and (max-width: 480px) { 105 | width: 90%; 106 | } 107 | 108 | &:hover { 109 | transform: scale(1.02); 110 | transition: all 0.35s; 111 | box-shadow: 0 0 60px -15px rgba(0, 0, 0, 0.6); 112 | 113 | ${ReadMoreButton} { 114 | opacity: 1; 115 | 116 | } 117 | ${BlogsIcon}{ 118 | opacity: 0.5; 119 | } 120 | 121 | ${BlogsH1}, ${BlogsP} { 122 | opacity: 1; 123 | transform: translateY(0); 124 | } 125 | } 126 | `; -------------------------------------------------------------------------------- /frontend/src/Components/Blogs/review.css: -------------------------------------------------------------------------------- 1 | .main{ 2 | background:var(--bg-clr); 3 | padding: 5rem; 4 | /* display: flex; 5 | flex-direction: column; 6 | justify-content: space-between; */ 7 | width: 100%; 8 | 9 | } 10 | 11 | .main h3{ 12 | color:var(--text-clr); 13 | font-size: 2rem; 14 | text-align: center; 15 | font-weight: 500; 16 | font-family: sans-serif; 17 | } 18 | 19 | iframe{ 20 | width: 300px; 21 | } 22 | 23 | .ele{ 24 | display: flex; 25 | flex-direction: row; 26 | justify-content: space-evenly; 27 | margin: 4% 11%; 28 | flex-wrap: wrap; 29 | column-gap: 40px; 30 | row-gap: 40px; 31 | } 32 | 33 | 34 | @media only screen and (max-width: 768px) { 35 | iframe{ 36 | width: 100vw; 37 | height: 200px; 38 | 39 | } 40 | .ele{ 41 | margin: 0 0; 42 | } 43 | .main{ 44 | padding: 10rem 5rem; 45 | } 46 | } -------------------------------------------------------------------------------- /frontend/src/Components/Blogs/review.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import "./review.css"; 3 | const Reviews = () => { 4 | return ( 5 |
6 |

Watch helpful videos!


7 |
8 | 15 | 22 | 29 | 36 | 43 | 50 | 57 | 64 |
65 |
66 | ); 67 | }; 68 | 69 | export default Reviews; 70 | -------------------------------------------------------------------------------- /frontend/src/Components/ButtonElements.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | import { Link } from 'react-scroll' 3 | 4 | export const Button = styled(Link)` 5 | border-radius: 50px; 6 | background: ${({ primary }) => (primary ? '#01BF71' : '#010606')}; 7 | white-space: nowrap; 8 | color: ${({ dark }) => (dark ? '#fff' : '#fff')}; 9 | padding: ${({ big }) => (big ? '14px 48px' : '12px 30px')}; 10 | font-size: ${({ fontBig }) => (fontBig ? '20px' : '16px')}; 11 | outline: none; 12 | border: 2px solid #01BF71; 13 | box-shadow: 0 3px 0 black, 0px 3px 6px #fff; 14 | // Issue #1: Type in cursor spelling was there earlier 15 | // Issue #1 Fixed: Corrected the spelling of cursor. 16 | cursor: pointer; 17 | 18 | display: flex; 19 | justify-content: center; 20 | align-items: center; 21 | transform: translate3d(0, 0.75em, -1em); 22 | transition: all 175ms cubic-bezier(0, 0, 1, 1);transition: 0.7s; 23 | 24 | &:hover { 25 | background: #fff; 26 | border: 2px solid #01BF71, 0px 4px 6px #fff; 27 | background: ${({ primary }) => (primary ? '#fff' : '#01BF71')}; 28 | box-shadow: 0 0 #01BF71; 29 | } 30 | ` 31 | -------------------------------------------------------------------------------- /frontend/src/Components/Consult_With_Doctor/ConsultationForm.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './form.css'; 3 | import Footer from '../Footer'; 4 | 5 | 6 | 7 | const ConsultationForm = () =>{ 8 | return( 9 | <> 10 | 11 |
12 |
13 |

Make an Appointment

14 |
15 |
16 | 17 | 18 |
19 |
20 | 21 | 22 |
23 |
24 | 25 | 26 |
27 |
28 | 29 | 30 |
31 |
32 | 33 | 34 |
35 |
36 | 37 | 38 |
39 | 40 |
41 |
42 |
43 |
44 | 45 | 46 | ); 47 | } 48 | 49 | 50 | export default ConsultationForm; -------------------------------------------------------------------------------- /frontend/src/Components/Consult_With_Doctor/form.css: -------------------------------------------------------------------------------- 1 | /* ConsultationForm */ 2 | .appointment-section { 3 | padding: 50px 0; 4 | /* background-color: #f9f9f9; */ 5 | 6 | } 7 | 8 | .appointment-form { 9 | max-width: 500px; 10 | margin: 0 auto; 11 | background: linear-gradient(-2deg, black, rgb(1, 147, 86), rgb(10, 201, 122)); 12 | padding: 30px; 13 | border-radius: 4px; 14 | box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); 15 | } 16 | 17 | .section-heading { 18 | font-size: 32px; 19 | text-align: center; 20 | margin-bottom: 30px; 21 | font-family: "Poppins"; 22 | font-style: normal; 23 | font-weight: 700; 24 | font-size: 2.3rem; 25 | line-height: 4rem; 26 | margin-bottom: 1rem; 27 | color: #01bf71; 28 | } 29 | 30 | .form-group { 31 | margin-bottom: 20px; 32 | } 33 | 34 | label { 35 | font-size: 16px; 36 | font-weight: bold; 37 | display: block; 38 | margin-bottom: 5px; 39 | color: white; 40 | } 41 | 42 | input[type="text"], 43 | input[type="email"], 44 | input[type="tel"], 45 | input[type="date"], 46 | input[type="time"], 47 | textarea { 48 | width: 100%; 49 | padding: 10px; 50 | font-size: 14px; 51 | border-radius: 4px; 52 | border: 1px solid #ccc; 53 | transition: border-color 0.3s ease; 54 | 55 | } 56 | 57 | input[type="text"]:focus, 58 | input[type="email"]:focus, 59 | input[type="tel"]:focus, 60 | input[type="date"]:focus, 61 | input[type="time"]:focus, 62 | textarea:focus { 63 | border-color: #e1f562; 64 | } 65 | 66 | textarea { 67 | resize: vertical; 68 | } 69 | 70 | button[type="submit"] { 71 | display: inline-block; 72 | background-color: #ff9f00; 73 | color: #fff; 74 | font-size: 14px; 75 | padding: 10px 20px; 76 | text-decoration: none; 77 | border-radius: 4px; 78 | transition: background-color 0.3s ease; 79 | border: none; 80 | cursor: pointer; 81 | } 82 | 83 | button[type="submit"]:hover { 84 | background-color: #e64a19; 85 | } 86 | 87 | -------------------------------------------------------------------------------- /frontend/src/Components/Consult_With_Doctor/styles.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: Arial, sans-serif; 3 | line-height: 1.5; 4 | margin: 0; 5 | } 6 | 7 | .hero { 8 | position: relative; 9 | background-image: url("https://images.unsplash.com/photo-1585842378054-ee2e52f94ba2?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8N3x8Q29uc3VsdCUyMERvY3RvcnN8ZW58MHx8MHx8fDA%3D&auto=format&fit=crop&w=1000&q=60"); 10 | background-size: cover; 11 | background-position: center; 12 | height: 90vh; 13 | display: flex; 14 | align-items: center; 15 | justify-content: center; 16 | color: #fff; 17 | text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3); 18 | margin-top: -80px; 19 | } 20 | 21 | .hero-content { 22 | text-align: center; 23 | } 24 | 25 | .hero-heading { 26 | font-family: "Poppins", sans-serif; 27 | font-size: 50px; 28 | font-weight: 1000; 29 | margin-bottom: 10px; 30 | letter-spacing: 2px; 31 | color: #fff; 32 | } 33 | 34 | .hero-text { 35 | font-family: "Poppins", sans-serif; 36 | font-size: 24px; 37 | 38 | margin-bottom: 30px; 39 | letter-spacing: 1px; 40 | color: #fff; 41 | } 42 | 43 | .btn-schedule { 44 | display: inline-block; 45 | background-color: #ff9800; 46 | color: #fff; 47 | font-family: "Poppins", sans-serif; 48 | font-size: 20px; 49 | padding: 14px 28px; 50 | text-decoration: none; 51 | border-radius: 4px; 52 | transition: background-color 0.3s ease; 53 | } 54 | 55 | .btn-schedule:hover { 56 | background-color: #ff5722; 57 | } 58 | 59 | section { 60 | padding: 40px 20px; 61 | } 62 | 63 | section h2 { 64 | font-size: 20px; 65 | margin-bottom: 10px; 66 | } 67 | 68 | .btn-schedule-primary { 69 | background-color: #ff5722; 70 | } 71 | 72 | .btn-schedule-primary:hover { 73 | background-color: #e64a19; 74 | } 75 | 76 | .btn-schedule-secondary { 77 | background-color: #ddd; 78 | color: #333; 79 | } 80 | 81 | .btn-schedule-secondary:hover { 82 | background-color: #ccc; 83 | cursor: pointer; 84 | } 85 | 86 | /* section 2 */ 87 | 88 | .doctor-profiles { 89 | padding: 50px 0; 90 | background-color: #f2f2f2; 91 | } 92 | 93 | .heading_drProfile { 94 | text-align: center; 95 | font-size: 40px; 96 | margin-bottom: 50px; 97 | } 98 | 99 | .slider { 100 | display: flex; 101 | overflow-x: auto; 102 | scroll-behavior: smooth; 103 | } 104 | 105 | ::-webkit-scrollbar { 106 | height: 2vh; 107 | } 108 | 109 | ::-webkit-scrollbar-track { 110 | background: transparent; 111 | } 112 | 113 | ::-webkit-scrollbar-thumb { 114 | background: orange; 115 | border-radius: 10px; 116 | } 117 | 118 | .slide { 119 | flex: 0 0 300px; 120 | margin-right: 20px; 121 | margin-left: 20px; 122 | background-color: #fff; 123 | padding: 20px; 124 | border-radius: 8px; 125 | box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); 126 | transition: transform 0.3s ease; 127 | margin-bottom: 2rem; 128 | } 129 | 130 | .profile img { 131 | width: 100%; 132 | height: auto; 133 | border-radius: 4px; 134 | margin-bottom: 10px; 135 | } 136 | 137 | .profile h3 { 138 | font-size: 20px; 139 | margin-bottom: 5px; 140 | } 141 | 142 | .profile p { 143 | font-size: 14px; 144 | color: #555; 145 | margin-bottom: 10px; 146 | } 147 | 148 | .btn { 149 | display: inline-block; 150 | background-color: #ff5722; 151 | color: #fff; 152 | font-size: 11px; 153 | padding: 6px 14px; 154 | text-decoration: none; 155 | border-radius: 4px; 156 | transition: background-color 0.3s ease; 157 | } 158 | 159 | .slide:hover .btn { 160 | background-color: #e64a19; 161 | } 162 | 163 | .btn-secondary { 164 | background-color: #ddd; 165 | color: #333; 166 | margin-left: 10px; 167 | } 168 | 169 | .btn-secondary:hover { 170 | background-color: #ccc; 171 | cursor: pointer; 172 | } 173 | 174 | /* section 3 */ 175 | 176 | .consultation-process { 177 | padding: 50px 0; 178 | background-color: #fff; 179 | } 180 | 181 | .container { 182 | max-width: 800px; 183 | margin: 0 auto; 184 | text-align: center; 185 | } 186 | 187 | .section-heading { 188 | font-size: 32px; 189 | margin-bottom: 30px; 190 | } 191 | 192 | .process-steps { 193 | display: flex; 194 | flex-wrap: wrap; 195 | justify-content: center; 196 | } 197 | 198 | .step { 199 | flex: 0 0 calc(50% - 40px); 200 | max-width: 400px; 201 | margin: 20px; 202 | text-align: center; 203 | } 204 | 205 | .step-number { 206 | display: inline-block; 207 | width: 50px; 208 | height: 50px; 209 | border-radius: 50%; 210 | background-color: #ff5722; 211 | color: #fff; 212 | font-size: 24px; 213 | line-height: 50px; 214 | margin-bottom: 10px; 215 | } 216 | 217 | .step-heading { 218 | font-size: 24px; 219 | margin-bottom: 10px; 220 | } 221 | 222 | .step-description { 223 | font-size: 14px; 224 | color: #555; 225 | } 226 | -------------------------------------------------------------------------------- /frontend/src/Components/Contactus/Contact.css: -------------------------------------------------------------------------------- 1 | .container{ 2 | max-width: 100% ; 3 | height: fit-content; 4 | display: flex; 5 | flex-direction: column; 6 | justify-content: center; 7 | align-items: center; 8 | bottom: 0; 9 | left: 0; 10 | right: 0; 11 | top: 0; 12 | z-index: 0; 13 | overflow: hidden; 14 | background: var(--bg-clr); 15 | padding: 0; 16 | } 17 | 18 | 19 | .contact-container{ 20 | background-color: #fff; 21 | box-shadow: 0 0 20px #01bf71; 22 | position: relative; 23 | overflow: hidden; 24 | width: 900px; 25 | max-width: 100%; 26 | height: 100%; 27 | margin: 3rem auto; 28 | display: flex; 29 | @media only screen and (max-width:650px){ 30 | flex-direction: column; 31 | margin: 0; 32 | } 33 | } 34 | 35 | .left-container{ 36 | width: 45%; 37 | display: flex; 38 | flex-direction: column; 39 | justify-content: center; 40 | align-items: center; 41 | background: linear-gradient(147.84deg, #01bf71 8.1%, #00492b 95.42%); 42 | min-height: 100%; 43 | 44 | 45 | @media only screen and (max-width:650px){ 46 | width: 100%; 47 | } 48 | } 49 | 50 | .left-container img{ 51 | max-width: 90%; 52 | } 53 | 54 | .left-heading{ 55 | font-family: "Poppins"; 56 | font-style: normal; 57 | font-weight: 700; 58 | font-size: 2rem; 59 | line-height: 3rem; 60 | color: #ffffff; 61 | margin-bottom: 3rem; 62 | text-align: center; 63 | } 64 | 65 | .form-container { 66 | width: 500px; 67 | padding: 30px; 68 | border-radius: 10px; 69 | } 70 | 71 | 72 | .form-container form{ 73 | min-width: 100%; 74 | height: 100%; 75 | display: flex; 76 | flex-direction: column; 77 | } 78 | 79 | 80 | .text-content{ 81 | margin-bottom: 3rem; 82 | } 83 | 84 | .form-container h2 { 85 | text-align: center; 86 | font-size: 38px; 87 | font-weight: 600; 88 | margin-bottom: 3rem; 89 | color: rgb(1, 191, 113); 90 | 91 | } 92 | 93 | .form-group { 94 | margin-bottom: 20px; 95 | font-weight: 500; 96 | font-size: larger; 97 | 98 | } 99 | 100 | .form-group label { 101 | display: block; 102 | margin-bottom: 10px; 103 | color: rgb(1, 191, 113); 104 | 105 | } 106 | hr{ 107 | border:2px solid white; 108 | opacity:1; 109 | } 110 | 111 | 112 | .form-group input[type="text"], 113 | .form-group input[type="email"], 114 | .form-group textarea { 115 | width: 100%; 116 | padding: 8px; 117 | border: 1px solid #ccc; 118 | border-radius: 4px; 119 | background: rgba(1, 191, 113, 0.3); 120 | } 121 | 122 | .form-group textarea { 123 | height: 80px; 124 | 125 | } 126 | .form-group input.inputError 127 | { 128 | border: 2px solid #ee334b; 129 | } 130 | .form-group input.successError 131 | { 132 | border: 2px solid rgb(37, 218, 37); 133 | } 134 | .form-group textarea.inputError 135 | { 136 | border: 2px solid #ee334b; 137 | } 138 | .form-group textarea.successError 139 | { 140 | border: 2px solid rgb(37, 218, 37); 141 | } 142 | .btn-container{ 143 | text-align: center; 144 | } 145 | .form-button { 146 | background: #01bf71; 147 | padding: 8px 15px; 148 | border: none; 149 | border-radius: 15px; 150 | color: #fff; 151 | font-size: 20px; 152 | font-weight: 300; 153 | cursor: pointer;&:hover { 154 | opacity: 0.8; 155 | transition: opacity 0.25s ease; 156 | } 157 | :active { 158 | background: #fff; 159 | color: #01bf71; 160 | opacity: 1; 161 | border: 2px solid #01bf71; 162 | } 163 | } 164 | 165 | 166 | @media only screen and (max-width: 650px) { 167 | .left-heading{ 168 | margin-top: 1rem; 169 | } 170 | .form-container{ 171 | width: 90vw; 172 | } 173 | } 174 | 175 | -------------------------------------------------------------------------------- /frontend/src/Components/Contactus/Contact.js: -------------------------------------------------------------------------------- 1 | /** @format */ 2 | 3 | import { React, useState } from "react"; 4 | import "./Contact.css"; 5 | import Contact_Image from "../../images/contact_image.webp" 6 | const Contact = () => { 7 | const [name, setName] = useState(''); 8 | const [mail, setMail] = useState(''); 9 | const [message, setMessage] = useState(''); 10 | const [error, seterror] = useState(''); 11 | const [success, setsuccess] = useState(''); 12 | 13 | function validEmail(email) { 14 | let re = 15 | /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 16 | if (re.test(email)) return true; 17 | else return false; 18 | } 19 | 20 | const handleSubmit = async (e) => { 21 | 22 | e.preventDefault(); 23 | 24 | console.log("called"); 25 | 26 | setsuccess(''); 27 | 28 | if(name === '') 29 | { seterror("nameerr");} 30 | 31 | else if(mail === '') 32 | { seterror("emailerr");} 33 | 34 | else if(!validEmail(mail)) 35 | { seterror("validerr");} 36 | 37 | else if(message === '') 38 | {seterror("messageerr");} 39 | 40 | else 41 | { 42 | const mailData = { 43 | name, 44 | mail, 45 | message, 46 | }; 47 | 48 | await fetch('https://umatter.onrender.com/mail', { 49 | method: "POST", 50 | headers: { 51 | "Content-Type": "application/json" 52 | }, 53 | body: JSON.stringify(mailData) 54 | }) 55 | 56 | setsuccess("Contact Request Sent Successfully!!"); 57 | seterror(''); 58 | setName(''); 59 | setMail(''); 60 | setMessage(''); 61 | // alert("Contact Request Sent Successfully") 62 | 63 | } 64 | 65 | } 66 | 67 | return ( 68 | 69 | 70 |
71 | 72 |
73 | 74 |
75 |

Feel Free to Contact Us

76 | 77 |
78 | 79 |
80 |

Contact Us

81 |
82 |

{success}

83 |
84 |
85 | 86 | setName(e.target.value)} className={`${error==='nameerr'?"inputError": name!==''?"successError":""}`} 88 | aria-invalid={error === 'nameerr'} 89 | aria-describedby={error === 'nameerr' ? "name-error" : ""} 90 | /> 91 | { 92 | error === 'nameerr' && ( 93 | *Name is Required! 94 | ) 95 | } 96 |
97 | 98 |
99 | 100 | setMail(e.target.value)} className={`${error==='emailerr' || error==='validerr'?"inputError": mail!==''?"successError":""}`} 102 | aria-invalid={error === 'emailerr' || error === 'validerr'} 103 | aria-describedby={error === 'emailerr' ? "email-error" : error === 'validerr' ? "valid-error" : ""} 104 | /> 105 | { 106 | error === 'emailerr' && ( 107 | *E-mail is Required! 108 | ) 109 | } 110 | { 111 | error === 'validerr' && ( 112 | *Valid E-mail is Required! 113 | ) 114 | } 115 |
116 | 117 |
118 | 119 | 124 | { 125 | error === 'messageerr' && ( 126 | *Message is Required! 127 | ) 128 | } 129 |
130 | 131 |
132 | 133 |
134 |
135 |
136 | 137 |
138 |
139 | 140 | 141 | ); 142 | }; 143 | 144 | export default Contact; 145 | -------------------------------------------------------------------------------- /frontend/src/Components/Contactus/pexels-pixabay-326333 (2).webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MonalikaPatnaik/UMatter/df6f5eb9ccdae83b696891889cd1abd03c726daf/frontend/src/Components/Contactus/pexels-pixabay-326333 (2).webp -------------------------------------------------------------------------------- /frontend/src/Components/DarkMode/DarkMode.css: -------------------------------------------------------------------------------- 1 | .dark_mode { 2 | /* margin-top: -20px; 3 | margin-left: 10px; */ 4 | display: flex; 5 | justify-content: center; 6 | } 7 | 8 | .dark_mode_label { 9 | width: 45px; 10 | height: 45px; 11 | position: relative; 12 | display: block; 13 | background: #ebebeb; 14 | border-radius: 200px; 15 | /* box-shadow: inset 0px 5px 15px rgba(0, 0, 0, 0.4), 16 | inset 0px -5px 15px rgba(255, 255, 255, 0.4); */ 17 | cursor: pointer; 18 | transition: 0.3s; 19 | border: 2px solid rgba(0, 0, 0, 0.4); 20 | } 21 | .dark_mode_label:after { 22 | content: ""; 23 | width: 40px; 24 | height: 40px; 25 | position: absolute; 26 | top: 50%; 27 | left: 50%; 28 | transform: translate(-50%,-50%); 29 | background: linear-gradient(180deg, #ffcc89, #d8860b); 30 | border-radius: 180px; 31 | box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.2); 32 | transition: 0.3s; 33 | } 34 | .dark_mode_input { 35 | width: 0; 36 | height: 0; 37 | visibility: hidden; 38 | } 39 | .dark_mode_input:checked + .dark_mode_label { 40 | background: #0516cbb0; 41 | } 42 | .dark_mode_input:checked + .dark_mode_label:after { 43 | /* left: 62px; */ 44 | transform: rotateZ(180deg) translate(50%,50%); 45 | background: linear-gradient(360deg,#222137, #3a3a3a36); 46 | } 47 | .dark_mode_label:active:after { 48 | width: 30px; 49 | } 50 | 51 | .dark_mode_label svg { 52 | position: absolute; 53 | width: 35px; 54 | top: 3px; 55 | z-index: 100; 56 | } 57 | .dark_mode_label svg.sun { 58 | left: 4px; 59 | fill: #fff; 60 | transition: 0.7s; 61 | } 62 | .dark_mode_label svg.moon { 63 | left: 5px; 64 | fill: #4c7bc300; 65 | transition: 0.7s; 66 | } 67 | .dark_mode_input:checked + .dark_mode_label svg.sun { 68 | fill: #fff9f900; 69 | } 70 | .dark_mode_input:checked + .dark_mode_label svg.moon { 71 | fill: #f0f3ff; 72 | } 73 | 74 | @media screen and (max-width: 490px) { 75 | .dark_mode{ 76 | font-size: 12px; 77 | line-height: 8px; 78 | margin: 10px; 79 | } 80 | 81 | /* .gpt3__header-content p { 82 | font-size: 14px; 83 | line-height: 24px; 84 | } 85 | 86 | .gpt3__header-content__input input, 87 | .gpt3__header-content__input button { 88 | font-size: 12px; 89 | line-height: 16px; 90 | } */ 91 | } -------------------------------------------------------------------------------- /frontend/src/Components/DarkMode/DarkMode.js: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from "react"; 2 | import { ReactComponent as Sun } from "./Sun.svg"; 3 | import { ReactComponent as Moon } from "./Moon.svg"; 4 | import "./DarkMode.css"; 5 | // import { FaSun } from "react-icons/fa"; 6 | // import { FaMoon } from "react-icons/fa"; 7 | const DarkMode = () => { 8 | const [theme, setTheme] = useState(getInitialTheme()); 9 | 10 | const toggleTheme = () => { 11 | // e.target.checked ? setTheme('dark-theme') : setTheme('light-theme') 12 | setTheme((prevTheme) => (prevTheme === "dark-theme" ? "light-theme" : "dark-theme")); 13 | 14 | } 15 | 16 | useEffect(() => { 17 | document.body.className = theme; 18 | }, [theme]) 19 | 20 | function getInitialTheme() { 21 | const userPreference = window.matchMedia("(prefers-color-scheme: dark)").matches; 22 | return userPreference ? "dark-theme" : "light-theme"; 23 | } 24 | return ( 25 |
26 | 35 | 42 |
43 | ); 44 | }; 45 | 46 | export default DarkMode; 47 | -------------------------------------------------------------------------------- /frontend/src/Components/DarkMode/Moon.svg: -------------------------------------------------------------------------------- 1 | 3 | -------------------------------------------------------------------------------- /frontend/src/Components/DarkMode/Sun.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /frontend/src/Components/Feedback/FeedbackElements.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | 4 | export const Container = styled.div` 5 | height: auto; 6 | bottom: 0; 7 | left: 0; 8 | right: 0; 9 | top: 0; 10 | z-index: 0; 11 | background:var(--bg-clr); 12 | `; 13 | 14 | 15 | export const FormWrap = styled.div` 16 | height: 100%; 17 | display: flex; 18 | flex-direction: column; 19 | justify-content: center; 20 | `; 21 | 22 | export const FormContent = styled.div` 23 | height: 100%; 24 | display: flex; 25 | flex-direction: column; 26 | justify-content: center; 27 | 28 | @media screen and (max-width: 580px) { 29 | padding: 10px 20px; 30 | } 31 | `; 32 | 33 | export const Form = styled.form` 34 | background:#fff; 35 | max-width: 550px; 36 | height: auto; 37 | width: 100%; 38 | z-index: 1; 39 | display: grid; 40 | margin: 90px auto 40px; 41 | padding: 40px 32px; 42 | border-radius: 4px; 43 | box-shadow: 1px 2px 10px #01bf71; 44 | 45 | @media screen and (max-width: 400px) { 46 | padding: 40px 32px; 47 | } 48 | `; 49 | 50 | export const FormH1 = styled.label` 51 | margin-bottom: 40px; 52 | color: #01bf71; 53 | font-size: 30px; 54 | font-weight: 600; 55 | text-align: center; 56 | `; 57 | 58 | export const FormLabel = styled.label` 59 | margin-bottom: 8px; 60 | color: #01bf71; 61 | font-size: 1.3rem; 62 | font-weight:600; 63 | cursor:pointer; 64 | `; 65 | 66 | export const FormInput = styled.input` 67 | margin-bottom: 40px; 68 | padding: 10px; 69 | border: none; 70 | font-size:1rem; 71 | border:none; 72 | outline:none; 73 | background:#b2ecd4; 74 | :focus{ 75 | border-bottom:5px solid #01bf71; 76 | transition:opacity 0.4s ease; 77 | box-shadow:1px 2px 10px #01bf71; 78 | } 79 | :invalid{ 80 | border-bottom:5px solid red; 81 | } 82 | &:hover { 83 | border: 1px solid #01bf71; 84 | } 85 | &::placeholder { 86 | color: rgba(0, 0, 0, 0.5); 87 | } 88 | @media screen and (max-width:435px){ 89 | font-size:14px; 90 | } 91 | `; 92 | 93 | export const FormButton = styled.button` 94 | background: #01bf71; 95 | padding: 12px 10px; 96 | border: none; 97 | border-radius: 10px; 98 | color: #fff; 99 | font-size: 20px; 100 | cursor: pointer; 101 | width:12rem; 102 | margin-inline:auto; 103 | &:hover { 104 | opacity : 0.8; 105 | transition: opacity 0.25s ease; 106 | } 107 | :active{ 108 | background:#fff; 109 | color:#01bf71; 110 | opacity:1; 111 | border:2px solid #01bf71; 112 | } 113 | `; 114 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /frontend/src/Components/Feedback/Toast.css: -------------------------------------------------------------------------------- 1 | .toast-warn{ 2 | color: black !important; 3 | } 4 | 5 | -------------------------------------------------------------------------------- /frontend/src/Components/Feedback/index.js: -------------------------------------------------------------------------------- 1 | /** @format */ 2 | 3 | import React from 'react'; 4 | import { useNavigate } from 'react-router-dom'; 5 | import { toast } from "react-toastify" 6 | import "./Toast.css" 7 | 8 | import { 9 | FormButton, 10 | FormContent, 11 | Form, 12 | FormH1, 13 | FormInput, 14 | FormLabel, 15 | FormWrap, 16 | Container, 17 | } from "./FeedbackElements"; 18 | import { useState } from "react"; 19 | import { ToastContainer } from 'react-toastify'; 20 | import 'react-toastify/dist/ReactToastify.css'; 21 | 22 | 23 | 24 | const Feedback = () => { 25 | const navigate = useNavigate(); 26 | const [data, setData] = useState({}); 27 | 28 | 29 | const sendPostRequest = async (e) => { 30 | e.preventDefault(); 31 | 32 | if (data.username && data.feedback != "") { 33 | 34 | const response = await fetch('https://umatter.onrender.com/feedback', { // Update the endpoint URL here 35 | method: 'POST', 36 | body: JSON.stringify(data), 37 | headers: { 38 | 'Content-Type': 'application/json' 39 | } 40 | }); 41 | 42 | // Handle the response from the backend 43 | const result = await response.json(); 44 | 45 | toast.success('Feedback Sent!', { 46 | position: "top-center", 47 | autoClose: 1000, 48 | hideProgressBar: false, 49 | closeButton: false, 50 | pauseOnHover: true, 51 | draggable: true, 52 | progress: undefined, 53 | theme: "colored", 54 | }); 55 | } 56 | 57 | else { 58 | toast.warn('All Fields are required !', { 59 | position: "top-center", 60 | autoClose: 1000, 61 | hideProgressBar: false, 62 | closeButton: false, 63 | pauseOnHover: true, 64 | draggable: true, 65 | progress: undefined, 66 | theme: "colored", 67 | className: 'toast-warn' 68 | }); 69 | 70 | } 71 | 72 | 73 | }; 74 | 75 | return ( 76 | <> 77 | 78 | 79 | 80 | 81 |
82 | Share your Feedback 83 | username 84 | setData({ ...data, username: e.target.value })} 87 | placeholder="Enter your username" type="text" id="username" 88 | required /> 89 | Feedback 90 | setData({ ...data, feedback: e.target.value })} 93 | placeholder="Share your experience/feedback with us :)" 94 | type="text" id="feedback" 95 | required 96 | /> 97 | Send 98 | 99 |
100 |
101 | 102 |
103 | 104 | ); 105 | }; 106 | 107 | export default Feedback; 108 | 109 | 110 | -------------------------------------------------------------------------------- /frontend/src/Components/Footer/FooterElements.js: -------------------------------------------------------------------------------- 1 | import styled from "styled-components"; 2 | import { Link } from "react-router-dom"; 3 | 4 | // Footer container 5 | export const FooterContainer = styled.footer` 6 | background-color: #101522; 7 | padding-top: 3rem; 8 | padding-bottom: 3rem; 9 | z-index: 99; 10 | `; 11 | 12 | // Footer wrap 13 | export const FooterWrap = styled.div` 14 | display: flex; 15 | align-items: center; 16 | justify-content: center; 17 | margin: 0 auto; 18 | max-width: 1100px; 19 | flex-direction: column; 20 | `; 21 | 22 | // Footer links container 23 | export const FooterLinksContainer = styled.div` 24 | width: 100%; 25 | display: flex; 26 | flex-direction: column; 27 | align-items: center; 28 | justify-content: center; 29 | `; 30 | 31 | // Footer links wrapper 32 | export const FooterLinksWrapper = styled.div` 33 | @media (max-width: 786px) { 34 | display: grid; 35 | gap: 2rem; 36 | grid-template-columns: 1fr; 37 | } 38 | width: 100%; 39 | grid-template-columns: 1fr 1fr 1fr; 40 | 41 | @media (min-width: 786px) { 42 | &:nth-child(n) { 43 | display: grid; 44 | grid-template-columns: 1fr 1fr 1fr; 45 | justify-content: space-around; 46 | } 47 | &:nth-child(2) { 48 | width: 100%; 49 | display: grid; 50 | align-self: inherit; 51 | align-content: center; 52 | justify-content: center; 53 | } 54 | } 55 | `; 56 | 57 | // Footer link items 58 | export const FooterLinkItems = styled.div` 59 | display: flex; 60 | flex-direction: column; 61 | box-sizing: border-box; 62 | color: #fff; 63 | 64 | &.socials { 65 | display: flex; 66 | flex-direction: row; 67 | grid-template-columns: repeat(6, 1fr); 68 | align-items: center; 69 | gap: 0.5rem; 70 | margin-top: 1rem; 71 | } 72 | 73 | @media (min-width: 320px) { 74 | align-items: center; 75 | &.socials { 76 | margin: 1rem; 77 | } 78 | } 79 | 80 | @media (min-width: 786px) { 81 | align-items: flex-start; 82 | text-align: left; 83 | } 84 | `; 85 | 86 | // Footer link title 87 | export const FooterLinkTitle = styled.h1` 88 | font-size: 18px; 89 | font-weight: bold; 90 | margin-bottom: 10px; 91 | display: inline-block; 92 | cursor: pointer; 93 | transition: background-color 0.3s ease-in-out, color 0.3s ease-in-out; 94 | text-decoration: none; 95 | position: relative; 96 | color: inherit; 97 | 98 | &:hover, 99 | &:focus { 100 | color: #01bf71 !important; 101 | transform: translateY(-2px); 102 | } 103 | 104 | &:after { 105 | content: ""; 106 | position: absolute; 107 | bottom: -8px; 108 | left: 0; 109 | width: 100%; 110 | height: 4px; 111 | background-color: #01bf71; 112 | } 113 | `; 114 | 115 | export const FooterLinkTitleHr = styled.hr` 116 | content: ""; 117 | border: 2px solid; 118 | margin-top: 5px; 119 | width: 52%; 120 | color: #101522; 121 | `; 122 | 123 | export const FooterLink = styled(Link)` 124 | /* Your styles for FooterLink */ 125 | color: rgba(255, 255, 255, 0.8); 126 | text-decoration: none; 127 | margin-bottom: 0.6rem; 128 | font-size: 16px; 129 | 130 | &:hover { 131 | color: #01bf71; 132 | text-decoration: none; 133 | text-decoration-line: none; 134 | text-decoration-style: solid; 135 | } 136 | 137 | &.icons { 138 | text-align: center; 139 | border-radius: 22px; 140 | padding: 7px; 141 | transition: transform 0.8s cubic-bezier(0.2, 0.8, 0.2, 1), 142 | background-color 0.3s ease-out; 143 | 144 | &:hover { 145 | transform: translate(0, -10px); 146 | background-color: white !important; 147 | box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); 148 | } 149 | } 150 | 151 | &.icons { 152 | color: white !important; 153 | } 154 | 155 | &.insta:hover { 156 | color: #e4405f !important; 157 | } 158 | 159 | &.fb:hover { 160 | color: #1877f2 !important; 161 | } 162 | 163 | &.youtube:hover { 164 | color: #ff0000 !important; 165 | } 166 | 167 | &.twitter:hover { 168 | color: #1da1f2 !important; 169 | } 170 | 171 | &.linkdn:hover { 172 | color: #0077b5 !important; 173 | } 174 | 175 | &.github:hover { 176 | color: black !important; 177 | } 178 | `; 179 | 180 | // Social media 181 | export const SocialMedia = styled.section``; 182 | 183 | // Social media wrap 184 | export const SocialMediaWrap = styled.div` 185 | max-width: 1100px; 186 | display: flex; 187 | flex-direction: column; 188 | align-items: center; 189 | `; 190 | 191 | // Social logo 192 | export const SocialLogo = styled(Link)` 193 | /* Your styles for SocialLogo */ 194 | color: rgb(255, 255, 255); 195 | cursor: pointer; 196 | text-decoration: none; 197 | font-size: 1.5rem; 198 | font-weight: bold; 199 | 200 | &:hover { 201 | mask-image: linear-gradient( 202 | -75deg, 203 | rgba(0, 0, 0, 0.6) 30%, 204 | #000 50%, 205 | rgba(0, 0, 0, 0.6) 70% 206 | ); 207 | mask-size: 200%; 208 | animation: shine 2s infinite; 209 | color: lightcyan; 210 | } 211 | 212 | @keyframes shine { 213 | from { 214 | mask-position: 150%; 215 | } 216 | 217 | to { 218 | mask-position: -50%; 219 | } 220 | } 221 | `; 222 | 223 | // Website rights 224 | export const WebsiteRights = styled.small` 225 | color: #fff; 226 | `; 227 | 228 | // Social icons 229 | export const SocialIcons = styled.div``; 230 | 231 | // Social icons link 232 | export const SocialIconsLink = styled.a``; 233 | -------------------------------------------------------------------------------- /frontend/src/Components/Footer/index.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { 3 | FaFacebook, 4 | FaLinkedin, 5 | FaYoutube, 6 | FaInstagram, 7 | FaTwitter, 8 | FaGithub, 9 | } from "react-icons/fa"; 10 | import { Link } from "react-router-dom"; 11 | import { 12 | FooterContainer, 13 | FooterWrap, 14 | FooterLinksContainer, 15 | FooterLinksWrapper, 16 | FooterLinkItems, 17 | FooterLinkTitle, 18 | FooterLinkTitleHr, 19 | FooterLink, 20 | SocialMedia, 21 | SocialMediaWrap, 22 | SocialLogo, 23 | WebsiteRights, 24 | } from "./FooterElements"; 25 | 26 | const Footer = () => { 27 | const handleClick = () => { 28 | window.scrollTo({ top: 0, left: 0, behavior: "smooth" }); 29 | }; 30 | 31 | return ( 32 | 33 | 34 | 35 | 36 |
37 | 38 | 39 | About us 40 | 41 | 42 | How it Works 43 | Testimonials 44 | Careers 45 | Investors 46 | Terms of Services 47 | 48 |
49 |
50 | 51 | 52 | Contact Us 53 | 54 | 55 | 56 | Contact 57 | Support 58 | Destinations 59 | Sponsorships 60 | 61 |
62 |
63 | 64 | 65 | Videos 66 | 67 | 68 | Submit Video 69 | Ambassadors 70 | Agency 71 | Influencer 72 | 73 |
74 |
75 |
76 | 77 | 78 | 79 | 85 | 86 | 87 | 93 | 94 | 95 | 101 | 102 | 103 | 109 | 110 | 111 | 117 | 118 | 119 | 135 | 143 | 144 | 145 | 146 | 150 | 151 | 152 | 153 | 158 | 159 | 160 | {/* Social media icons */} 161 | 162 | UMatter 163 | 164 | UMatter © {new Date().getFullYear()} All rights reserved. 165 | 166 | 167 | 168 |
169 |
170 | ); 171 | }; 172 | 173 | export default Footer; 174 | -------------------------------------------------------------------------------- /frontend/src/Components/Forgot_password/ForgotPassword.js: -------------------------------------------------------------------------------- 1 | import React, { useState } from "react"; 2 | import { useNavigate } from "react-router-dom"; 3 | import { toast } from "react-toastify"; 4 | import { sendPasswordResetEmail } from "firebase/auth"; 5 | import { 6 | NewContainer, 7 | FormContainer, 8 | FPForm, 9 | FPimg, 10 | FPheading, 11 | FPpara, 12 | FPinput, 13 | ButtonContainer, 14 | CancelButton, 15 | FPButton, 16 | } from "./ForgotPasswordelements"; 17 | import ForgotImg from "../../images/Forgotpassword.webp"; 18 | import Footer from "../Footer"; 19 | import { auth } from "../../firebase-config"; // Import your Firebase authentication instance 20 | 21 | const GetMail = () => { 22 | const navigate = useNavigate(); 23 | const [email, setEmail] = useState(); 24 | 25 | const handleContinue = async () => { 26 | try { 27 | if (!email) { 28 | // alert("Please enter your email."); 29 | let errorMessage = "Please enter your email"; 30 | toast.error(errorMessage, { 31 | position: "top-right", 32 | autoClose: 5000, 33 | hideProgressBar: false, 34 | closeOnClick: true, 35 | pauseOnHover: true, 36 | draggable: true, 37 | }); 38 | return; 39 | } 40 | 41 | // Send a password reset email 42 | await sendPasswordResetEmail(auth, email); 43 | 44 | // After sending the email, navigate to the OTP verification page 45 | navigate("/signin/otpverification"); 46 | } catch (error) { 47 | let errorMessage = "Error sending password reset email. Please try again."; 48 | // console.error("Error sending password reset email", error); 49 | // alert("Error sending password reset email. Please try again."); 50 | toast.error(errorMessage, { 51 | position: "top-right", 52 | autoClose: 5000, 53 | hideProgressBar: false, 54 | closeOnClick: true, 55 | pauseOnHover: true, 56 | draggable: true, 57 | }); 58 | } 59 | }; 60 | 61 | return ( 62 | <> 63 | 64 | 65 | 66 | 67 | Forgot Password? 68 | 69 | Don't worry, enter your email to receive the OTP for verification 70 | and regain access to your account. 71 | 72 | setEmail(e.target.value)} 74 | type="email" 75 | placeholder="you@example.com" 76 | id="email" 77 | aria-label="Email" 78 | required 79 | /> 80 | 81 | navigate("/signin")}>Cancel 82 | Continue 83 | 84 | 85 | 86 | 87 |
88 | 89 | ); 90 | }; 91 | 92 | export default GetMail; 93 | -------------------------------------------------------------------------------- /frontend/src/Components/Forgot_password/ForgotPasswordelements.js: -------------------------------------------------------------------------------- 1 | import styled from "styled-components"; 2 | import { Link } from "react-router-dom"; 3 | 4 | export const NewContainer = styled.div` 5 | width: 100%; 6 | height: fit-content; 7 | display: flex; 8 | flex-direction: column; 9 | justify-content: center; 10 | align-items: center; 11 | bottom: 0; 12 | left: 0; 13 | right: 0; 14 | top: 0; 15 | z-index: 0; 16 | overflow: hidden; 17 | background: var(--bg-clr); 18 | `; 19 | 20 | export const FormContainer = styled.div` 21 | background-color: #fff; 22 | box-shadow: 0 0 20px #01bf71; 23 | position: relative; 24 | overflow: hidden; 25 | width: 500px; 26 | max-width: 100%; 27 | min-height: 550px; 28 | margin: 3rem auto; 29 | display: flex; 30 | justify-content: center; 31 | align-items: center; 32 | background: linear-gradient(147.84deg, #01bf71 8.1%, #00492b 95.42%); 33 | `; 34 | 35 | export const FPForm = styled.form` 36 | min-width: 100%; 37 | height: 100%; 38 | display: flex; 39 | flex-direction: column; 40 | justify-content: center; 41 | align-items: center; 42 | `; 43 | 44 | export const FPimg = styled.img` 45 | width: 70%; 46 | `; 47 | 48 | export const FPheading = styled.h1` 49 | font-family: "Poppins"; 50 | font-style: normal; 51 | font-weight: 700; 52 | font-size: 2.3rem; 53 | line-height: 4rem; 54 | color: #fff; 55 | `; 56 | 57 | export const FPpara = styled.p` 58 | font-family: "Poppins"; 59 | font-style: normal; 60 | font-weight: 400; 61 | font-size: 0.8rem; 62 | line-height: 1rem; 63 | color: #ffffff; 64 | margin-top: 0.4rem; 65 | margin-bottom: 1rem; 66 | width: 70%; 67 | text-align: center; 68 | `; 69 | 70 | export const FPinput = styled.input` 71 | width: 70%; 72 | padding: 0.5rem; 73 | border-radius: 0; 74 | border: None; 75 | background: #fff; 76 | font-family: "Poppins"; 77 | font-style: normal; 78 | font-weight: 400; 79 | font-size: 0.8rem; 80 | line-height: 0.8rem; 81 | color: Black; 82 | margin-bottom: 1rem; 83 | outline: none; 84 | box-sizing: border-box; 85 | border: 1px solid transparent; 86 | 87 | &::placeholder { 88 | color: rgba(0, 0, 0, 0.5); 89 | } 90 | 91 | &:hover { 92 | border: 1px solid #01bf71; 93 | } 94 | 95 | &:focus { 96 | border-radius: 0; 97 | border: 2px solid #01bf71; 98 | } 99 | `; 100 | 101 | export const ButtonContainer = styled.div` 102 | display: flex; 103 | flex-direction: row; 104 | gap: 10%; 105 | `; 106 | 107 | export const CancelButton = styled.button` 108 | width: 7rem; 109 | font-family: "Poppins"; 110 | font-style: normal; 111 | font-weight: 400; 112 | font-size: 1rem; 113 | border-radius: 50px; 114 | background: #fff; 115 | white-space: nowrap; 116 | color: #01bf71; 117 | margin-top: 0.8rem; 118 | cursor: pointer; 119 | text-decoration: none; 120 | margin-bottom: 1rem; 121 | 122 | &:hover { 123 | background: #00492b; 124 | color: #ffffff; 125 | } 126 | 127 | &:active { 128 | transform: scale(0.95); 129 | } 130 | `; 131 | 132 | export const FPButton = styled.button` 133 | width: 8rem; 134 | height: 3rem; 135 | font-family: "Poppins"; 136 | font-style: normal; 137 | font-weight: 400; 138 | font-size: 1rem; 139 | border-radius: 50px; 140 | background: #01bf71; 141 | white-space: nowrap; 142 | color: #fff; 143 | margin-top: 0.8rem; 144 | cursor: pointer; 145 | text-decoration: none; 146 | margin-bottom: 1rem; 147 | &:hover { 148 | background: #00492b; 149 | color: #ffffff; 150 | } 151 | &:active { 152 | transform: scale(0.95); 153 | } 154 | `; 155 | 156 | export const OtpInput = styled.input` 157 | width: 8%; 158 | aspect-ratio: 1/1; 159 | 160 | text-align: center; 161 | padding: 0.5rem; 162 | border-radius: 0; 163 | border: None; 164 | background: #fff; 165 | font-family: "Poppins"; 166 | font-style: normal; 167 | font-weight: bold; 168 | font-size: 1rem; 169 | line-height: 0.8rem; 170 | color: Black; 171 | margin-bottom: 1rem; 172 | outline: none; 173 | box-sizing: border-box; 174 | border: 1px solid transparent; 175 | 176 | &::placeholder { 177 | color: rgba(0, 0, 0, 0.5); 178 | } 179 | 180 | &:hover { 181 | border: 1px solid #01bf71; 182 | } 183 | 184 | &:focus { 185 | border-radius: 0; 186 | border: 2px solid #01bf71; 187 | } 188 | `; 189 | 190 | export const OTPBoxContainer = styled.div` 191 | display: flex; 192 | align-items: center; 193 | justify-content: center; 194 | flex-direction: row; 195 | gap: 5%; 196 | `; 197 | 198 | export const OTPimg = styled.img` 199 | width: 50%; 200 | `; 201 | 202 | export const TimerContainer = styled.div` 203 | display: flex; 204 | flex-direction: row; 205 | gap: 2%; 206 | width: 45%; 207 | justift-content: center; 208 | align-items: center; 209 | text-align: center; 210 | `; 211 | 212 | export const ResendLink = styled.a` 213 | font-family: "Poppins"; 214 | font-style: normal; 215 | font-weight: 400; 216 | font-size: 0.8rem; 217 | line-height: 1rem; 218 | color: #ffffff; 219 | margin-top: 0.4rem; 220 | margin-bottom: 1rem; 221 | 222 | &:hover { 223 | text-decoration: underline; 224 | cursor: pointer; 225 | color: #fff; 226 | } 227 | `; 228 | 229 | export const ResendPara = styled.p` 230 | font-family: "Poppins"; 231 | font-style: normal; 232 | font-weight: 400; 233 | font-size: 0.8rem; 234 | line-height: 1rem; 235 | color: #ffffff; 236 | margin-top: 0.4rem; 237 | margin-bottom: 1rem; 238 | `; 239 | -------------------------------------------------------------------------------- /frontend/src/Components/Forgot_password/Forgot_password.css: -------------------------------------------------------------------------------- 1 | .forgot_body { 2 | color: white; 3 | text-align: center; 4 | } 5 | 6 | .forgot_head { 7 | font-size: 30px; 8 | font-weight: bold; 9 | } 10 | 11 | .boxes_otp { 12 | display: flex; 13 | justify-content: space-between; 14 | margin: 20px 0px; 15 | } 16 | 17 | .input_otp { 18 | width: 15%; 19 | aspect-ratio: 1/1; 20 | border-radius: 10px; 21 | font-size: 30px; 22 | font-weight: bold; 23 | text-align: center; 24 | } 25 | 26 | .forgot_btn { 27 | margin: 5px; 28 | /* height: 50px; */ 29 | } 30 | 31 | .timer { 32 | margin: 20px 0px -10px; 33 | } 34 | 35 | .forgot_resend { 36 | background: none; 37 | color: rgba(255, 255, 255, 0.507); 38 | text-decoration: none; 39 | } 40 | 41 | .forgot_resend:hover { 42 | color: white; 43 | } 44 | 45 | .email-form{ 46 | margin-top: 10%; 47 | } 48 | -------------------------------------------------------------------------------- /frontend/src/Components/Forgot_password/OTPVerfication.js: -------------------------------------------------------------------------------- 1 | import React, { useState } from "react"; 2 | import { Link } from "react-router-dom"; 3 | import { toast, ToastContainer } from "react-toastify"; 4 | import "react-toastify/dist/ReactToastify.css"; 5 | import { 6 | NewContainer, 7 | FormContainer, 8 | FPForm, 9 | OTPimg, 10 | FPheading, 11 | FPpara, 12 | OtpInput, 13 | OTPBoxContainer, 14 | FPButton, 15 | TimerContainer, 16 | ResendLink, 17 | ResendPara, 18 | } from "./ForgotPasswordelements"; 19 | import OTPImg from "../../images/EnterOTP.webp"; 20 | import Footer from "../Footer"; 21 | 22 | function Verify() { 23 | const [Otp, setotp] = useState(new Array(4).fill("")); 24 | 25 | const handleChange = (element, index) => { 26 | if (isNaN(element.value)) return false; 27 | setotp((prevOtp) => 28 | prevOtp.map((d, idx) => (idx === index ? element.value : d)) 29 | ); 30 | 31 | if (element.nextSibling) { 32 | element.nextSibling.focus(); 33 | } 34 | }; 35 | 36 | const handleVerify = () => { 37 | // Perform the OTP verification logic here 38 | // ... 39 | 40 | // Show success toast 41 | toast.success("OTP verified successfully"); 42 | }; 43 | 44 | const handleRetry = () => { 45 | // Perform the OTP resend logic here 46 | // ... 47 | 48 | // Show success toast 49 | toast.success("OTP sent successfully"); 50 | }; 51 | 52 | const [counter, setCounter] = React.useState(59); 53 | React.useEffect(() => { 54 | const timer = 55 | counter > 0 && setInterval(() => setCounter((prevCounter) => prevCounter - 1), 1000); 56 | return () => clearInterval(timer); 57 | }, [counter]); 58 | 59 | return ( 60 | <> 61 | 62 | 63 | 64 | 65 | Check Your Inbox 66 | We have sent you a mail for resetting your password. 67 | {/* 68 | {Otp.map((data, index) => ( 69 | handleChange(e.target, index)} 75 | onFocus={(e) => e.target.select()} 76 | required 77 | /> 78 | ))} 79 | 80 | Verify 81 | 82 | Resend OTP in 00 : {counter} 83 | Resend OTP? 84 | */} 85 | 86 | 87 | 88 |
89 | 90 | 91 | ); 92 | } 93 | 94 | export default Verify; 95 | -------------------------------------------------------------------------------- /frontend/src/Components/GoToTop.js: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from "react"; 2 | // import styled from "styled-components"; 3 | import styled, { keyframes } from "styled-components"; 4 | 5 | import {TiArrowSortedUp} from "react-icons/ti"; 6 | 7 | const jump = keyframes` 8 | 0% { 9 | transform: translateY(0); 10 | } 11 | 50% { 12 | transform: translateY(-10px); 13 | } 14 | 100% { 15 | transform: translateY(0); 16 | } 17 | `; 18 | 19 | const GoToTop = () => { 20 | const [isVisible, setIsVisible] = useState(false); 21 | 22 | const goToBtn = () => { 23 | window.scrollTo({ top: 0, left: 0, behavior: "smooth" }); 24 | }; 25 | 26 | const listenToScroll = () => { 27 | let heightToHidden = 200; 28 | const winScroll = 29 | document.body.scrollTop || document.documentElement.scrollTop; 30 | 31 | if (winScroll > heightToHidden) { 32 | setIsVisible(true); 33 | } else { 34 | setIsVisible(false); 35 | } 36 | }; 37 | 38 | useEffect(() => { 39 | window.addEventListener("scroll", listenToScroll); 40 | return () => window.removeEventListener("scroll", listenToScroll); 41 | }, []); 42 | 43 | return ( 44 | 45 | {isVisible && ( 46 |
47 | 48 |
49 | )} 50 |
51 | ); 52 | }; 53 | const Wrapper = styled.section` 54 | display: flex; 55 | justify-content: center; 56 | align-items: center; 57 | position: relative; 58 | 59 | .top-btn { 60 | font-size: 1.8rem; 61 | width: 2rem; 62 | height: 2rem; 63 | color: #fff; 64 | background-color:rgb(62, 62, 252); 65 | box-shadow:rgba(0,0,0,0.2) 0px 0px 10px 0px; 66 | border-radius: 50%; 67 | position: fixed; 68 | bottom: 1rem; 69 | left: 2rem; 70 | z-index: 999; 71 | display: flex; 72 | justify-content: center; 73 | align-items: center; 74 | cursor: pointer; 75 | animation: ${jump} 0.5s infinite; 76 | 77 | } 78 | 79 | @media (max-width:1200px) { 80 | .top-btn { 81 | font-size: 1.5rem; 82 | width: 1.6rem; 83 | height: 1.6rem; 84 | bottom: 1rem; 85 | left: 1rem; 86 | 87 | } 88 | } 89 | `; 90 | 91 | 92 | export default GoToTop; -------------------------------------------------------------------------------- /frontend/src/Components/Habit_Tracker/HabitsData.js: -------------------------------------------------------------------------------- 1 | import { FaRunning ,FaGlassWhiskey} from 'react-icons/fa'; 2 | import { CgGym } from 'react-icons/cg'; 3 | import { GiNightSleep } from 'react-icons/gi'; 4 | import { FcReading } from 'react-icons/fc'; 5 | 6 | 7 | export const habits = [{ 8 | name:"Water", 9 | detail:"Drinking 3L of water daily", 10 | icon: , 11 | Status:false, 12 | },{ 13 | name:"Running", 14 | detail:"5KM of running daily", 15 | icon: , 16 | Status:false, 17 | },{ 18 | name:"gym", 19 | detail:"2hr of gym daily", 20 | icon: , 21 | Status:false, 22 | },{ 23 | name:"reading", 24 | detail:"5 pages of reading daily", 25 | icon: , 26 | Status:false, 27 | },{ 28 | name:"Sleep", 29 | detail:"8hr of sleep daily", 30 | icon: , 31 | completed:false, 32 | }] 33 | -------------------------------------------------------------------------------- /frontend/src/Components/Habit_Tracker/index.js: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from 'react' 2 | import { habits } from './HabitsData'; 3 | import {BiEditAlt} from 'react-icons/bi' 4 | import styles from "./style.module.css"; 5 | 6 | function convertStringToArray(inputString) { 7 | inputString = inputString.trim().toLowerCase(); 8 | let values = inputString.split(','); 9 | let result = values.map(function(value) { 10 | return value === 'true'; 11 | }); 12 | return result; 13 | } 14 | 15 | function countOccurrences(arr, element){ 16 | return arr.reduce((acc, current)=>(current === element) ? acc +1: acc , 0); 17 | } 18 | 19 | 20 | function Index(){ 21 | const [activityStatus,setActivityStatus] = useState([]) 22 | 23 | useEffect(()=>{ 24 | if(localStorage.getItem("activity")){ 25 | let TempArray = convertStringToArray(localStorage.getItem("activity")); 26 | setActivityStatus(TempArray); 27 | }else{ 28 | let blankarr = Array(habits.length).fill(false); 29 | setActivityStatus([...blankarr]); 30 | localStorage.setItem("activity",blankarr); 31 | } 32 | 33 | },[]) 34 | 35 | function handleActivityClick(index){ 36 | let status = activityStatus; 37 | // console.log(typeof status); 38 | try { 39 | status[index] = !status[index]; 40 | localStorage.setItem("activity",status); 41 | // console.log(localStorage.getItem("activity")); 42 | window.location.reload(); 43 | } catch (error) { 44 | alert(error.message); 45 | } 46 | 47 | } 48 | return ( 49 |
50 |

51 | Your Today's Score - {countOccurrences(activityStatus,true)}/5 52 |

53 | {/* Table */} 54 | 55 |
56 | 57 | 58 | 59 | { 60 | Object.keys(habits[0]).map((elem,index)=>{ 61 | return 64 | }) 65 | } 66 | 67 | 68 | 69 | { 70 | habits.map((habi,ind)=>{ 71 | return <> 72 | 73 | 76 | 79 | 80 | 83 | 90 | 91 | 92 | 93 | }) 94 | } 95 | 96 | 97 |
62 | {elem} 63 |
74 | {habi.name} 75 | 77 | {habi.detail} 78 | 81 | {habi.icon} 82 | 84 | handleActivityClick(ind)} 87 | className={`aspect-square h-1/3 ${ activityStatus[ind] === true ? "bg-green-300" : "bg-red-500"} rounded-full`}> 88 | 89 |
98 |
99 | 100 |
101 | ) 102 | } 103 | 104 | export default Index; -------------------------------------------------------------------------------- /frontend/src/Components/Habit_Tracker/style.module.css: -------------------------------------------------------------------------------- 1 | 2 | @media screen and (max-width:400px){ 3 | .icon{ 4 | display: none; 5 | } 6 | .respo{ 7 | display: none; 8 | } 9 | .container{ 10 | padding-inline:0rem; 11 | } 12 | } 13 | @media screen and (max-width:768px){ 14 | .container{ 15 | padding-inline:0.5rem; 16 | } 17 | .table{ 18 | width: 100%; 19 | } 20 | .table th, .table td{ 21 | padding: 2%; 22 | } 23 | .detail{ 24 | font-size: smaller; 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /frontend/src/Components/Herosection/HeroElements.js: -------------------------------------------------------------------------------- 1 | import styled,{css} from 'styled-components'; 2 | import { MdArrowForward, MdKeyboardArrowRight } from 'react-icons/md'; 3 | import { motion } from 'framer-motion'; 4 | 5 | export const HeroContainer = styled.div` 6 | background: #0c0c0c; 7 | display: flex; 8 | justify-content: center; 9 | align-items: center; 10 | padding: 0 30px; 11 | height: 100vh; 12 | position: relative; 13 | z-index: 1; 14 | 15 | :before{ 16 | content: ''; 17 | position: absolute; 18 | top: 0; 19 | left: 0; 20 | right: 0; 21 | bottom: 0; 22 | background: linear-gradient(180deg, rgba(0,0,0,0.2) 0%, rgba(0,0,0,0.2) 100%), 23 | linear-gradient(180deg, rgba(0,0,0,0.2) 0%, transparent 100%); 24 | z-index: 2; 25 | } 26 | ` 27 | 28 | export const HeroBg = styled.div` 29 | position: absolute; 30 | top: 0; 31 | right: 0; 32 | bottom: 0; 33 | left: 0; 34 | width: 100%; 35 | height: 100vh; 36 | overflow: hidden; 37 | 38 | ` 39 | 40 | export const VideoBg = styled.video` 41 | width: 100%; 42 | height: 100vh; 43 | -o-object-fit: cover; 44 | object-fit: cover; 45 | 46 | ` 47 | 48 | export const HeroContent = motion(styled.div` 49 | z-index: 3; 50 | max-width: 1200px; 51 | position: absolute; 52 | // padding: 8px 24px; 53 | display: flex; 54 | flex-direction: column; 55 | align-items: center; 56 | `); 57 | 58 | export const HeroH1 = styled.h1` 59 | /* color: #fff; 60 | font-size: 48px; 61 | text-align: center; */ 62 | 63 | margin-bottom: 24px; 64 | font-size: 48px; 65 | line-height: 1.1; 66 | font-weight: 600; 67 | color: white; 68 | 69 | @media screen and (max-width: 768px){ 70 | font-size: 40px; 71 | } 72 | 73 | @media screen and (max-width: 480px){ 74 | font-size: 32px; 75 | } 76 | ` 77 | 78 | export const HeroP = styled.p` 79 | margin-top: -10px; 80 | color: #fff; 81 | font-size: 24px; 82 | text-align: center; 83 | max-width: 600px; 84 | 85 | @media screen and (max-width: 768px){ 86 | font-size: 24px; 87 | } 88 | 89 | @media screen and (max-width: 480px){ 90 | font-size: 18px; 91 | } 92 | ` 93 | 94 | export const HeroBtnWrapper = styled.div` 95 | margin-top: 32px; 96 | display: flex; 97 | flex-direction: column; 98 | align-items: center; 99 | ` 100 | 101 | export const Button = styled.button` 102 | text-decoration: none; 103 | ` 104 | 105 | export const ArrowForward = styled(MdArrowForward)` 106 | margin-left: 8px; 107 | font-size: 20px; 108 | ` 109 | export const ArrowRight = styled(MdKeyboardArrowRight)` 110 | margin-left: 8px; 111 | font-size: 20px; 112 | ` -------------------------------------------------------------------------------- /frontend/src/Components/Herosection/index.js: -------------------------------------------------------------------------------- 1 | import React, { useState, useEffect, useRef } from "react"; 2 | import Typed from "typed.js"; 3 | import Video from "../../videos/video1.mp4"; 4 | import { 5 | HeroContainer, 6 | HeroBg, 7 | VideoBg, 8 | HeroContent, 9 | HeroBtnWrapper, 10 | HeroH1, 11 | HeroP, 12 | ArrowForward, 13 | ArrowRight, 14 | } from "./HeroElements"; 15 | import { Button } from "../ButtonElements"; 16 | import { Link } from "react-router-dom"; 17 | 18 | const HeroSection = () => { 19 | const [hover, setHover] = useState(false); 20 | const el = useRef(null); 21 | 22 | useEffect(() => { 23 | const typed = new Typed(el.current, { 24 | strings: ["Make your life more blissful"], 25 | typeSpeed: 50, 26 | backSpeed: 50, 27 | loop: true, 28 | showCursor: false, 29 | }); 30 | 31 | return () => { 32 | typed.destroy(); 33 | }; 34 | }, []); 35 | 36 | const onHover = () => { 37 | setHover(!hover); 38 | }; 39 | 40 | 41 | return ( 42 | 43 | 44 | 45 | 46 | 50 | 51 | 52 | 53 | Register today and seize a fresh start for your life! 54 | 55 | 66 | 67 | 68 | 69 | ); 70 | }; 71 | 72 | export default HeroSection; 73 | -------------------------------------------------------------------------------- /frontend/src/Components/InfoSection/Data.js: -------------------------------------------------------------------------------- 1 | export const homeObjOne = { 2 | id: 'about', 3 | lightBg: false, 4 | lightText: true, 5 | lightTextDesc: true, 6 | topLine: "Let's come together", 7 | headline: 'One Stop Solution for a Healthy Life', 8 | description: 'UMatter is a one and all platform for you to help you out in quitting smoking and drinking by providing personalized consultations and medications making you a step closer to leading a healthy life.', 9 | buttonLabel: 'Get Started', 10 | imgStart: false , 11 | img: require('../../images/about.webp'), 12 | alt: 'Doctor', 13 | dark: true, 14 | primary: true, 15 | darkText: false 16 | 17 | }; -------------------------------------------------------------------------------- /frontend/src/Components/InfoSection/InfoElements.js: -------------------------------------------------------------------------------- 1 | // import styled from 'styled-components'; 2 | // import { motion } from 'framer-motion'; 3 | 4 | // export const AboutContainer = styled.div` 5 | // color : var(--text-clr); 6 | // // background: ${({lightBg})=> (lightBg ? '#f9f9f9' : '#010606')}; 7 | // background : var(--bg-clr); 8 | // @media screen and (max-width: 768px){ 9 | // padding: 100px 0; 10 | // } 11 | // `; 12 | 13 | // export const AboutWrapper = styled.div` 14 | // display: grid; 15 | // z-index: 1; 16 | // height: 860px; 17 | // width: 100%; 18 | // max-width: 1100px; 19 | // margin-right: auto; 20 | // margin-left: auto; 21 | // padding: 0 24px; 22 | // justify-content: center; 23 | // ` 24 | // export const AboutRow = styled.div` 25 | // display: grid; 26 | // grid-auto-columns: minmax(auto, 1fr); 27 | // align-items: center; 28 | // grid-template-areas: ${({imgStart})=> (imgStart ? `'col2 col1'` : `'col1 col2'`)}; 29 | 30 | // @media screen and (max-width: 768px){ 31 | // grid-template-areas: ${({imgStart})=> (imgStart ? `'col1' 'col2'` : `'col1 col1' 'col2 col2'`)}; 32 | 33 | // } 34 | // `; 35 | // export const Column1 = styled.div` 36 | // margin-bottom: 15px; 37 | // padding: 0 15px; 38 | // grid-area: col1; 39 | // `; 40 | // export const Column2 = styled.div` 41 | // margin-bottom: 15px; 42 | // padding: 0 15px; 43 | // grid-area: col2; 44 | // `; 45 | // export const TextWrapper = motion(styled.div` 46 | // max-width: 540px; 47 | // padding-top: 0; 48 | // padding-bottom: 60px; 49 | // `); 50 | // export const TopLine = styled.p` 51 | // opacity: 1; 52 | // color: #01bf71; 53 | // font-size: 16px; 54 | // line-height: 16px; 55 | // font-weight: 700; 56 | // letter-spacing: 1.4px; 57 | // text-transform: uppercase; 58 | // margin-bottom: 16px; 59 | // ` 60 | 61 | // export const Heading = styled.h1` 62 | // margin-bottom: 24px; 63 | // font-size: 28px; 64 | // line-height: 1.1; 65 | // font-weight: 600; 66 | // // color: ${({lightText})=> (lightText ? '#f7f8fa' : '#010606')}; 67 | // color : var(--text-clr); 68 | // @media screen and (max-width: 480px){ 69 | // font-size: 32px; 70 | // } 71 | // ` 72 | // export const SubTitle = styled.p` 73 | // max-width: 440px; 74 | // margin-bottom: 35px; 75 | // font-size: 18px; 76 | // line-height: 24px; 77 | // // color: ${({darkText})=> (darkText ? '#010606' : '#fff')}; 78 | // color: var(--text-clr); 79 | // ` 80 | // export const BtnWrap = styled.div` 81 | // display: flex; 82 | // justify-content: flex-start; 83 | // ` 84 | 85 | // export const Img = styled.img` 86 | // width: 100%; 87 | // margin: 0 0 10px 0; 88 | // padding-right: 0; 89 | // ` 90 | 91 | import styled from "styled-components"; 92 | import { motion } from "framer-motion"; 93 | 94 | export const AboutContainer = styled.div` 95 | color: var(--text-clr); 96 | // background: ${({ lightBg }) => (lightBg ? "#f9f9f9" : "#010606")}; 97 | background: var(--bg-clr); 98 | @media screen and (max-width: 768px) { 99 | padding: 100px 0; 100 | text-align: center; 101 | } 102 | `; 103 | 104 | export const AboutWrapper = styled.div` 105 | display: flex; 106 | flex-direction: column; 107 | z-index: 1; 108 | padding: 0 24px; 109 | justify-content: center; 110 | `; 111 | export const AboutRow = styled.div` 112 | display: grid; 113 | grid-auto-columns: minmax(auto, 1fr); 114 | align-items: center; 115 | grid-template-areas: ${({ imgStart }) => 116 | imgStart ? `'col2 col1'` : `'col1 col2'`}; 117 | background-color: ${({ theme }) => 118 | theme.defaultColor}; /* Set a default background color */ 119 | 120 | /* Set the background color based on the body class */ 121 | body.light-theme & { 122 | background-color: #ffd60a; /* Set background color to yellow if body has 'light-theme' class */ 123 | } 124 | 125 | body.dark-theme & { 126 | background-color: #030640cc; /* Set background color to green if body has 'dark-theme' class */ 127 | } 128 | margin-top: 2rem; 129 | border-radius: 50px; 130 | @media screen and (max-width: 768px) { 131 | grid-template-areas: ${({ imgStart }) => 132 | imgStart ? `'col1' 'col2'` : `'col1 col1' 'col2 col2'`}; 133 | } 134 | `; 135 | export const ImgWrap = motion(styled.div` 136 | max-width: 555px; 137 | height: 100%; 138 | `); 139 | export const Column1 = styled.div` 140 | margin-bottom: 15px; 141 | padding: 0 15px; 142 | grid-area: col1; 143 | font-size: 1.5rem; 144 | `; 145 | export const Column2 = styled.div` 146 | display: flex; 147 | flex-direction: column; 148 | align-items: center; 149 | text-align: center; 150 | justify-content: center; 151 | margin-bottom: 15px; 152 | padding: 0 15px; 153 | grid-area: col2; 154 | `; 155 | export const TextWrapper = motion(styled.div` 156 | max-width: 540px; 157 | padding-top: 0; 158 | padding-bottom: 60px; 159 | margin: 3rem; 160 | font-size: 2rem; 161 | `); 162 | export const TopLine = styled.p` 163 | opacity: 1; 164 | color: #01bf71; 165 | font-size: 1.6rem; 166 | line-height: 16px; 167 | font-weight: 700; 168 | letter-spacing: 1.4px; 169 | text-transform: uppercase; 170 | margin-bottom: 16px; 171 | `; 172 | 173 | export const Heading = styled.h1` 174 | margin-bottom: 24px; 175 | font-size: 28px; 176 | line-height: 1.1; 177 | font-weight: 600; 178 | // color: ${({ lightText }) => (lightText ? "#f7f8fa" : "#010606")}; 179 | color: var(--text-clr); 180 | @media screen and (max-width: 480px) { 181 | font-size: 32px; 182 | } 183 | `; 184 | export const SubTitle = styled.p` 185 | ${"" /* max-width: 440px; */} 186 | margin-bottom: 35px; 187 | font-size: 1.6rem; 188 | line-height: 24px; 189 | // color: ${({ darkText }) => (darkText ? "#010606" : "#fff")}; 190 | color: var(--text-clr); 191 | `; 192 | export const BtnWrap = styled.div` 193 | display: flex; 194 | font-size: 1.6rem; 195 | @media screen and (max-width: 768px) { 196 | flex-direction: column; 197 | justify-content: center; 198 | align-items: center; 199 | } 200 | `; 201 | 202 | export const Img = styled.img` 203 | width: 100%; 204 | margin: 0 0 10px 0; 205 | padding-right: 0; 206 | `; 207 | -------------------------------------------------------------------------------- /frontend/src/Components/Loader/Loader.css: -------------------------------------------------------------------------------- 1 | #preloader { 2 | position: absolute; 3 | height: 15vh; 4 | width: 10vw; 5 | top: 40%; 6 | left: 45%; 7 | } -------------------------------------------------------------------------------- /frontend/src/Components/Loader/Loader.js: -------------------------------------------------------------------------------- 1 | import Hourglass from "../../images/Hourglass.gif" 2 | import "./Loader.css" 3 | 4 | export const Loader = () =>{ 5 | return ( 6 | Hourglass 7 | ) 8 | } -------------------------------------------------------------------------------- /frontend/src/Components/Navbar/index.js: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from "react"; 2 | import { auth } from "../../firebase-config"; 3 | import { 4 | FaBars, 5 | FaRegWindowClose, 6 | } from "react-icons/fa"; 7 | import DarkMode from "../DarkMode/DarkMode"; 8 | import { useNavigate } from "react-router-dom"; 9 | import { 10 | Nav, 11 | NavbarContainer, 12 | NavLogo, 13 | MobileIcon, 14 | NavMenu, 15 | Navitem, 16 | NavLinks, 17 | NavBtn, 18 | NavBtnLink, 19 | LogoContainer, 20 | LogoinnerContainer, 21 | NavBtnMobile, 22 | } from "./NavbarElements"; 23 | import manifest from "../../../src/assests/manifest.json"; 24 | 25 | const faviconSrc = manifest.icons[0].src; 26 | const glassStyle = { 27 | background: "rgba(40, 30, 30, 0.3)", 28 | // borderRadius: "16px", 29 | boxShadow: "0 4px 30px rgba(0, 0, 0, 0.1)", 30 | backdropFilter: "blur(7.1px)", 31 | WebkitBackdropFilter: "blur(7.1px)", 32 | border: "1px solid rgba(40, 30, 30, 0.18)", 33 | }; 34 | const Navbar = ({ toggle }) => { 35 | const [isOpen, setIsOpen] = useState(false); 36 | const [navbarBg, setNavbarBg] = useState(glassStyle); 37 | const [user, setUser] = useState(null); 38 | 39 | useEffect(() => { 40 | // Add an observer to check for user authentication state changes 41 | const unsubscribe = auth.onAuthStateChanged((user) => { 42 | setUser(user); 43 | }); 44 | 45 | // Clean up the observer on component unmount 46 | return () => unsubscribe(); 47 | }, []); 48 | useEffect(() => { 49 | const handleScroll = () => { 50 | const scrolled = window.scrollY; 51 | setNavbarBg( 52 | scrolled > 0 ? { backgroundColor: "var(--bg-clr)" } : glassStyle 53 | ); 54 | }; 55 | 56 | window.addEventListener("scroll", handleScroll); 57 | 58 | return () => { 59 | window.removeEventListener("scroll", handleScroll); 60 | }; 61 | }, []); 62 | 63 | const navigate = useNavigate(); 64 | 65 | const handleBlogsClick = () => { 66 | setIsOpen(false); // Close the navbar 67 | navigate("/blogs"); 68 | }; 69 | const handleFeedbackClick = () => { 70 | setIsOpen(false); // Close the navbar 71 | navigate("/feedback"); 72 | }; 73 | 74 | const handleHomeClick = () => { 75 | setIsOpen(false); // Close the navbar 76 | navigate("/"); 77 | }; 78 | 79 | const handleAboutClick = () => { 80 | setIsOpen(false); // Close the navbar 81 | navigate("/"); 82 | }; 83 | 84 | const handleServicesClick = () => { 85 | setIsOpen(false); // Close the navbar 86 | navigate("/"); 87 | }; 88 | 89 | const handleTestimonialsClick = () => { 90 | setIsOpen(false); // Close the navbar 91 | navigate("/"); 92 | }; 93 | 94 | const handleTeamClick = () => { 95 | setIsOpen(false); // Close the navbar 96 | navigate("/team"); 97 | }; 98 | 99 | // Function to handle navbar toggle 100 | const handleToggle = () => { 101 | setIsOpen(!isOpen); 102 | }; 103 | 104 | return ( 105 | 171 | ); 172 | }; 173 | 174 | export default Navbar; 175 | -------------------------------------------------------------------------------- /frontend/src/Components/Profile/index.js: -------------------------------------------------------------------------------- 1 | /** @format */ 2 | 3 | import React from 'react'; 4 | import { 5 | Container, 6 | Icons, 7 | FormButton, 8 | FormContent, 9 | OuterDiv, 10 | FormWrap, 11 | Text, 12 | } from './profileElements'; 13 | import { useState } from 'react'; 14 | 15 | sessionStorage.setItem("authorizationToken", undefined); 16 | sessionStorage.setItem("username", undefined); 17 | 18 | const ProfilePage = () => { 19 | const [isSignedIn, setIsSignedIn] = useState(false); 20 | 21 | const authorizationToken = sessionStorage.getItem("authorizationToken"); 22 | const username = sessionStorage.getItem("username"); 23 | const sendFetchRequest = async () => { 24 | try { 25 | // console.log(authorizationToken); 26 | const options = { 27 | method: 'GET', 28 | headers: { 29 | 'Content-Type': 'application/json', 30 | Authorization:authorizationToken, 31 | }, 32 | }; 33 | const response = await fetch(`https://umatter.onrender.com/${username}/`, options); 34 | const data = response.json(); 35 | if(data.message === undefined){ 36 | // setIsSignedIn(true); 37 | this.setState({ 38 | isSignedIn:true 39 | }); 40 | } 41 | } catch (error) { 42 | console.log(error); 43 | } 44 | }; 45 | 46 | sendFetchRequest(); 47 | 48 | const logoutFunction = () => { 49 | console.log("logout butten clicked"); 50 | sessionStorage.clear(); 51 | sessionStorage.setItem("authorizationToken", undefined); 52 | sessionStorage.setItem("username", undefined); 53 | setIsSignedIn(false); 54 | } 55 | 56 | return ( 57 | <> 58 | 59 | 60 |
61 | UMatter 62 |
63 | 64 | {!isSignedIn && ( 65 | you are not signed in 66 | )} 67 | {isSignedIn && ( 68 | you are signed In 69 |
70 |

username is ${username}

71 |
72 |
73 | Logout 74 |
75 |
)} 76 |
77 |
78 |
79 | 80 | ); 81 | 82 | }; 83 | 84 | export default ProfilePage; -------------------------------------------------------------------------------- /frontend/src/Components/Profile/profileElements.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | import { Link } from 'react-router-dom'; 3 | 4 | export const Container = styled.div` 5 | min-height: 692px; 6 | position: fixed; 7 | bottom: 0; 8 | left: 0; 9 | right: 0; 10 | top: 0; 11 | z-index: 0; 12 | overflow: hidden; 13 | background: linear-gradient( 14 | 108deg, 15 | rgba(1, 147, 86, 1) 0%, 16 | rgba(10, 201, 122, 1) 100% 17 | ); 18 | `; 19 | 20 | export const FormWrap = styled.div` 21 | height: 100%; 22 | display: flex; 23 | flex-direction: column; 24 | justify-content: center; 25 | 26 | @media screen and (max-width: 400px) { 27 | height: 80%; 28 | } 29 | `; 30 | 31 | export const Icons = styled(Link)` 32 | margin-left: 32px; 33 | margin-top: 32px; 34 | text-decoration: none; 35 | color: #fff; 36 | font-weight: 700; 37 | font-size: 32px; 38 | 39 | @media screen and (max-width: 480px) { 40 | margin-left: 16px; 41 | margin-top: 8px; 42 | } 43 | `; 44 | 45 | export const FormContent = styled.div` 46 | height: 100%; 47 | display: flex; 48 | flex-direction: column; 49 | justify-content: center; 50 | align-items: center; 51 | 52 | @media screen and (max-width: 480px) { 53 | padding: 10px; 54 | } 55 | `; 56 | 57 | export const OuterDiv = styled.div` 58 | background: #010101; 59 | max-width: 400px; 60 | height: auto; 61 | width: 100%; 62 | z-index: 1; 63 | display: grid; 64 | margin: 0 auto; 65 | padding: 40px 32px; 66 | border-radius: 4px; 67 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.9); 68 | 69 | @media screen and (max-width: 400px) { 70 | padding: 32px 32px; 71 | } 72 | `; 73 | 74 | export const FormH1 = styled.label` 75 | margin-bottom: 40px; 76 | color: #fff; 77 | font-size: 20px; 78 | font-weight: 400; 79 | text-align: center; 80 | `; 81 | 82 | export const FormLabel = styled.label` 83 | margin-bottom: 8px; 84 | color: #fff; 85 | font-size: 14px; 86 | `; 87 | 88 | export const FormInput = styled.input` 89 | margin-bottom: 40px; 90 | padding: 10px; 91 | border: none; 92 | border-radius: 4px; 93 | font-size:18px; 94 | border:none; 95 | outline:none; 96 | `; 97 | 98 | export const FormButton = styled.button` 99 | background: #01bf71; 100 | padding: 16px 0; 101 | border: none; 102 | border-radius: 4px; 103 | color: #fff; 104 | font-size: 20px; 105 | cursor: pointer; 106 | &:hover { 107 | opacity : 0.8; 108 | transition: 0.25s ease; 109 | } 110 | `; 111 | 112 | export const Text = styled.span` 113 | text-align: center; 114 | margin-top: 24px; 115 | color: #fff; 116 | font-size: 14px; 117 | `; -------------------------------------------------------------------------------- /frontend/src/Components/Services/CardAnimation.js: -------------------------------------------------------------------------------- 1 | export const cardOneVariants = { 2 | hidden: { 3 | opacity: 0, 4 | x: -200 5 | }, 6 | visible: { 7 | opacity: 1, 8 | x: 0, 9 | transition: {delay: 0.15, duration: 1} 10 | } 11 | } 12 | 13 | export const cardTwoVariants = { 14 | hidden: { 15 | opacity: 0, 16 | y: 200 17 | }, 18 | visible: { 19 | opacity: 1, 20 | y: 0, 21 | transition: {delay: 0.15, duration: 1} 22 | } 23 | } 24 | 25 | export const cardThreeVariants = { 26 | hidden: { 27 | opacity: 0, 28 | x: 200 29 | }, 30 | visible: { 31 | opacity: 1, 32 | x: 0, 33 | transition: {delay: 0.15, duration: 1} 34 | } 35 | } 36 | export const cardFourVariants = { 37 | hidden: { 38 | opacity: 0, 39 | x: 200 40 | }, 41 | visible: { 42 | opacity: 1, 43 | x: 0, 44 | transition: {delay: 0.15, duration: 1} 45 | } 46 | } -------------------------------------------------------------------------------- /frontend/src/Components/Services/ServicesElements.js: -------------------------------------------------------------------------------- 1 | // import styled from "styled-components"; 2 | // import { motion } from "framer-motion"; 3 | 4 | // export const ServicesContainer = motion(styled.div` 5 | // height: 800px; 6 | // padding: 30px; 7 | // padding-bottom: 150px; 8 | // display: flex; 9 | // flex-direction: column; 10 | // justify-content: center; 11 | // align-items: center; 12 | // background: var(--bg-clr); 13 | 14 | // @media screen and (max-width: 768px) { 15 | // height: 1400px; 16 | // } 17 | // @media screen and (max-width: 992px) { 18 | // height: 1200px; 19 | // } 20 | // @media screen and (max-width: 480px) { 21 | // height: 1500px; 22 | // } 23 | // `); 24 | 25 | // export const ServicesWrapper = styled.div` 26 | // max-width: 1000px; 27 | // margin: 0 auto; 28 | // display: grid; 29 | // grid-template-columns: 1fr 1fr 1fr; 30 | // align-items: center; 31 | // grid-gap: 16px; 32 | // padding: 0 30px; 33 | 34 | // @media screen and (max-width: 1000px) { 35 | // grid-template-columns: 1fr 1fr; 36 | // } 37 | // @media screen and (max-width: 768px) { 38 | // grid-template-columns: 1fr; 39 | // padding: 0 20px; 40 | // } 41 | // `; 42 | 43 | // export const ServicesCard = styled.div` 44 | // align-items: center; 45 | // display: flex; 46 | // flex-direction: column; 47 | // justify-content: flex-start; 48 | // border-radius: 10px; 49 | // height: 380px; 50 | // padding: 30px; 51 | // box-shadow: 0 1px 3px gray; 52 | // color: var(--text-clr); 53 | // transition: all 0.2s ease-in-out; 54 | 55 | // &:hover { 56 | // transform: scale(1.02); 57 | // transition: all 0.2s ease-in-out; 58 | // cursor: pointer; 59 | // } 60 | // `; 61 | 62 | // export const ServicesIcon = styled.img` 63 | // height: 170px; 64 | // width: 180px; 65 | // margin-bottom: 10px; 66 | // border: 0.5px solid gray; 67 | // box-shadow: 3px 3px 3px gray; 68 | // `; 69 | 70 | // export const ServicesH1 = styled.h1` 71 | // margin-bottom: 64px; 72 | // font-size: 50px; 73 | // line-height: 1.1; 74 | // font-weight: 600; 75 | // text-transform: uppercase; 76 | // color: var(--text-clr); 77 | 78 | // @media screen and (max-width: 480px) { 79 | // font-size: 2rem; 80 | // } 81 | // `; 82 | 83 | // export const ServicesH2 = styled.h2` 84 | // font-size: 1rem; 85 | // margin-bottom: 10px; 86 | // `; 87 | 88 | // export const ServicesP = styled.p` 89 | // font-size: 1rem; 90 | // text-align: center; 91 | // `; 92 | 93 | import styled from "styled-components"; 94 | import { motion } from "framer-motion"; 95 | 96 | export const ServicesContainer = motion(styled.div` 97 | /* height: 1000px; */ 98 | padding: 30px; 99 | padding-bottom: 150px; 100 | display: flex; 101 | flex-direction: column; 102 | justify-content: center; 103 | align-items: center; 104 | background: var(--bg-clr); 105 | // background: black; 106 | `); 107 | 108 | export const ServicesWrapper = styled.div` 109 | max-width: 1000px; 110 | margin: 0 auto; 111 | display: grid; 112 | grid-template-columns: 1fr 1fr 1fr 1fr; 113 | align-items: center; 114 | grid-gap: 50px ; 115 | 116 | // padding: 0 1px; 117 | margin : 0 140px 0 0; 118 | 119 | 120 | @media screen and (max-width: 1000px) { 121 | grid-template-columns: 1fr 1fr; 122 | } 123 | @media screen and (max-width: 768px) { 124 | grid-template-columns: 1fr; 125 | padding: 0 20px; 126 | } 127 | `; 128 | 129 | export const ServicesCard = styled.div` 130 | align-items: center; 131 | text-align: center; 132 | display: flex; 133 | flex-direction: column; 134 | justify-content: flex-start; 135 | border-radius: 10px; 136 | border-width: 3px; 137 | // boder-color:black; 138 | border-color: rgb(11, 115, 72); 139 | // max-height: 380px; 140 | padding: 30px; 141 | //height:0px; 142 | width:255px; 143 | box-shadow: 0 1px 3px gray; 144 | color: var(--text-clr); 145 | transition: all 0.8s ease-in-out; 146 | transform-origin: center center; 147 | position: relative; 148 | height: 440px; 149 | 150 | overflow: hidden; 151 | 152 | &:before { 153 | display: relative; 154 | position: absolute; 155 | // top: 50%; 156 | // left: 50%; 157 | width: 550px; 158 | height: 550px; 159 | // margin-left: -100px 0px; 160 | // margin-top: -100px; 161 | margin: -120px 0px; 162 | content: ""; 163 | // background: #fff; 164 | background: var(--bg-clr); 165 | 166 | // border-style: solid; 167 | // border-width: 2px; 168 | // border-radius: 500px; 169 | // border-color:rgb(1, 191, 113); 170 | transform-origin: center center; 171 | transition: all 0.5s ease-in-out; 172 | box-sizing: border-box; 173 | overflow: hidden; 174 | } 175 | 176 | &:hover { 177 | //background: black; 178 | overflow: hidden; 179 | transform: scale(1.03); 180 | transition: all 0.5s ease-in-out; 181 | cursor: pointer; 182 | 183 | &:before { 184 | //border-width: 00px; 185 | background: rgb(1, 191, 113); 186 | } 187 | } 188 | // &:after{ 189 | // transition: all 0.2s ease-out-in; 190 | // } 191 | `; 192 | 193 | export const ServicesIcon = styled.img` 194 | height: 170px; 195 | width: 180px; 196 | margin-bottom: 10px; 197 | border: 1.5px solid gray; 198 | //border: 0.5px solid rgb(11, 115, 72) 199 | box-shadow: 3px 3px 3px gray; 200 | position: relative; 201 | `; 202 | 203 | export const ServicesH1 = styled.h1` 204 | margin-bottom: 64px; 205 | font-size: 50px; 206 | line-height: 1.1; 207 | font-weight: 600; 208 | text-transform: uppercase; 209 | color: var(--text-clr); 210 | // color:#fff; 211 | 212 | @media screen and (max-width: 480px) { 213 | font-size: 2rem; 214 | } 215 | `; 216 | 217 | export const ServicesH2 = styled.h2` 218 | font-size: 1rem; 219 | margin-bottom: 10px; 220 | position: relative; 221 | // color:#fff; 222 | color: var(--text-clr); 223 | // background: var(--bg-clr); 224 | `; 225 | 226 | export const ServicesP = styled.p` 227 | font-size: 1rem; 228 | text-align: center; 229 | position: relative; 230 | color: var(--text-clr); 231 | // background: var(--bg-clr); 232 | `; 233 | -------------------------------------------------------------------------------- /frontend/src/Components/Services/Services_Data.js: -------------------------------------------------------------------------------- 1 | import Icon1 from '../../images/image1.webp'; 2 | import Icon2 from '../../images/image2.webp'; 3 | import Icon3 from '../../images/image3.webp'; 4 | import Icon4 from '../../images/image4.webp'; 5 | export const Services_Data=[ 6 | { 7 | id: 'consult', 8 | icon: Icon1, 9 | title: 'Consult With Doctor', 10 | description: 'Consult with professional doctors and therapists regarding your health.' 11 | }, 12 | { 13 | id: 'workshops', 14 | icon: Icon2, 15 | title: 'Attend Workshops', 16 | description: 'Book your slot now for amazing therapies and sessions that will make your life better.' 17 | }, 18 | { 19 | id: 'connect', 20 | icon: Icon3, 21 | title: 'Connect with Friends', 22 | description: 'Be a part of the amazing community and connect with them.' 23 | }, 24 | { 25 | id: 'habit', 26 | icon: Icon4, 27 | title: 'Habit Tracker', 28 | description: 'Boost your potential by tracking your habits.', 29 | href:"/services/HabitTracker" 30 | } 31 | ]; -------------------------------------------------------------------------------- /frontend/src/Components/Signup/Captcha.js: -------------------------------------------------------------------------------- 1 | import { useState } from 'react' 2 | import captchaBg from "../../images/captcha_Bg.webp" 3 | import { FiRefreshCcw } from "react-icons/fi" 4 | 5 | const Captcha = ({ message, trackState }) => { 6 | const [user, setUser] = useState({ 7 | username: "" 8 | }); 9 | 10 | const characters = 'abcdefghijklmnopqrstuvwxyz1234567890'; 11 | function generateString(length) { 12 | let result = ''; 13 | const charactersLength = characters.length; 14 | for (let i = 0; i < length; i++) { 15 | result += characters.charAt(Math.floor(Math.random() * charactersLength)); 16 | } 17 | return result; 18 | } 19 | const [captcha, setCaptcha] = useState(generateString(6)) 20 | let handleCaptcha = (e) => { 21 | let name = e.target.name; 22 | let value = e.target.value; 23 | user[name] = value; 24 | setUser(user); 25 | 26 | } 27 | const onSubmit = () => { 28 | var element = document.getElementById("succesBTN"); 29 | var inputData = document.getElementById("inputType"); 30 | element.style.cursor = "wait"; 31 | element.innerHTML = "Checking..."; 32 | inputData.disabled = true; 33 | element.disabled = true; 34 | var myFunctions = function () { 35 | if (captcha === user.username) { 36 | element.innerHTML = "Captcha Verified"; 37 | element.style.cursor = "not-allowed"; 38 | element.style.backgroundColor = "#01bf71" 39 | message(true) 40 | } 41 | else { 42 | element.style.backgroundColor = "red"; 43 | element.style.cursor = "not-allowed"; 44 | element.innerHTML = "Not Matched"; 45 | element.disabled = true; 46 | var myFunction = function () { 47 | element.style.cursor = "pointer"; 48 | element.innerHTML = "Verify Captcha"; 49 | element.style.backgroundColor = "#01bf71" 50 | element.disabled = false; 51 | inputData.disabled = false; 52 | setCaptcha(generateString(6)) 53 | }; 54 | setTimeout(myFunction, 2000); 55 | } 56 | } 57 | setTimeout(myFunctions, 2000); 58 | }; 59 | 60 | const onRegenerate = () => { 61 | setCaptcha(generateString(6)) 62 | } 63 | return ( 64 | <> 65 |
66 |
67 | 74 | 75 |
76 | 85 |
86 |
87 | 88 | ) 89 | } 90 | 91 | export default Captcha -------------------------------------------------------------------------------- /frontend/src/Components/Signup/PhoneInput.css: -------------------------------------------------------------------------------- 1 | /* CSS variables. */ 2 | :root { 3 | --PhoneInput-color--focus: #03b2cb; 4 | --PhoneInputInternationalIconPhone-opacity: 0.8; 5 | --PhoneInputInternationalIconGlobe-opacity: 0.65; 6 | --PhoneInputCountrySelect-marginRight: 0.35em; 7 | --PhoneInputCountrySelectArrow-width: 0.3em; 8 | --PhoneInputCountrySelectArrow-marginLeft: var( 9 | --PhoneInputCountrySelect-marginRight 10 | ); 11 | --PhoneInputCountrySelectArrow-borderWidth: 1px; 12 | --PhoneInputCountrySelectArrow-opacity: 0.45; 13 | --PhoneInputCountrySelectArrow-color: currentColor; 14 | --PhoneInputCountrySelectArrow-color--focus: var(--PhoneInput-color--focus); 15 | --PhoneInputCountrySelectArrow-transform: rotate(45deg); 16 | --PhoneInputCountryFlag-aspectRatio: 1.5; 17 | --PhoneInputCountryFlag-height: 1em; 18 | --PhoneInputCountryFlag-borderWidth: 1px; 19 | --PhoneInputCountryFlag-borderColor: rgba(0, 0, 0, 0.5); 20 | --PhoneInputCountryFlag-borderColor--focus: var(--PhoneInput-color--focus); 21 | --PhoneInputCountryFlag-backgroundColor--loading: rgba(0, 0, 0, 0.1); 22 | } 23 | 24 | .PhoneInput { 25 | /* This is done to stretch the contents of this component. */ 26 | display: flex; 27 | align-items: center; 28 | width: 100%; 29 | } 30 | 31 | .PhoneInputInput { 32 | /* The phone number input stretches to fill all empty space */ 33 | flex: 1; 34 | /* The phone number input should shrink 35 | to make room for the extension input */ 36 | min-width: 0; 37 | padding: 0.7rem; 38 | border-radius: 5px; 39 | background: rgba(1, 191, 113, 0.3); 40 | font-family: Poppins; 41 | font-style: normal; 42 | font-weight: 400; 43 | font-size: 0.8rem; 44 | line-height: 0.8rem; 45 | color: black; 46 | margin-bottom: 1rem; 47 | outline: none; 48 | box-sizing: border-box; 49 | border: 1px solid transparent; 50 | } 51 | 52 | .PhoneInputCountryIcon { 53 | width: calc( 54 | var(--PhoneInputCountryFlag-height) * 55 | var(--PhoneInputCountryFlag-aspectRatio) 56 | ); 57 | height: var(--PhoneInputCountryFlag-height); 58 | } 59 | 60 | .PhoneInputCountryIcon--square { 61 | width: var(--PhoneInputCountryFlag-height); 62 | } 63 | 64 | .PhoneInputCountryIcon--border { 65 | /* Removed `background-color` because when an `` was still loading 66 | it would show a dark gray rectangle. */ 67 | /* For some reason the `` is not stretched to 100% width and height 68 | and sometime there can be seen white pixels of the background at top and bottom. */ 69 | background-color: var(--PhoneInputCountryFlag-backgroundColor--loading); 70 | /* Border is added via `box-shadow` because `border` interferes with `width`/`height`. */ 71 | /* For some reason the `` is not stretched to 100% width and height 72 | and sometime there can be seen white pixels of the background at top and bottom, 73 | so an additional "inset" border is added. */ 74 | box-shadow: 0 0 0 var(--PhoneInputCountryFlag-borderWidth) 75 | var(--PhoneInputCountryFlag-borderColor), 76 | inset 0 0 0 var(--PhoneInputCountryFlag-borderWidth) 77 | var(--PhoneInputCountryFlag-borderColor); 78 | } 79 | 80 | .PhoneInputCountryIconImg { 81 | /* Fixes weird vertical space above the flag icon. */ 82 | /* https://gitlab.com/catamphetamine/react-phone-number-input/-/issues/7#note_348586559 */ 83 | display: block; 84 | /* 3rd party flag icons won't stretch if they have `width` and `height`. 85 | Also, if an icon's aspect ratio was different, it wouldn't fit too. */ 86 | width: 100%; 87 | height: 100%; 88 | } 89 | 90 | .PhoneInputInternationalIconPhone { 91 | opacity: var(--PhoneInputInternationalIconPhone-opacity); 92 | } 93 | 94 | .PhoneInputInternationalIconGlobe { 95 | opacity: var(--PhoneInputInternationalIconGlobe-opacity); 96 | } 97 | 98 | /* Styling native country ` 87 |
88 |
89 | 90 | 91 |
92 |
93 | 94 | 95 |
96 |
97 | 98 | 103 |
104 | 105 |
106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 |