This is an automated email from the ASF dual-hosted git repository.

apratim pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-resilientdb-site.git


The following commit(s) were added to refs/heads/master by this push:
     new 7aec01b  Added animations and much more
7aec01b is described below

commit 7aec01bf94403d78e86cbc924ee3fd96fb92c4e3
Author: Apratim Shukla <[email protected]>
AuthorDate: Wed Jun 12 19:23:06 2024 -0700

    Added animations and much more
---
 .circleci/config.yml                 |   2 +-
 package-lock.json                    | 421 ++++++++++++++++++++++++++++++++++-
 package.json                         |  11 +-
 public/images/about/about.json       |   1 +
 public/images/features/features.json |   1 +
 src/components/About/index.tsx       |  41 +++-
 src/components/Features/index.tsx    |  41 +++-
 src/components/Footer/index.tsx      |  56 ++++-
 tsconfig.json                        |   1 +
 9 files changed, 546 insertions(+), 29 deletions(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 31d5ba8..71f8a66 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -6,7 +6,7 @@ orbs:
 jobs:
   build:
     docker:
-      - image: cimg/node:22.2.0
+      - image: cimg/node:18.18.2
     steps:
       - checkout
       - run:
diff --git a/package-lock.json b/package-lock.json
index 5bb3de1..f665fe7 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,17 +13,26 @@
         "@fortawesome/free-regular-svg-icons": "^6.5.2",
         "@fortawesome/free-solid-svg-icons": "^6.5.2",
         "@fortawesome/react-fontawesome": "^0.2.2",
+        "@lottiefiles/react-lottie-player": "^3.5.4",
+        "@mantine/core": "^7.10.1",
+        "@mantine/hooks": "^7.10.1",
+        "@tanstack/react-query": "^5.45.0",
         "autoprefixer": "^10.4.19",
         "eslint": "^8.56.0",
         "eslint-config-next": "^14.2.3",
+        "lottie-react": "^2.4.0",
+        "lottie-web": "^5.12.2",
         "next": "^14.2.3",
         "next-themes": "^0.2.1",
         "react": "^18.3.1",
-        "react-dom": "^18.3.1"
+        "react-dom": "^18.3.1",
+        "react-lottie": "^1.2.4",
+        "react-lottie-player": "^2.0.0"
       },
       "devDependencies": {
         "@types/node": "^20.12.12",
         "@types/react": "^18.3.3",
+        "@types/react-lottie": "^1.2.10",
         "tailwindcss": "^3.4.3",
         "typescript": "^5.4.5"
       }
@@ -111,6 +120,54 @@
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       }
     },
+    "node_modules/@floating-ui/core": {
+      "version": "1.6.2",
+      "resolved": 
"https://registry.npmjs.org/@floating-ui/core/-/core-1.6.2.tgz";,
+      "integrity": 
"sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==",
+      "dependencies": {
+        "@floating-ui/utils": "^0.2.0"
+      }
+    },
+    "node_modules/@floating-ui/dom": {
+      "version": "1.6.5",
+      "resolved": 
"https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.5.tgz";,
+      "integrity": 
"sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==",
+      "dependencies": {
+        "@floating-ui/core": "^1.0.0",
+        "@floating-ui/utils": "^0.2.0"
+      }
+    },
+    "node_modules/@floating-ui/react": {
+      "version": "0.26.16",
+      "resolved": 
"https://registry.npmjs.org/@floating-ui/react/-/react-0.26.16.tgz";,
+      "integrity": 
"sha512-HEf43zxZNAI/E781QIVpYSF3K2VH4TTYZpqecjdsFkjsaU1EbaWcM++kw0HXFffj7gDUcBFevX8s0rQGQpxkow==",
+      "dependencies": {
+        "@floating-ui/react-dom": "^2.1.0",
+        "@floating-ui/utils": "^0.2.0",
+        "tabbable": "^6.0.0"
+      },
+      "peerDependencies": {
+        "react": ">=16.8.0",
+        "react-dom": ">=16.8.0"
+      }
+    },
+    "node_modules/@floating-ui/react-dom": {
+      "version": "2.1.0",
+      "resolved": 
"https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.0.tgz";,
+      "integrity": 
"sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA==",
+      "dependencies": {
+        "@floating-ui/dom": "^1.0.0"
+      },
+      "peerDependencies": {
+        "react": ">=16.8.0",
+        "react-dom": ">=16.8.0"
+      }
+    },
+    "node_modules/@floating-ui/utils": {
+      "version": "0.2.2",
+      "resolved": 
"https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz";,
+      "integrity": 
"sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw=="
+    },
     "node_modules/@fortawesome/fontawesome-common-types": {
       "version": "6.5.2",
       "resolved": 
"https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.2.tgz";,
@@ -299,6 +356,54 @@
         "@jridgewell/sourcemap-codec": "^1.4.14"
       }
     },
