+ {cat.role} +
+{cat.name}
+{cat.description}
+-
+ {cat.favorites.map((fav) => (
+
- • {fav} + ))} +
Memorial mode enabled
+ )} +diff --git a/next.config.ts b/next.config.ts
index 9352f4e..b1765fb 100644
--- a/next.config.ts
+++ b/next.config.ts
@@ -1,7 +1,7 @@
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
- /* config options here */
+ output: "standalone",
};
export default nextConfig;
@@ -9,4 +9,7 @@ export default nextConfig;
// Enable calling `getCloudflareContext()` in `next dev`.
// See https://opennext.js.org/cloudflare/bindings#local-access-to-bindings.
import { initOpenNextCloudflareForDev } from "@opennextjs/cloudflare";
-initOpenNextCloudflareForDev();
+
+if (process.env.NODE_ENV === "development") {
+ initOpenNextCloudflareForDev();
+}
diff --git a/package-lock.json b/package-lock.json
index 285bbf3..10a80c3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,6 +9,7 @@
"version": "0.1.0",
"dependencies": {
"@opennextjs/cloudflare": "^1.11.0",
+ "framer-motion": "^12.23.24",
"next": "15.5.6",
"react": "19.1.0",
"react-dom": "19.1.0"
@@ -7560,7 +7561,6 @@
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.4.0.tgz",
"integrity": "sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==",
- "dev": true,
"license": "MIT OR Apache-2.0",
"dependencies": {
"mime": "^3.0.0"
@@ -7573,7 +7573,6 @@
"version": "2.7.10",
"resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.7.10.tgz",
"integrity": "sha512-mvsNAiJSduC/9yxv1ZpCxwgAXgcuoDvkl8yaHjxoLpFxXy2ugc6TZK20EKgv4yO0vZhAEKwqJm+eGOzf8Oc45w==",
- "dev": true,
"license": "MIT OR Apache-2.0",
"peerDependencies": {
"unenv": "2.0.0-rc.24",
@@ -7592,7 +7591,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -7609,7 +7607,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -7626,7 +7623,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -7643,7 +7639,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -7660,7 +7655,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -7674,7 +7668,6 @@
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
"integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/trace-mapping": "0.3.9"
@@ -7687,7 +7680,6 @@
"version": "0.3.9",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
"integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.0.3",
@@ -9368,7 +9360,6 @@
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.5.tgz",
"integrity": "sha512-FvdDqtcRCtz6hThExcFOgW0cWX+xwSMWcRuQe5ZEb2m7cVQOAVZOIMt+/v9RxGiD9/OY16qJBXK4CVKWAPalBw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"kleur": "^4.1.5"
@@ -9378,7 +9369,6 @@
"version": "0.6.5",
"resolved": "https://registry.npmjs.org/@poppinss/dumper/-/dumper-0.6.5.tgz",
"integrity": "sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@poppinss/colors": "^4.1.5",
@@ -9390,7 +9380,6 @@
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.2.tgz",
"integrity": "sha512-m7bpKCD4QMlFCjA/nKTs23fuvoVFoA83brRKmObCUNmi/9tVu8Ve3w4YQAnJu4q3Tjf5fr685HYIC/IA2zHRSg==",
- "dev": true,
"license": "MIT"
},
"node_modules/@rtsao/scc": {
@@ -9411,7 +9400,6 @@
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.1.1.tgz",
"integrity": "sha512-rO92VvpgMc3kfiTjGT52LEtJ8Yc5kCWhZjLQ3LwlA4pSgPpQO7bVpYXParOD8Jwf+cVQECJo3yP/4I8aZtUQTQ==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=18"
@@ -10829,7 +10817,6 @@
"version": "1.2.12",
"resolved": "https://registry.npmjs.org/@speed-highlight/core/-/core-1.2.12.tgz",
"integrity": "sha512-uilwrK0Ygyri5dToHYdZSjcvpS2ZwX0w5aSt3GCEN9hrjxWCoeV4Z2DTXuxjwbntaLQIEEAlCeNQss5SoHvAEA==",
- "dev": true,
"license": "CC0-1.0"
},
"node_modules/@swc/helpers": {
@@ -11806,7 +11793,6 @@
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz",
"integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.4.0"
@@ -12132,7 +12118,6 @@
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz",
"integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==",
- "dev": true,
"license": "MIT"
},
"node_modules/body-parser": {
@@ -12426,7 +12411,6 @@
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
"integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
- "dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1",
@@ -12458,7 +12442,6 @@
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
"integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"color-name": "^1.0.0",
@@ -12717,7 +12700,6 @@
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
"integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
- "devOptional": true,
"license": "Apache-2.0",
"engines": {
"node": ">=8"
@@ -12843,7 +12825,6 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz",
"integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==",
- "dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/antfu"
@@ -13606,7 +13587,6 @@
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz",
"integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
@@ -13980,6 +13960,33 @@
"node": ">= 0.6"
}
},
+ "node_modules/framer-motion": {
+ "version": "12.23.24",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.24.tgz",
+ "integrity": "sha512-HMi5HRoRCTou+3fb3h9oTLyJGBxHfW+HnNE25tAXOvVx/IvwMHK0cx7IR4a2ZU6sh3IX1Z+4ts32PcYBOqka8w==",
+ "license": "MIT",
+ "dependencies": {
+ "motion-dom": "^12.23.23",
+ "motion-utils": "^12.23.6",
+ "tslib": "^2.4.0"
+ },
+ "peerDependencies": {
+ "@emotion/is-prop-valid": "*",
+ "react": "^18.0.0 || ^19.0.0",
+ "react-dom": "^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/is-prop-valid": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
"node_modules/fresh": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz",
@@ -13999,7 +14006,6 @@
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
"hasInstallScript": true,
"license": "MIT",
"optional": true,
@@ -14201,7 +14207,6 @@
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
"integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
- "dev": true,
"license": "BSD-2-Clause"
},
"node_modules/glob/node_modules/minimatch": {
@@ -14515,7 +14520,6 @@
"version": "0.3.4",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz",
"integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==",
- "dev": true,
"license": "MIT"
},
"node_modules/is-async-function": {
@@ -15072,7 +15076,6 @@
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
"integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
@@ -15514,7 +15517,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz",
"integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==",
- "dev": true,
"license": "MIT",
"bin": {
"mime": "cli.js"
@@ -15557,7 +15559,6 @@
"version": "4.20251109.1",
"resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20251109.1.tgz",
"integrity": "sha512-btcTw1pH40PGVMwn1pZDcrodQkgY8ijKJA/r7LKgJQGqVZ1k9gqfHHtbelZp8O9bJ995eQqdURyvXMflZwCo+g==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@cspotcode/source-map-support": "0.8.1",
@@ -15587,7 +15588,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -15610,7 +15610,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -15633,7 +15632,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -15650,7 +15648,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -15667,7 +15664,6 @@
"cpu": [
"arm"
],
- "dev": true,
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -15684,7 +15680,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -15701,7 +15696,6 @@
"cpu": [
"s390x"
],
- "dev": true,
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -15718,7 +15712,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -15735,7 +15728,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -15752,7 +15744,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -15769,7 +15760,6 @@
"cpu": [
"arm"
],
- "dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -15792,7 +15782,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -15815,7 +15804,6 @@
"cpu": [
"s390x"
],
- "dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -15838,7 +15826,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -15861,7 +15848,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -15884,7 +15870,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -15907,7 +15892,6 @@
"cpu": [
"wasm32"
],
- "dev": true,
"license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
"optional": true,
"dependencies": {
@@ -15927,7 +15911,6 @@
"cpu": [
"ia32"
],
- "dev": true,
"license": "Apache-2.0 AND LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -15947,7 +15930,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "Apache-2.0 AND LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -15964,7 +15946,6 @@
"version": "8.14.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
"integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
- "dev": true,
"license": "MIT",
"bin": {
"acorn": "bin/acorn"
@@ -15977,7 +15958,6 @@
"version": "0.33.5",
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz",
"integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==",
- "dev": true,
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
@@ -16066,6 +16046,21 @@
"obliterator": "^1.6.1"
}
},
+ "node_modules/motion-dom": {
+ "version": "12.23.23",
+ "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.23.tgz",
+ "integrity": "sha512-n5yolOs0TQQBRUFImrRfs/+6X4p3Q4n1dUEqt/H58Vx7OW6RF+foWEgmTVDhIWJIMXOuNNL0apKH2S16en9eiA==",
+ "license": "MIT",
+ "dependencies": {
+ "motion-utils": "^12.23.6"
+ }
+ },
+ "node_modules/motion-utils": {
+ "version": "12.23.6",
+ "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.23.6.tgz",
+ "integrity": "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==",
+ "license": "MIT"
+ },
"node_modules/mri": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
@@ -16584,7 +16579,6 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
"integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
- "dev": true,
"license": "MIT"
},
"node_modules/picocolors": {
@@ -17063,7 +17057,6 @@
"version": "7.7.3",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
"integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "devOptional": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -17312,7 +17305,6 @@
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz",
"integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"is-arrayish": "^0.3.1"
@@ -17380,7 +17372,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz",
"integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=4",
@@ -17661,7 +17652,6 @@
"version": "10.2.2",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz",
"integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=18"
@@ -17953,7 +17943,6 @@
"version": "7.14.0",
"resolved": "https://registry.npmjs.org/undici/-/undici-7.14.0.tgz",
"integrity": "sha512-Vqs8HTzjpQXZeXdpsfChQTlafcMQaaIwnGwLam1wudSSjlJeQ3bw1j+TLPePgrCnCpUXx7Ba5Pdpf5OBih62NQ==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=20.18.1"
@@ -17969,7 +17958,6 @@
"version": "2.0.0-rc.24",
"resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.24.tgz",
"integrity": "sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"pathe": "^2.0.3"
@@ -18209,7 +18197,6 @@
"version": "1.20251109.0",
"resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20251109.0.tgz",
"integrity": "sha512-VfazMiymlzos0c1t9AhNi0w8gN9+ZbCVLdEE0VDOsI22WYa6yj+pYOhpZzI/mOzCGmk/o1eNjLMkfjWli6aRVg==",
- "dev": true,
"hasInstallScript": true,
"license": "Apache-2.0",
"bin": {
@@ -18230,7 +18217,6 @@
"version": "4.48.0",
"resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.48.0.tgz",
"integrity": "sha512-qkcwysx96XNDWXl4w/5VjAZjqWatxAq9chMXVeqv/etL9e06ouPaZ+Hwwbe5XYV2GYf/XhZVZ3fHJcTBrq60gQ==",
- "dev": true,
"license": "MIT OR Apache-2.0",
"dependencies": {
"@cloudflare/kv-asset-handler": "0.4.0",
@@ -18368,7 +18354,6 @@
"version": "8.18.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
"integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=10.0.0"
@@ -18500,7 +18485,6 @@
"version": "4.1.0-beta.10",
"resolved": "https://registry.npmjs.org/youch/-/youch-4.1.0-beta.10.tgz",
"integrity": "sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@poppinss/colors": "^4.1.5",
@@ -18514,7 +18498,6 @@
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/youch-core/-/youch-core-0.3.3.tgz",
"integrity": "sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@poppinss/exception": "^1.2.2",
@@ -18525,7 +18508,6 @@
"version": "3.22.3",
"resolved": "https://registry.npmjs.org/zod/-/zod-3.22.3.tgz",
"integrity": "sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==",
- "dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/colinhacks"
diff --git a/package.json b/package.json
index 325e443..f99e6e8 100644
--- a/package.json
+++ b/package.json
@@ -14,6 +14,7 @@
},
"dependencies": {
"@opennextjs/cloudflare": "^1.11.0",
+ "framer-motion": "^12.23.24",
"next": "15.5.6",
"react": "19.1.0",
"react-dom": "19.1.0"
@@ -30,4 +31,4 @@
"typescript": "^5",
"wrangler": "^4.48.0"
}
-}
\ No newline at end of file
+}
diff --git a/public/cats/coffee/IMG_0339.jpeg b/public/cats/coffee/IMG_0339.jpeg
new file mode 100644
index 0000000..e0a402d
Binary files /dev/null and b/public/cats/coffee/IMG_0339.jpeg differ
diff --git a/public/cats/coffee/IMG_1153.jpeg b/public/cats/coffee/IMG_1153.jpeg
new file mode 100644
index 0000000..78d135b
Binary files /dev/null and b/public/cats/coffee/IMG_1153.jpeg differ
diff --git a/public/cats/coffee/IMG_1730.jpeg b/public/cats/coffee/IMG_1730.jpeg
new file mode 100644
index 0000000..b98302e
Binary files /dev/null and b/public/cats/coffee/IMG_1730.jpeg differ
diff --git a/public/cats/coffee/IMG_5373.jpeg b/public/cats/coffee/IMG_5373.jpeg
new file mode 100644
index 0000000..7391178
Binary files /dev/null and b/public/cats/coffee/IMG_5373.jpeg differ
diff --git a/public/cats/coffee/IMG_5443.jpeg b/public/cats/coffee/IMG_5443.jpeg
new file mode 100644
index 0000000..0d03d23
Binary files /dev/null and b/public/cats/coffee/IMG_5443.jpeg differ
diff --git a/public/cats/coffee/IMG_5757.jpeg b/public/cats/coffee/IMG_5757.jpeg
new file mode 100644
index 0000000..50e5d1b
Binary files /dev/null and b/public/cats/coffee/IMG_5757.jpeg differ
diff --git a/public/cats/coffee/IMG_5767.jpeg b/public/cats/coffee/IMG_5767.jpeg
new file mode 100644
index 0000000..d3254ca
Binary files /dev/null and b/public/cats/coffee/IMG_5767.jpeg differ
diff --git a/public/cats/coffee/IMG_5768.jpeg b/public/cats/coffee/IMG_5768.jpeg
new file mode 100644
index 0000000..0432ef3
Binary files /dev/null and b/public/cats/coffee/IMG_5768.jpeg differ
diff --git a/public/cats/coffee/IMG_9590.jpeg b/public/cats/coffee/IMG_9590.jpeg
new file mode 100644
index 0000000..364d7d7
Binary files /dev/null and b/public/cats/coffee/IMG_9590.jpeg differ
diff --git a/public/cats/coffee/IMG_9591.jpeg b/public/cats/coffee/IMG_9591.jpeg
new file mode 100644
index 0000000..e2c3b5a
Binary files /dev/null and b/public/cats/coffee/IMG_9591.jpeg differ
diff --git a/public/cats/coffee/IMG_9861.jpeg b/public/cats/coffee/IMG_9861.jpeg
new file mode 100644
index 0000000..b587602
Binary files /dev/null and b/public/cats/coffee/IMG_9861.jpeg differ
diff --git a/public/cats/honey-boy/IMG_0988.jpeg b/public/cats/honey-boy/IMG_0988.jpeg
new file mode 100644
index 0000000..163a03c
Binary files /dev/null and b/public/cats/honey-boy/IMG_0988.jpeg differ
diff --git a/public/cats/miso/IMG_0457.jpeg b/public/cats/miso/IMG_0457.jpeg
new file mode 100644
index 0000000..2d6e890
Binary files /dev/null and b/public/cats/miso/IMG_0457.jpeg differ
diff --git a/public/cats/miso/IMG_1056.jpeg b/public/cats/miso/IMG_1056.jpeg
new file mode 100644
index 0000000..3563614
Binary files /dev/null and b/public/cats/miso/IMG_1056.jpeg differ
diff --git a/public/cats/mochi-and-miso/IMG_0327.jpeg b/public/cats/mochi-and-miso/IMG_0327.jpeg
new file mode 100644
index 0000000..f02c1d6
Binary files /dev/null and b/public/cats/mochi-and-miso/IMG_0327.jpeg differ
diff --git a/public/cats/mochi-and-miso/IMG_0334.jpeg b/public/cats/mochi-and-miso/IMG_0334.jpeg
new file mode 100644
index 0000000..3da8c05
Binary files /dev/null and b/public/cats/mochi-and-miso/IMG_0334.jpeg differ
diff --git a/public/cats/mochi-and-miso/IMG_8850.jpeg b/public/cats/mochi-and-miso/IMG_8850.jpeg
new file mode 100644
index 0000000..0d64024
Binary files /dev/null and b/public/cats/mochi-and-miso/IMG_8850.jpeg differ
diff --git a/public/cats/mochi-and-miso/IMG_9883.jpeg b/public/cats/mochi-and-miso/IMG_9883.jpeg
new file mode 100644
index 0000000..ffc8a5a
Binary files /dev/null and b/public/cats/mochi-and-miso/IMG_9883.jpeg differ
diff --git a/public/cats/mochi/775A306A-399B-4F9D-8FB8-7447821C0008.jpeg b/public/cats/mochi/775A306A-399B-4F9D-8FB8-7447821C0008.jpeg
new file mode 100644
index 0000000..2e57edc
Binary files /dev/null and b/public/cats/mochi/775A306A-399B-4F9D-8FB8-7447821C0008.jpeg differ
diff --git a/public/cats/mochi/IMG_0074.jpeg b/public/cats/mochi/IMG_0074.jpeg
new file mode 100644
index 0000000..128fb42
Binary files /dev/null and b/public/cats/mochi/IMG_0074.jpeg differ
diff --git a/public/cats/mochi/IMG_0075.jpeg b/public/cats/mochi/IMG_0075.jpeg
new file mode 100644
index 0000000..46b9bb8
Binary files /dev/null and b/public/cats/mochi/IMG_0075.jpeg differ
diff --git a/public/cats/mochi/IMG_0237 2.jpeg b/public/cats/mochi/IMG_0237 2.jpeg
new file mode 100644
index 0000000..d61ecff
Binary files /dev/null and b/public/cats/mochi/IMG_0237 2.jpeg differ
diff --git a/public/cats/mochi/IMG_0237.jpeg b/public/cats/mochi/IMG_0237.jpeg
new file mode 100644
index 0000000..d61ecff
Binary files /dev/null and b/public/cats/mochi/IMG_0237.jpeg differ
diff --git a/public/cats/mochi/IMG_0585.jpeg b/public/cats/mochi/IMG_0585.jpeg
new file mode 100644
index 0000000..c202772
Binary files /dev/null and b/public/cats/mochi/IMG_0585.jpeg differ
diff --git a/public/cats/mochi/IMG_9809.jpeg b/public/cats/mochi/IMG_9809.jpeg
new file mode 100644
index 0000000..82d0691
Binary files /dev/null and b/public/cats/mochi/IMG_9809.jpeg differ
diff --git a/src/app/cats/page.tsx b/src/app/cats/page.tsx
new file mode 100644
index 0000000..e701c71
--- /dev/null
+++ b/src/app/cats/page.tsx
@@ -0,0 +1,114 @@
+import Image from "next/image";
+import { StudioNav } from "@/components/ui/studio-nav";
+import { cats, memorialDetails } from "@/data/cats";
+
+export default function CatsPage() {
+ return (
+ Cat Universe
+ Landing grid showcases Miso Soup, Honey-Boy, Coffee June-Bean, and Mochi with arched frames.
+ Page Anatomy
+ {cat.role}
+ {cat.description} Memorial mode enabled {memorialDetails.note} {memorialDetails.music} {memorialDetails.animation} Letter box saves locally for privacy. {cat.name} Contact
+ Form styling mirrors the UI inspiration board—cream inputs, coffee borders, and terracotta submit button.
+ Studio Hours Casa Azul
+ Hidden page for the secret love letter. Password field + fade-in animation launching soon.
+ Flash Vault
+ Each tile recreates the inspiration board’s ornate frames. Hover states wiggle, and modals retell the origin of
+ every set.
+ Microinteractions {note.title} {note.text} {piece.theme} {piece.story} {piece.detail} Future: admin uploads, availability toggles, related suggestions.Portraits, memorials, and mood sliders.
+
+
+ {cat.name}
+
+ {cat.favorites.map((fav) => (
+
+ Mochi Memorial
+ Gallery Highlights
+
+
+ Book, collaborate, or drop a love note.
+
+
+ Framed flash stories with brass-lined intent.
+
+ {vaultNotes.map((note) => (
+
+ {piece.name}
+ Detail Flow
+
+ {detailFlow.map((step) => (
+
+