diff --git a/package-lock.json b/package-lock.json
index d28ee8a..6426661 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,13 +9,12 @@
"version": "0.1.0",
"dependencies": {
"@prisma/client": "^6.4.1",
- "leaflet": "^1.9.4",
"next": "15.1.7",
"prisma": "^6.4.1",
"react": "^19.0.0",
"react-dom": "^19.0.0",
- "react-leaflet": "^5.0.0",
- "react-map-gl": "^8.0.1"
+ "react-icons": "^5.5.0",
+ "react-node": "^1.0.2"
},
"devDependencies": {
"@eslint/eslintrc": "^3",
@@ -1078,39 +1077,6 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
- "node_modules/@mapbox/jsonlint-lines-primitives": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz",
- "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/@mapbox/unitbezier": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz",
- "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==",
- "license": "BSD-2-Clause"
- },
- "node_modules/@maplibre/maplibre-gl-style-spec": {
- "version": "19.3.3",
- "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-19.3.3.tgz",
- "integrity": "sha512-cOZZOVhDSulgK0meTsTkmNXb1ahVvmTmWmfx9gRBwc6hq98wS9JP35ESIoNq3xqEan+UN+gn8187Z6E4NKhLsw==",
- "license": "ISC",
- "dependencies": {
- "@mapbox/jsonlint-lines-primitives": "~2.0.2",
- "@mapbox/unitbezier": "^0.0.1",
- "json-stringify-pretty-compact": "^3.0.0",
- "minimist": "^1.2.8",
- "rw": "^1.3.3",
- "sort-object": "^3.0.3"
- },
- "bin": {
- "gl-style-format": "dist/gl-style-format.mjs",
- "gl-style-migrate": "dist/gl-style-migrate.mjs",
- "gl-style-validate": "dist/gl-style-validate.mjs"
- }
- },
"node_modules/@next/env": {
"version": "15.1.7",
"resolved": "https://registry.npmjs.org/@next/env/-/env-15.1.7.tgz",
@@ -1381,17 +1347,6 @@
"@prisma/debug": "6.4.1"
}
},
- "node_modules/@react-leaflet/core": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@react-leaflet/core/-/core-3.0.0.tgz",
- "integrity": "sha512-3EWmekh4Nz+pGcr+xjf0KNyYfC3U2JjnkWsh0zcqaexYqmmB5ZhH37kz41JXGmKzpaMZCnPofBBm64i+YrEvGQ==",
- "license": "Hippocratic-2.1",
- "peerDependencies": {
- "leaflet": "^1.9.0",
- "react": "^19.0.0",
- "react-dom": "^19.0.0"
- }
- },
"node_modules/@rtsao/scc": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
@@ -1708,41 +1663,6 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@vis.gl/react-mapbox": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/@vis.gl/react-mapbox/-/react-mapbox-8.0.1.tgz",
- "integrity": "sha512-s/OokvgK1T43Ev2/4hj21C0DKrf79nIigBCdYPtAkEX88qGLRQ5t5zCRqg5Zl+44xXfVxcVpX2/vWUKd9oYGKQ==",
- "license": "MIT",
- "peerDependencies": {
- "mapbox-gl": ">=3.5.0",
- "react": ">=16.3.0",
- "react-dom": ">=16.3.0"
- },
- "peerDependenciesMeta": {
- "mapbox-gl": {
- "optional": true
- }
- }
- },
- "node_modules/@vis.gl/react-maplibre": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/@vis.gl/react-maplibre/-/react-maplibre-8.0.1.tgz",
- "integrity": "sha512-IFguo7DKIDZ9U9uRI4thZRfc5aTHEH4lWlIjedBeCpLeMm7wdrqtU2JshyEQt8dDO85kkEE7CbrtjMx5MplaoA==",
- "license": "MIT",
- "dependencies": {
- "@maplibre/maplibre-gl-style-spec": "^19.2.1"
- },
- "peerDependencies": {
- "maplibre-gl": ">=4.0.0",
- "react": ">=16.3.0",
- "react-dom": ">=16.3.0"
- },
- "peerDependenciesMeta": {
- "maplibre-gl": {
- "optional": true
- }
- }
- },
"node_modules/acorn": {
"version": "8.14.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
@@ -1783,6 +1703,15 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
+ "node_modules/amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==",
+ "license": "BSD-3-Clause OR MIT",
+ "engines": {
+ "node": ">=0.4.2"
+ }
+ },
"node_modules/ansi-regex": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
@@ -1857,15 +1786,6 @@
"node": ">= 0.4"
}
},
- "node_modules/arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/array-buffer-byte-length": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
@@ -2023,13 +1943,13 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==",
+ "node_modules/ast-types": {
+ "version": "0.9.6",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz",
+ "integrity": "sha512-qEdtR2UH78yyHX/AUNfXmJTlM48XoFZKBdwi1nzkI1mJL21cmbu0cvjxjpkXJ5NENMq42H+hNs8VLJcqXLerBQ==",
"license": "MIT",
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.8"
}
},
"node_modules/ast-types-flow": {
@@ -2089,9 +2009,17 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true,
"license": "MIT"
},
+ "node_modules/base62": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/base62/-/base62-1.2.8.tgz",
+ "integrity": "sha512-V6YHUbjLxN1ymqNLb1DPHoU1CpfdL7d2YTIp5W3U4hhoG4hhxNmsFDs66M9EXxBiSEke5Bt5dwdfMwwZF70iLA==",
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/binary-extensions": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
@@ -2109,7 +2037,6 @@
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
@@ -2140,25 +2067,6 @@
"node": ">=10.16.0"
}
},
- "node_modules/bytewise": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/bytewise/-/bytewise-1.1.0.tgz",
- "integrity": "sha512-rHuuseJ9iQ0na6UDhnrRVDh8YnWVlU6xM3VH6q/+yHDeUH2zIhUzP+2/h3LIrhLDBtTqzWpE3p3tP/boefskKQ==",
- "license": "MIT",
- "dependencies": {
- "bytewise-core": "^1.2.2",
- "typewise": "^1.0.3"
- }
- },
- "node_modules/bytewise-core": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/bytewise-core/-/bytewise-core-1.2.3.tgz",
- "integrity": "sha512-nZD//kc78OOxeYtRlVk8/zXqTB4gf/nlguL1ggWA8FuchMyOxcyHR4QPQZMUmA7czC+YnaBrPUCubqAWe50DaA==",
- "license": "MIT",
- "dependencies": {
- "typewise-core": "^1.2"
- }
- },
"node_modules/call-bind": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
@@ -2365,11 +2273,56 @@
"node": ">= 6"
}
},
+ "node_modules/commoner": {
+ "version": "0.10.8",
+ "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz",
+ "integrity": "sha512-3/qHkNMM6o/KGXHITA14y78PcfmXh4+AOCJpSoF73h4VY1JpdGv3CHMS5+JW6SwLhfJt4RhNmLAa7+RRX/62EQ==",
+ "license": "MIT",
+ "dependencies": {
+ "commander": "^2.5.0",
+ "detective": "^4.3.1",
+ "glob": "^5.0.15",
+ "graceful-fs": "^4.1.2",
+ "iconv-lite": "^0.4.5",
+ "mkdirp": "^0.5.0",
+ "private": "^0.1.6",
+ "q": "^1.1.2",
+ "recast": "^0.11.17"
+ },
+ "bin": {
+ "commonize": "bin/commonize"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commoner/node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "license": "MIT"
+ },
+ "node_modules/commoner/node_modules/glob": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "license": "ISC",
+ "dependencies": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true,
"license": "MIT"
},
"node_modules/cross-spawn": {
@@ -2528,6 +2481,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/defined": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz",
+ "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/detect-libc": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
@@ -2538,6 +2500,28 @@
"node": ">=8"
}
},
+ "node_modules/detective": {
+ "version": "4.7.1",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz",
+ "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==",
+ "license": "MIT",
+ "dependencies": {
+ "acorn": "^5.2.1",
+ "defined": "^1.0.0"
+ }
+ },
+ "node_modules/detective/node_modules/acorn": {
+ "version": "5.7.4",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz",
+ "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==",
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/didyoumean": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
@@ -2608,6 +2592,19 @@
"node": ">=10.13.0"
}
},
+ "node_modules/envify": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/envify/-/envify-3.4.1.tgz",
+ "integrity": "sha512-XLiBFsLtNF0MOZl+vWU59yPb3C2JtrQY2CNJn22KH75zPlHWY5ChcAQuf4knJeWT/lLkrx3sqvhP/J349bt4Bw==",
+ "license": "MIT",
+ "dependencies": {
+ "jstransform": "^11.0.3",
+ "through": "~2.3.4"
+ },
+ "bin": {
+ "envify": "bin/envify"
+ }
+ },
"node_modules/es-abstract": {
"version": "1.23.9",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz",
@@ -3226,6 +3223,31 @@
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==",
+ "license": "BSD-2-Clause",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/esprima-fb": {
+ "version": "15001.1.0-dev-harmony-fb",
+ "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz",
+ "integrity": "sha512-59dDGQo2b3M/JfKIws0/z8dcXH2mnVHkfSPRhCYS91JNGfGNwr7GsSF6qzWZuOGvw5Ii0w9TtylrX07MGmlOoQ==",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/esquery": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
@@ -3272,18 +3294,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "license": "MIT",
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -3567,15 +3577,6 @@
"url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
}
},
- "node_modules/get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/glob": {
"version": "10.4.5",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
@@ -3683,7 +3684,6 @@
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "dev": true,
"license": "ISC"
},
"node_modules/graphemer": {
@@ -3787,6 +3787,18 @@
"node": ">= 0.4"
}
},
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/ignore": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
@@ -3824,6 +3836,23 @@
"node": ">=0.8.19"
}
},
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
+ "license": "ISC",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "license": "ISC"
+ },
"node_modules/internal-slot": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
@@ -4004,15 +4033,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -4121,18 +4141,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "license": "MIT",
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/is-regex": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
@@ -4292,15 +4300,6 @@
"dev": true,
"license": "ISC"
},
- "node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/iterator.prototype": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz",
@@ -4386,12 +4385,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/json-stringify-pretty-compact": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-3.0.0.tgz",
- "integrity": "sha512-Rc2suX5meI0S3bfdZuA7JMFBGkJ875ApfVyq2WHELjBiiG22My/l7/8zPpH/CfFVQHuVLd8NLR0nv6vi0BYYKA==",
- "license": "MIT"
- },
"node_modules/json5": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
@@ -4405,6 +4398,34 @@
"json5": "lib/cli.js"
}
},
+ "node_modules/jstransform": {
+ "version": "11.0.3",
+ "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-11.0.3.tgz",
+ "integrity": "sha512-LGm87w0A8E92RrcXt94PnNHkFqHmgDy3mKHvNZOG7QepKCTCH/VB6S+IEN+bT4uLN3gVpOT0vvOOVd96osG71g==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "base62": "^1.1.0",
+ "commoner": "^0.10.1",
+ "esprima-fb": "^15001.1.0-dev-harmony-fb",
+ "object-assign": "^2.0.0",
+ "source-map": "^0.4.2"
+ },
+ "bin": {
+ "jstransform": "bin/jstransform"
+ },
+ "engines": {
+ "node": ">=0.8.8"
+ }
+ },
+ "node_modules/jstransform/node_modules/object-assign": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
+ "integrity": "sha512-CdsOUYIh5wIiozhJ3rLQgmUTgcyzFwZZrqhkKhODMoGtPKM+wt0h0CNIoauJWMsS9822EdzPsF/6mb4nLvPN5g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/jsx-ast-utils": {
"version": "3.3.5",
"resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
@@ -4451,12 +4472,6 @@
"node": ">=0.10"
}
},
- "node_modules/leaflet": {
- "version": "1.9.4",
- "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz",
- "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==",
- "license": "BSD-2-Clause"
- },
"node_modules/levn": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@@ -4572,7 +4587,6 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
@@ -4600,6 +4614,18 @@
"node": ">=16 || 14 >=14.17"
}
},
+ "node_modules/mkdirp": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "license": "MIT",
+ "dependencies": {
+ "minimist": "^1.2.6"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
"node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -4867,6 +4893,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
"node_modules/optionator": {
"version": "0.9.4",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
@@ -4965,6 +5000,15 @@
"node": ">=8"
}
},
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
@@ -5237,6 +5281,15 @@
}
}
},
+ "node_modules/private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/prop-types": {
"version": "15.8.1",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
@@ -5259,6 +5312,17 @@
"node": ">=6"
}
},
+ "node_modules/q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==",
+ "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.6.0",
+ "teleport": ">=0.2.0"
+ }
+ },
"node_modules/queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -5301,6 +5365,15 @@
"react": "^19.0.0"
}
},
+ "node_modules/react-icons": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz",
+ "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "*"
+ }
+ },
"node_modules/react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
@@ -5308,42 +5381,25 @@
"dev": true,
"license": "MIT"
},
- "node_modules/react-leaflet": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-5.0.0.tgz",
- "integrity": "sha512-CWbTpr5vcHw5bt9i4zSlPEVQdTVcML390TjeDG0cK59z1ylexpqC6M1PJFjV8jD7CF+ACBFsLIDs6DRMoLEofw==",
- "license": "Hippocratic-2.1",
- "dependencies": {
- "@react-leaflet/core": "^3.0.0"
- },
- "peerDependencies": {
- "leaflet": "^1.9.0",
- "react": "^19.0.0",
- "react-dom": "^19.0.0"
- }
- },
- "node_modules/react-map-gl": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/react-map-gl/-/react-map-gl-8.0.1.tgz",
- "integrity": "sha512-VQjLcZdtyJCPXxy5xVL2QIgfA+YG3v+PzSdt07WWbVmXFhV4wUuy6DZSQYDdfqVH2BujKo/ImdL5zfEJApRnpg==",
+ "node_modules/react-node": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/react-node/-/react-node-1.0.2.tgz",
+ "integrity": "sha512-qVgVwcnf+h6K+Y0VlgDUMG7OUCkzfQnIR0SwnCUTBxs56F0Ie+5Wuz/LvNMyV2BHm+Op/gXAYbftrw/FXWelyQ==",
"license": "MIT",
"dependencies": {
- "@vis.gl/react-mapbox": "8.0.1",
- "@vis.gl/react-maplibre": "8.0.1"
+ "react": "^0.13.0"
+ }
+ },
+ "node_modules/react-node/node_modules/react": {
+ "version": "0.13.3",
+ "resolved": "https://registry.npmjs.org/react/-/react-0.13.3.tgz",
+ "integrity": "sha512-f9bivPvgNqGmcxjSuKCkY27YVKi1RlDm4TlPUNjLDH7lN6gnMQp9lJ9PpTVbo9kNEBr2BIZLz1kI/RFh9Cq2Kg==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "envify": "^3.0.0"
},
- "peerDependencies": {
- "mapbox-gl": ">=1.13.0",
- "maplibre-gl": ">=1.13.0",
- "react": ">=16.3.0",
- "react-dom": ">=16.3.0"
- },
- "peerDependenciesMeta": {
- "mapbox-gl": {
- "optional": true
- },
- "maplibre-gl": {
- "optional": true
- }
+ "engines": {
+ "node": ">=0.10.0"
}
},
"node_modules/read-cache": {
@@ -5369,6 +5425,30 @@
"node": ">=8.10.0"
}
},
+ "node_modules/recast": {
+ "version": "0.11.23",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz",
+ "integrity": "sha512-+nixG+3NugceyR8O1bLU45qs84JgI3+8EauyRZafLgC9XbdAOIVgwV1Pe2da0YzGo62KzWoZwUpVEQf6qNAXWA==",
+ "license": "MIT",
+ "dependencies": {
+ "ast-types": "0.9.6",
+ "esprima": "~3.1.0",
+ "private": "~0.1.5",
+ "source-map": "~0.5.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/recast/node_modules/source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/reflect.getprototypeof": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
@@ -5489,12 +5569,6 @@
"queue-microtask": "^1.2.2"
}
},
- "node_modules/rw": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
- "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==",
- "license": "BSD-3-Clause"
- },
"node_modules/safe-array-concat": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
@@ -5550,6 +5624,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "license": "MIT"
+ },
"node_modules/scheduler": {
"version": "0.25.0",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz",
@@ -5618,21 +5698,6 @@
"node": ">= 0.4"
}
},
- "node_modules/set-value": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
- "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
- "license": "MIT",
- "dependencies": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.3",
- "split-string": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/sharp": {
"version": "0.33.5",
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz",
@@ -5795,39 +5860,16 @@
"is-arrayish": "^0.3.1"
}
},
- "node_modules/sort-asc": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.2.0.tgz",
- "integrity": "sha512-umMGhjPeHAI6YjABoSTrFp2zaBtXBej1a0yKkuMUyjjqu6FJsTF+JYwCswWDg+zJfk/5npWUUbd33HH/WLzpaA==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sort-desc": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/sort-desc/-/sort-desc-0.2.0.tgz",
- "integrity": "sha512-NqZqyvL4VPW+RAxxXnB8gvE1kyikh8+pR+T+CXLksVRN9eiQqkQlPwqWYU0mF9Jm7UnctShlxLyAt1CaBOTL1w==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sort-object": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/sort-object/-/sort-object-3.0.3.tgz",
- "integrity": "sha512-nK7WOY8jik6zaG9CRwZTaD5O7ETWDLZYMM12pqY8htll+7dYeqGfEUPcUBHOpSJg2vJOrvFIY2Dl5cX2ih1hAQ==",
- "license": "MIT",
+ "node_modules/source-map": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==",
+ "license": "BSD-3-Clause",
"dependencies": {
- "bytewise": "^1.1.0",
- "get-value": "^2.0.2",
- "is-extendable": "^0.1.1",
- "sort-asc": "^0.2.0",
- "sort-desc": "^0.2.0",
- "union-value": "^1.0.1"
+ "amdefine": ">=0.0.4"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=0.8.0"
}
},
"node_modules/source-map-js": {
@@ -5839,43 +5881,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/split-string": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
- "license": "MIT",
- "dependencies": {
- "extend-shallow": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/split-string/node_modules/extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
- "license": "MIT",
- "dependencies": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/split-string/node_modules/is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "license": "MIT",
- "dependencies": {
- "is-plain-object": "^2.0.4"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/stable-hash": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz",
@@ -6304,6 +6309,12 @@
"node": ">=0.8"
}
},
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+ "license": "MIT"
+ },
"node_modules/tinyglobby": {
"version": "0.2.12",
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz",
@@ -6506,21 +6517,6 @@
"node": ">=14.17"
}
},
- "node_modules/typewise": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/typewise/-/typewise-1.0.3.tgz",
- "integrity": "sha512-aXofE06xGhaQSPzt8hlTY+/YWQhm9P0jYUp1f2XtmW/3Bk0qzXcyFWAtPoo2uTGQj1ZwbDuSyuxicq+aDo8lCQ==",
- "license": "MIT",
- "dependencies": {
- "typewise-core": "^1.2.0"
- }
- },
- "node_modules/typewise-core": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/typewise-core/-/typewise-core-1.2.0.tgz",
- "integrity": "sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg==",
- "license": "MIT"
- },
"node_modules/unbox-primitive": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
@@ -6547,21 +6543,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/union-value": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
- "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
- "license": "MIT",
- "dependencies": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "set-value": "^2.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -6788,6 +6769,12 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "license": "ISC"
+ },
"node_modules/yaml": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz",
diff --git a/package.json b/package.json
index 47a2da7..c8c406c 100644
--- a/package.json
+++ b/package.json
@@ -11,13 +11,12 @@
},
"dependencies": {
"@prisma/client": "^6.4.1",
- "leaflet": "^1.9.4",
"next": "15.1.7",
"prisma": "^6.4.1",
"react": "^19.0.0",
"react-dom": "^19.0.0",
- "react-leaflet": "^5.0.0",
- "react-map-gl": "^8.0.1"
+ "react-icons": "^5.5.0",
+ "react-node": "^1.0.2"
},
"devDependencies": {
"@eslint/eslintrc": "^3",
diff --git a/public/logo-white-bg.png b/public/logo-white-bg.png
new file mode 100644
index 0000000..4716051
Binary files /dev/null and b/public/logo-white-bg.png differ
diff --git a/public/logo.png b/public/logo.png
index 4716051..2830993 100644
Binary files a/public/logo.png and b/public/logo.png differ
diff --git a/schema.prisma b/schema.prisma
index a87d29f..e146519 100644
--- a/schema.prisma
+++ b/schema.prisma
@@ -6,11 +6,11 @@ datasource db {
model User {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
- username String @unique
+ email String @unique
passwordHash String
firstname String
surname String
- pfpUrl String
+ // pfpUrl String
role Role @default(USER)
}
diff --git a/src/app/earthquakes/page.tsx b/src/app/earthquakes/page.tsx
index d74de16..84972db 100644
--- a/src/app/earthquakes/page.tsx
+++ b/src/app/earthquakes/page.tsx
@@ -1,13 +1,7 @@
-import Navbar from "@/components/navbar";
-import Sidebar from "@/components/sidebar_e";
-
-
export default function Earthquakes() {
- return (
-
- )
-}
\ No newline at end of file
+ return (
+
+ );
+}
diff --git a/src/app/globals.css b/src/app/globals.css
index 6b717ad..968f6ad 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -7,15 +7,14 @@
--foreground: #171717;
}
-@media (prefers-color-scheme: dark) {
+/* @media (prefers-color-scheme: dark) {
:root {
--background: #0a0a0a;
--foreground: #ededed;
}
-}
+} */
body {
color: var(--foreground);
background: var(--background);
- font-family: Arial, Helvetica, sans-serif;
}
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index f7fa87e..5572567 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -1,20 +1,16 @@
import type { Metadata } from "next";
-import { Geist, Geist_Mono } from "next/font/google";
+import Navbar from "@/components/navbar";
+import { Inter } from "next/font/google";
import "./globals.css";
-const geistSans = Geist({
- variable: "--font-geist-sans",
- subsets: ["latin"],
-});
-
-const geistMono = Geist_Mono({
- variable: "--font-geist-mono",
+const inter = Inter({
subsets: ["latin"],
+ variable: "--font-inter",
});
export const metadata: Metadata = {
- title: "Create Next App",
- description: "Generated by create next app",
+ title: "Tremor Tracker",
+ description: "Generated by tim",
};
export default function RootLayout({
@@ -24,9 +20,8 @@ export default function RootLayout({
}>) {
return (
-
+
+
{children}
diff --git a/src/app/observatories/page.tsx b/src/app/observatories/page.tsx
index 7b92251..63e0305 100644
--- a/src/app/observatories/page.tsx
+++ b/src/app/observatories/page.tsx
@@ -1,12 +1,7 @@
-import Navbar from "@/components/navbar";
-import Sidebar from "@/components/sidebar_o";
-
export default function Observatories() {
- return (
-
- )
-}
\ No newline at end of file
+ return (
+
+ );
+}
diff --git a/src/app/page.tsx b/src/app/page.tsx
index d3b0af9..0b61962 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -1,119 +1,126 @@
import Image from "next/image";
-import Navbar from "@/components/navbar";
export default function Home() {
-return (
-
-
-
-
-
-
-
-
+ return (
+
+
+
+
+ {["Earthquake 1", "Earthquake 2", "Earthquake 3"].map((name) => (
+
+ ))}
+
+ Spacer
+ Spacer
-)
+ );
-// return (
-//
-//
-//
-//
-// -
-// Get started by editing{" "}
-//
-// src/app/page.tsx
-//
-// .
-//
-// - Save and see your changes instantly.
-//
+ // return (
+ //
+ //
+ //
+ //
+ // -
+ // Get started by editing{" "}
+ //
+ // src/app/page.tsx
+ //
+ // .
+ //
+ // - Save and see your changes instantly.
+ //
-//
-//
-//
-//
-// );
+ //
+ //
+ //
+ //
+ // );
}
diff --git a/src/app/shop/page.tsx b/src/app/shop/page.tsx
index fd4f8cb..98fd4cc 100644
--- a/src/app/shop/page.tsx
+++ b/src/app/shop/page.tsx
@@ -1,10 +1,7 @@
-import Navbar from "@/components/navbar";
-
export default function Shop() {
- return (
-
- )
-}
\ No newline at end of file
+ return (
+
+ );
+}
diff --git a/src/app/user/page.tsx b/src/app/user/page.tsx
index 51bbe92..908e803 100644
--- a/src/app/user/page.tsx
+++ b/src/app/user/page.tsx
@@ -1,10 +1,7 @@
-import Navbar from "@/components/navbar";
-
export default function User() {
- return (
-
- )
-}
\ No newline at end of file
+ return (
+
+ );
+}
diff --git a/src/app/warehouse/page.tsx b/src/app/warehouse/page.tsx
index 9b3272d..fdf01a0 100644
--- a/src/app/warehouse/page.tsx
+++ b/src/app/warehouse/page.tsx
@@ -1,10 +1,7 @@
-import Navbar from "@/components/navbar";
-
export default function Warehouse() {
- return (
-
- )
-}
\ No newline at end of file
+ return (
+
+ );
+}
diff --git a/src/components/AuthModal.tsx b/src/components/AuthModal.tsx
new file mode 100644
index 0000000..bf2843a
--- /dev/null
+++ b/src/components/AuthModal.tsx
@@ -0,0 +1,106 @@
+"use client";
+
+import { useState, FormEvent, useRef, MouseEvent, useEffect } from "react";
+
+interface AuthModalProps {
+ isOpen: boolean;
+ onClose: () => void;
+}
+
+export default function AuthModal({ isOpen, onClose }: AuthModalProps) {
+ const [isLogin, setIsLogin] = useState
(true);
+ const modalRef = useRef(null);
+
+ useEffect(() => {
+ if (isOpen) setIsLogin(true);
+ }, [isOpen]);
+
+ if (!isOpen) return null;
+
+ const handleOverlayClick = (e: MouseEvent) => {
+ if (modalRef.current && !modalRef.current.contains(e.target as Node)) {
+ onClose();
+ }
+ };
+
+ const handleSubmit = async (e: FormEvent) => {
+ e.preventDefault();
+ const formData = new FormData(e.currentTarget);
+ const email = formData.get("email") as string;
+ const password = formData.get("password") as string;
+ const name = isLogin ? undefined : (formData.get("name") as string);
+
+ const endpoint = isLogin ? "/api/login" : "/api/signup";
+ const body = isLogin ? { email, password } : { name: name!, email, password };
+
+ try {
+ const res = await fetch(endpoint, {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify(body),
+ });
+ if (res.ok) {
+ console.log("Success!");
+ onClose();
+ } else {
+ console.error("Error:", await res.text());
+ }
+ } catch (error) {
+ console.error("Request failed:", error instanceof Error ? error.message : String(error));
+ }
+ };
+
+ return (
+
+
+
+
{isLogin ? "Login" : "Sign Up"}
+
+ {/* Form */}
+
+
+
+ {isLogin ? "Need an account?" : "Already have an account?"}{" "}
+
+
+
+
+ );
+}
diff --git a/src/components/navbar.tsx b/src/components/navbar.tsx
index ec645a7..24772b8 100644
--- a/src/components/navbar.tsx
+++ b/src/components/navbar.tsx
@@ -1,96 +1,71 @@
-"use client"
+"use client";
+import { useState } from "react";
-import Image from "next/image";
+import AuthModal from "@/components/AuthModal";
+import { usePathname } from "next/navigation";
import Link from "next/link";
-import { usePathname } from 'next/navigation'
-import { useState, useEffect, useRef } from "react";
+import Image from "next/image";
+import { useMemo } from "react";
+import { FaRegUserCircle } from "react-icons/fa";
+
+function NavbarButton({ name, href, dropdownItems }: { name: string; href: string; dropdownItems?: string[] }) {
+ const pathname = usePathname();
+ const isActive = dropdownItems ? dropdownItems.some((item) => pathname === `/${item.toLowerCase().replace(" ", "-")}`) : pathname === href;
+
+ return (
+
+ );
+}
export default function Navbar() {
- const [isDropdownOpen, setIsDropdownOpen] = useState(false);
- const pathname = usePathname()
- const dropdownRef = useRef(null);
+ const navOptions = useMemo(() => ["Earthquakes", "Observatories", "Warehouse", "Shop"], []);
+ // const navOptions = useMemo(() => ["Earthquakes"], []);
+ const aboutDropdown = ["Our Mission", "The Team", "Contact Us"];
+ const [isModalOpen, setIsModalOpen] = useState(false);
- useEffect(() => {
- const handleClickOutside = (event: MouseEvent) => {
- if (
- dropdownRef.current &&
- !dropdownRef.current.contains(event.target as Node)
- ) {
- setIsDropdownOpen(false);
- }
- };
-
- const handleEscapeKey = (event: KeyboardEvent) => {
- if (event.key === "Escape") {
- setIsDropdownOpen(false);
- }
- };
-
- document.addEventListener("mousedown", handleClickOutside);
- document.addEventListener("keydown", handleEscapeKey);
-
- return () => {
- document.removeEventListener("mousedown", handleClickOutside);
- document.removeEventListener("keydown", handleEscapeKey);
- };
- }, []);
-
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {isDropdownOpen && (
-
-
- - Our Mission
- - The Team
- - Contact Us
-
-
- )}
-
-
-
-
-
- );
+ return (
+
+
+
+
+
+
+
+ {navOptions.map((name) => (
+
+ ))}
+
+
+
+
+
setIsModalOpen(false)} />
+
+ );
}
diff --git a/src/index.css b/src/index.css
new file mode 100644
index 0000000..55d23f5
--- /dev/null
+++ b/src/index.css
@@ -0,0 +1,5 @@
+@import url("https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap");
+
+@tailwind base;
+@tailwind components;
+@tailwind utilities;