+    "node_modules/@lottiefiles/react-lottie-player": {
+      "version": "3.5.4",
+      "resolved": 
"https://registry.npmjs.org/@lottiefiles/react-lottie-player/-/react-lottie-player-3.5.4.tgz";,
+      "integrity": 
"sha512-2FptWtHQ+o7MzdsMKSvNZ1Mz7xtKSYI0WL9HjZ1r+CvsXR3lbLQUDp7Pwx6qhg0Akm4VluQ+8/D1S1fcr1Ao4w==",
+      "dependencies": {
+        "lottie-web": "^5.12.2"
+      },
+      "peerDependencies": {
+        "react": "16 - 18"
+      }
+    },
+    "node_modules/@mantine/core": {
+      "version": "7.10.1",
+      "resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.10.1.tgz";,
+      "integrity": 
"sha512-l9ypojKN3PjwO1CSLIsqxi7mA25+7w+xc71Q+JuCCREI0tuGwkZsKbIOpuTATIJOjPh8ycLiW7QxX1LYsRTq6w==",
+      "dependencies": {
+        "@floating-ui/react": "^0.26.9",
+        "clsx": "^2.1.1",
+        "react-number-format": "^5.3.1",
+        "react-remove-scroll": "^2.5.7",
+        "react-textarea-autosize": "8.5.3",
+        "type-fest": "^4.12.0"
+      },
+      "peerDependencies": {
+        "@mantine/hooks": "7.10.1",
+        "react": "^18.2.0",
+        "react-dom": "^18.2.0"
+      }
+    },
+    "node_modules/@mantine/core/node_modules/type-fest": {
+      "version": "4.20.0",
+      "resolved": 
"https://registry.npmjs.org/type-fest/-/type-fest-4.20.0.tgz";,
+      "integrity": 
"sha512-MBh+PHUHHisjXf4tlx0CFWoMdjx8zCMLJHOjnV1prABYZFHqtFOyauCIK2/7w4oIfwkF8iNhLtnJEfVY2vn3iw==",
+      "engines": {
+        "node": ">=16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus";
+      }
+    },
+    "node_modules/@mantine/hooks": {
+      "version": "7.10.1",
+      "resolved": 
"https://registry.npmjs.org/@mantine/hooks/-/hooks-7.10.1.tgz";,
+      "integrity": 
"sha512-0EH9WBWUdtQLGU3Ak+csQ77EtUxI6pPNfwZdRJQWcaA3f8SFOLo9h9CGxiikFExerhvuCeUlaTf3s+TB9Op/rw==",
+      "peerDependencies": {
+        "react": "^18.2.0"
+      }
+    },
     "node_modules/@next/env": {
       "version": "14.2.3",
       "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.3.tgz";,
@@ -507,6 +612,30 @@
         "tslib": "^2.4.0"
       }
     },
+    "node_modules/@tanstack/query-core": {
+      "version": "5.45.0",
+      "resolved": 
"https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.45.0.tgz";,
+      "integrity": 
"sha512-RVfIZQmFUTdjhSAAblvueimfngYyfN6HlwaJUPK71PKd7yi43Vs1S/rdimmZedPWX/WGppcq/U1HOj7O7FwYxw==",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/tannerlinsley";
+      }
+    },
+    "node_modules/@tanstack/react-query": {
+      "version": "5.45.0",
+      "resolved": 
"https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.45.0.tgz";,
+      "integrity": 
"sha512-y272cKRJp1BvehrWG4ashOBuqBj1Qm2O6fgYJ9LYSHrLdsCXl74GbSVjUQTReUdHuRIl9cEOoyPa6HYag400lw==",
+      "dependencies": {
+        "@tanstack/query-core": "5.45.0"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/tannerlinsley";
+      },
+      "peerDependencies": {
+        "react": "^18.0.0"
+      }
+    },
     "node_modules/@types/json5": {
       "version": "0.0.29",
       "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz";,
@@ -537,6 +666,15 @@
         "csstype": "^3.0.2"
       }
     },
