change course data

This commit is contained in:
osmannyildiz 2023-12-16 23:29:30 +03:00
parent f5bf674066
commit 03c726605d
23 changed files with 341 additions and 5324 deletions

4980
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,6 @@
"next": "^14.0.4",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"uuid": "^9.0.1",
"viem": "^1.20.0",
"wagmi": "^1.4.12"
}

View File

@ -3,22 +3,22 @@ lockfileVersion: '6.0'
dependencies:
'@rainbow-me/rainbowkit':
specifier: ^1.3.1
version: 1.3.1(react-dom@18.0.0)(react@18.0.0)(viem@1.20.0)(wagmi@1.4.12)
version: 1.3.1(react-dom@18.2.0)(react@18.2.0)(viem@1.20.0)(wagmi@1.4.12)
next:
specifier: 13.5.6
version: 13.5.6(react-dom@18.0.0)(react@18.0.0)
specifier: ^14.0.4
version: 14.0.4(react-dom@18.2.0)(react@18.2.0)
react:
specifier: ^18
version: 18.0.0
specifier: ^18.2.0
version: 18.2.0
react-dom:
specifier: ^18
version: 18.0.0(react@18.0.0)
specifier: ^18.2.0
version: 18.2.0(react@18.2.0)
viem:
specifier: ^1.20.0
version: 1.20.0(typescript@5.3.3)
wagmi:
specifier: ^1.4.12
version: 1.4.12(react-dom@18.0.0)(react@18.0.0)(typescript@5.3.3)(viem@1.20.0)
version: 1.4.12(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)(viem@1.20.0)
packages:
@ -156,12 +156,12 @@ packages:
tslib: 2.6.2
dev: false
/@next/env@13.5.6:
resolution: {integrity: sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==}
/@next/env@14.0.4:
resolution: {integrity: sha512-irQnbMLbUNQpP1wcE5NstJtbuA/69kRfzBrpAD7Gsn8zm/CY6YQYc3HQBz8QPxwISG26tIm5afvvVbu508oBeQ==}
dev: false
/@next/swc-darwin-arm64@13.5.6:
resolution: {integrity: sha512-5nvXMzKtZfvcu4BhtV0KH1oGv4XEW+B+jOfmBdpFI3C7FrB/MfujRpWYSBBO64+qbW8pkZiSyQv9eiwnn5VIQA==}
/@next/swc-darwin-arm64@14.0.4:
resolution: {integrity: sha512-mF05E/5uPthWzyYDyptcwHptucf/jj09i2SXBPwNzbgBNc+XnwzrL0U6BmPjQeOL+FiB+iG1gwBeq7mlDjSRPg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
@ -169,8 +169,8 @@ packages:
dev: false
optional: true
/@next/swc-darwin-x64@13.5.6:
resolution: {integrity: sha512-6cgBfxg98oOCSr4BckWjLLgiVwlL3vlLj8hXg2b+nDgm4bC/qVXXLfpLB9FHdoDu4057hzywbxKvmYGmi7yUzA==}
/@next/swc-darwin-x64@14.0.4:
resolution: {integrity: sha512-IZQ3C7Bx0k2rYtrZZxKKiusMTM9WWcK5ajyhOZkYYTCc8xytmwSzR1skU7qLgVT/EY9xtXDG0WhY6fyujnI3rw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
@ -178,8 +178,8 @@ packages:
dev: false
optional: true
/@next/swc-linux-arm64-gnu@13.5.6:
resolution: {integrity: sha512-txagBbj1e1w47YQjcKgSU4rRVQ7uF29YpnlHV5xuVUsgCUf2FmyfJ3CPjZUvpIeXCJAoMCFAoGnbtX86BK7+sg==}
/@next/swc-linux-arm64-gnu@14.0.4:
resolution: {integrity: sha512-VwwZKrBQo/MGb1VOrxJ6LrKvbpo7UbROuyMRvQKTFKhNaXjUmKTu7wxVkIuCARAfiI8JpaWAnKR+D6tzpCcM4w==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
@ -187,8 +187,8 @@ packages:
dev: false
optional: true
/@next/swc-linux-arm64-musl@13.5.6:
resolution: {integrity: sha512-cGd+H8amifT86ZldVJtAKDxUqeFyLWW+v2NlBULnLAdWsiuuN8TuhVBt8ZNpCqcAuoruoSWynvMWixTFcroq+Q==}
/@next/swc-linux-arm64-musl@14.0.4:
resolution: {integrity: sha512-8QftwPEW37XxXoAwsn+nXlodKWHfpMaSvt81W43Wh8dv0gkheD+30ezWMcFGHLI71KiWmHK5PSQbTQGUiidvLQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
@ -196,8 +196,8 @@ packages:
dev: false
optional: true
/@next/swc-linux-x64-gnu@13.5.6:
resolution: {integrity: sha512-Mc2b4xiIWKXIhBy2NBTwOxGD3nHLmq4keFk+d4/WL5fMsB8XdJRdtUlL87SqVCTSaf1BRuQQf1HvXZcy+rq3Nw==}
/@next/swc-linux-x64-gnu@14.0.4:
resolution: {integrity: sha512-/s/Pme3VKfZAfISlYVq2hzFS8AcAIOTnoKupc/j4WlvF6GQ0VouS2Q2KEgPuO1eMBwakWPB1aYFIA4VNVh667A==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
@ -205,8 +205,8 @@ packages:
dev: false
optional: true
/@next/swc-linux-x64-musl@13.5.6:
resolution: {integrity: sha512-CFHvP9Qz98NruJiUnCe61O6GveKKHpJLloXbDSWRhqhkJdZD2zU5hG+gtVJR//tyW897izuHpM6Gtf6+sNgJPQ==}
/@next/swc-linux-x64-musl@14.0.4:
resolution: {integrity: sha512-m8z/6Fyal4L9Bnlxde5g2Mfa1Z7dasMQyhEhskDATpqr+Y0mjOBZcXQ7G5U+vgL22cI4T7MfvgtrM2jdopqWaw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
@ -214,8 +214,8 @@ packages:
dev: false
optional: true
/@next/swc-win32-arm64-msvc@13.5.6:
resolution: {integrity: sha512-aFv1ejfkbS7PUa1qVPwzDHjQWQtknzAZWGTKYIAaS4NMtBlk3VyA6AYn593pqNanlicewqyl2jUhQAaFV/qXsg==}
/@next/swc-win32-arm64-msvc@14.0.4:
resolution: {integrity: sha512-7Wv4PRiWIAWbm5XrGz3D8HUkCVDMMz9igffZG4NB1p4u1KoItwx9qjATHz88kwCEal/HXmbShucaslXCQXUM5w==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
@ -223,8 +223,8 @@ packages:
dev: false
optional: true
/@next/swc-win32-ia32-msvc@13.5.6:
resolution: {integrity: sha512-XqqpHgEIlBHvzwG8sp/JXMFkLAfGLqkbVsyN+/Ih1mR8INb6YCc2x/Mbwi6hsAgUnqQztz8cvEbHJUbSl7RHDg==}
/@next/swc-win32-ia32-msvc@14.0.4:
resolution: {integrity: sha512-zLeNEAPULsl0phfGb4kdzF/cAVIfaC7hY+kt0/d+y9mzcZHsMS3hAS829WbJ31DkSlVKQeHEjZHIdhN+Pg7Gyg==}
engines: {node: '>= 10'}
cpu: [ia32]
os: [win32]
@ -232,8 +232,8 @@ packages:
dev: false
optional: true
/@next/swc-win32-x64-msvc@13.5.6:
resolution: {integrity: sha512-Cqfe1YmOS7k+5mGu92nl5ULkzpKuxJrP3+4AEuPmrpFZ3BHxTY3TnHmU1On3bFmFFs6FbTcdF58CCUProGpIGQ==}
/@next/swc-win32-x64-msvc@14.0.4:
resolution: {integrity: sha512-yEh2+R8qDlDCjxVpzOTEpBLQTEFAcP2A8fUFLaWNap9GitYKkKv1//y2S6XY6zsR4rCOPRpU7plYDR+az2n30A==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
@ -350,6 +350,7 @@ packages:
dependencies:
is-glob: 4.0.3
micromatch: 4.0.5
napi-wasm: 1.1.0
dev: false
bundledDependencies:
- napi-wasm
@ -404,7 +405,7 @@ packages:
'@parcel/watcher-win32-x64': 2.3.0
dev: false
/@rainbow-me/rainbowkit@1.3.1(react-dom@18.0.0)(react@18.0.0)(viem@1.20.0)(wagmi@1.4.12):
/@rainbow-me/rainbowkit@1.3.1(react-dom@18.2.0)(react@18.2.0)(viem@1.20.0)(wagmi@1.4.12):
resolution: {integrity: sha512-4Upi+S12ZHosimzlUpCiOocg4dtfGU2wkzcpxeat/FYHrvhVIOgm0TuzbsIM96W1p7OXabosd7xuxPvwduUygQ==}
engines: {node: '>=12.4'}
peerDependencies:
@ -419,12 +420,12 @@ packages:
clsx: 1.1.1
i18n-js: 4.3.2
qrcode: 1.5.0
react: 18.0.0
react-dom: 18.0.0(react@18.0.0)
react-remove-scroll: 2.5.4(react@18.0.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
react-remove-scroll: 2.5.4(react@18.2.0)
ua-parser-js: 1.0.37
viem: 1.20.0(typescript@5.3.3)
wagmi: 1.4.12(react-dom@18.0.0)(react@18.0.0)(typescript@5.3.3)(viem@1.20.0)
wagmi: 1.4.12(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)(viem@1.20.0)
transitivePeerDependencies:
- '@types/react'
dev: false
@ -652,10 +653,10 @@ packages:
'@tanstack/react-query': ^4.36.1
dependencies:
'@tanstack/query-persist-client-core': 4.36.1
'@tanstack/react-query': 4.36.1(react-dom@18.0.0)(react@18.0.0)
'@tanstack/react-query': 4.36.1(react-dom@18.2.0)(react@18.2.0)
dev: false
/@tanstack/react-query@4.36.1(react-dom@18.0.0)(react@18.0.0):
/@tanstack/react-query@4.36.1(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-y7ySVHFyyQblPl3J3eQBWpXZkliroki3ARnBKsdJchlgt7yJLRDUcf4B8soufgiYt3pEQIkBWBx1N9/ZPIeUWw==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
@ -668,9 +669,9 @@ packages:
optional: true
dependencies:
'@tanstack/query-core': 4.36.1
react: 18.0.0
react-dom: 18.0.0(react@18.0.0)
use-sync-external-store: 1.2.0(react@18.0.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
use-sync-external-store: 1.2.0(react@18.2.0)
dev: false
/@types/connect@3.4.38:
@ -737,7 +738,7 @@ packages:
'@vanilla-extract/css': 1.9.1
dev: false
/@wagmi/connectors@3.1.10(react@18.0.0)(typescript@5.3.3)(viem@1.20.0):
/@wagmi/connectors@3.1.10(react@18.2.0)(typescript@5.3.3)(viem@1.20.0):
resolution: {integrity: sha512-ZLJC1QaeiZarkF07Cr9mOlVjPO1Lf5TBx+JKBms2y5fUIXlKrxCfQgO/gDCureboI+Us2X3IRI659+XacSGpbA==}
peerDependencies:
typescript: '>=5.0.4'
@ -749,9 +750,9 @@ packages:
'@coinbase/wallet-sdk': 3.7.2
'@safe-global/safe-apps-provider': 0.18.1(typescript@5.3.3)
'@safe-global/safe-apps-sdk': 8.1.0(typescript@5.3.3)
'@walletconnect/ethereum-provider': 2.10.6(react@18.0.0)
'@walletconnect/ethereum-provider': 2.10.6(react@18.2.0)
'@walletconnect/legacy-provider': 2.0.0
'@walletconnect/modal': 2.6.2(react@18.0.0)
'@walletconnect/modal': 2.6.2(react@18.2.0)
'@walletconnect/utils': 2.10.2
abitype: 0.8.7(typescript@5.3.3)
eventemitter3: 4.0.7
@ -779,7 +780,7 @@ packages:
- zod
dev: false
/@wagmi/core@1.4.12(react@18.0.0)(typescript@5.3.3)(viem@1.20.0):
/@wagmi/core@1.4.12(react@18.2.0)(typescript@5.3.3)(viem@1.20.0):
resolution: {integrity: sha512-bLcYmmGgjtl3jAGo8X3Sm6oUwsdjbVxFMu9SWnwHdE4S9JdYeWM57dEhQgq8SYul2yQ7yY2/gimBf1Or0Ky3dQ==}
peerDependencies:
typescript: '>=5.0.4'
@ -788,12 +789,12 @@ packages:
typescript:
optional: true
dependencies:
'@wagmi/connectors': 3.1.10(react@18.0.0)(typescript@5.3.3)(viem@1.20.0)
'@wagmi/connectors': 3.1.10(react@18.2.0)(typescript@5.3.3)(viem@1.20.0)
abitype: 0.8.7(typescript@5.3.3)
eventemitter3: 4.0.7
typescript: 5.3.3
viem: 1.20.0(typescript@5.3.3)
zustand: 4.4.7(react@18.0.0)
zustand: 4.4.7(react@18.2.0)
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@ -879,14 +880,14 @@ packages:
tslib: 1.14.1
dev: false
/@walletconnect/ethereum-provider@2.10.6(react@18.0.0):
/@walletconnect/ethereum-provider@2.10.6(react@18.2.0):
resolution: {integrity: sha512-bBQ+yUfxLv8VxNttgNKY7nED35gSVayO/BnLHbNKvyV1gpvSCla5mWB9MsXuQs70MK0g+/qtgRVSrOtdSubaNQ==}
dependencies:
'@walletconnect/jsonrpc-http-connection': 1.0.7
'@walletconnect/jsonrpc-provider': 1.0.13
'@walletconnect/jsonrpc-types': 1.0.3
'@walletconnect/jsonrpc-utils': 1.0.8
'@walletconnect/modal': 2.6.2(react@18.0.0)
'@walletconnect/modal': 2.6.2(react@18.2.0)
'@walletconnect/sign-client': 2.10.6
'@walletconnect/types': 2.10.6
'@walletconnect/universal-provider': 2.10.6
@ -1064,19 +1065,19 @@ packages:
tslib: 1.14.1
dev: false
/@walletconnect/modal-core@2.6.2(react@18.0.0):
/@walletconnect/modal-core@2.6.2(react@18.2.0):
resolution: {integrity: sha512-cv8ibvdOJQv2B+nyxP9IIFdxvQznMz8OOr/oR/AaUZym4hjXNL/l1a2UlSQBXrVjo3xxbouMxLb3kBsHoYP2CA==}
dependencies:
valtio: 1.11.2(react@18.0.0)
valtio: 1.11.2(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
- react
dev: false
/@walletconnect/modal-ui@2.6.2(react@18.0.0):
/@walletconnect/modal-ui@2.6.2(react@18.2.0):
resolution: {integrity: sha512-rbdstM1HPGvr7jprQkyPggX7rP4XiCG85ZA+zWBEX0dVQg8PpAgRUqpeub4xQKDgY7pY/xLRXSiCVdWGqvG2HA==}
dependencies:
'@walletconnect/modal-core': 2.6.2(react@18.0.0)
'@walletconnect/modal-core': 2.6.2(react@18.2.0)
lit: 2.8.0
motion: 10.16.2
qrcode: 1.5.3
@ -1085,11 +1086,11 @@ packages:
- react
dev: false
/@walletconnect/modal@2.6.2(react@18.0.0):
/@walletconnect/modal@2.6.2(react@18.2.0):
resolution: {integrity: sha512-eFopgKi8AjKf/0U4SemvcYw9zlLpx9njVN8sf6DAkowC2Md0gPU/UNEbH1Wwj407pEKnEds98pKWib1NN1ACoA==}
dependencies:
'@walletconnect/modal-core': 2.6.2(react@18.0.0)
'@walletconnect/modal-ui': 2.6.2(react@18.0.0)
'@walletconnect/modal-core': 2.6.2(react@18.2.0)
'@walletconnect/modal-ui': 2.6.2(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
- react
@ -2382,9 +2383,13 @@ packages:
hasBin: true
dev: false
/next@13.5.6(react-dom@18.0.0)(react@18.0.0):
resolution: {integrity: sha512-Y2wTcTbO4WwEsVb4A8VSnOsG1I9ok+h74q0ZdxkwM3EODqrs4pasq7O0iUxbcS9VtWMicG7f3+HAj0r1+NtKSw==}
engines: {node: '>=16.14.0'}
/napi-wasm@1.1.0:
resolution: {integrity: sha512-lHwIAJbmLSjF9VDRm9GoVOy9AGp3aIvkjv+Kvz9h16QR3uSVYH78PNQUnT2U4X53mhlnV2M7wrhibQ3GHicDmg==}
dev: false
/next@14.0.4(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==}
engines: {node: '>=18.17.0'}
hasBin: true
peerDependencies:
'@opentelemetry/api': ^1.1.0
@ -2397,25 +2402,26 @@ packages:
sass:
optional: true
dependencies:
'@next/env': 13.5.6
'@next/env': 14.0.4
'@swc/helpers': 0.5.2
busboy: 1.6.0
caniuse-lite: 1.0.30001570
graceful-fs: 4.2.11
postcss: 8.4.31
react: 18.0.0
react-dom: 18.0.0(react@18.0.0)
styled-jsx: 5.1.1(react@18.0.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
styled-jsx: 5.1.1(react@18.2.0)
watchpack: 2.4.0
optionalDependencies:
'@next/swc-darwin-arm64': 13.5.6
'@next/swc-darwin-x64': 13.5.6
'@next/swc-linux-arm64-gnu': 13.5.6
'@next/swc-linux-arm64-musl': 13.5.6
'@next/swc-linux-x64-gnu': 13.5.6
'@next/swc-linux-x64-musl': 13.5.6
'@next/swc-win32-arm64-msvc': 13.5.6
'@next/swc-win32-ia32-msvc': 13.5.6
'@next/swc-win32-x64-msvc': 13.5.6
'@next/swc-darwin-arm64': 14.0.4
'@next/swc-darwin-x64': 14.0.4
'@next/swc-linux-arm64-gnu': 14.0.4
'@next/swc-linux-arm64-musl': 14.0.4
'@next/swc-linux-x64-gnu': 14.0.4
'@next/swc-linux-x64-musl': 14.0.4
'@next/swc-win32-arm64-msvc': 14.0.4
'@next/swc-win32-ia32-msvc': 14.0.4
'@next/swc-win32-x64-msvc': 14.0.4
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
@ -2677,17 +2683,17 @@ packages:
safe-buffer: 5.2.1
dev: false
/react-dom@18.0.0(react@18.0.0):
resolution: {integrity: sha512-XqX7uzmFo0pUceWFCt7Gff6IyIMzFUn7QMZrbrQfGxtaxXZIcGQzoNpRLE3fQLnS4XzLLPMZX2T9TRcSrasicw==}
/react-dom@18.2.0(react@18.2.0):
resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
peerDependencies:
react: ^18.0.0
react: ^18.2.0
dependencies:
loose-envify: 1.4.0
react: 18.0.0
scheduler: 0.21.0
react: 18.2.0
scheduler: 0.23.0
dev: false
/react-remove-scroll-bar@2.3.4(react@18.0.0):
/react-remove-scroll-bar@2.3.4(react@18.2.0):
resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==}
engines: {node: '>=10'}
peerDependencies:
@ -2697,12 +2703,12 @@ packages:
'@types/react':
optional: true
dependencies:
react: 18.0.0
react-style-singleton: 2.2.1(react@18.0.0)
react: 18.2.0
react-style-singleton: 2.2.1(react@18.2.0)
tslib: 2.6.2
dev: false
/react-remove-scroll@2.5.4(react@18.0.0):
/react-remove-scroll@2.5.4(react@18.2.0):
resolution: {integrity: sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA==}
engines: {node: '>=10'}
peerDependencies:
@ -2712,15 +2718,15 @@ packages:
'@types/react':
optional: true
dependencies:
react: 18.0.0
react-remove-scroll-bar: 2.3.4(react@18.0.0)
react-style-singleton: 2.2.1(react@18.0.0)
react: 18.2.0
react-remove-scroll-bar: 2.3.4(react@18.2.0)
react-style-singleton: 2.2.1(react@18.2.0)
tslib: 2.6.2
use-callback-ref: 1.3.0(react@18.0.0)
use-sidecar: 1.1.2(react@18.0.0)
use-callback-ref: 1.3.0(react@18.2.0)
use-sidecar: 1.1.2(react@18.2.0)
dev: false
/react-style-singleton@2.2.1(react@18.0.0):
/react-style-singleton@2.2.1(react@18.2.0):
resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==}
engines: {node: '>=10'}
peerDependencies:
@ -2732,12 +2738,12 @@ packages:
dependencies:
get-nonce: 1.0.1
invariant: 2.2.4
react: 18.0.0
react: 18.2.0
tslib: 2.6.2
dev: false
/react@18.0.0:
resolution: {integrity: sha512-x+VL6wbT4JRVPm7EGxXhZ8w8LTROaxPXOqhlGyVSrv0sB1jkyFGgXxJ8LVoPRLvPR6/CIZGFmfzqUa2NYeMr2A==}
/react@18.2.0:
resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
engines: {node: '>=0.10.0'}
dependencies:
loose-envify: 1.4.0
@ -2817,8 +2823,8 @@ packages:
engines: {node: '>=10'}
dev: false
/scheduler@0.21.0:
resolution: {integrity: sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==}
/scheduler@0.23.0:
resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
dependencies:
loose-envify: 1.4.0
dev: false
@ -2954,7 +2960,7 @@ packages:
engines: {node: '>=6'}
dev: false
/styled-jsx@5.1.1(react@18.0.0):
/styled-jsx@5.1.1(react@18.2.0):
resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
engines: {node: '>= 12.0.0'}
peerDependencies:
@ -2968,7 +2974,7 @@ packages:
optional: true
dependencies:
client-only: 0.0.1
react: 18.0.0
react: 18.2.0
dev: false
/superstruct@0.14.2:
@ -3134,7 +3140,7 @@ packages:
resolution: {integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==}
dev: false
/use-callback-ref@1.3.0(react@18.0.0):
/use-callback-ref@1.3.0(react@18.2.0):
resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==}
engines: {node: '>=10'}
peerDependencies:
@ -3144,11 +3150,11 @@ packages:
'@types/react':
optional: true
dependencies:
react: 18.0.0
react: 18.2.0
tslib: 2.6.2
dev: false
/use-sidecar@1.1.2(react@18.0.0):
/use-sidecar@1.1.2(react@18.2.0):
resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==}
engines: {node: '>=10'}
peerDependencies:
@ -3159,16 +3165,16 @@ packages:
optional: true
dependencies:
detect-node-es: 1.1.0
react: 18.0.0
react: 18.2.0
tslib: 2.6.2
dev: false
/use-sync-external-store@1.2.0(react@18.0.0):
/use-sync-external-store@1.2.0(react@18.2.0):
resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
dependencies:
react: 18.0.0
react: 18.2.0
dev: false
/utf-8-validate@5.0.10:
@ -3198,7 +3204,7 @@ packages:
hasBin: true
dev: false
/valtio@1.11.2(react@18.0.0):
/valtio@1.11.2(react@18.2.0):
resolution: {integrity: sha512-1XfIxnUXzyswPAPXo1P3Pdx2mq/pIqZICkWN60Hby0d9Iqb+MEIpqgYVlbflvHdrp2YR/q3jyKWRPJJ100yxaw==}
engines: {node: '>=12.20.0'}
peerDependencies:
@ -3211,8 +3217,8 @@ packages:
optional: true
dependencies:
proxy-compare: 2.5.1
react: 18.0.0
use-sync-external-store: 1.2.0(react@18.0.0)
react: 18.2.0
use-sync-external-store: 1.2.0(react@18.2.0)
dev: false
/viem@1.20.0(typescript@5.3.3):
@ -3238,7 +3244,7 @@ packages:
- zod
dev: false
/wagmi@1.4.12(react-dom@18.0.0)(react@18.0.0)(typescript@5.3.3)(viem@1.20.0):
/wagmi@1.4.12(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)(viem@1.20.0):
resolution: {integrity: sha512-QRxpjhdMlZmbYTfn9VQkQMKq+l3kwA1O7tF10vaykPrjbGX+IIlyn72ib9oqW9BfQO7n/Sf/mnVz1zbxRhGPWA==}
peerDependencies:
react: '>=17.0.0'
@ -3249,13 +3255,13 @@ packages:
optional: true
dependencies:
'@tanstack/query-sync-storage-persister': 4.36.1
'@tanstack/react-query': 4.36.1(react-dom@18.0.0)(react@18.0.0)
'@tanstack/react-query': 4.36.1(react-dom@18.2.0)(react@18.2.0)
'@tanstack/react-query-persist-client': 4.36.1(@tanstack/react-query@4.36.1)
'@wagmi/core': 1.4.12(react@18.0.0)(typescript@5.3.3)(viem@1.20.0)
'@wagmi/core': 1.4.12(react@18.2.0)(typescript@5.3.3)(viem@1.20.0)
abitype: 0.8.7(typescript@5.3.3)
react: 18.0.0
react: 18.2.0
typescript: 5.3.3
use-sync-external-store: 1.2.0(react@18.0.0)
use-sync-external-store: 1.2.0(react@18.2.0)
viem: 1.20.0(typescript@5.3.3)
transitivePeerDependencies:
- '@azure/app-configuration'
@ -3416,7 +3422,7 @@ packages:
yargs-parser: 18.1.3
dev: false
/zustand@4.4.7(react@18.0.0):
/zustand@4.4.7(react@18.2.0):
resolution: {integrity: sha512-QFJWJMdlETcI69paJwhSMJz7PPWjVP8Sjhclxmxmxv/RYI7ZOvR5BHX+ktH0we9gTWQMxcne8q1OY8xxz604gw==}
engines: {node: '>=12.7.0'}
peerDependencies:
@ -3431,6 +3437,6 @@ packages:
react:
optional: true
dependencies:
react: 18.0.0
use-sync-external-store: 1.2.0(react@18.0.0)
react: 18.2.0
use-sync-external-store: 1.2.0(react@18.2.0)
dev: false

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

BIN
public/course-images/ai.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

View File

@ -1,5 +1,5 @@
:root {
--max-width: 1100px;
--max-width: 1280px;
--border-radius: 12px;
--color-bg0: hsl(210deg 40% 4%);
--color-bg1: hsl(210deg 40% 12%);
@ -50,6 +50,16 @@ a {
border: none;
}
.pressable {
transition: transform 0.125s;
}
.pressable:hover {
transform: scale(1.025);
}
.pressable:active {
transform: scale(0.95);
}
.input {
padding: 0.75rem;
border: none;

View File

@ -1,42 +1,40 @@
import Container from "@/components/Container";
import styles from "./page.module.css";
import { COURSES } from "@/mockData";
import { formatPrice } from "@/utils";
import CourseGrid from "@/components/CourseGrid";
import { COURSES } from "@/mockData";
import styles from "./page.module.css";
export default function CategoryPage({ params }) {
// Seçilen kategoriye göre kursları filtrele
const filteredCourses = COURSES.filter(
(course) => course.category.slug === params.categorySlug
);
const filteredCourses = COURSES.filter(
(course) => course.category.slug === params.categorySlug
);
// Eğer filtrelenen kurslar boşsa, isteğe bağlı bir mesaj gösterebilirsiniz
if (filteredCourses.length === 0) {
return (
<main className={styles.root}>
<Container>
<section>
<div>
<h1 className={styles.sectionTitle}>Bu kategoriye ait kurs bulunamadı.</h1>
</div>
</section>
</Container>
</main>
);
}
if (filteredCourses.length === 0) {
return (
<main className={styles.root}>
<Container>
<section>
<div>
<h1 className={styles.sectionTitle}>
Bu kategoriye ait kurs bulunamadı.
</h1>
</div>
</section>
</Container>
</main>
);
}
// Filtrelenen kurslar varsa, her bir kurs için ayrı bir blok oluşturun
return (
<main className={styles.root}>
<Container>
<section>
<div>
<h1 className={styles.sectionTitle}>{params.categorySlug}</h1>
<h2 className={styles.sectionTitle}>Çok Satanlar</h2>
<CourseGrid courses={filteredCourses} />
</div>
</section>
</Container>
</main>
);
return (
<main className={styles.root}>
<Container>
<section>
<div>
<h1 className={styles.sectionTitle}>{params.categorySlug}</h1>
<h2 className={styles.sectionTitle}>Çok Satanlar</h2>
<CourseGrid courses={filteredCourses} />
</div>
</section>
</Container>
</main>
);
}

View File

@ -1,45 +1,38 @@
"use client";
import React from 'react';
import Link from 'next/link';
import styles from './page.module.css';
import Container from '@/components/Container';
import styles from "./page.module.css";
const Step = ({ step, completed, onClick }) => (
<div className={styles.step} onClick={() => onClick()}>
{completed ? '✅' : '◻️'} {step}
</div>
<div className={styles.step} onClick={() => onClick()}>
{completed ? "✅" : "◻️"} {step}
</div>
);
const Home = () => {
return (
<div className={styles.container}>
{/* Soldaki ders videosu */}
<div className={styles.videoContainer}>
{/* Video bileşeni veya iframe ekleyebilirsiniz */}
<iframe
src="https://www.youtube.com/embed/VIDEO_ID"
title="YouTube video player"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowFullScreen
className={styles.video}
></iframe>
</div>
return (
<div className={styles.container}>
<div className={styles.videoContainer}>
<iframe
src="https://www.youtube.com/embed/VIDEO_ID"
title="YouTube video player"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowFullScreen
className={styles.video}
></iframe>
</div>
{/* Sağdaki kurs içeriği */}
<div className={styles.sidebar}>
<div className={styles.courseContainer}>
<h2>Kurs İçeriği</h2>
<div className={styles.courseContent}>
<Step step="Adım 1" completed={false} onClick={() => {}} />
<Step step="Adım 2" completed={false} onClick={() => {}} />
<Step step="Adım 3" completed={false} onClick={() => {}} />
</div>
</div>
</div>
</div>
);
<div className={styles.sidebar}>
<div className={styles.courseContainer}>
<h2>Kurs İçeriği</h2>
<div className={styles.courseContent}>
<Step step="Adım 1" completed={false} onClick={() => {}} />
<Step step="Adım 2" completed={false} onClick={() => {}} />
<Step step="Adım 3" completed={false} onClick={() => {}} />
</div>
</div>
</div>
</div>
);
};
export default Home;

View File

@ -1,36 +1,33 @@
/* styles/Home.module.css */
.container {
display: flex;
}
display: flex;
}
.sidebar {
width: 500px;
padding: 50px;
border-left: 2px solid #ccc;
}
.sidebar {
width: 500px;
padding: 50px;
border-left: 2px solid #ccc;
}
.videoContainer {
flex: 1;
padding: 20px;
}
.videoContainer {
flex: 1;
padding: 20px;
}
.courseContent {
flex: 1;
padding: 10px;
}
.courseContent {
flex: 1;
padding: 10px;
}
.step {
cursor: pointer;
margin-bottom: 10px;
}
.video {
width: 120%;
max-width: 1000px;
aspect-ratio: 16 / 9;
display: block;
margin-left: auto;
margin-right: auto;
}
.step {
cursor: pointer;
margin-bottom: 10px;
}
.video {
width: 120%;
max-width: 1000px;
aspect-ratio: 16 / 9;
display: block;
margin-left: auto;
margin-right: auto;
}

View File

@ -1,30 +1,30 @@
import Link from "next/link";
import Container from "@/components/Container";
import CourseGrid from "@/components/CourseGrid";
import { CATEGORIES, COURSES } from "@/mockData";
import Link from "next/link";
import styles from "./page.module.css";
export default function HomePage() {
return (
<main className={styles.root}>
<Container>
{/* Kategorilerin buton gibi yan yana dizilmiş hali */}
<div className={styles.categories}>
{CATEGORIES.map((category) => (
<Link key={category.slug} href={`/kategoriler/${category.slug}`}>
<div className={styles.categoryButton}>
<span>{category.name}</span>
</div>
</Link>
))}
</div>
return (
<main className={styles.root}>
<Container>
<div className={styles.categories}>
{CATEGORIES.map((category) => (
<Link
key={category.id}
href={`/kategoriler/${category.slug}`}
className="btn btn-primary"
>
{category.name}
</Link>
))}
</div>
<section>
<h1 className={styles.sectionTitle}>Çok Satanlar</h1>
<CourseGrid courses={COURSES} />
</section>
</Container>
</main>
);
<section>
<h1 className={styles.sectionTitle}>Çok Satanlar</h1>
<CourseGrid courses={COURSES} />
</section>
</Container>
</main>
);
}

View File

@ -10,14 +10,5 @@
.categories {
display: flex;
gap: 8px;
margin-bottom: 16px;
}
.categoryButton {
padding: 8px;
background-color: #f0f0f0;
border: 1px solid #ccc;
border-radius: 4px;
cursor: pointer;
}
gap: 0.5rem;
}

View File

@ -1,10 +1,13 @@
import { formatPrice } from "@/utils";
import { cn, formatPrice } from "@/utils";
import Link from "next/link";
import styles from "./CourseGridItem.module.css";
export default function CourseGridItem({ course }) {
return (
<Link href={`/kurslar/${course.id}`} className={styles.root}>
<Link
href={`/kurslar/${course.id}`}
className={cn(styles.root, "pressable")}
>
<img className={styles.image} src={course.imageUrl} alt="Kurs resmi" />
<div className={styles.body}>
<span className={styles.name}>{course.name}</span>

View File

@ -1,4 +1,3 @@
// Header.js
import { ConnectButton } from "@rainbow-me/rainbowkit";
import Link from "next/link";
import styles from "./Header.module.css";

View File

@ -23,18 +23,16 @@
display: flex;
align-items: center;
/* input yerine .search-input class'ını kullan */
.search-input {
padding: 8px;
margin-right: 8px;
padding: 8px;
margin-right: 8px;
}
/* button yerine .search-button class'ını kullan */
.search-button {
padding: 8px 16px;
background-color: #ff0000;
color: #fff;
border: none;
cursor: pointer;
padding: 8px 16px;
background-color: #ff0000;
color: #fff;
border: none;
cursor: pointer;
}
}
}

View File

@ -9,19 +9,8 @@ export default function WalletManager() {
useEffect(() => {
if (address) {
console.log("** Wallet connected. Address: ", address);
// fetchMe();
} else {
console.log("** Wallet disconnected.");
}
}, [address]);
// const fetchMe = async () => {
// const resp = await fetch(`${CONFIG.BACKEND_ADDRESS}/me`, {
// headers: {
// authorization: `Basic ${address}`,
// },
// });
// const respData = await resp.json();
// console.log("hey user:", respData.data);
// };
}

View File

@ -7,13 +7,10 @@ import {
RainbowKitProvider,
} from "@rainbow-me/rainbowkit";
import { configureChains, createConfig, WagmiConfig } from "wagmi";
import { hardhat, sepolia } from "wagmi/chains";
import { sepolia } from "wagmi/chains";
import { publicProvider } from "wagmi/providers/public";
const { chains, publicClient } = configureChains(
[sepolia, hardhat],
[publicProvider()]
);
const { chains, publicClient } = configureChains([sepolia], [publicProvider()]);
const { connectors } = getDefaultWallets({
appName: "GSB Genç Blokzincir Hackathon Project",

View File

@ -1,75 +1,92 @@
// categories
export const CATEGORIES = [
{ slug: "blokzincir", name: "Blokzincir" },
{ slug: "ön-yüz", name: "Frontend" },
{ slug: "linux", name: "Linux" },
{ slug: "yapay-zeka", name: "Yapay Zeka" },
];
{ id: "1", slug: "blokzincir", name: "Blokzincir" },
{ id: "2", slug: "onyuz", name: "Önyüz Geliştirme" },
{ id: "3", slug: "linux", name: "Linux" },
{ id: "4", slug: "yapay-zeka", name: "Yapay Zeka" },
];
// courses
export const COURSES = [
export const COURSES = [
{
id: "6a3753e8-5f4e-4f4d-a05e-44b84b8f7aed",
name: "Ethereum ve Solidity",
description:
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem vitae veritatis deserunt quidem hic ea repellendus fugiat ducimus tenetur. Fugit cumque quo saepe possimus rem qui odit vitae dignissimos reprehenderit!",
price: "0.05",
start: "",
imageUrl: "https://osmannyildiz.tk/cublearn/akinci.webp",
instructor: {
name: "Baturalp Güvenç",
},
category: CATEGORIES.find((category) => category.slug === "blokzincir"),
},
{
id: "6a3753e8-5f4e-4f4d-a05e-44b84b8f7aed",
name: "Audit",
id: "1",
name: "Ethereum ve Solidity",
description:
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem vitae veritatis deserunt quidem hic ea repellendus fugiat ducimus tenetur. Fugit cumque quo saepe possimus rem qui odit vitae dignissimos reprehenderit!",
price: "0.05",
start: "",
imageUrl: "https://osmannyildiz.tk/cublearn/akinci.webp",
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem vitae veritatis deserunt quidem hic ea repellendus fugiat ducimus tenetur. Fugit cumque quo saepe possimus rem qui odit vitae dignissimos reprehenderit!",
price: "300",
imageUrl: "/course-images/ethereum-and-solidity.webp",
instructor: {
name: "Mehmet Hayırlı",
name: "Baturalp Güvenç",
},
category: CATEGORIES.find((category) => category.slug === "blokzincir"),
},
{
id: "c7253736-5756-4a64-a072-917c66afa877",
name: "Next.js ile Önyüz Uygulamaları Geliştirme",
description:
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem vitae veritatis deserunt quidem hic ea repellendus fugiat ducimus tenetur. Fugit cumque quo saepe possimus rem qui odit vitae dignissimos reprehenderit!",
price: "0.05",
start: "",
imageUrl: "https://osmannyildiz.tk/cublearn/elmacik.webp",
instructor: {
name: "Furkan Ayvaz",
},
category: CATEGORIES.find((category) => category.slug === "ön-yüz"),
category: CATEGORIES.find((c) => c.slug === "blokzincir"),
},
{
id: "59a8f94b-7358-4ffe-bced-a54cccc93e64",
name: "Pardus'a Giriş",
description:
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem vitae veritatis deserunt quidem hic ea repellendus fugiat ducimus tenetur. Fugit cumque quo saepe possimus rem qui odit vitae dignissimos reprehenderit!",
price: "0.05",
start: "",
imageUrl: "https://osmannyildiz.tk/cublearn/masalik.webp",
instructor: {
name: "Berk Çiçek",
},
category: CATEGORIES.find((category) => category.slug === "linux"),
id: "2",
name: "Akıllı Sözleşme Güvenliği",
description:
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem vitae veritatis deserunt quidem hic ea repellendus fugiat ducimus tenetur. Fugit cumque quo saepe possimus rem qui odit vitae dignissimos reprehenderit!",
price: "500",
imageUrl: "/course-images/smart-contract-security.jpg",
instructor: {
name: "Mehmet Hayırlı",
},
category: CATEGORIES.find((c) => c.slug === "blokzincir"),
},
{
id: "6a375fae8-5f4e-4244d-a05e-44b84b8adaf7aed",
name: "Yapay Zekaya Giriş",
description: "Hosta La Vista!",
price: "0.05",
imageUrl: "https://osmannyildiz.tk/cublearn/akinci.webp",
instructor: {
name: "Muhammed Akıncı",
},
category: CATEGORIES.find((category) => category.slug === "yapay-zeka"),
id: "3",
name: "Next.js ile Önyüz Uygulamaları Geliştirme",
description:
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem vitae veritatis deserunt quidem hic ea repellendus fugiat ducimus tenetur. Fugit cumque quo saepe possimus rem qui odit vitae dignissimos reprehenderit!",
price: "200",
imageUrl: "/course-images/nextjs.jpg",
instructor: {
name: "Furkan Ayvaz",
},
category: CATEGORIES.find((c) => c.slug === "onyuz"),
},
];
{
id: "4",
name: "Pardus'a Giriş",
description:
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem vitae veritatis deserunt quidem hic ea repellendus fugiat ducimus tenetur. Fugit cumque quo saepe possimus rem qui odit vitae dignissimos reprehenderit!",
price: "0.05",
imageUrl: "/course-images/pardus.jpg",
instructor: {
name: "Berk Çiçek",
},
category: CATEGORIES.find((c) => c.slug === "linux"),
},
{
id: "5",
name: "Yapay Zekaya Giriş",
description:
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem vitae veritatis deserunt quidem hic ea repellendus fugiat ducimus tenetur. Fugit cumque quo saepe possimus rem qui odit vitae dignissimos reprehenderit!",
imageUrl: "/course-images/ai.png",
instructor: {
name: "Muhammed Akıncı",
},
category: CATEGORIES.find((c) => c.slug === "yapay-zeka"),
},
{
id: "6",
name: "React.js Temelleri",
description:
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem vitae veritatis deserunt quidem hic ea repellendus fugiat ducimus tenetur. Fugit cumque quo saepe possimus rem qui odit vitae dignissimos reprehenderit!",
price: "250",
imageUrl: "/course-images/reactjs.jpg",
instructor: {
name: "Recep Akkaya",
},
category: CATEGORIES.find((c) => c.slug === "onyuz"),
},
{
id: "7",
name: "Avalanche ile Merkeziyetsiz Uygulamalar",
description:
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem vitae veritatis deserunt quidem hic ea repellendus fugiat ducimus tenetur. Fugit cumque quo saepe possimus rem qui odit vitae dignissimos reprehenderit!",
price: "450",
imageUrl: "/course-images/avalanche.png",
instructor: {
name: "Ali Gedikli",
},
category: CATEGORIES.find((c) => c.slug === "blokzincir"),
},
];