+    "node_modules/@types/react-lottie": {
+      "version": "1.2.10",
+      "resolved": 
"https://registry.npmjs.org/@types/react-lottie/-/react-lottie-1.2.10.tgz";,
+      "integrity": 
"sha512-rCd1p3US4ELKJlqwVnP0h5b24zt5p9OCvKUoNpYExLqwbFZMWEiJ6EGLMmH7nmq5V7KomBIbWO2X/XRFsL0vCA==",
+      "dev": true,
+      "dependencies": {
+        "@types/react": "*"
+      }
+    },
     "node_modules/@typescript-eslint/parser": {
       "version": "6.21.0",
       "resolved": 
"https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz";,
@@ -976,6 +1114,20 @@
         "dequal": "^2.0.3"
       }
     },
+    "node_modules/babel-runtime": {
+      "version": "6.26.0",
+      "resolved": 
"https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz";,
+      "integrity": 
"sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==",
+      "dependencies": {
+        "core-js": "^2.4.0",
+        "regenerator-runtime": "^0.11.0"
+      }
+    },
+    "node_modules/babel-runtime/node_modules/regenerator-runtime": {
+      "version": "0.11.1",
+      "resolved": 
"https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz";,
+      "integrity": 
"sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
+    },
     "node_modules/balanced-match": {
       "version": "1.0.2",
       "resolved": 
"https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz";,
@@ -1162,6 +1314,14 @@
       "resolved": 
"https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz";,
       "integrity": 
"sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
     },
+    "node_modules/clsx": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz";,
+      "integrity": 
"sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/color-convert": {
       "version": "2.0.1",
       "resolved": 
"https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz";,
@@ -1183,6 +1343,13 @@
       "resolved": 
"https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";,
       "integrity": 
"sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
     },
+    "node_modules/core-js": {
+      "version": "2.6.12",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz";,
+      "integrity": 
"sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
+      "deprecated": "core-js@<3.23.3 is no longer maintained and not 
recommended for usage due to the number of issues. Because of the V8 engine 
whims, feature detection in old core-js versions could cause a slowdown up to 
100x even if nothing is polyfilled. Some versions have web compatibility 
issues. Please, upgrade your dependencies to the actual version of core-js.",
+      "hasInstallScript": true
+    },
     "node_modules/cross-spawn": {
       "version": "7.0.3",
       "resolved": 
"https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz";,
@@ -1280,6 +1447,11 @@
         "node": ">=6"
       }
     },
+    "node_modules/detect-node-es": {
+      "version": "1.1.0",
+      "resolved": 
"https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz";,
+      "integrity": 
"sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="
+    },
     "node_modules/didyoumean": {
       "version": "1.2.2",
       "resolved": 
"https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz";,
@@ -2095,6 +2267,14 @@
         "url": "https://github.com/sponsors/ljharb";
       }
     },
+    "node_modules/get-nonce": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz";,
+      "integrity": 
"sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/get-symbol-description": {
       "version": "1.0.2",
       "resolved": 
"https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz";,
@@ -2376,6 +2556,14 @@
         "node": ">= 0.4"
       }
     },
+    "node_modules/invariant": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz";,
+      "integrity": 
"sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+      "dependencies": {
+        "loose-envify": "^1.0.0"
+      }
+    },
     "node_modules/is-array-buffer": {
       "version": "3.0.4",
       "resolved": 
"https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz";,
@@ -2872,6 +3060,23 @@
         "loose-envify": "cli.js"
       }
     },
+    "node_modules/lottie-react": {
+      "version": "2.4.0",
+      "resolved": 
"https://registry.npmjs.org/lottie-react/-/lottie-react-2.4.0.tgz";,
+      "integrity": 
"sha512-pDJGj+AQlnlyHvOHFK7vLdsDcvbuqvwPZdMlJ360wrzGFurXeKPr8SiRCjLf3LrNYKANQtSsh5dz9UYQHuqx4w==",
+      "dependencies": {
+        "lottie-web": "^5.10.2"
+      },
+      "peerDependencies": {
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+        "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+      }
+    },
+    "node_modules/lottie-web": {
+      "version": "5.12.2",
+      "resolved": 
"https://registry.npmjs.org/lottie-web/-/lottie-web-5.12.2.tgz";,
+      "integrity": 
"sha512-uvhvYPC8kGPjXT3MyKMrL3JitEAmDMp30lVkuq/590Mw9ok6pWcFCwXJveo0t5uqYw1UREQHofD+jVpdjBv8wg=="
+    },
     "node_modules/lru-cache": {
       "version": "10.2.0",
       "resolved": 
"https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz";,
@@ -3562,6 +3767,132 @@
       "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz";,
       "integrity": 
"sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
     },
+    "node_modules/react-lottie": {
+      "version": "1.2.4",
+      "resolved": 
"https://registry.npmjs.org/react-lottie/-/react-lottie-1.2.4.tgz";,
+      "integrity": 
"sha512-kBGxI+MIZGBf4wZhNCWwHkMcVP+kbpmrLWH/SkO0qCKc7D7eSPcxQbfpsmsCo8v2KCBYjuGSou+xTqK44D/jMg==",
+      "dependencies": {
+        "babel-runtime": "^6.26.0",
+        "lottie-web": "^5.1.3"
+      },
+      "engines": {
+        "npm": "^3.0.0"
+      },
+      "peerDependencies": {
+        "react": ">=15.0.0"
+      }
+    },
+    "node_modules/react-lottie-player": {
+      "version": "2.0.0",
+      "resolved": 
"https://registry.npmjs.org/react-lottie-player/-/react-lottie-player-2.0.0.tgz";,
+      "integrity": 
"sha512-PF23dcQ4k+ULyi2L6b32ny2jfaDqY6+WdbfBF9kpunbtZ02QWS+j7Iz/91xbYe8C6YO8gN28+x0op4CYC/cPbA==",
+      "dependencies": {
+        "fast-deep-equal": "^3.1.3",
+        "lottie-web": "^5.12.2",
+        "rfdc": "^1.3.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "peerDependencies": {
+        "react": "^16.0.0 || ^17.0.0 || ^18.0.0"
+      }
+    },
+    "node_modules/react-number-format": {
+      "version": "5.4.0",
+      "resolved": 
"https://registry.npmjs.org/react-number-format/-/react-number-format-5.4.0.tgz";,
+      "integrity": 
"sha512-NWdICrqLhI7rAS8yUeLVd6Wr4cN7UjJ9IBTS0f/a9i7UB4x4Ti70kGnksBtZ7o4Z7YRbvCMMR/jQmkoOBa/4fg==",
+      "dependencies": {
+        "prop-types": "^15.7.2"
+      },
+      "peerDependencies": {
+        "react": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0",
+        "react-dom": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
+      }
+    },
+    "node_modules/react-remove-scroll": {
+      "version": "2.5.10",
+      "resolved": 
"https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.10.tgz";,
+      "integrity": 
"sha512-m3zvBRANPBw3qxVVjEIPEQinkcwlFZ4qyomuWVpNJdv4c6MvHfXV0C3L9Jx5rr3HeBHKNRX+1jreB5QloDIJjA==",
+      "dependencies": {
+        "react-remove-scroll-bar": "^2.3.6",
+        "react-style-singleton": "^2.2.1",
+        "tslib": "^2.1.0",
+        "use-callback-ref": "^1.3.0",
+        "use-sidecar": "^1.1.2"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "peerDependencies": {
+        "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/react-remove-scroll-bar": {
+      "version": "2.3.6",
+      "resolved": 
"https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz";,
+      "integrity": 
"sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==",
+      "dependencies": {
+        "react-style-singleton": "^2.2.1",
+        "tslib": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "peerDependencies": {
+        "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/react-style-singleton": {
+      "version": "2.2.1",
+      "resolved": 
"https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz";,
+      "integrity": 
"sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==",
+      "dependencies": {
+        "get-nonce": "^1.0.0",
+        "invariant": "^2.2.4",
+        "tslib": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "peerDependencies": {
+        "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/react-textarea-autosize": {
+      "version": "8.5.3",
+      "resolved": 
"https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz";,
+      "integrity": 
"sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==",
+      "dependencies": {
+        "@babel/runtime": "^7.20.13",
+        "use-composed-ref": "^1.3.0",
+        "use-latest": "^1.2.1"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "peerDependencies": {
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+      }
+    },
     "node_modules/read-cache": {
       "version": "1.0.0",
       "resolved": 
"https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz";,
@@ -3666,6 +3997,11 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/rfdc": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz";,
+      "integrity": 
"sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="
+    },
     "node_modules/rimraf": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz";,
@@ -4125,6 +4461,11 @@
         "url": "https://github.com/sponsors/ljharb";
       }
     },
+    "node_modules/tabbable": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz";,
+      "integrity": 
"sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew=="
+    },
     "node_modules/tailwindcss": {
       "version": "3.4.3",
       "resolved": 
"https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz";,
@@ -4394,6 +4735,84 @@
         "punycode": "^2.1.0"
       }
     },
+    "node_modules/use-callback-ref": {
+      "version": "1.3.2",
+      "resolved": 
"https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz";,
+      "integrity": 
"sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==",
+      "dependencies": {
+        "tslib": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "peerDependencies": {
+        "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/use-composed-ref": {
+      "version": "1.3.0",
+      "resolved": 
"https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz";,
+      "integrity": 
"sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==",
+      "peerDependencies": {
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+      }
+    },
+    "node_modules/use-isomorphic-layout-effect": {
+      "version": "1.1.2",
+      "resolved": 
"https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz";,
+      "integrity": 
"sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==",
+      "peerDependencies": {
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/use-latest": {
+      "version": "1.2.1",
+      "resolved": 
"https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz";,
+      "integrity": 
"sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==",
+      "dependencies": {
+        "use-isomorphic-layout-effect": "^1.1.1"
+      },
+      "peerDependencies": {
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/use-sidecar": {
+      "version": "1.1.2",
+      "resolved": 
"https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz";,
+      "integrity": 
"sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==",
+      "dependencies": {
+        "detect-node-es": "^1.1.0",
+        "tslib": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "peerDependencies": {
+        "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0",
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/util-deprecate": {
       "version": "1.0.2",
       "resolved": 
"https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";,
diff --git a/package.json b/package.json
index c5c47ff..3797788 100644
--- a/package.json
+++ b/package.json
@@ -14,17 +14,26 @@
     "@fortawesome/free-regular-svg-icons": "^6.5.2",
     "@fortawesome/free-solid-svg-icons": "^6.5.2",
     "@fortawesome/react-fontawesome": "^0.2.2",
+    "@lottiefiles/react-lottie-player": "^3.5.4",
+    "@mantine/core": "^7.10.1",
+    "@mantine/hooks": "^7.10.1",
+    "@tanstack/react-query": "^5.45.0",
     "autoprefixer": "^10.4.19",
     "eslint": "^8.56.0",
     "eslint-config-next": "^14.2.3",
+    "lottie-react": "^2.4.0",
+    "lottie-web": "^5.12.2",
     "next": "^14.2.3",
     "next-themes": "^0.2.1",
     "react": "^18.3.1",
-    "react-dom": "^18.3.1"
+    "react-dom": "^18.3.1",
+    "react-lottie": "^1.2.4",
+    "react-lottie-player": "^2.0.0"
   },
   "devDependencies": {
     "@types/node": "^20.12.12",
     "@types/react": "^18.3.3",
+    "@types/react-lottie": "^1.2.10",
     "tailwindcss": "^3.4.3",
     "typescript": "^5.4.5"
   }
diff --git a/public/images/about/about.json b/public/images/about/about.json
new file mode 100644
index 0000000..4200fd7
--- /dev/null
+++ b/public/images/about/about.json
@@ -0,0 +1 @@
+{"v":"5.7.8","fr":60,"ip":0,"op":241,"w":602,"h":648,"nm":"Comp 
1","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Layer
 
2","parent":2,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[533.955,408.228,0],"ix":2,"l":2},"a":{"a":0,"k":[533.955,408.228,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[559.793,404.943],[525.794,394.103],
 [...]
\ No newline at end of file
diff --git a/public/images/features/features.json 
b/public/images/features/features.json
new file mode 100644
index 0000000..e224fda
--- /dev/null
+++ b/public/images/features/features.json
@@ -0,0 +1 @@
+{"v":"5.7.0","fr":60,"ip":0,"op":180,"w":780,"h":830,"nm":"Comp 
1","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Ñëîé
 
23","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[625.389,411.958,0],"ix":2},"a":{"a":0,"k":[125.389,-88.042,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,16.667]},"t":77,"s":[0,0,100]},{"t":107,"s":[100,100,100]}],"ix":6}},"ao":0,"shap
 [...]
","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[0]},{"t":110,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[236.663,450.733,0],"ix":2},"a":{"a":0,"k":[113.485,-74.147,0],"ix":1},"s":{"a":0,"k":[528,528,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"s
 [...]
\ No newline at end of file
diff --git a/src/components/About/index.tsx b/src/components/About/index.tsx
index a705096..bf513d3 100644
--- a/src/components/About/index.tsx
+++ b/src/components/About/index.tsx
@@ -1,6 +1,38 @@
-import Image from "next/image";
+"use client";
+
+import { useEffect, useRef } from 'react';
+import lottie from 'lottie-web';
 
 const About = () => {
+  const animationContainer = useRef(null);
+
+  useEffect(() => {
+    const instance = lottie.loadAnimation({
+      container: animationContainer.current,
+      renderer: 'svg',
+      loop: true,
+      autoplay: true,
+      path: '/images/about/about.json'
+    });
+  
+    const observer = new IntersectionObserver((entries) => {
+      entries.forEach(entry => {
+        if (entry.isIntersecting) {
+          instance.play();
+        } else {
+          instance.pause();
+        }
+      });
+    });
+  
+    observer.observe(animationContainer.current);
+  
+    return () => {
+      instance.destroy();
+      observer.disconnect();
+    };
+  }, []);  
+
   return (
     <section className="py-16 md:py-20 lg:py-28" style={{ backgroundImage: 
`url('data:image/svg+xml,<svg id="visual" viewBox="0 0 2000 1000" width="2000" 
height="1000" xmlns="http://www.w3.org/2000/svg"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; version="1.1"><rect x="0" y="0" 
width="2000" height="1000" fill="%230F0F1A"></rect><g 
transform="translate(961.35041104432 476.3922111923553)"><path d="M284 
-215.3C365.2 -124.6 426.4 -6.7 407.5 99.8C388.6 206.3 289.8 301.4 172.6 
357.3C55.5 413.2  [...]
       <div className="container">
@@ -10,12 +42,7 @@ const About = () => {
               className="relative mx-auto mb-12 aspect-[25/24] max-w-[500px] 
text-center lg:m-0"
               data-wow-delay=".15s"
             >
-              <Image
-                src="/images/about/about.svg"
-                alt="about image"
-                fill
-                className="hidden drop-shadow-three dark:block 
dark:drop-shadow-none"
-              />
+             <div ref={animationContainer}></div>
             </div>
           </div>
           <div className="w-full px-4 lg:w-1/2">
diff --git a/src/components/Features/index.tsx 
b/src/components/Features/index.tsx
index 0983b5d..96c9bc3 100644
--- a/src/components/Features/index.tsx
+++ b/src/components/Features/index.tsx
@@ -1,4 +1,7 @@
-import Image from "next/image";
+"use client";
+
+import { useEffect, useRef } from 'react';
+import lottie from 'lottie-web';
 import SectionTitle from "../Common/SectionTitle";
 
 const checkIcon = (
@@ -8,6 +11,35 @@ const checkIcon = (
 );
 
 const Features = () => {
+  const animationContainer = useRef(null);
+
+  useEffect(() => {
+    const instance = lottie.loadAnimation({
+      container: animationContainer.current,
+      renderer: 'svg',
+      loop: true,
+      autoplay: true,
+      path: '/images/features/features.json'
+    });
+  
+    const observer = new IntersectionObserver((entries) => {
+      entries.forEach(entry => {
+        if (entry.isIntersecting) {
+          instance.play();
+        } else {
+          instance.pause();
+        }
+      });
+    });
+  
+    observer.observe(animationContainer.current);
+  
+    return () => {
+      instance.destroy();
+      observer.disconnect();
+    };
+  }, []);  
+
   const List = ({ text }) => (
     <p className="mb-5 flex items-center text-lg font-medium text-body-color">
       <span className="mr-4 flex h-[30px] w-[30px] items-center justify-center 
rounded-md bg-primary bg-opacity-10 text-primary">
@@ -55,12 +87,7 @@ const Features = () => {
 
             <div className="w-full px-4 lg:w-1/2">
               <div className="relative mx-auto aspect-[25/24] max-w-[500px] 
lg:mr-0">
-                <Image
-                  src="/images/features/features.svg"
-                  alt="about-image"
-                  fill
-                  className="mx-auto hidden max-w-full drop-shadow-three 
dark:block dark:drop-shadow-none lg:mr-0"
-                />
+                <div ref={animationContainer}></div>
               </div>
             </div>
           </div>
diff --git a/src/components/Footer/index.tsx b/src/components/Footer/index.tsx
index 84255f0..6dd8787 100644
--- a/src/components/Footer/index.tsx
+++ b/src/components/Footer/index.tsx
@@ -1,4 +1,6 @@
 "use client";
+
+import React, { useEffect, useState } from 'react';
 import Image from "next/image";
 import Link from "next/link";
 import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
@@ -8,8 +10,42 @@ import {
   faTwitter,
   faYoutube
 } from "@fortawesome/free-brands-svg-icons";
+import { faStar as faStarSolid, faCodeBranch as faCodeBranchSolid } from 
"@fortawesome/free-solid-svg-icons";
 
 const Footer = () => {
+  const [repoData, setRepoData] = useState({
+    stars: 0,
+    forks: 0,
+    error: null,
+  });
+
+  useEffect(() => {
+    const fetchRepoData = async () => {
+      const url = "https://api.github.com/repos/apache/incubator-resilientdb";;
+
+      try {
+        const response = await fetch(url);
+        if (response.ok) {
+          const data = await response.json();
+          setRepoData({
+            stars: data.stargazers_count,
+            forks: data.forks,
+            error: null,
+          });
+        } else {
+          throw new Error('Failed to fetch data');
+        }
+      } catch (error) {
+        setRepoData((prevState) => ({
+          ...prevState,
+          error: error.message,
+        }));
+      }
+    };
+
+    fetchRepoData();
+  }, []);
+
   return (
     <>
       <footer className="relative z-10 bg-white pt-16 dark:bg-gray-dark 
md:pt-20 lg:pt-24">
@@ -65,20 +101,16 @@ const Footer = () => {
                   </a>
                   <div className="flex mr-3">
                     <a className="mr-2" 
href="https://github.com/apache/incubator-resilientdb";>
-                      <Image
-                      
src="https://img.shields.io/github/stars/apache/incubator-resilientdb?style=flat&color=959CB1";
-                      alt="GitHub stars"
-                      width={100}
-                      height={20}
-                      />
+                      <div className="flex items-center px-3 py-1 rounded-full 
bg-gray-400 text-gray-700 hover:bg-teal-500 hover:text-white transition-colors">
+                        <FontAwesomeIcon icon={faStarSolid} 
className="text-xs" />
+                        <span className="ml-2 text-sm">{repoData.stars}</span>
+                      </div>
                     </a>
                     <a 
href="https://github.com/apache/incubator-resilientdb/fork";>
-                      <Image
-                        
src="https://img.shields.io/github/forks/apache/incubator-resilientdb?style=flat&color=959CB1";
-                        alt="GitHub forks"
-                        width={100}
-                        height={20}
-                      />
+                      <div className="flex items-center px-3 py-1 rounded-full 
bg-gray-400 text-gray-700 hover:bg-teal-500 hover:text-white transition-colors">
+                        <FontAwesomeIcon icon={faCodeBranchSolid} 
className="text-xs" />
+                        <span className="ml-2 text-sm">{repoData.forks}</span>
+                      </div>
                     </a>
                   </div>
                 </div>
diff --git a/tsconfig.json b/tsconfig.json
index 2a2486c..dacb9df 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -11,6 +11,7 @@
     "forceConsistentCasingInFileNames": true,
     "noEmit": true,
     "incremental": true,
+    "allowSyntheticDefaultImports": true,
     "esModuleInterop": true,
     "module": "esnext",
     "moduleResolution": "node",

Reply via email to