diff --git a/.gitignore b/.gitignore index e28293ff4602ad75179740b9d32f5bc2ac96f6a5..e31b5703b509000ba1a05117d02586b513b30335 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,9 @@ npm-debug.log* # But exclude the cache directory - it's too large and not needed .next/cache/ +# Testing +.sites/* + # Claude Code settings .claude/ diff --git a/.next/BUILD_ID b/.next/BUILD_ID index a6d07bb890987a71c786602d22cbe1aeb05c6617..1afa5bb0ecfd4abfcd8872111d629aae08adac58 100644 --- a/.next/BUILD_ID +++ b/.next/BUILD_ID @@ -1 +1 @@ -GN54BbL4KORqecYNj1l26 \ No newline at end of file +9vuBdSevB6CUChUh5Igaf \ No newline at end of file diff --git a/.next/app-build-manifest.json b/.next/app-build-manifest.json index 62302ea2f08dd13be690bde8c2a79a115a1af8f1..4aae615c8849b1395dc5a3951f1691a2689a40b7 100644 --- a/.next/app-build-manifest.json +++ b/.next/app-build-manifest.json @@ -17,33 +17,33 @@ "static/chunks/2138-18d4ca002a920f5d.js", "static/chunks/app/layout-19d4da7b6d1a11dd.js" ], - "/api/admin/run-migrations/route": [ + "/api/admin/sites/[id]/database/schema/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/admin/run-migrations/route-ec97c80d56f7b57c.js" + "static/chunks/app/api/admin/sites/[id]/database/schema/route-57afe5f39873ef1b.js" ], - "/api/admin/sites/[id]/database/query/route": [ + "/api/admin/sites/[id]/database/logs/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/admin/sites/[id]/database/query/route-e69d2fe91c705975.js" + "static/chunks/app/api/admin/sites/[id]/database/logs/route-c36b03dfd4ff180c.js" ], - "/api/admin/sites/[id]/database/logs/route": [ + "/api/admin/sites/[id]/database/query/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/admin/sites/[id]/database/logs/route-c36b03dfd4ff180c.js" + "static/chunks/app/api/admin/sites/[id]/database/query/route-e69d2fe91c705975.js" ], - "/api/admin/sites/[id]/functions/[functionId]/route": [ + "/api/admin/run-migrations/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/admin/sites/[id]/functions/[functionId]/route-2bd23c80b0d547a8.js" + "static/chunks/app/api/admin/run-migrations/route-ec97c80d56f7b57c.js" ], "/api/admin/sites/[id]/functions/[functionId]/logs/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", @@ -52,12 +52,12 @@ "static/chunks/main-app-eac23abd81400eeb.js", "static/chunks/app/api/admin/sites/[id]/functions/[functionId]/logs/route-745506c05ad29725.js" ], - "/api/admin/sites/[id]/functions/route": [ + "/api/admin/sites/[id]/functions/[functionId]/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/admin/sites/[id]/functions/route-f216a04ba9eaf519.js" + "static/chunks/app/api/admin/sites/[id]/functions/[functionId]/route-2bd23c80b0d547a8.js" ], "/api/admin/sites/[id]/secrets/[secretId]/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", @@ -73,12 +73,12 @@ "static/chunks/main-app-eac23abd81400eeb.js", "static/chunks/app/api/admin/sites/[id]/secrets/route-7376ba8b5cefd4e8.js" ], - "/api/admin/sites/[id]/server-functions/[functionId]/route": [ + "/api/admin/sites/[id]/server-context/mutate/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/admin/sites/[id]/server-functions/[functionId]/route-25697da6c69099f3.js" + "static/chunks/app/api/admin/sites/[id]/server-context/mutate/route-ca842a8223996343.js" ], "/api/admin/sites/[id]/server-context/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", @@ -87,12 +87,12 @@ "static/chunks/main-app-eac23abd81400eeb.js", "static/chunks/app/api/admin/sites/[id]/server-context/route-cbac2145aa36aaed.js" ], - "/api/admin/sites/[id]/server-context/mutate/route": [ + "/api/admin/sites/[id]/server-functions/[functionId]/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/admin/sites/[id]/server-context/mutate/route-ca842a8223996343.js" + "static/chunks/app/api/admin/sites/[id]/server-functions/[functionId]/route-25697da6c69099f3.js" ], "/api/admin/sites/[id]/server-functions/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", @@ -101,6 +101,13 @@ "static/chunks/main-app-eac23abd81400eeb.js", "static/chunks/app/api/admin/sites/[id]/server-functions/route-4d45f64e320920fe.js" ], + "/api/admin/sites/[id]/functions/route": [ + "static/chunks/webpack-c81a7e1091340d8b.js", + "static/chunks/4bd1b696-2683f5a71cc09935.js", + "static/chunks/1684-94ae6109893bd411.js", + "static/chunks/main-app-eac23abd81400eeb.js", + "static/chunks/app/api/admin/sites/[id]/functions/route-f216a04ba9eaf519.js" + ], "/api/analytics/[siteId]/clear/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", @@ -115,6 +122,13 @@ "static/chunks/main-app-eac23abd81400eeb.js", "static/chunks/app/api/analytics/[siteId]/export/route-61786f8f56f21e46.js" ], + "/api/analytics/[siteId]/heatmap/route": [ + "static/chunks/webpack-c81a7e1091340d8b.js", + "static/chunks/4bd1b696-2683f5a71cc09935.js", + "static/chunks/1684-94ae6109893bd411.js", + "static/chunks/main-app-eac23abd81400eeb.js", + "static/chunks/app/api/analytics/[siteId]/heatmap/route-88ef7d383a45082d.js" + ], "/api/analytics/[siteId]/engagement/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", @@ -122,12 +136,12 @@ "static/chunks/main-app-eac23abd81400eeb.js", "static/chunks/app/api/analytics/[siteId]/engagement/route-c4c7ab3a4f2b80eb.js" ], - "/api/analytics/[siteId]/heatmap/route": [ + "/api/analytics/[siteId]/sessions/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/analytics/[siteId]/heatmap/route-88ef7d383a45082d.js" + "static/chunks/app/api/analytics/[siteId]/sessions/route-248ca834c38e1f49.js" ], "/api/analytics/[siteId]/storage/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", @@ -143,13 +157,6 @@ "static/chunks/main-app-eac23abd81400eeb.js", "static/chunks/app/api/analytics/[siteId]/route-10aa33f2ec750d2d.js" ], - "/api/analytics/track/route": [ - "static/chunks/webpack-c81a7e1091340d8b.js", - "static/chunks/4bd1b696-2683f5a71cc09935.js", - "static/chunks/1684-94ae6109893bd411.js", - "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/analytics/track/route-fdb002ff96ad2df2.js" - ], "/api/analytics/[siteId]/overview/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", @@ -157,40 +164,40 @@ "static/chunks/main-app-eac23abd81400eeb.js", "static/chunks/app/api/analytics/[siteId]/overview/route-a7cf1256591608fc.js" ], - "/api/analytics/interaction/route": [ + "/api/analytics/track/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/analytics/interaction/route-6e80ed168ac9216b.js" + "static/chunks/app/api/analytics/track/route-fdb002ff96ad2df2.js" ], - "/api/admin/sites/[id]/database/schema/route": [ + "/api/auth/check/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/admin/sites/[id]/database/schema/route-57afe5f39873ef1b.js" + "static/chunks/app/api/auth/check/route-dab4b93b788ff764.js" ], - "/api/auth/check/route": [ + "/api/analytics/interaction/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/auth/check/route-dab4b93b788ff764.js" + "static/chunks/app/api/analytics/interaction/route-6e80ed168ac9216b.js" ], - "/api/auth/login/route": [ + "/api/docs/[...path]/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/auth/login/route-6bb231b7c02f90a8.js" + "static/chunks/app/api/docs/[...path]/route-627df421c9593aad.js" ], - "/api/generate/route": [ + "/api/auth/login/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/generate/route-3fcc5518477e369e.js" + "static/chunks/app/api/auth/login/route-6bb231b7c02f90a8.js" ], "/api/auth/logout/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", @@ -206,33 +213,33 @@ "static/chunks/main-app-eac23abd81400eeb.js", "static/chunks/app/api/auth/me/route-9905c76bc79bb039.js" ], - "/api/docs/[...path]/route": [ + "/api/projects/[id]/sites/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/docs/[...path]/route-627df421c9593aad.js" + "static/chunks/app/api/projects/[id]/sites/route-b8d9f3309a1aabb6.js" ], - "/api/projects/[id]/sites/route": [ + "/api/projects/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/projects/[id]/sites/route-b8d9f3309a1aabb6.js" + "static/chunks/app/api/projects/route-3fdeadd5f4cc9321.js" ], - "/api/models/route": [ + "/api/generate/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/models/route-f2500a9d9bef7a52.js" + "static/chunks/app/api/generate/route-3fcc5518477e369e.js" ], - "/api/projects/route": [ + "/api/models/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/projects/route-3fdeadd5f4cc9321.js" + "static/chunks/app/api/models/route-f2500a9d9bef7a52.js" ], "/api/sites/[id]/publish/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", @@ -255,12 +262,12 @@ "static/chunks/main-app-eac23abd81400eeb.js", "static/chunks/app/api/sites/[id]/route-8757097247ef3272.js" ], - "/api/sites/[id]/settings/route": [ + "/api/sites/[id]/thumbnail/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/sites/[id]/settings/route-a4110613ae39e9e3.js" + "static/chunks/app/api/sites/[id]/thumbnail/route-82f44a449ae7dd32.js" ], "/api/sites/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", @@ -269,19 +276,19 @@ "static/chunks/main-app-eac23abd81400eeb.js", "static/chunks/app/api/sites/route-1b735122cd050b64.js" ], - "/api/sites/[id]/thumbnail/route": [ + "/api/sites/[id]/settings/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/sites/[id]/thumbnail/route-82f44a449ae7dd32.js" + "static/chunks/app/api/sites/[id]/settings/route-a4110613ae39e9e3.js" ], - "/api/sync/files/route": [ + "/api/sync/projects/[id]/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/sync/files/route-63c78c4ce397e171.js" + "static/chunks/app/api/sync/projects/[id]/route-df598dcf120a1209.js" ], "/api/sync/projects/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", @@ -290,26 +297,26 @@ "static/chunks/main-app-eac23abd81400eeb.js", "static/chunks/app/api/sync/projects/route-9e0db8afae377fa3.js" ], - "/api/validate-key/route": [ + "/api/sync/files/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/validate-key/route-c03a8560d2bd05a5.js" + "static/chunks/app/api/sync/files/route-63c78c4ce397e171.js" ], - "/api/sync/projects/[id]/route": [ + "/sites/[id]/[...path]/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/sync/projects/[id]/route-df598dcf120a1209.js" + "static/chunks/app/sites/[id]/[...path]/route-21a2d1800183d7cb.js" ], - "/sites/[id]/[...path]/route": [ + "/api/sync/status/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/sites/[id]/[...path]/route-21a2d1800183d7cb.js" + "static/chunks/app/api/sync/status/route-8bb958d7801bf763.js" ], "/sites/[id]/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", @@ -318,19 +325,19 @@ "static/chunks/main-app-eac23abd81400eeb.js", "static/chunks/app/sites/[id]/route-aaf0334e238f8f14.js" ], - "/api/sync/status/route": [ + "/api/validate-key/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/sync/status/route-8bb958d7801bf763.js" + "static/chunks/app/api/validate-key/route-c03a8560d2bd05a5.js" ], - "/api/analytics/[siteId]/sessions/route": [ + "/api/sites/[id]/functions/[...path]/route": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/analytics/[siteId]/sessions/route-248ca834c38e1f49.js" + "static/chunks/app/api/sites/[id]/functions/[...path]/route-1e8dcddfbba051ee.js" ], "/admin/docs/page": [ "static/chunks/webpack-c81a7e1091340d8b.js", @@ -360,7 +367,7 @@ "static/chunks/main-app-eac23abd81400eeb.js", "static/chunks/app/admin/page-f05c1054700b06bb.js" ], - "/admin/projects/page": [ + "/admin/settings/application/page": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", @@ -372,7 +379,7 @@ "static/chunks/3263-c92ef084ef21734b.js", "static/chunks/4750-0f9d0976158ca18d.js", "static/chunks/9695-475a71a5d57464e1.js", - "static/chunks/app/admin/projects/page-1d5cea6db8f0f7fa.js" + "static/chunks/app/admin/settings/application/page-dc785116eef18e9d.js" ], "/admin/settings/model/page": [ "static/chunks/webpack-c81a7e1091340d8b.js", @@ -388,7 +395,7 @@ "static/chunks/9695-475a71a5d57464e1.js", "static/chunks/app/admin/settings/model/page-e024da3091445646.js" ], - "/admin/settings/application/page": [ + "/admin/projects/page": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", @@ -400,9 +407,9 @@ "static/chunks/3263-c92ef084ef21734b.js", "static/chunks/4750-0f9d0976158ca18d.js", "static/chunks/9695-475a71a5d57464e1.js", - "static/chunks/app/admin/settings/application/page-dc785116eef18e9d.js" + "static/chunks/app/admin/projects/page-1d5cea6db8f0f7fa.js" ], - "/admin/templates/page": [ + "/admin/skills/page": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", @@ -414,9 +421,9 @@ "static/chunks/3263-c92ef084ef21734b.js", "static/chunks/4750-0f9d0976158ca18d.js", "static/chunks/9695-475a71a5d57464e1.js", - "static/chunks/app/admin/templates/page-e957189165c35277.js" + "static/chunks/app/admin/skills/page-cfcec55ab3500973.js" ], - "/admin/skills/page": [ + "/admin/settings/page": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", @@ -428,7 +435,7 @@ "static/chunks/3263-c92ef084ef21734b.js", "static/chunks/4750-0f9d0976158ca18d.js", "static/chunks/9695-475a71a5d57464e1.js", - "static/chunks/app/admin/skills/page-cfcec55ab3500973.js" + "static/chunks/app/admin/settings/page-b4f8d13de930b91b.js" ], "/admin/sites/page": [ "static/chunks/webpack-c81a7e1091340d8b.js", @@ -444,7 +451,7 @@ "static/chunks/9695-475a71a5d57464e1.js", "static/chunks/app/admin/sites/page-f0e071160afe9175.js" ], - "/admin/settings/page": [ + "/admin/templates/page": [ "static/chunks/webpack-c81a7e1091340d8b.js", "static/chunks/4bd1b696-2683f5a71cc09935.js", "static/chunks/1684-94ae6109893bd411.js", @@ -456,7 +463,7 @@ "static/chunks/3263-c92ef084ef21734b.js", "static/chunks/4750-0f9d0976158ca18d.js", "static/chunks/9695-475a71a5d57464e1.js", - "static/chunks/app/admin/settings/page-b4f8d13de930b91b.js" + "static/chunks/app/admin/templates/page-e957189165c35277.js" ], "/page": [ "static/chunks/webpack-c81a7e1091340d8b.js", @@ -482,13 +489,6 @@ "static/chunks/4792-f97f5e70e2ff5861.js", "static/chunks/4750-0f9d0976158ca18d.js", "static/chunks/app/test-generation/page-c0fb010ce78373b4.js" - ], - "/api/sites/[id]/functions/[...path]/route": [ - "static/chunks/webpack-c81a7e1091340d8b.js", - "static/chunks/4bd1b696-2683f5a71cc09935.js", - "static/chunks/1684-94ae6109893bd411.js", - "static/chunks/main-app-eac23abd81400eeb.js", - "static/chunks/app/api/sites/[id]/functions/[...path]/route-1e8dcddfbba051ee.js" ] } } \ No newline at end of file diff --git a/.next/app-path-routes-manifest.json b/.next/app-path-routes-manifest.json index a1f617157bdbc924f51e82875fd9e8909746d060..6581d5be762181220fdff048b0211cff342c0de0 100644 --- a/.next/app-path-routes-manifest.json +++ b/.next/app-path-routes-manifest.json @@ -1,61 +1,61 @@ { "/_not-found/page": "/_not-found", - "/api/admin/run-migrations/route": "/api/admin/run-migrations", - "/api/admin/sites/[id]/database/query/route": "/api/admin/sites/[id]/database/query", + "/api/admin/sites/[id]/database/schema/route": "/api/admin/sites/[id]/database/schema", "/api/admin/sites/[id]/database/logs/route": "/api/admin/sites/[id]/database/logs", - "/api/admin/sites/[id]/functions/[functionId]/route": "/api/admin/sites/[id]/functions/[functionId]", + "/api/admin/sites/[id]/database/query/route": "/api/admin/sites/[id]/database/query", + "/api/admin/run-migrations/route": "/api/admin/run-migrations", "/api/admin/sites/[id]/functions/[functionId]/logs/route": "/api/admin/sites/[id]/functions/[functionId]/logs", - "/api/admin/sites/[id]/functions/route": "/api/admin/sites/[id]/functions", + "/api/admin/sites/[id]/functions/[functionId]/route": "/api/admin/sites/[id]/functions/[functionId]", "/api/admin/sites/[id]/secrets/[secretId]/route": "/api/admin/sites/[id]/secrets/[secretId]", "/api/admin/sites/[id]/secrets/route": "/api/admin/sites/[id]/secrets", - "/api/admin/sites/[id]/server-functions/[functionId]/route": "/api/admin/sites/[id]/server-functions/[functionId]", - "/api/admin/sites/[id]/server-context/route": "/api/admin/sites/[id]/server-context", "/api/admin/sites/[id]/server-context/mutate/route": "/api/admin/sites/[id]/server-context/mutate", + "/api/admin/sites/[id]/server-context/route": "/api/admin/sites/[id]/server-context", + "/api/admin/sites/[id]/server-functions/[functionId]/route": "/api/admin/sites/[id]/server-functions/[functionId]", "/api/admin/sites/[id]/server-functions/route": "/api/admin/sites/[id]/server-functions", + "/api/admin/sites/[id]/functions/route": "/api/admin/sites/[id]/functions", "/api/analytics/[siteId]/clear/route": "/api/analytics/[siteId]/clear", "/api/analytics/[siteId]/export/route": "/api/analytics/[siteId]/export", - "/api/analytics/[siteId]/engagement/route": "/api/analytics/[siteId]/engagement", "/api/analytics/[siteId]/heatmap/route": "/api/analytics/[siteId]/heatmap", + "/api/analytics/[siteId]/engagement/route": "/api/analytics/[siteId]/engagement", + "/api/analytics/[siteId]/sessions/route": "/api/analytics/[siteId]/sessions", "/api/analytics/[siteId]/storage/route": "/api/analytics/[siteId]/storage", "/api/analytics/[siteId]/route": "/api/analytics/[siteId]", - "/api/analytics/track/route": "/api/analytics/track", "/api/analytics/[siteId]/overview/route": "/api/analytics/[siteId]/overview", - "/api/analytics/interaction/route": "/api/analytics/interaction", - "/api/admin/sites/[id]/database/schema/route": "/api/admin/sites/[id]/database/schema", + "/api/analytics/track/route": "/api/analytics/track", "/api/auth/check/route": "/api/auth/check", + "/api/analytics/interaction/route": "/api/analytics/interaction", + "/api/docs/[...path]/route": "/api/docs/[...path]", "/api/auth/login/route": "/api/auth/login", - "/api/generate/route": "/api/generate", "/api/auth/logout/route": "/api/auth/logout", "/api/auth/me/route": "/api/auth/me", - "/api/docs/[...path]/route": "/api/docs/[...path]", "/api/projects/[id]/sites/route": "/api/projects/[id]/sites", - "/api/models/route": "/api/models", "/api/projects/route": "/api/projects", + "/api/generate/route": "/api/generate", + "/api/models/route": "/api/models", "/api/sites/[id]/publish/route": "/api/sites/[id]/publish", "/api/shell/execute/route": "/api/shell/execute", "/api/sites/[id]/route": "/api/sites/[id]", - "/api/sites/[id]/settings/route": "/api/sites/[id]/settings", - "/api/sites/route": "/api/sites", "/api/sites/[id]/thumbnail/route": "/api/sites/[id]/thumbnail", - "/api/sync/files/route": "/api/sync/files", - "/api/sync/projects/route": "/api/sync/projects", - "/api/validate-key/route": "/api/validate-key", + "/api/sites/route": "/api/sites", + "/api/sites/[id]/settings/route": "/api/sites/[id]/settings", "/api/sync/projects/[id]/route": "/api/sync/projects/[id]", + "/api/sync/projects/route": "/api/sync/projects", + "/api/sync/files/route": "/api/sync/files", "/sites/[id]/[...path]/route": "/sites/[id]/[...path]", - "/sites/[id]/route": "/sites/[id]", "/api/sync/status/route": "/api/sync/status", - "/api/analytics/[siteId]/sessions/route": "/api/analytics/[siteId]/sessions", + "/sites/[id]/route": "/sites/[id]", + "/api/validate-key/route": "/api/validate-key", + "/api/sites/[id]/functions/[...path]/route": "/api/sites/[id]/functions/[...path]", "/admin/docs/page": "/admin/docs", "/admin/login/page": "/admin/login", "/admin/page": "/admin", - "/admin/projects/page": "/admin/projects", - "/admin/settings/model/page": "/admin/settings/model", "/admin/settings/application/page": "/admin/settings/application", - "/admin/templates/page": "/admin/templates", + "/admin/settings/model/page": "/admin/settings/model", + "/admin/projects/page": "/admin/projects", "/admin/skills/page": "/admin/skills", - "/admin/sites/page": "/admin/sites", "/admin/settings/page": "/admin/settings", + "/admin/sites/page": "/admin/sites", + "/admin/templates/page": "/admin/templates", "/page": "/", - "/test-generation/page": "/test-generation", - "/api/sites/[id]/functions/[...path]/route": "/api/sites/[id]/functions/[...path]" + "/test-generation/page": "/test-generation" } \ No newline at end of file diff --git a/.next/build-manifest.json b/.next/build-manifest.json index 506af8e48a6bd6b2a2a2710f6523e3cd9fcda378..bb21cc3577749d55889483ea9154a87113729801 100644 --- a/.next/build-manifest.json +++ b/.next/build-manifest.json @@ -5,8 +5,8 @@ "devFiles": [], "ampDevFiles": [], "lowPriorityFiles": [ - "static/GN54BbL4KORqecYNj1l26/_buildManifest.js", - "static/GN54BbL4KORqecYNj1l26/_ssgManifest.js" + "static/9vuBdSevB6CUChUh5Igaf/_buildManifest.js", + "static/9vuBdSevB6CUChUh5Igaf/_ssgManifest.js" ], "rootMainFiles": [ "static/chunks/webpack-c81a7e1091340d8b.js", diff --git a/.next/prerender-manifest.json b/.next/prerender-manifest.json index 12e087b749dc5eee52f72e72d2c1e68b29b0fd27..5e0735a6943fc2b94e81f238f16ea58b7378d680 100644 --- a/.next/prerender-manifest.json +++ b/.next/prerender-manifest.json @@ -49,7 +49,7 @@ "x-next-revalidate-tag-token" ] }, - "/admin/docs": { + "/admin/settings/model": { "experimentalBypassFor": [ { "type": "header", @@ -62,8 +62,8 @@ } ], "initialRevalidateSeconds": false, - "srcRoute": "/admin/docs", - "dataRoute": "/admin/docs.rsc", + "srcRoute": "/admin/settings/model", + "dataRoute": "/admin/settings/model.rsc", "allowHeader": [ "host", "x-matched-path", @@ -73,7 +73,7 @@ "x-next-revalidate-tag-token" ] }, - "/admin/templates": { + "/admin/skills": { "experimentalBypassFor": [ { "type": "header", @@ -86,8 +86,8 @@ } ], "initialRevalidateSeconds": false, - "srcRoute": "/admin/templates", - "dataRoute": "/admin/templates.rsc", + "srcRoute": "/admin/skills", + "dataRoute": "/admin/skills.rsc", "allowHeader": [ "host", "x-matched-path", @@ -97,7 +97,7 @@ "x-next-revalidate-tag-token" ] }, - "/admin/settings/application": { + "/": { "experimentalBypassFor": [ { "type": "header", @@ -110,8 +110,8 @@ } ], "initialRevalidateSeconds": false, - "srcRoute": "/admin/settings/application", - "dataRoute": "/admin/settings/application.rsc", + "srcRoute": "/", + "dataRoute": "/index.rsc", "allowHeader": [ "host", "x-matched-path", @@ -121,7 +121,7 @@ "x-next-revalidate-tag-token" ] }, - "/admin/settings": { + "/test-generation": { "experimentalBypassFor": [ { "type": "header", @@ -134,8 +134,8 @@ } ], "initialRevalidateSeconds": false, - "srcRoute": "/admin/settings", - "dataRoute": "/admin/settings.rsc", + "srcRoute": "/test-generation", + "dataRoute": "/test-generation.rsc", "allowHeader": [ "host", "x-matched-path", @@ -145,7 +145,7 @@ "x-next-revalidate-tag-token" ] }, - "/admin/projects": { + "/admin/docs": { "experimentalBypassFor": [ { "type": "header", @@ -158,8 +158,8 @@ } ], "initialRevalidateSeconds": false, - "srcRoute": "/admin/projects", - "dataRoute": "/admin/projects.rsc", + "srcRoute": "/admin/docs", + "dataRoute": "/admin/docs.rsc", "allowHeader": [ "host", "x-matched-path", @@ -169,7 +169,7 @@ "x-next-revalidate-tag-token" ] }, - "/test-generation": { + "/admin/settings/application": { "experimentalBypassFor": [ { "type": "header", @@ -182,8 +182,8 @@ } ], "initialRevalidateSeconds": false, - "srcRoute": "/test-generation", - "dataRoute": "/test-generation.rsc", + "srcRoute": "/admin/settings/application", + "dataRoute": "/admin/settings/application.rsc", "allowHeader": [ "host", "x-matched-path", @@ -193,7 +193,7 @@ "x-next-revalidate-tag-token" ] }, - "/admin/skills": { + "/admin/sites": { "experimentalBypassFor": [ { "type": "header", @@ -206,8 +206,8 @@ } ], "initialRevalidateSeconds": false, - "srcRoute": "/admin/skills", - "dataRoute": "/admin/skills.rsc", + "srcRoute": "/admin/sites", + "dataRoute": "/admin/sites.rsc", "allowHeader": [ "host", "x-matched-path", @@ -217,7 +217,7 @@ "x-next-revalidate-tag-token" ] }, - "/admin/sites": { + "/admin/settings": { "experimentalBypassFor": [ { "type": "header", @@ -230,8 +230,8 @@ } ], "initialRevalidateSeconds": false, - "srcRoute": "/admin/sites", - "dataRoute": "/admin/sites.rsc", + "srcRoute": "/admin/settings", + "dataRoute": "/admin/settings.rsc", "allowHeader": [ "host", "x-matched-path", @@ -241,7 +241,7 @@ "x-next-revalidate-tag-token" ] }, - "/admin/settings/model": { + "/admin/templates": { "experimentalBypassFor": [ { "type": "header", @@ -254,8 +254,8 @@ } ], "initialRevalidateSeconds": false, - "srcRoute": "/admin/settings/model", - "dataRoute": "/admin/settings/model.rsc", + "srcRoute": "/admin/templates", + "dataRoute": "/admin/templates.rsc", "allowHeader": [ "host", "x-matched-path", @@ -265,7 +265,7 @@ "x-next-revalidate-tag-token" ] }, - "/": { + "/admin/projects": { "experimentalBypassFor": [ { "type": "header", @@ -278,8 +278,8 @@ } ], "initialRevalidateSeconds": false, - "srcRoute": "/", - "dataRoute": "/index.rsc", + "srcRoute": "/admin/projects", + "dataRoute": "/admin/projects.rsc", "allowHeader": [ "host", "x-matched-path", @@ -293,8 +293,8 @@ "dynamicRoutes": {}, "notFoundRoutes": [], "preview": { - "previewModeId": "3f6e7b68ca0f25523264b5e13ccf0d1b", - "previewModeSigningKey": "66037fb25b96b1af87773cedf53654006f3a412cfca9a385817e5b6fc971e218", - "previewModeEncryptionKey": "780f25b864dc75e98079e1c0718dbfc6d54b653657cbe5f47412a54f508f00b9" + "previewModeId": "34a23cbb30e9dedfdf948344c6b49fd3", + "previewModeSigningKey": "025c2a1f4659e3ab0244bd7c854a02f0b7cd74954bb516ce1b319c111eec1b34", + "previewModeEncryptionKey": "a76a5d1205f9c38e0a69e2c1aa3667910a81753ae956d745e574856885a4715e" } } \ No newline at end of file diff --git a/.next/server/app-paths-manifest.json b/.next/server/app-paths-manifest.json index 24e0c0f9c7ab3fac5373489512f6ebd797baf4bf..a996c7234a9f0a1da6db93177502562306898595 100644 --- a/.next/server/app-paths-manifest.json +++ b/.next/server/app-paths-manifest.json @@ -1,61 +1,61 @@ { "/_not-found/page": "app/_not-found/page.js", - "/api/admin/run-migrations/route": "app/api/admin/run-migrations/route.js", - "/api/admin/sites/[id]/database/query/route": "app/api/admin/sites/[id]/database/query/route.js", + "/api/admin/sites/[id]/database/schema/route": "app/api/admin/sites/[id]/database/schema/route.js", "/api/admin/sites/[id]/database/logs/route": "app/api/admin/sites/[id]/database/logs/route.js", - "/api/admin/sites/[id]/functions/[functionId]/route": "app/api/admin/sites/[id]/functions/[functionId]/route.js", + "/api/admin/sites/[id]/database/query/route": "app/api/admin/sites/[id]/database/query/route.js", + "/api/admin/run-migrations/route": "app/api/admin/run-migrations/route.js", "/api/admin/sites/[id]/functions/[functionId]/logs/route": "app/api/admin/sites/[id]/functions/[functionId]/logs/route.js", - "/api/admin/sites/[id]/functions/route": "app/api/admin/sites/[id]/functions/route.js", + "/api/admin/sites/[id]/functions/[functionId]/route": "app/api/admin/sites/[id]/functions/[functionId]/route.js", "/api/admin/sites/[id]/secrets/[secretId]/route": "app/api/admin/sites/[id]/secrets/[secretId]/route.js", "/api/admin/sites/[id]/secrets/route": "app/api/admin/sites/[id]/secrets/route.js", - "/api/admin/sites/[id]/server-functions/[functionId]/route": "app/api/admin/sites/[id]/server-functions/[functionId]/route.js", - "/api/admin/sites/[id]/server-context/route": "app/api/admin/sites/[id]/server-context/route.js", "/api/admin/sites/[id]/server-context/mutate/route": "app/api/admin/sites/[id]/server-context/mutate/route.js", + "/api/admin/sites/[id]/server-context/route": "app/api/admin/sites/[id]/server-context/route.js", + "/api/admin/sites/[id]/server-functions/[functionId]/route": "app/api/admin/sites/[id]/server-functions/[functionId]/route.js", "/api/admin/sites/[id]/server-functions/route": "app/api/admin/sites/[id]/server-functions/route.js", + "/api/admin/sites/[id]/functions/route": "app/api/admin/sites/[id]/functions/route.js", "/api/analytics/[siteId]/clear/route": "app/api/analytics/[siteId]/clear/route.js", "/api/analytics/[siteId]/export/route": "app/api/analytics/[siteId]/export/route.js", - "/api/analytics/[siteId]/engagement/route": "app/api/analytics/[siteId]/engagement/route.js", "/api/analytics/[siteId]/heatmap/route": "app/api/analytics/[siteId]/heatmap/route.js", + "/api/analytics/[siteId]/engagement/route": "app/api/analytics/[siteId]/engagement/route.js", + "/api/analytics/[siteId]/sessions/route": "app/api/analytics/[siteId]/sessions/route.js", "/api/analytics/[siteId]/storage/route": "app/api/analytics/[siteId]/storage/route.js", "/api/analytics/[siteId]/route": "app/api/analytics/[siteId]/route.js", - "/api/analytics/track/route": "app/api/analytics/track/route.js", "/api/analytics/[siteId]/overview/route": "app/api/analytics/[siteId]/overview/route.js", - "/api/analytics/interaction/route": "app/api/analytics/interaction/route.js", - "/api/admin/sites/[id]/database/schema/route": "app/api/admin/sites/[id]/database/schema/route.js", + "/api/analytics/track/route": "app/api/analytics/track/route.js", "/api/auth/check/route": "app/api/auth/check/route.js", + "/api/analytics/interaction/route": "app/api/analytics/interaction/route.js", + "/api/docs/[...path]/route": "app/api/docs/[...path]/route.js", "/api/auth/login/route": "app/api/auth/login/route.js", - "/api/generate/route": "app/api/generate/route.js", "/api/auth/logout/route": "app/api/auth/logout/route.js", "/api/auth/me/route": "app/api/auth/me/route.js", - "/api/docs/[...path]/route": "app/api/docs/[...path]/route.js", "/api/projects/[id]/sites/route": "app/api/projects/[id]/sites/route.js", - "/api/models/route": "app/api/models/route.js", "/api/projects/route": "app/api/projects/route.js", + "/api/generate/route": "app/api/generate/route.js", + "/api/models/route": "app/api/models/route.js", "/api/sites/[id]/publish/route": "app/api/sites/[id]/publish/route.js", "/api/shell/execute/route": "app/api/shell/execute/route.js", "/api/sites/[id]/route": "app/api/sites/[id]/route.js", - "/api/sites/[id]/settings/route": "app/api/sites/[id]/settings/route.js", - "/api/sites/route": "app/api/sites/route.js", "/api/sites/[id]/thumbnail/route": "app/api/sites/[id]/thumbnail/route.js", - "/api/sync/files/route": "app/api/sync/files/route.js", - "/api/sync/projects/route": "app/api/sync/projects/route.js", - "/api/validate-key/route": "app/api/validate-key/route.js", + "/api/sites/route": "app/api/sites/route.js", + "/api/sites/[id]/settings/route": "app/api/sites/[id]/settings/route.js", "/api/sync/projects/[id]/route": "app/api/sync/projects/[id]/route.js", + "/api/sync/projects/route": "app/api/sync/projects/route.js", + "/api/sync/files/route": "app/api/sync/files/route.js", "/sites/[id]/[...path]/route": "app/sites/[id]/[...path]/route.js", - "/sites/[id]/route": "app/sites/[id]/route.js", "/api/sync/status/route": "app/api/sync/status/route.js", - "/api/analytics/[siteId]/sessions/route": "app/api/analytics/[siteId]/sessions/route.js", + "/sites/[id]/route": "app/sites/[id]/route.js", + "/api/validate-key/route": "app/api/validate-key/route.js", + "/api/sites/[id]/functions/[...path]/route": "app/api/sites/[id]/functions/[...path]/route.js", "/admin/docs/page": "app/admin/docs/page.js", "/admin/login/page": "app/admin/login/page.js", "/admin/page": "app/admin/page.js", - "/admin/projects/page": "app/admin/projects/page.js", - "/admin/settings/model/page": "app/admin/settings/model/page.js", "/admin/settings/application/page": "app/admin/settings/application/page.js", - "/admin/templates/page": "app/admin/templates/page.js", + "/admin/settings/model/page": "app/admin/settings/model/page.js", + "/admin/projects/page": "app/admin/projects/page.js", "/admin/skills/page": "app/admin/skills/page.js", - "/admin/sites/page": "app/admin/sites/page.js", "/admin/settings/page": "app/admin/settings/page.js", + "/admin/sites/page": "app/admin/sites/page.js", + "/admin/templates/page": "app/admin/templates/page.js", "/page": "app/page.js", - "/test-generation/page": "app/test-generation/page.js", - "/api/sites/[id]/functions/[...path]/route": "app/api/sites/[id]/functions/[...path]/route.js" + "/test-generation/page": "app/test-generation/page.js" } \ No newline at end of file diff --git a/.next/server/app/_not-found.html b/.next/server/app/_not-found.html index 9533086a566a71907627239ed068375a9b638b75..bf9f309d0ee3e3b89e484dec17289975d9f2c626 100644 --- a/.next/server/app/_not-found.html +++ b/.next/server/app/_not-found.html @@ -1 +1 @@ -404: This page could not be found.Open Source Web Studio | Agentic AI Development 🎨

404

This page could not be found.

\ No newline at end of file +404: This page could not be found.Open Source Web Studio | Agentic AI Development 🎨

404

This page could not be found.

\ No newline at end of file diff --git a/.next/server/app/_not-found.rsc b/.next/server/app/_not-found.rsc index 181b4f81a731a39cda9e00a1468ede6d12016f31..6f48d59cdb0fd337acc9a82be0576f18c37fd8f7 100644 --- a/.next/server/app/_not-found.rsc +++ b/.next/server/app/_not-found.rsc @@ -13,7 +13,7 @@ e:I[59665,[],"ViewportBoundary"] :HL["/_next/static/media/c3f6eb667c0186c5-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/media/e4af272ccee01ff0-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/css/52c3faddab7e8cad.css","style"] -0:{"P":null,"b":"GN54BbL4KORqecYNj1l26","p":"","c":["","_not-found"],"i":false,"f":[[["",{"children":["/_not-found",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["/_not-found",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:1:props:children:1:props:children:props:children:props:children:1:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:1:props:children:1:props:children:props:children:props:children:1:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:1:props:children:1:props:children:props:children:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:1:props:children:1:props:children:props:children:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],["$","$L7",null,{"children":"$L8"}],null,["$","$L9",null,{"children":["$La","$Lb",["$","$Lc",null,{"promise":"$@d"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$1","5C0JyqexQMj3wXA8GGcNU",{"children":[["$","$Le",null,{"children":"$Lf"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$10","$undefined"],"s":false,"S":true} +0:{"P":null,"b":"9vuBdSevB6CUChUh5Igaf","p":"","c":["","_not-found"],"i":false,"f":[[["",{"children":["/_not-found",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["/_not-found",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:1:props:children:1:props:children:props:children:props:children:1:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:1:props:children:1:props:children:props:children:props:children:1:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:1:props:children:1:props:children:props:children:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:1:props:children:1:props:children:props:children:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],["$","$L7",null,{"children":"$L8"}],null,["$","$L9",null,{"children":["$La","$Lb",["$","$Lc",null,{"promise":"$@d"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$1","wQcBI8QunRX7ZQ0gHa_Y1",{"children":[["$","$Le",null,{"children":"$Lf"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$10","$undefined"],"s":false,"S":true} 11:"$Sreact.suspense" 12:I[74911,[],"AsyncMetadata"] 8:["$","$11",null,{"fallback":null,"children":["$","$L12",null,{"promise":"$@13"}]}] diff --git a/.next/server/app/admin.html b/.next/server/app/admin.html index 2609a7acd1fa6e27e9f7b38832708763055fccbe..4111dbc762aced599c7147e4f48a1bd9540a998a 100644 --- a/.next/server/app/admin.html +++ b/.next/server/app/admin.html @@ -1 +1 @@ -Open Source Web Studio | Agentic AI Development 🎨

Redirecting...

\ No newline at end of file +Open Source Web Studio | Agentic AI Development 🎨

Redirecting...

\ No newline at end of file diff --git a/.next/server/app/admin.rsc b/.next/server/app/admin.rsc index 62f473c1a3367dd153ef2e1410ba9e17ca754516..36aafd3a332cb5a81f69cc0301b584d5a2612e70 100644 --- a/.next/server/app/admin.rsc +++ b/.next/server/app/admin.rsc @@ -15,7 +15,7 @@ d:I[59665,[],"OutletBoundary"] :HL["/_next/static/media/c3f6eb667c0186c5-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/media/e4af272ccee01ff0-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/css/52c3faddab7e8cad.css","style"] -0:{"P":null,"b":"GN54BbL4KORqecYNj1l26","p":"","c":["","admin"],"i":false,"f":[[["",{"children":["admin",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["admin",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","searchParams":{},"params":{},"promises":["$@9","$@a"]}],["$","$Lb",null,{"children":"$Lc"}],null,["$","$Ld",null,{"children":["$Le","$Lf",["$","$L10",null,{"promise":"$@11"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","8WoFz6kAEAMp9s12QYtE1",{"children":[["$","$L12",null,{"children":"$L13"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$14","$undefined"],"s":false,"S":true} +0:{"P":null,"b":"9vuBdSevB6CUChUh5Igaf","p":"","c":["","admin"],"i":false,"f":[[["",{"children":["admin",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["admin",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","searchParams":{},"params":{},"promises":["$@9","$@a"]}],["$","$Lb",null,{"children":"$Lc"}],null,["$","$Ld",null,{"children":["$Le","$Lf",["$","$L10",null,{"promise":"$@11"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","j38l6Vb5woMNS8YvQC-zK",{"children":[["$","$L12",null,{"children":"$L13"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$14","$undefined"],"s":false,"S":true} 15:"$Sreact.suspense" 16:I[74911,[],"AsyncMetadata"] 9:{} diff --git a/.next/server/app/admin/docs.html b/.next/server/app/admin/docs.html index f917f21ca5d0b7b86cce4846a19f97e2f467eadb..8a1302ad7de53ec5860e8d9334dc77911b2a46bd 100644 --- a/.next/server/app/admin/docs.html +++ b/.next/server/app/admin/docs.html @@ -36,4 +36,4 @@ 691 22 606 1 658 2 688 19 137 74 130 264 -12 328 -38 18 -85 19 -840 18 -652 0 -807 -2 -838 -14z"/> -Docs
Loading documentation...
\ No newline at end of file +Docs
Loading documentation...
\ No newline at end of file diff --git a/.next/server/app/admin/docs.rsc b/.next/server/app/admin/docs.rsc index 53767c517948948d3426fc562e09a0d4f6e3bd87..0d135d340ddff9a9a5a453e96eec1e1e2b4f133e 100644 --- a/.next/server/app/admin/docs.rsc +++ b/.next/server/app/admin/docs.rsc @@ -14,7 +14,7 @@ f:I[59665,[],"ViewportBoundary"] :HL["/_next/static/media/c3f6eb667c0186c5-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/media/e4af272ccee01ff0-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/css/52c3faddab7e8cad.css","style"] -0:{"P":null,"b":"GN54BbL4KORqecYNj1l26","p":"","c":["","admin","docs"],"i":false,"f":[[["",{"children":["admin",{"children":["docs",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["admin",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["docs",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"view":"docs"}],["$","$L8",null,{"children":"$L9"}],null,["$","$La",null,{"children":["$Lb","$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","gVmiAB_uJhmxgwf1z1bcZ",{"children":[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$11","$undefined"],"s":false,"S":true} +0:{"P":null,"b":"9vuBdSevB6CUChUh5Igaf","p":"","c":["","admin","docs"],"i":false,"f":[[["",{"children":["admin",{"children":["docs",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["admin",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["docs",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"view":"docs"}],["$","$L8",null,{"children":"$L9"}],null,["$","$La",null,{"children":["$Lb","$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","uPF2GatGVoqSSuCTGAor6",{"children":[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$11","$undefined"],"s":false,"S":true} 12:"$Sreact.suspense" 13:I[74911,[],"AsyncMetadata"] 9:["$","$12",null,{"fallback":null,"children":["$","$L13",null,{"promise":"$@14"}]}] diff --git a/.next/server/app/admin/login.html b/.next/server/app/admin/login.html index 77b4f02b2086df30d73995d52a82b5419c5db6b3..3e11661e0179b9751b030c83664704e094a2de6a 100644 --- a/.next/server/app/admin/login.html +++ b/.next/server/app/admin/login.html @@ -1 +1 @@ -Open Source Web Studio | Agentic AI Development 🎨

OSW Studio Admin

Enter your password to continue

Powered byOSW Studio
\ No newline at end of file +Open Source Web Studio | Agentic AI Development 🎨

OSW Studio Admin

Enter your password to continue

Powered byOSW Studio
\ No newline at end of file diff --git a/.next/server/app/admin/login.rsc b/.next/server/app/admin/login.rsc index 88a65088b8ffbc9669a80bbbdb4f8593a7bb6ad1..411fefd1afa700ac5004e0fab288fa2b9a4aac00 100644 --- a/.next/server/app/admin/login.rsc +++ b/.next/server/app/admin/login.rsc @@ -15,7 +15,7 @@ d:I[59665,[],"OutletBoundary"] :HL["/_next/static/media/c3f6eb667c0186c5-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/media/e4af272ccee01ff0-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/css/52c3faddab7e8cad.css","style"] -0:{"P":null,"b":"GN54BbL4KORqecYNj1l26","p":"","c":["","admin","login"],"i":false,"f":[[["",{"children":["admin",{"children":["login",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["admin",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["login",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","searchParams":{},"params":{},"promises":["$@9","$@a"]}],["$","$Lb",null,{"children":"$Lc"}],null,["$","$Ld",null,{"children":["$Le","$Lf",["$","$L10",null,{"promise":"$@11"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","cuHnRYfVAnykWUCbd9TJk",{"children":[["$","$L12",null,{"children":"$L13"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$14","$undefined"],"s":false,"S":true} +0:{"P":null,"b":"9vuBdSevB6CUChUh5Igaf","p":"","c":["","admin","login"],"i":false,"f":[[["",{"children":["admin",{"children":["login",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["admin",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["login",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","searchParams":{},"params":{},"promises":["$@9","$@a"]}],["$","$Lb",null,{"children":"$Lc"}],null,["$","$Ld",null,{"children":["$Le","$Lf",["$","$L10",null,{"promise":"$@11"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","V01CrIXrnGtMd0fud69UH",{"children":[["$","$L12",null,{"children":"$L13"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$14","$undefined"],"s":false,"S":true} 15:"$Sreact.suspense" 16:I[74911,[],"AsyncMetadata"] 9:{} diff --git a/.next/server/app/admin/projects.html b/.next/server/app/admin/projects.html index d70ab0e3fa754abb386c34a8ef4b9b04d6c90a82..249ee93736863aa5d1c0cd917f90e1f15acdd581 100644 --- a/.next/server/app/admin/projects.html +++ b/.next/server/app/admin/projects.html @@ -36,4 +36,4 @@ 691 22 606 1 658 2 688 19 137 74 130 264 -12 328 -38 18 -85 19 -840 18 -652 0 -807 -2 -838 -14z"/> -Projects

Loading projects...

\ No newline at end of file +Projects

Loading projects...

\ No newline at end of file diff --git a/.next/server/app/admin/projects.rsc b/.next/server/app/admin/projects.rsc index 82a8e513679770cb5ac0957bba01f1b67c37a77a..65fffcd54ae842baa6f932bcae7aac052d3e43ea 100644 --- a/.next/server/app/admin/projects.rsc +++ b/.next/server/app/admin/projects.rsc @@ -14,7 +14,7 @@ f:I[59665,[],"ViewportBoundary"] :HL["/_next/static/media/c3f6eb667c0186c5-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/media/e4af272ccee01ff0-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/css/52c3faddab7e8cad.css","style"] -0:{"P":null,"b":"GN54BbL4KORqecYNj1l26","p":"","c":["","admin","projects"],"i":false,"f":[[["",{"children":["admin",{"children":["projects",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["admin",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["projects",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"view":"projects"}],["$","$L8",null,{"children":"$L9"}],null,["$","$La",null,{"children":["$Lb","$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","E7IBvfqK9kcV2BtaLIuCh",{"children":[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$11","$undefined"],"s":false,"S":true} +0:{"P":null,"b":"9vuBdSevB6CUChUh5Igaf","p":"","c":["","admin","projects"],"i":false,"f":[[["",{"children":["admin",{"children":["projects",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["admin",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["projects",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"view":"projects"}],["$","$L8",null,{"children":"$L9"}],null,["$","$La",null,{"children":["$Lb","$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","PLVc4dhshUUd3sp1a9-0d",{"children":[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$11","$undefined"],"s":false,"S":true} 12:"$Sreact.suspense" 13:I[74911,[],"AsyncMetadata"] 9:["$","$12",null,{"fallback":null,"children":["$","$L13",null,{"promise":"$@14"}]}] diff --git a/.next/server/app/admin/settings.html b/.next/server/app/admin/settings.html index 290f95ecf53f3ff3efe9b59a08919d0a11ba6617..a166bc3b51c3d5872142c84f200151d28b5eb165 100644 --- a/.next/server/app/admin/settings.html +++ b/.next/server/app/admin/settings.html @@ -36,4 +36,4 @@ 691 22 606 1 658 2 688 19 137 74 130 264 -12 328 -38 18 -85 19 -840 18 -652 0 -807 -2 -838 -14z"/> -Settings

Loading...

\ No newline at end of file +Settings

Loading...

\ No newline at end of file diff --git a/.next/server/app/admin/settings.rsc b/.next/server/app/admin/settings.rsc index 15fb10c9d213df440b66b9b695bbba1c62a75389..b39fd5d9bb9df08eaece32b340c1ed72ae483745 100644 --- a/.next/server/app/admin/settings.rsc +++ b/.next/server/app/admin/settings.rsc @@ -14,7 +14,7 @@ f:I[59665,[],"ViewportBoundary"] :HL["/_next/static/media/c3f6eb667c0186c5-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/media/e4af272ccee01ff0-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/css/52c3faddab7e8cad.css","style"] -0:{"P":null,"b":"GN54BbL4KORqecYNj1l26","p":"","c":["","admin","settings"],"i":false,"f":[[["",{"children":["admin",{"children":["settings",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["admin",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["settings",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"view":"settings"}],["$","$L8",null,{"children":"$L9"}],null,["$","$La",null,{"children":["$Lb","$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","nVCEMbVA_sGV-2W3QfB6H",{"children":[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$11","$undefined"],"s":false,"S":true} +0:{"P":null,"b":"9vuBdSevB6CUChUh5Igaf","p":"","c":["","admin","settings"],"i":false,"f":[[["",{"children":["admin",{"children":["settings",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["admin",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["settings",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"view":"settings"}],["$","$L8",null,{"children":"$L9"}],null,["$","$La",null,{"children":["$Lb","$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","FNL1tOYo0x0KviQbFP72e",{"children":[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$11","$undefined"],"s":false,"S":true} 12:"$Sreact.suspense" 13:I[74911,[],"AsyncMetadata"] 9:["$","$12",null,{"fallback":null,"children":["$","$L13",null,{"promise":"$@14"}]}] diff --git a/.next/server/app/admin/settings/application.html b/.next/server/app/admin/settings/application.html index 030d5355ac07fffdf02245f93b31fb04a6073c35..15e23e4718cebed5a5b39a148666a224449cf829 100644 --- a/.next/server/app/admin/settings/application.html +++ b/.next/server/app/admin/settings/application.html @@ -36,4 +36,4 @@ 691 22 606 1 658 2 688 19 137 74 130 264 -12 328 -38 18 -85 19 -840 18 -652 0 -807 -2 -838 -14z"/> -Settings

Loading...

\ No newline at end of file +Settings

Loading...

\ No newline at end of file diff --git a/.next/server/app/admin/settings/application.rsc b/.next/server/app/admin/settings/application.rsc index f089fe35fdcfc0a99478f256a01baf2d16f34670..9cdd9d9c7cc651b4447c9b4ffc301cf0c7287ed6 100644 --- a/.next/server/app/admin/settings/application.rsc +++ b/.next/server/app/admin/settings/application.rsc @@ -14,7 +14,7 @@ f:I[59665,[],"ViewportBoundary"] :HL["/_next/static/media/c3f6eb667c0186c5-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/media/e4af272ccee01ff0-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/css/52c3faddab7e8cad.css","style"] -0:{"P":null,"b":"GN54BbL4KORqecYNj1l26","p":"","c":["","admin","settings","application"],"i":false,"f":[[["",{"children":["admin",{"children":["settings",{"children":["application",{"children":["__PAGE__",{}]}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["admin",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["settings",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["application",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"view":"settings","settingsTab":"application"}],["$","$L8",null,{"children":"$L9"}],null,["$","$La",null,{"children":["$Lb","$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","7hEA6s1tF0eeCz4B1rowx",{"children":[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$11","$undefined"],"s":false,"S":true} +0:{"P":null,"b":"9vuBdSevB6CUChUh5Igaf","p":"","c":["","admin","settings","application"],"i":false,"f":[[["",{"children":["admin",{"children":["settings",{"children":["application",{"children":["__PAGE__",{}]}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["admin",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["settings",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["application",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"view":"settings","settingsTab":"application"}],["$","$L8",null,{"children":"$L9"}],null,["$","$La",null,{"children":["$Lb","$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","UnenDKfB6CZcL-S5xCx0P",{"children":[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$11","$undefined"],"s":false,"S":true} 12:"$Sreact.suspense" 13:I[74911,[],"AsyncMetadata"] 9:["$","$12",null,{"fallback":null,"children":["$","$L13",null,{"promise":"$@14"}]}] diff --git a/.next/server/app/admin/settings/model.html b/.next/server/app/admin/settings/model.html index 338b107c32693789d1225135ae4a41281a8b2ecf..ac2331b89cf55dea1ad47f38ea8f084a64f3ba20 100644 --- a/.next/server/app/admin/settings/model.html +++ b/.next/server/app/admin/settings/model.html @@ -36,4 +36,4 @@ 691 22 606 1 658 2 688 19 137 74 130 264 -12 328 -38 18 -85 19 -840 18 -652 0 -807 -2 -838 -14z"/> -Settings

Loading...

\ No newline at end of file +Settings

Loading...

\ No newline at end of file diff --git a/.next/server/app/admin/settings/model.rsc b/.next/server/app/admin/settings/model.rsc index 4f749046bda61b83bdfd9f1f5e13d9897f6ac0cb..0f90cc01b00a2c6c6cbc38cd2b35428ea2eb33ad 100644 --- a/.next/server/app/admin/settings/model.rsc +++ b/.next/server/app/admin/settings/model.rsc @@ -14,7 +14,7 @@ f:I[59665,[],"ViewportBoundary"] :HL["/_next/static/media/c3f6eb667c0186c5-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/media/e4af272ccee01ff0-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/css/52c3faddab7e8cad.css","style"] -0:{"P":null,"b":"GN54BbL4KORqecYNj1l26","p":"","c":["","admin","settings","model"],"i":false,"f":[[["",{"children":["admin",{"children":["settings",{"children":["model",{"children":["__PAGE__",{}]}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["admin",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["settings",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["model",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"view":"settings","settingsTab":"model"}],["$","$L8",null,{"children":"$L9"}],null,["$","$La",null,{"children":["$Lb","$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","VEC8taydamtz0-uYh4xUn",{"children":[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$11","$undefined"],"s":false,"S":true} +0:{"P":null,"b":"9vuBdSevB6CUChUh5Igaf","p":"","c":["","admin","settings","model"],"i":false,"f":[[["",{"children":["admin",{"children":["settings",{"children":["model",{"children":["__PAGE__",{}]}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["admin",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["settings",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["model",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"view":"settings","settingsTab":"model"}],["$","$L8",null,{"children":"$L9"}],null,["$","$La",null,{"children":["$Lb","$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","f8OW2ow1DbAJcJeTDlui1",{"children":[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$11","$undefined"],"s":false,"S":true} 12:"$Sreact.suspense" 13:I[74911,[],"AsyncMetadata"] 9:["$","$12",null,{"fallback":null,"children":["$","$L13",null,{"promise":"$@14"}]}] diff --git a/.next/server/app/admin/sites.html b/.next/server/app/admin/sites.html index 55480da1714a6dd718d901545df9a148113d9f84..b4083cd85024d1fc93cecb597c9a1d6a7b4869b8 100644 --- a/.next/server/app/admin/sites.html +++ b/.next/server/app/admin/sites.html @@ -36,4 +36,4 @@ 691 22 606 1 658 2 688 19 137 74 130 264 -12 328 -38 18 -85 19 -840 18 -652 0 -807 -2 -838 -14z"/> -Sites

Sites feature is only available in Server Mode

\ No newline at end of file +Sites

Sites feature is only available in Server Mode

\ No newline at end of file diff --git a/.next/server/app/admin/sites.rsc b/.next/server/app/admin/sites.rsc index 28ab097f704faa7a055f4ce9cda2e4ac6bc5ba7b..32c6a7b96b6f62cbd32cf7332859a14bb923a41f 100644 --- a/.next/server/app/admin/sites.rsc +++ b/.next/server/app/admin/sites.rsc @@ -14,7 +14,7 @@ f:I[59665,[],"ViewportBoundary"] :HL["/_next/static/media/c3f6eb667c0186c5-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/media/e4af272ccee01ff0-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/css/52c3faddab7e8cad.css","style"] -0:{"P":null,"b":"GN54BbL4KORqecYNj1l26","p":"","c":["","admin","sites"],"i":false,"f":[[["",{"children":["admin",{"children":["sites",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["admin",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["sites",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"view":"sites"}],["$","$L8",null,{"children":"$L9"}],null,["$","$La",null,{"children":["$Lb","$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","v6ZibvY876vKmcnBABY7l",{"children":[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$11","$undefined"],"s":false,"S":true} +0:{"P":null,"b":"9vuBdSevB6CUChUh5Igaf","p":"","c":["","admin","sites"],"i":false,"f":[[["",{"children":["admin",{"children":["sites",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["admin",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["sites",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"view":"sites"}],["$","$L8",null,{"children":"$L9"}],null,["$","$La",null,{"children":["$Lb","$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","qbjB7_9LxiFMge-8jLLIb",{"children":[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$11","$undefined"],"s":false,"S":true} 12:"$Sreact.suspense" 13:I[74911,[],"AsyncMetadata"] 9:["$","$12",null,{"fallback":null,"children":["$","$L13",null,{"promise":"$@14"}]}] diff --git a/.next/server/app/admin/skills.html b/.next/server/app/admin/skills.html index e84c4d188b96c4136ce07fb2be8a6cb2fc373fdc..72ce08c42342861cf7f7bd1f12c02bf87d36999e 100644 --- a/.next/server/app/admin/skills.html +++ b/.next/server/app/admin/skills.html @@ -36,4 +36,4 @@ 691 22 606 1 658 2 688 19 137 74 130 264 -12 328 -38 18 -85 19 -840 18 -652 0 -807 -2 -838 -14z"/> -Skills

Loading skills...

\ No newline at end of file +Skills

Loading skills...

\ No newline at end of file diff --git a/.next/server/app/admin/skills.rsc b/.next/server/app/admin/skills.rsc index e36c5d1fbaf7751948003d9982b9ef716b1c1c63..ff62d9b7631bd4d4072125bac9101a105dfad211 100644 --- a/.next/server/app/admin/skills.rsc +++ b/.next/server/app/admin/skills.rsc @@ -14,7 +14,7 @@ f:I[59665,[],"ViewportBoundary"] :HL["/_next/static/media/c3f6eb667c0186c5-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/media/e4af272ccee01ff0-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/css/52c3faddab7e8cad.css","style"] -0:{"P":null,"b":"GN54BbL4KORqecYNj1l26","p":"","c":["","admin","skills"],"i":false,"f":[[["",{"children":["admin",{"children":["skills",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["admin",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["skills",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"view":"skills"}],["$","$L8",null,{"children":"$L9"}],null,["$","$La",null,{"children":["$Lb","$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","vsa0PO3OiZhLZGquxNfdI",{"children":[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$11","$undefined"],"s":false,"S":true} +0:{"P":null,"b":"9vuBdSevB6CUChUh5Igaf","p":"","c":["","admin","skills"],"i":false,"f":[[["",{"children":["admin",{"children":["skills",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["admin",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["skills",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"view":"skills"}],["$","$L8",null,{"children":"$L9"}],null,["$","$La",null,{"children":["$Lb","$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","Mxxi463W6av0InHG6NFAs",{"children":[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$11","$undefined"],"s":false,"S":true} 12:"$Sreact.suspense" 13:I[74911,[],"AsyncMetadata"] 9:["$","$12",null,{"fallback":null,"children":["$","$L13",null,{"promise":"$@14"}]}] diff --git a/.next/server/app/admin/templates.html b/.next/server/app/admin/templates.html index a467c522a5d91f00ae766c3ae88afde68cb98297..2da212cc9de5c4ae9ef9f7e53955c5634d96ef7b 100644 --- a/.next/server/app/admin/templates.html +++ b/.next/server/app/admin/templates.html @@ -36,4 +36,4 @@ 691 22 606 1 658 2 688 19 137 74 130 264 -12 328 -38 18 -85 19 -840 18 -652 0 -807 -2 -838 -14z"/> -Templates

Loading templates...

\ No newline at end of file +Templates

Loading templates...

\ No newline at end of file diff --git a/.next/server/app/admin/templates.rsc b/.next/server/app/admin/templates.rsc index f0245396f133ce0e84ced367754de28e33869910..2f865fe0c492ac2393f7d3f73d142b31b8c814b0 100644 --- a/.next/server/app/admin/templates.rsc +++ b/.next/server/app/admin/templates.rsc @@ -14,7 +14,7 @@ f:I[59665,[],"ViewportBoundary"] :HL["/_next/static/media/c3f6eb667c0186c5-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/media/e4af272ccee01ff0-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/css/52c3faddab7e8cad.css","style"] -0:{"P":null,"b":"GN54BbL4KORqecYNj1l26","p":"","c":["","admin","templates"],"i":false,"f":[[["",{"children":["admin",{"children":["templates",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["admin",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["templates",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"view":"templates"}],["$","$L8",null,{"children":"$L9"}],null,["$","$La",null,{"children":["$Lb","$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","RsvlSFjBOqS6S-HOyGbYV",{"children":[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$11","$undefined"],"s":false,"S":true} +0:{"P":null,"b":"9vuBdSevB6CUChUh5Igaf","p":"","c":["","admin","templates"],"i":false,"f":[[["",{"children":["admin",{"children":["templates",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["admin",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["templates",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"view":"templates"}],["$","$L8",null,{"children":"$L9"}],null,["$","$La",null,{"children":["$Lb","$Lc",["$","$Ld",null,{"promise":"$@e"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","P4Z2XO8Xfz6970HfRKLXQ",{"children":[["$","$Lf",null,{"children":"$L10"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$11","$undefined"],"s":false,"S":true} 12:"$Sreact.suspense" 13:I[74911,[],"AsyncMetadata"] 9:["$","$12",null,{"fallback":null,"children":["$","$L13",null,{"promise":"$@14"}]}] diff --git a/.next/server/app/index.html b/.next/server/app/index.html index 4711fd1389c930fddabd9512d6f73a07e173ad81..3b8f8d1802be2c340a0333ae796dd226f178b1d7 100644 --- a/.next/server/app/index.html +++ b/.next/server/app/index.html @@ -1 +1 @@ -Open Source Web Studio | Agentic AI Development 🎨

Loading...

\ No newline at end of file +Open Source Web Studio | Agentic AI Development 🎨

Loading...

\ No newline at end of file diff --git a/.next/server/app/index.rsc b/.next/server/app/index.rsc index 7c4af28334f474fae89eeef5e91a272cecd80155..104b472986306f047e3ffa0e1430be99d9826101 100644 --- a/.next/server/app/index.rsc +++ b/.next/server/app/index.rsc @@ -15,7 +15,7 @@ d:I[59665,[],"OutletBoundary"] :HL["/_next/static/media/c3f6eb667c0186c5-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/media/e4af272ccee01ff0-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/css/52c3faddab7e8cad.css","style"] -0:{"P":null,"b":"GN54BbL4KORqecYNj1l26","p":"","c":["",""],"i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","searchParams":{},"params":{},"promises":["$@9","$@a"]}],["$","$Lb",null,{"children":"$Lc"}],null,["$","$Ld",null,{"children":["$Le","$Lf",["$","$L10",null,{"promise":"$@11"}]]}]]}],{},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","FHcgspJzLKXX1pLFRlY4W",{"children":[["$","$L12",null,{"children":"$L13"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$14","$undefined"],"s":false,"S":true} +0:{"P":null,"b":"9vuBdSevB6CUChUh5Igaf","p":"","c":["",""],"i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","searchParams":{},"params":{},"promises":["$@9","$@a"]}],["$","$Lb",null,{"children":"$Lc"}],null,["$","$Ld",null,{"children":["$Le","$Lf",["$","$L10",null,{"promise":"$@11"}]]}]]}],{},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","ULsqL2bmQXB1UTEFO-iTl",{"children":[["$","$L12",null,{"children":"$L13"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$14","$undefined"],"s":false,"S":true} 15:"$Sreact.suspense" 16:I[74911,[],"AsyncMetadata"] 9:{} diff --git a/.next/server/app/test-generation.html b/.next/server/app/test-generation.html index 9227a3c0095d4fe246f038f14a43951734d36f7f..83f7c6cd20256de484cb84d7fb744101cf3c7949 100644 --- a/.next/server/app/test-generation.html +++ b/.next/server/app/test-generation.html @@ -36,4 +36,4 @@ 691 22 606 1 658 2 688 19 137 74 130 264 -12 328 -38 18 -85 19 -840 18 -652 0 -807 -2 -838 -14z"/> -

Model Tester

How to Interpret Test Results

These tests validate basic code generation capabilities across different task types. A passing test means files were created/modified successfully. A failing test indicates the model couldn't complete the task or didn't produce expected outputs.

Tip: Select your preferred provider and model below to test specific configurations. The generation output will show you what the AI is thinking during execution.
💡

Cost Warning

Running these tests can be very expensive and likely isn't necessary. It's cheaper and easier to just use good models and research community feedback about agentic capabilities.

This tester is largely for evaluating how models perform with OSW Studio's implementation and using those results to improve the agentic system.

Total Tests
0
Passed
0
Failed
0
Success Rate
0.0%
Add hamburger menu to navbar(ui)
Add a mobile hamburger menu to the navbar. The hamburger should appear on screens smaller than 768px...
Create modal dialog(ui)
Create a modal dialog that can be opened with a button click. The modal should have a close button a...
Add contact form with validation(ui)
Add a contact form with fields for name, email, and message. Include client-side validation for requ...
Create dropdown menu(ui)
Create a dropdown menu for the navigation. When hovering over "Services" link, show a dropdown with ...
Create image carousel(ui)
Create an image carousel/slider with next and previous buttons. It should display one image at a tim...
Change background to gradient(style)
Change the body background to a linear gradient from #ff8c42 to #e65100...
Add dark mode toggle(style)
Add a dark mode toggle button that switches the entire page between light and dark themes. Store the...
Create responsive grid layout(style)
Create a responsive grid layout with 3 columns on desktop, 2 on tablet, and 1 on mobile. Add 6 card ...
Add API fetch functionality(javascript)
Add a button that fetches data from https://jsonplaceholder.typicode.com/users and displays the user...
Create countdown timer(javascript)
Create a countdown timer that counts down from 60 seconds and displays the remaining time. Include s...
Build a todo list application(complex)
Build a todo list application with the ability to add tasks, mark them as complete, delete tasks, an...
\ No newline at end of file +

Model Tester

How to Interpret Test Results

These tests validate basic code generation capabilities across different task types. A passing test means files were created/modified successfully. A failing test indicates the model couldn't complete the task or didn't produce expected outputs.

Tip: Select your preferred provider and model below to test specific configurations. The generation output will show you what the AI is thinking during execution.
💡

Cost Warning

Running these tests can be very expensive and likely isn't necessary. It's cheaper and easier to just use good models and research community feedback about agentic capabilities.

This tester is largely for evaluating how models perform with OSW Studio's implementation and using those results to improve the agentic system.

Total Tests
0
Passed
0
Failed
0
Success Rate
0.0%
Add hamburger menu to navbar(ui)
Add a mobile hamburger menu to the navbar. The hamburger should appear on screens smaller than 768px...
Create modal dialog(ui)
Create a modal dialog that can be opened with a button click. The modal should have a close button a...
Add contact form with validation(ui)
Add a contact form with fields for name, email, and message. Include client-side validation for requ...
Create dropdown menu(ui)
Create a dropdown menu for the navigation. When hovering over "Services" link, show a dropdown with ...
Create image carousel(ui)
Create an image carousel/slider with next and previous buttons. It should display one image at a tim...
Change background to gradient(style)
Change the body background to a linear gradient from #ff8c42 to #e65100...
Add dark mode toggle(style)
Add a dark mode toggle button that switches the entire page between light and dark themes. Store the...
Create responsive grid layout(style)
Create a responsive grid layout with 3 columns on desktop, 2 on tablet, and 1 on mobile. Add 6 card ...
Add API fetch functionality(javascript)
Add a button that fetches data from https://jsonplaceholder.typicode.com/users and displays the user...
Create countdown timer(javascript)
Create a countdown timer that counts down from 60 seconds and displays the remaining time. Include s...
Build a todo list application(complex)
Build a todo list application with the ability to add tasks, mark them as complete, delete tasks, an...
\ No newline at end of file diff --git a/.next/server/app/test-generation.rsc b/.next/server/app/test-generation.rsc index 038f6f05ace8f838f4aacafc8827758c29e1588c..6c2b8ff3b62fc119aee3280fb5bc67cc19adbc61 100644 --- a/.next/server/app/test-generation.rsc +++ b/.next/server/app/test-generation.rsc @@ -15,7 +15,7 @@ d:I[59665,[],"OutletBoundary"] :HL["/_next/static/media/c3f6eb667c0186c5-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/media/e4af272ccee01ff0-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/css/52c3faddab7e8cad.css","style"] -0:{"P":null,"b":"GN54BbL4KORqecYNj1l26","p":"","c":["","test-generation"],"i":false,"f":[[["",{"children":["test-generation",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["test-generation",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","searchParams":{},"params":{},"promises":["$@9","$@a"]}],["$","$Lb",null,{"children":"$Lc"}],null,["$","$Ld",null,{"children":["$Le","$Lf",["$","$L10",null,{"promise":"$@11"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","FmDRoATllhhJPK1sy2HlJ",{"children":[["$","$L12",null,{"children":"$L13"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$14","$undefined"],"s":false,"S":true} +0:{"P":null,"b":"9vuBdSevB6CUChUh5Igaf","p":"","c":["","test-generation"],"i":false,"f":[[["",{"children":["test-generation",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/52c3faddab7e8cad.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_f367f3 __variable_438d47 antialiased bg-background h-[100dvh] overflow-hidden","suppressHydrationWarning":true,"children":["$","$L2",null,{"children":[["$","$L3",null,{"richColors":true,"position":"bottom-center"}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]}]]}],{"children":["test-generation",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","searchParams":{},"params":{},"promises":["$@9","$@a"]}],["$","$Lb",null,{"children":"$Lc"}],null,["$","$Ld",null,{"children":["$Le","$Lf",["$","$L10",null,{"promise":"$@11"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","SExV4FBq_rUT0IqVxaqkh",{"children":[["$","$L12",null,{"children":"$L13"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],null]}],false]],"m":"$undefined","G":["$14","$undefined"],"s":false,"S":true} 15:"$Sreact.suspense" 16:I[74911,[],"AsyncMetadata"] 9:{} diff --git a/.next/server/middleware-manifest.json b/.next/server/middleware-manifest.json index 33ba2169201e6bd1df9cd0e88bab076ae1cc5855..be340e6b473883e24bbe05f05229fd3cbb734cb1 100644 --- a/.next/server/middleware-manifest.json +++ b/.next/server/middleware-manifest.json @@ -17,11 +17,11 @@ "wasm": [], "assets": [], "env": { - "__NEXT_BUILD_ID": "GN54BbL4KORqecYNj1l26", + "__NEXT_BUILD_ID": "9vuBdSevB6CUChUh5Igaf", "NEXT_SERVER_ACTIONS_ENCRYPTION_KEY": "l0tpmYiNHNzUMdv6nSguBVBaNWEc/bLKDYmnpOgGnGk=", - "__NEXT_PREVIEW_MODE_ID": "3f6e7b68ca0f25523264b5e13ccf0d1b", - "__NEXT_PREVIEW_MODE_ENCRYPTION_KEY": "780f25b864dc75e98079e1c0718dbfc6d54b653657cbe5f47412a54f508f00b9", - "__NEXT_PREVIEW_MODE_SIGNING_KEY": "66037fb25b96b1af87773cedf53654006f3a412cfca9a385817e5b6fc971e218" + "__NEXT_PREVIEW_MODE_ID": "34a23cbb30e9dedfdf948344c6b49fd3", + "__NEXT_PREVIEW_MODE_ENCRYPTION_KEY": "a76a5d1205f9c38e0a69e2c1aa3667910a81753ae956d745e574856885a4715e", + "__NEXT_PREVIEW_MODE_SIGNING_KEY": "025c2a1f4659e3ab0244bd7c854a02f0b7cd74954bb516ce1b319c111eec1b34" } } }, diff --git a/.next/server/pages/404.html b/.next/server/pages/404.html index 9533086a566a71907627239ed068375a9b638b75..bf9f309d0ee3e3b89e484dec17289975d9f2c626 100644 --- a/.next/server/pages/404.html +++ b/.next/server/pages/404.html @@ -1 +1 @@ -404: This page could not be found.Open Source Web Studio | Agentic AI Development 🎨

404

This page could not be found.

\ No newline at end of file +404: This page could not be found.Open Source Web Studio | Agentic AI Development 🎨

404

This page could not be found.

\ No newline at end of file diff --git a/.next/server/pages/500.html b/.next/server/pages/500.html index eed5467f817f8e91f9e02961974eecdc839c9231..c13aab9c589313287e11947019151871483696b2 100644 --- a/.next/server/pages/500.html +++ b/.next/server/pages/500.html @@ -1 +1 @@ -500: Internal Server Error

500

Internal Server Error.

\ No newline at end of file +500: Internal Server Error

500

Internal Server Error.

\ No newline at end of file diff --git a/.next/static/GN54BbL4KORqecYNj1l26/_buildManifest.js b/.next/static/9vuBdSevB6CUChUh5Igaf/_buildManifest.js similarity index 100% rename from .next/static/GN54BbL4KORqecYNj1l26/_buildManifest.js rename to .next/static/9vuBdSevB6CUChUh5Igaf/_buildManifest.js diff --git a/.next/static/GN54BbL4KORqecYNj1l26/_ssgManifest.js b/.next/static/9vuBdSevB6CUChUh5Igaf/_ssgManifest.js similarity index 100% rename from .next/static/GN54BbL4KORqecYNj1l26/_ssgManifest.js rename to .next/static/9vuBdSevB6CUChUh5Igaf/_ssgManifest.js diff --git a/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/aukioloajat.html b/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/aukioloajat.html deleted file mode 100644 index 9e1bfe4f9d129ee65783f08882fb5c4a59547fca..0000000000000000000000000000000000000000 --- a/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/aukioloajat.html +++ /dev/null @@ -1,424 +0,0 @@ - - - - - - Aukioloajat - Leppävaaran Uimahalli - - - - - - -
- -
-
-
-
-

Aukioloajat

-

Ajankohtaiset aukioloaikamme ja poikkeukset

-
-
-
-
- - -
-
-
-
-

Normaalit aukioloajat

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PäiväAukioloaika
Maanantai06:00 - 22:00
Tiistai06:00 - 22:00
Keskiviikko06:00 - 22:00
Torstai06:00 - 22:00
Perjantai06:00 - 22:00
Lauantai08:00 - 20:00
Sunnuntai08:00 - 20:00
-
-
-
-
-
- - -
-
-
-
-

Erityisaukioloajat

-
-
-

Juhannus

-

Suljettu 21.6. - 23.6.2024

-
-
-

Joulu

-

Suljettu 24.12. - 26.12.2024

-
-
-

Uusivuosi

-

Suljettu 1.1.2025

-
-
-
-
-
-
- - -
-
-
-
-

Lisätietoja

-
-

HUOM! Viimeinen asiakas otetaan sisään 30 minuuttia ennen sulkemisaikaa.

-
-
-

Ryhmävaraukset: Kysy mahdollisuutta yksityisvarauksiin numerosta 09-123 4567.

-
-
-
-
-
-
- - - - - - - - - \ No newline at end of file diff --git a/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/hinnat.html b/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/hinnat.html deleted file mode 100644 index dfea2f1a20963fb2c2b980d51124c36d514de859..0000000000000000000000000000000000000000 --- a/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/hinnat.html +++ /dev/null @@ -1,470 +0,0 @@ - - - - - - Hinnat - Leppävaaran Uimahalli - - - - - - -
- -
-
-
-
-

Hinnat

-

Kattavat ja kohtuulliset hinnat kaikille asiakasryhmille

-
-
-
-
- - -
-
-
-
-

Kertakäyntihinnat

-
-
-
- -
-

Aikuinen

-
7,00€
-

18-64 vuotiaat

-
-
-
- -
-

Lapsi

-
4,00€
-

7-17 vuotiaat

-
-
-
- -
-

Opiskelija

-
5,00€
-

Opiskelijakortilla

-
-
-
- -
-

Eläkeläinen

-
5,00€
-

65+ vuotiaat

-
-
-
-
-
-
- - -
-
-
-
-

Kausikortit

-
-
-

Kuukausikortti

-
65,00€
-
    -
  • Voimassa 30 päivää
  • -
  • Rajoittamaton käyttö
  • -
  • Sisältää kuntosalin
  • -
-
-
-

Kausikortti

-
220,00€
-
    -
  • Voimassa 4 kuukautta
  • -
  • Rajoittamaton käyttö
  • -
  • Sisältää kuntosalin
  • -
-
-
-

Vuosikortti

-
580,00€
-
    -
  • Voimassa 12 kuukautta
  • -
  • Rajoittamaton käyttö
  • -
  • Sisältää kuntosalin ja saunan
  • -
-
-
-
-
-
-
- - -
-
-
-
-

Ryhmähinnat

-
-
-

Koululuokat

-

3,00€ / oppilas (opettajat maksutta)

-
-
-

Yritykset

-

6,00€ / henkilö (min. 10 henkilöä)

-
-
- Syntymäpäiväpaketti -

150,00€ (max 15 lasta, 2h)

-
-
-
-
-
-
- - -
-
-
-
-

Maksutavat

-
-
- -

Maksukortit (Visa, MasterCard)

-
-
- -

Käteinen

-
-
- -

MobilePay

-
-
- -

Eduskortti, Smartum, E-passi

-
-
-
-
-
-
-
- - - - - - - - - \ No newline at end of file diff --git a/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/index.html b/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/index.html deleted file mode 100644 index 58c4b6161c494945846fcabfdf59b79e961f6caf..0000000000000000000000000000000000000000 --- a/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/index.html +++ /dev/null @@ -1,394 +0,0 @@ - - - - - - Leppävaaran Uimahalli - - - - - - -
- -
-
-
-
-

Leppävaaran Uimahalli

-

Moderni ja viihtyisä uimahalli Espoon Leppävaarassa

-
-
-
-
- - -
-
-
-
-
-

Aukioloajat

-

Ma-Pe: 6:00-22:00
La-Su: 8:00-20:00

-
-
-
-
-

Hinnat

-

Aikuiset: 7€
Lapset: 4€
Opiskelijat: 5€

-
-
-
-
-

Palvelut

-

25m allas
Opetusallas
Kuntosalipalvelut

-
-
-
-
-

Yhteystiedot

-

Veräjävuorenkatu 5
02670 Espoo
Puh: 09-123 4567

-
-
-
-
-
- - -
-
-

Allastiedot

-
-
-
-

Pääallas

-

25 metrin uimallas, 8 rataa

-
    -
  • Syvyys: 1.2-2.0m
  • -
  • Lämpötila: 27°C
  • -
  • Kapasiteetti: 100 henkilöä
  • -
-
-
-
-
-

Opetusallas

-

12.5 metrin opetusallas

-
    -
  • Syvyys: 0.8-1.2m
  • -
  • Lämpötila: 30°C
  • -
  • Kapasiteetti: 40 henkilöä
  • -
-
-
-
-
-
-
- - - - - - - - - \ No newline at end of file diff --git a/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/palvelut.html b/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/palvelut.html deleted file mode 100644 index 83d43b42fad64a9bbf7f3d46b660103174d80766..0000000000000000000000000000000000000000 --- a/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/palvelut.html +++ /dev/null @@ -1,476 +0,0 @@ - - - - - - Palvelut - Leppävaaran Uimahalli - - - - - - -
- -
-
-
-
-

Palvelut

-

Kattavat palvelut kaikenikäisille ja kuntoisille uimareille

-
-
-
-
- - -
-
-
-
-

Allaspalvelut

-
-
-
- Pääallas -
-
-

Pääallas

-

25-metrinen olympiakokoinen uimallas 8 radalla. Sopii kuntoiluun ja harjoitteluun.

-
    -
  • Pituus: 25m
  • -
  • Leveys: 8 rataa
  • -
  • Syvyys: 1.2-2.0m
  • -
  • Lämpötila: 27°C
  • -
-
-
-
-
- Opetusallas -
-
-

Opetusallas

-

Matala opetusallas sopii erinomaisesti lapsille ja aloittelijoille.

-
    -
  • Pituus: 12.5m
  • -
  • Syvyys: 0.8-1.2m
  • -
  • Lämpötila: 30°C
  • -
  • Kapasiteetti: 40 hlö
  • -
-
-
-
-
-
-
-
- - -
-
-
-
-

Muut palvelut

-
-
-
- -
-

Kuntosali

-

Moderni kuntosali laadukkailla laitteilla ja vapaineilla. Aukioloajat samat kuin allas.

-
-
-
- -
-

Palju ja sauna

-

Relaxoituvat saunatilat ja palju uinnin jälkeen. Sekä miesten että naisten puolella.

-
-
-
- -
-

Uimakoulu

-

Laadukas uimakoulu kaikenikäisille. Ryhmät aloittelijoista edistyneisiin.

-
-
-
- -
-

Aikuisten uintiryhmät

-

Tekniikkaryhmiä ja kuntouintiryhmiä ohjatusti.

-
-
-
-
-
-
- - -
-
-
-
-

Erikoisohjelmat

-
-
-

Perheuinti

-

Lauantaisin klo 9-11 perheille ja lapsille. Mukava yhdessäolo vedessä.

-
Lauantai 9:00-11:00
-
-
-

Senioriuinti

-

Rauhallinen uintihetki senioreille tiistaisin ja torstaisin.

-
Ti-To 10:00-12:00
-
-
-

Vammaisuinti

-

Soveltuva uinti liikuntarajoitteisille. Nostin saatavilla.

-
Ma-Ke 14:00-16:00
-
-
-
-
-
-
- - -
-
-
-
-

Tilat ja varusteet

-
-
- -

Max 200 lukollista kaappia

-
-
- -

Laajat pukutilat ja suihkut

-
-
- -

Kahvila ja välipalautomaatti

-
-
- -

Esteettömät tilat

-
-
- -

Ilmainen pysäköintialue

-
-
-
-
-
-
-
- - - - - - - - - \ No newline at end of file diff --git a/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/robots.txt b/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/robots.txt deleted file mode 100644 index 0524e007206b34178c9995307246eccaeec3cd09..0000000000000000000000000000000000000000 --- a/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/robots.txt +++ /dev/null @@ -1,9 +0,0 @@ -User-agent: * -Allow: / - -Sitemap: http://localhost:3000/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/sitemap.xml - -# Disallow common non-content paths -Disallow: /api/ -Disallow: /_next/ -Disallow: /admin/ diff --git a/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/scripts/main.js b/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/scripts/main.js deleted file mode 100644 index f79a9edc14ef3995716456659e420990b8e080a8..0000000000000000000000000000000000000000 --- a/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/scripts/main.js +++ /dev/null @@ -1,142 +0,0 @@ -// Leppävaaran Uimahalli - Enhanced JavaScript - -document.addEventListener('DOMContentLoaded', () => { - // Initialize Foundation framework - $(document).foundation(); - - // Smooth scroll for navigation links - const navLinks = document.querySelectorAll('.top-bar a[href^="#"]'); - - navLinks.forEach(link => { - link.addEventListener('click', (e) => { - e.preventDefault(); - const targetId = link.getAttribute('href'); - const targetElement = document.querySelector(targetId); - - if (targetElement) { - const headerOffset = 100; - const elementPosition = targetElement.getBoundingClientRect().top; - const offsetPosition = elementPosition + window.pageYOffset - headerOffset; - - window.scrollTo({ - top: offsetPosition, - behavior: 'smooth' - }); - } - }); - }); - - // Enhanced header scroll effect - const header = document.querySelector('.site-header'); - let lastScroll = 0; - let ticking = false; - - function updateHeader() { - const currentScroll = window.pageYOffset; - - if (currentScroll > 50) { - header.style.boxShadow = '0 4px 20px rgba(0, 102, 204, 0.15)'; - header.style.background = 'rgba(255, 255, 255, 0.98)'; - } else { - header.style.boxShadow = '0 2px 12px rgba(0, 102, 204, 0.08)'; - header.style.background = 'rgba(255, 255, 255, 0.95)'; - } - - lastScroll = currentScroll; - ticking = false; - } - - window.addEventListener('scroll', () => { - if (!ticking) { - requestAnimationFrame(updateHeader); - ticking = true; - } - }); - - // Enhanced Intersection Observer for staggered animations - const observerOptions = { - threshold: 0.1, - rootMargin: '0px 0px -50px 0px' - }; - - const fadeInObserver = new IntersectionObserver((entries) => { - entries.forEach((entry, index) => { - if (entry.isIntersecting) { - setTimeout(() => { - entry.target.style.opacity = '1'; - entry.target.style.transform = 'translateY(0)'; - }, index * 100); // Stagger animation - } - }); - }, observerOptions); - - // Observe info cards and pool cards with staggered effect - document.querySelectorAll('.info-card, .pool-card').forEach(card => { - card.style.opacity = '0'; - card.style.transform = 'translateY(30px)'; - card.style.transition = 'opacity 0.6s cubic-bezier(0.4, 0, 0.2, 1), transform 0.6s cubic-bezier(0.4, 0, 0.2, 1)'; - fadeInObserver.observe(card); - }); - - // Add hover effect for cards - document.querySelectorAll('.info-card, .pool-card').forEach(card => { - card.addEventListener('mouseenter', () => { - card.style.transform = 'translateY(-8px) scale(1.02)'; - }); - - card.addEventListener('mouseleave', () => { - card.style.transform = 'translateY(0) scale(1)'; - }); - }); - - // Add active state to navigation based on scroll position - const sections = document.querySelectorAll('section[id]'); - const navMenuItems = document.querySelectorAll('.top-bar .menu a[href^="#"]'); - - function updateActiveNav() { - const scrollPosition = window.pageYOffset + 150; - - sections.forEach(section => { - const sectionTop = section.offsetTop; - const sectionHeight = section.offsetHeight; - const sectionId = section.getAttribute('id'); - - if (scrollPosition >= sectionTop && scrollPosition < sectionTop + sectionHeight) { - navMenuItems.forEach(item => { - item.classList.remove('active'); - if (item.getAttribute('href') === `#${sectionId}`) { - item.classList.add('active'); - } - }); - } - }); - } - - window.addEventListener('scroll', updateActiveNav); - updateActiveNav(); // Call once on load - - // Add CSS for active navigation state - const style = document.createElement('style'); - style.textContent = ` - .top-bar .menu a.active { - background: var(--water-light) !important; - color: var(--primary-blue) !important; - font-weight: 600; - } - `; - document.head.appendChild(style); - - // Add subtle parallax effect to hero section - const heroSection = document.querySelector('.hero-section'); - - window.addEventListener('scroll', () => { - const scrolled = window.pageYOffset; - const parallax = scrolled * 0.5; - - if (heroSection) { - heroSection.style.transform = `translateY(${parallax}px)`; - } - }); - - console.log('🏊‍♂️ Leppävaaran Uimahalli website loaded successfully!'); -}); \ No newline at end of file diff --git a/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/sitemap.xml b/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/sitemap.xml deleted file mode 100644 index b956ad1d598b5f10b6c44f1a95fef2571e73ab7c..0000000000000000000000000000000000000000 --- a/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/sitemap.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - http://localhost:3000/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/aukioloajat.html - 2025-11-21 - weekly - 0.8 - - - http://localhost:3000/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/hinnat.html - 2025-11-21 - weekly - 0.8 - - - http://localhost:3000/sites/039b8554-0a87-42f7-a969-570c3fa99cb5 - 2025-11-21 - weekly - 1.0 - - - http://localhost:3000/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/palvelut.html - 2025-11-21 - weekly - 0.8 - - - http://localhost:3000/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/yhteystiedot.html - 2025-11-21 - weekly - 0.8 - - \ No newline at end of file diff --git a/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/styles/style.css b/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/styles/style.css deleted file mode 100644 index 9ed63a19a6ac0fbb26a0e4dfdaa61c4023bc415e..0000000000000000000000000000000000000000 --- a/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/styles/style.css +++ /dev/null @@ -1,1029 +0,0 @@ -/* Leppävaaran Uimahalli - Improved cohesive design */ - -:root { - /* Water-inspired color palette */ - --primary-blue: #0066cc; - --light-blue: #4a90e2; - --accent-cyan: #00acc1; - --deep-blue: #003d7a; - --water-light: #e3f2fd; - --water-medium: #bbdefb; - --water-dark: #1e88e5; - - /* Neutral colors */ - --text-dark: #1a2332; - --text-light: #546e7a; - --bg-light: #f5f8fa; - --bg-white: #ffffff; - --border-light: #e1e8ed; - --shadow-light: rgba(0, 102, 204, 0.08); - --shadow-medium: rgba(0, 102, 204, 0.15); - - /* Typography scale */ - --font-xs: 0.875rem; - --font-sm: 1rem; - --font-base: 1.125rem; - --font-lg: 1.25rem; - --font-xl: 1.5rem; - --font-2xl: 2rem; - --font-3xl: 2.5rem; - --font-4xl: 3rem; - - /* Spacing scale */ - --space-xs: 0.5rem; - --space-sm: 1rem; - --space-md: 1.5rem; - --space-lg: 2rem; - --space-xl: 3rem; - --space-2xl: 4rem; - - /* Border radius */ - --radius-sm: 4px; - --radius-md: 8px; - --radius-lg: 12px; -} - -/* Base styles */ -* { - box-sizing: border-box; -} - -body { - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; - margin: 0; - padding: 0; - background: var(--bg-light); - color: var(--text-dark); - line-height: 1.6; - font-size: var(--font-base); -} - -/* Typography */ -h1, h2, h3, h4 { - font-weight: 700; - line-height: 1.2; - margin: 0 0 var(--space-md) 0; -} - -h1 { - font-size: var(--font-4xl); -} - -h2 { - font-size: var(--font-3xl); -} - -h3 { - font-size: var(--font-2xl); -} - -h4 { - font-size: var(--font-xl); -} - -p { - margin: 0 0 var(--space-md) 0; -} - -a { - color: var(--primary-blue); - text-decoration: none; - transition: color 0.2s ease; -} - -a:hover { - color: var(--deep-blue); -} - -/* Header Styles */ -.site-header { - background: var(--bg-white); - box-shadow: 0 2px 12px var(--shadow-light); - position: sticky; - top: 0; - z-index: 1000; - backdrop-filter: blur(10px); - background: rgba(255, 255, 255, 0.95); -} - -.top-bar { - background: transparent; - padding: 0; - height: 80px; - align-items: center; -} - -.top-bar .menu-text { - color: var(--primary-blue); - font-weight: 700; - font-size: var(--font-xl); - margin: 0; -} - -.top-bar .menu { - background: transparent; -} - -.top-bar .menu a { - color: var(--text-dark); - font-weight: 500; - padding: var(--space-sm) var(--space-md); - border-radius: var(--radius-md); - transition: all 0.2s ease; - font-size: var(--font-sm); -} - -.top-bar .menu a:hover { - background: var(--water-light); - color: var(--primary-blue); -} - -/* Hero Section */ -.hero-section { - background: linear-gradient(135deg, var(--primary-blue) 0%, var(--accent-cyan) 100%); - color: white; - padding: var(--space-2xl) 0; - text-align: center; - position: relative; - overflow: hidden; -} - -.hero-section::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: url('data:image/svg+xml,') repeat-x; - background-size: 200px 100px; - animation: wave 10s linear infinite; -} - -@keyframes wave { - 0% { background-position-x: 0; } - 100% { background-position-x: 200px; } -} - -.hero-section > .grid-container { - position: relative; - z-index: 1; -} - -.hero-section h1 { - font-size: var(--font-4xl); - font-weight: 800; - margin-bottom: var(--space-md); - text-shadow: none; - letter-spacing: -0.5px; -} - -.hero-section .lead { - font-size: var(--font-xl); - font-weight: 400; - opacity: 1; - max-width: 600px; - margin: 0 auto; -} - -/* Info Section */ -.info-section { - padding: var(--space-2xl) 0; - background: var(--bg-white); -} - -.info-card { - background: var(--bg-white); - border: 1px solid var(--border-light); - border-radius: var(--radius-lg); - padding: var(--space-xl); - text-align: center; - height: 100%; - box-shadow: 0 4px 6px var(--shadow-light); - transition: all 0.3s ease; - position: relative; - overflow: hidden; -} - -.info-card::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 4px; - background: linear-gradient(90deg, var(--primary-blue), var(--accent-cyan)); -} - -.info-card:hover { - transform: translateY(-8px); - box-shadow: 0 12px 24px var(--shadow-medium); -} - -.info-card h3 { - color: var(--primary-blue); - font-size: var(--font-xl); - margin-bottom: var(--space-md); - font-weight: 700; -} - -.info-card p { - line-height: 1.8; - margin: 0; - color: var(--text-light); -} - -.opening-hours { - font-weight: 600; - font-size: var(--font-lg); - color: var(--text-dark); -} - -/* Pools Section */ -.pools-section { - padding: var(--space-2xl) 0; - background: var(--bg-light); -} - -.pools-section h2 { - color: var(--text-dark); - font-size: var(--font-3xl); - margin-bottom: var(--space-xl); - font-weight: 700; - text-align: center; -} - -.pool-card { - background: var(--bg-white); - border-radius: var(--radius-lg); - padding: var(--space-xl); - box-shadow: 0 4px 6px var(--shadow-light); - transition: all 0.3s ease; - position: relative; - overflow: hidden; -} - -.pool-card::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 4px; - background: linear-gradient(90deg, var(--water-dark), var(--accent-cyan)); -} - -.pool-card:hover { - transform: translateY(-8px); - box-shadow: 0 12px 24px var(--shadow-medium); -} - -.pool-card h3 { - color: var(--water-dark); - font-size: var(--font-xl); - margin-bottom: var(--space-md); - font-weight: 700; -} - -.pool-card p { - font-size: var(--font-lg); - margin-bottom: var(--space-lg); - font-weight: 500; - color: var(--text-dark); -} - -.pool-card ul { - list-style: none; - padding: 0; - margin: 0; -} - -.pool-card ul li { - padding: var(--space-sm) 0; - border-bottom: 1px solid var(--border-light); - position: relative; - padding-left: 32px; - color: var(--text-light); - font-size: var(--font-sm); -} - -.pool-card ul li:before { - content: ''; - position: absolute; - left: 0; - top: 50%; - transform: translateY(-50%); - width: 20px; - height: 20px; - background: var(--water-light); - border-radius: 50%; - display: flex; - align-items: center; - justify-content: center; -} - -.pool-card ul li:after { - content: '✓'; - position: absolute; - left: 6px; - top: 50%; - transform: translateY(-50%); - color: var(--primary-blue); - font-weight: bold; - font-size: 12px; - z-index: 1; -} - -.pool-card ul li:last-child { - border-bottom: none; -} - -/* Footer Styles */ -.site-footer { - background: var(--text-dark); - color: white; - padding: var(--space-2xl) 0 var(--space-lg); - margin-top: 0; -} - -.site-footer h4 { - color: var(--accent-cyan); - font-size: var(--font-lg); - margin-bottom: var(--space-md); - font-weight: 600; -} - -.site-footer ul { - list-style: none; - padding: 0; - margin: 0; -} - -.site-footer ul li { - margin-bottom: var(--space-sm); -} - -.site-footer ul li a { - color: rgba(255, 255, 255, 0.7); - text-decoration: none; - transition: all 0.2s ease; - font-size: var(--font-sm); -} - -.site-footer ul li a:hover { - color: var(--accent-cyan); - transform: translateX(2px); -} - -.site-footer p { - color: rgba(255, 255, 255, 0.7); - line-height: 1.8; - font-size: var(--font-sm); -} - -.copyright { - margin-top: var(--space-xl); - padding-top: var(--space-lg); - border-top: 1px solid rgba(255, 255, 255, 0.1); - color: rgba(255, 255, 255, 0.5); - text-align: center; - font-size: var(--font-xs); -} - -/* Responsive Design */ -@media screen and (max-width: 1024px) { - .hero-section h1 { - font-size: var(--font-3xl); - } - - .hero-section .lead { - font-size: var(--font-lg); - } -} - -@media screen and (max-width: 640px) { - :root { - --space-2xl: 3rem; - --space-xl: 2rem; - } - - .top-bar { - height: auto; - padding: var(--space-md) 0; - } - - .hero-section { - padding: var(--space-xl) 0; - } - - .hero-section h1 { - font-size: var(--font-2xl); - } - - .hero-section .lead { - font-size: var(--font-base); - } - - .info-section, .pools-section { - padding: var(--space-xl) 0; - } - - .pools-section h2 { - font-size: var(--font-2xl); - } - - .info-card, .pool-card { - padding: var(--space-lg); - margin-bottom: var(--space-md); - } -} - -/* Smooth scrolling */ -html { - scroll-behavior: smooth; -} - -/* Section spacing */ -main section { - position: relative; -} - -/* Utility classes */ -.text-center { - text-align: center; -} - -/* Page Hero Section */ -.page-hero-section { - background: linear-gradient(135deg, var(--primary-blue) 0%, var(--accent-cyan) 100%); - color: white; - padding: var(--space-xl) 0; - text-align: center; - position: relative; - overflow: hidden; -} - -.page-hero-section::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: url('data:image/svg+xml,') repeat-x; - background-size: 200px 100px; - animation: wave 10s linear infinite; -} - -.page-hero-section > .grid-container { - position: relative; - z-index: 1; -} - -.page-hero-section h1 { - font-size: var(--font-3xl); - font-weight: 800; - margin-bottom: var(--space-md); - text-shadow: none; - letter-spacing: -0.5px; -} - -.page-hero-section .lead { - font-size: var(--font-lg); - font-weight: 400; - opacity: 1; - max-width: 600px; - margin: 0 auto; -} - -/* Content Section */ -.content-section { - padding: var(--space-2xl) 0; - background: var(--bg-white); -} - -.content-section.alternate-bg { - background: var(--bg-light); -} - -.content-section h2 { - color: var(--text-dark); - font-size: var(--font-2xl); - margin-bottom: var(--space-xl); - font-weight: 700; - text-align: center; -} - -/* Hours Table */ -.hours-table { - margin: var(--space-lg) 0; -} - -.hours-table table { - width: 100%; - border-collapse: collapse; - background: var(--bg-white); - border-radius: var(--radius-lg); - overflow: hidden; - box-shadow: 0 4px 6px var(--shadow-light); -} - -.hours-table th { - background: var(--primary-blue); - color: white; - padding: var(--space-md); - text-align: left; - font-weight: 600; -} - -.hours-table td { - padding: var(--space-md); - border-bottom: 1px solid var(--border-light); -} - -.hours-table tr:last-child td { - border-bottom: none; -} - -.hours-table tr:nth-child(even) { - background: var(--water-light); -} - -/* Info Cards for special pages */ -.info-cards { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); - gap: var(--space-lg); - margin: var(--space-lg) 0; -} - -.info-box { - background: var(--water-light); - border-left: 4px solid var(--primary-blue); - padding: var(--space-md); - margin: var(--space-md) 0; - border-radius: var(--radius-sm); -} - -/* Price Cards */ -.price-cards { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); - gap: var(--space-lg); - margin: var(--space-lg) 0; -} - -.price-card { - background: var(--bg-white); - border: 1px solid var(--border-light); - border-radius: var(--radius-lg); - padding: var(--space-xl); - text-align: center; - box-shadow: 0 4px 6px var(--shadow-light); - transition: all 0.3s ease; - position: relative; - overflow: hidden; -} - -.price-card::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 4px; - background: linear-gradient(90deg, var(--primary-blue), var(--accent-cyan)); -} - -.price-card:hover { - transform: translateY(-8px); - box-shadow: 0 12px 24px var(--shadow-medium); -} - -.price-icon { - font-size: 2.5rem; - color: var(--primary-blue); - margin-bottom: var(--space-md); -} - -.price-card h3 { - color: var(--text-dark); - font-size: var(--font-lg); - margin-bottom: var(--space-sm); - font-weight: 600; -} - -.price { - font-size: var(--font-3xl); - font-weight: 800; - color: var(--primary-blue); - margin: var(--space-md) 0; -} - -/* Season Cards */ -.season-cards { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); - gap: var(--space-lg); - margin: var(--space-lg) 0; -} - -.season-card { - background: var(--bg-white); - border: 1px solid var(--border-light); - border-radius: var(--radius-lg); - padding: var(--space-xl); - box-shadow: 0 4px 6px var(--shadow-light); - transition: all 0.3s ease; - position: relative; - overflow: hidden; -} - -.season-card::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 4px; - background: linear-gradient(90deg, var(--water-dark), var(--accent-cyan)); -} - -.season-card:hover { - transform: translateY(-8px); - box-shadow: 0 12px 24px var(--shadow-medium); -} - -.season-card h3 { - color: var(--water-dark); - font-size: var(--font-xl); - margin-bottom: var(--space-md); - font-weight: 600; -} - -.season-card .price { - font-size: var(--font-3xl); - font-weight: 800; - color: var(--water-dark); - margin: var(--space-md) 0; -} - -.season-card ul { - list-style: none; - padding: 0; - margin: var(--space-md) 0; -} - -.season-card ul li { - padding: var(--space-xs) 0; - position: relative; - padding-left: 25px; - color: var(--text-light); -} - -.season-card ul li:before { - content: '✓'; - position: absolute; - left: 0; - color: var(--primary-blue); - font-weight: bold; -} - -/* Group Prices */ -.group-prices { - margin: var(--space-lg) 0; -} - -.group-price-item { - background: var(--water-light); - border-radius: var(--radius-md); - padding: var(--space-md); - margin: var(--space-md) 0; - display: flex; - align-items: center; - gap: var(--space-md); -} - -.group-price-item h3 { - margin: 0; - color: var(--primary-blue); - font-size: var(--font-lg); -} - -.group-price-item p { - margin: 0; - font-weight: 500; - color: var(--text-dark); -} - -/* Payment Methods */ -.payment-methods { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); - gap: var(--space-md); - margin: var(--space-lg) 0; -} - -.payment-method { - background: var(--bg-white); - border: 1px solid var(--border-light); - border-radius: var(--radius-md); - padding: var(--space-lg); - text-align: center; - transition: all 0.3s ease; -} - -.payment-method:hover { - transform: translateY(-4px); - box-shadow: 0 8px 16px var(--shadow-medium); -} - -.payment-method i { - font-size: 2rem; - color: var(--primary-blue); - margin-bottom: var(--space-sm); -} - -/* Service Cards */ -.service-cards { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(400px, 1fr)); - gap: var(--space-xl); - margin: var(--space-lg) 0; -} - -.service-card { - background: var(--bg-white); - border: 1px solid var(--border-light); - border-radius: var(--radius-lg); - overflow: hidden; - box-shadow: 0 4px 6px var(--shadow-light); - transition: all 0.3s ease; -} - -.service-card:hover { - transform: translateY(-8px); - box-shadow: 0 12px 24px var(--shadow-medium); -} - -.service-image img { - width: 100%; - height: 200px; - object-fit: cover; -} - -.service-content { - padding: var(--space-lg); -} - -.service-content h3 { - color: var(--water-dark); - font-size: var(--font-xl); - margin-bottom: var(--space-md); - font-weight: 600; -} - -.service-content ul { - list-style: none; - padding: 0; - margin: var(--space-md) 0; -} - -.service-content ul li { - padding: var(--space-xs) 0; - border-bottom: 1px solid var(--border-light); - position: relative; - padding-left: 25px; - color: var(--text-light); -} - -.service-content ul li:before { - content: '✓'; - position: absolute; - left: 0; - color: var(--primary-blue); - font-weight: bold; -} - -.service-content ul li:last-child { - border-bottom: none; -} - -/* Additional Services */ -.additional-services { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); - gap: var(--space-lg); - margin: var(--space-lg) 0; -} - -.additional-service { - background: var(--bg-white); - border: 1px solid var(--border-light); - border-radius: var(--radius-lg); - padding: var(--space-xl); - text-align: center; - box-shadow: 0 4px 6px var(--shadow-light); - transition: all 0.3s ease; -} - -.additional-service:hover { - transform: translateY(-8px); - box-shadow: 0 12px 24px var(--shadow-medium); -} - -.service-icon { - font-size: 2.5rem; - color: var(--accent-cyan); - margin-bottom: var(--space-md); -} - -.additional-service h3 { - color: var(--text-dark); - font-size: var(--font-lg); - margin-bottom: var(--space-sm); - font-weight: 600; -} - -/* Special Programs */ -.special-programs { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); - gap: var(--space-lg); - margin: var(--space-lg) 0; -} - -.program-card { - background: var(--bg-white); - border: 1px solid var(--border-light); - border-radius: var(--radius-lg); - padding: var(--space-xl); - box-shadow: 0 4px 6px var(--shadow-light); - transition: all 0.3s ease; -} - -.program-card:hover { - transform: translateY(-8px); - box-shadow: 0 12px 24px var(--shadow-medium); -} - -.program-card h3 { - color: var(--text-dark); - font-size: var(--font-lg); - margin-bottom: var(--space-sm); - font-weight: 600; -} - -.program-time { - background: var(--primary-blue); - color: white; - padding: var(--space-xs) var(--space-sm); - border-radius: var(--radius-sm); - display: inline-block; - font-weight: 600; - margin-top: var(--space-sm); -} - -/* Facilities List */ -.facilities-list { - margin: var(--space-lg) 0; -} - -.facility-item { - display: flex; - align-items: center; - gap: var(--space-md); - padding: var(--space-md); - margin: var(--space-sm) 0; - background: var(--water-light); - border-radius: var(--radius-md); - transition: all 0.3s ease; -} - -.facility-item:hover { - transform: translateX(8px); - background: var(--water-medium); -} - -.facility-item i { - font-size: 1.5rem; - color: var(--primary-blue); - width: 30px; -} - -/* Contact Information */ -.contact-info { - margin: var(--space-lg) 0; -} - -.contact-item { - display: flex; - align-items: flex-start; - gap: var(--space-md); - margin: var(--space-lg) 0; - padding: var(--space-lg); - background: var(--water-light); - border-radius: var(--radius-md); -} - -.contact-icon { - background: var(--primary-blue); - color: white; - width: 50px; - height: 50px; - border-radius: 50%; - display: flex; - align-items: center; - justify-content: center; - font-size: 1.2rem; - flex-shrink: 0; -} - -.contact-details h3 { - margin: 0 0 var(--space-xs) 0; - color: var(--primary-blue); - font-size: var(--font-lg); - font-weight: 600; -} - -.contact-details p { - margin: 0; - color: var(--text-dark); - line-height: 1.6; -} - -/* Contact Form */ -.contact-form { - background: var(--bg-white); - border: 1px solid var(--border-light); - border-radius: var(--radius-lg); - padding: var(--space-xl); - box-shadow: 0 4px 6px var(--shadow-light); -} - -.contact-form label { - font-weight: 600; - color: var(--text-dark); - margin-bottom: var(--space-xs); -} - -.contact-form input, -.contact-form select, -.contact-form textarea { - border: 1px solid var(--border-light); - border-radius: var(--radius-sm); - padding: var(--space-sm); - font-size: var(--font-sm); - transition: all 0.2s ease; -} - -.contact-form input:focus, -.contact-form select:focus, -.contact-form textarea:focus { - border-color: var(--primary-blue); - outline: none; - box-shadow: 0 0 0 2px var(--water-light); -} - -.button.primary { - background: var(--primary-blue); - color: white; - border: none; - padding: var(--space-md) var(--space-xl); - border-radius: var(--radius-md); - font-weight: 600; - transition: all 0.2s ease; -} - -.button.primary:hover { - background: var(--deep-blue); - transform: translateY(-2px); - box-shadow: 0 4px 8px var(--shadow-medium); -} - -/* Map Container */ -.map-container { - margin: var(--space-lg) 0; - border-radius: var(--radius-lg); - overflow: hidden; - box-shadow: 0 4px 6px var(--shadow-light); -} - -.map-image { - width: 100%; - height: 400px; - object-fit: cover; -} - -/* Transportation Options */ -.transportation-options { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); - gap: var(--space-lg); - margin: var(--space-lg) 0; -} - -.transport-option { - background: var(--bg-white); - border: 1px solid var(--border-light); - border-radius: var(-- \ No newline at end of file diff --git a/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/yhteystiedot.html b/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/yhteystiedot.html deleted file mode 100644 index 3d6938fa50b9277ebaab3a433a74ed164b26f3e2..0000000000000000000000000000000000000000 --- a/public/sites/039b8554-0a87-42f7-a969-570c3fa99cb5/yhteystiedot.html +++ /dev/null @@ -1,517 +0,0 @@ - - - - - - Yhteystiedot - Leppävaaran Uimahalli - - - - - - -
- -
-
-
-
-

Yhteystiedot

-

Ota yhteyttä ja tule käymään uimahallillamme

-
-
-
-
- - -
-
-
-
-

Yhteystiedot

-
-
-
- -
-
-

Osoite

-

Veräjävuorenkatu 5
02670 Espoo

-
-
-
-
- -
-
-

Puhelin

-

09-123 4567
(arkisin 9:00-17:00)

-
-
-
-
- -
-
-

Sähköposti

-

info@leppavaaranuimahalli.fi

-
-
-
-
- -
-
-

Aukioloajat

-

Ma-Pe: 6:00-22:00
La-Su: 8:00-20:00

-
-
-
-
-
-

Yhteydenottolomake

-
-
-
- - -
-
- - -
-
-
-
- - -
-
- - -
-
-
-
- - -
-
-
-
- -
-
-
-
-
-
-
- - -
-
-
-
-

Sijainti

-
- Kartta Leppävaaran uimahallin sijainti -
-
-
-
-
- - -
-
-
-
-

Saapuminen paikalle

-
-
-
- -
-

Joukkoliikenne

-

Bussit 531, 543, 550 ja 552. Lähin pysäkki: Leppävaaran asema (n. 200m).

-
-
-
- -
-

Junalla

-

Leppävaaran juna-asemalle (L, E, A-linjat). Kävelymatka n. 300 metriä.

-
-
-
- -
-

Autolla

-

Ilmainen asiakaspaikoitus 100 paikkaa. Pääsy Veräjävuorenkadulta.

-
-
-
- -
-

Pyörällä

-

Pyörätelineet sisäänkäynnin läheisyydessä. Suositeltu pyöräreitti Leppävaaran kautta.

-
-
-
-
-
-
- - -
-
-
-
-

Henkilökunta

-
-
-
- Hallinnoija -
-

Matti Meikäläinen

-

Hallinnoija

-

matti.meikalainen@leppavaaranuimahalli.fi

-
-
-
- Uimaopettaja -
-

Liisa Virtanen

-

Uimaopettaja

-

liisa.virtanen@leppavaaranuimahalli.fi

-
-
-
- Kuntovalmentaja -
-

Pekka Järvinen

-

Kuntovalmentaja

-

pekka.jarvinen@leppavaaranuimahalli.fi

-
-
-
-
-
-
-
- - - - - - - - - \ No newline at end of file diff --git a/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/about.html b/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/about.html deleted file mode 100644 index 76c81455be6791cbbcde30ce13424322c894f606..0000000000000000000000000000000000000000 --- a/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/about.html +++ /dev/null @@ -1,946 +0,0 @@ - - - - - - About - 2019 WPA World Ten-ball Championship - - - - Testing 123 - - - - - - - - - - - - - - - -
- -
-
- About Championship -
-
- -
-
-

- About the Championship -

-

- Discover the history and prestige of the WPA World Ten-ball Championship -

-
-
- -
- - - -
-
- - -
-
-
-
-

- Tournament History -

-

- The 2019 WPA World Ten-ball Championship represented the fifth edition of this prestigious tournament, continuing a legacy of excellence in professional pool competition. -

-

- After the previous championship in 2015, plans for events in both 2016 and 2018 to be held in Manila fell through. However, this setback led to an exciting new chapter when it was agreed to hold the 2019 event at the Rio All-Suite Hotel & Casino in Las Vegas. -

-

- This move to Las Vegas marked the beginning of a three-year deal for the event to be played in the United States, bringing world-class ten-ball competition to the entertainment capital of the world. -

-
-
- Tournament History -
-
-
-
- - -
-
-
-

- What is Ten-ball? -

-

- Understanding the discipline of professional ten-ball pool -

-
- -
-
-
🎱
-

The Game

-

- Ten-ball is a rotation pool game similar to nine-ball, but using ten object balls instead of nine. The game requires players to call their shots, adding an extra layer of strategy and skill. -

-
- -
-
🎯
-

The Rules

-

- Players must pocket balls in numerical order from 1 to 10. The player who legally pockets the 10-ball wins the game. All shots must be called, making it a true test of precision. -

-
- -
-
🏆
-

The Challenge

-

- Ten-ball is considered more challenging than nine-ball due to the call-shot requirement and additional ball, making it the perfect format for world championship competition. -

-
-
-
-
- - -
-
-
-

- Tournament Organizers -

-

- Leading organizations in professional pool -

-
- -
-
-

- World Pool-Billiard Association (WPA) -

-

- The WPA is the international governing body for pool (pocket billiards). Founded to promote the sport worldwide, the WPA sanctions major international tournaments and establishes standardized rules for professional competition. -

-

- The organization works to elevate pool to Olympic sport status and maintains the highest standards of professional play across the globe. -

-
- -
-

- CueSports International -

-

- CueSports International (CSI) is a premier organization dedicated to promoting professional pool and billiards. They organize and manage world-class tournaments, ensuring the highest level of competition and player experience. -

-

- CSI's partnership with the WPA brings together expertise in tournament management and international governance to create unforgettable championship events. -

-
-
-
-
- - -
-
-
-
- Rio All-Suite Hotel & Casino -
-
-

- Rio All-Suite Hotel & Casino -

-

- Located just off the Las Vegas Strip, the Rio All-Suite Hotel & Casino is an iconic Las Vegas destination known for hosting world-class events and entertainment. -

-
-
- 🏛️ -
-

World-Class Facilities

-

State-of-the-art tournament space with professional-grade tables and equipment

-
-
-
- 👥 -
-

Spectator Experience

-

Excellent viewing areas and amenities for fans and spectators

-
-
-
- -
-

Las Vegas Experience

-

Access to world-class dining, entertainment, and accommodations

-
-
-
-
-
-
-
- - -
-
-
-

- Concurrent Competition -

-

- The tournament ran concurrently with the Billiard Congress of America's National Ten-ball event, creating an unprecedented week of elite ten-ball competition in Las Vegas. -

-

- This collaboration between international and national governing bodies showcased the global appeal of ten-ball and provided players and fans with an unparalleled championship experience. -

-
-
-
- - -
-
-
-

- Official Tournament Sponsor -

-
-

Predator Group

-

Premium Cue Manufacturer

-
-

- Predator Group, renowned for manufacturing the world's finest pool cues, proudly sponsored the 2019 WPA World Ten-ball Championship, providing players with top-tier equipment for championship-level play. -

-
-
-
- - - - - - - - - - - - \ No newline at end of file diff --git a/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/index.html b/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/index.html deleted file mode 100644 index aecbdb90779029f379ec481eee535b9b28a306ca..0000000000000000000000000000000000000000 --- a/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/index.html +++ /dev/null @@ -1,1026 +0,0 @@ - - - - - - 2019 WPA World Ten-ball Championship - Las Vegas - - - - Testing 123 - - - - - - - - - - - - - - - -
- -
- -
- Pool Championship -
-
- - -
-
-
- - 🏆 5th Edition Championship - -
- -

- 2019 WPA World
- Ten-ball Championship -

- -

- The World's Premier Ten-ball Tournament -

- -

- 📅 July 22-26, 2019 | 📍 Rio All-Suite Hotel & Casino, Las Vegas, Nevada -

- - -
-
- - -
- - - -
-
- - -
-
-
-
-
🏆
-

5th Edition

-

Fifth WPA World Ten-ball Championship

-
-
-
📅
-

July 22-26, 2019

-

Five days of elite competition

-
-
-
📍
-

Las Vegas, USA

-

Rio All-Suite Hotel & Casino

-
-
-
🎱
-

World-Class Players

-

Top ten-ball professionals worldwide

-
-
-
-
- - -
-
-
-
-

- A Historic Championship -

-

- The 2019 WPA World Ten-ball Championship marked the fifth edition of this prestigious tournament. After plans for events in 2016 and 2018 in Manila fell through, the championship found its new home in Las Vegas as part of a groundbreaking three-year deal. -

-

- Organized by the World Pool-Billiard Association (WPA) and CueSports International, the tournament ran concurrently with the Billiard Congress of America's National Ten-ball event, creating an unprecedented week of world-class ten-ball competition. -

- -
-
- Championship -
-
-
-
- - -
-
-
-

- Featured Players -

-

- World-class competitors from around the globe -

-
- -
-
-
- Ko Pin-yi -
-
-
-

Ko Pin-yi

- - #1 - -
-

🌍 Taiwan

-
-
-
-
- Jayson Shaw -
-
-
-

Jayson Shaw

- - #2 - -
-

🌍 Scotland

-
-
-
-
- Fedor Gorst -
-
-
-

Fedor Gorst

- - #3 - -
-

🌍 Russia

-
-
-
-
- Joshua Filler -
-
-
-

Joshua Filler

- - #4 - -
-

🌍 Germany

-
-
-
-
- Albin Ouschan -
-
-
-

Albin Ouschan

- - #5 - -
-

🌍 Austria

-
-
-
-
- Shane Van Boening -
-
-
-

Shane Van Boening

- - #6 - -
-

🌍 USA

-
-
-
- - -
-
- - -
-
-
-
- Rio All-Suite Hotel & Casino -
-
-

- The Venue: Rio Las Vegas -

-

- The Rio All-Suite Hotel & Casino provided the perfect backdrop for this world-class tournament. Located in the heart of Las Vegas, the Rio's state-of-the-art facilities and championship atmosphere created an unforgettable experience for players and spectators alike. -

-
-
- 📍 -
-

Location

-

3700 W Flamingo Rd, Las Vegas, NV 89103

-
-
-
- 🏨 -
-

World-Class Facilities

-

Professional tournament tables and viewing areas

-
-
-
- 🎰 -
-

Entertainment Capital

-

Las Vegas, the ultimate destination for world championships

-
-
-
-
-
-
-
- - -
-
-

Official Sponsor

-
-

Predator Group

-

Premium Cue Manufacturer

-
-
-
- - -
-
-

- Experience the Championship -

-

- Explore the tournament results, player profiles, and exclusive photo gallery from this historic event. -

- -
-
- - - - - - - - - - - - \ No newline at end of file diff --git a/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/plan.md b/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/plan.md deleted file mode 100644 index ba6a7191b43e3903146d782b270d22aeb4f809dd..0000000000000000000000000000000000000000 --- a/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/plan.md +++ /dev/null @@ -1,127 +0,0 @@ -# 2019 WPA World Ten-ball Championship Website - Development Plan - -## Project Overview -A modern, sporty multipage website for the 2019 WPA World Ten-ball Championship held at Rio All-Suite Hotel & Casino, Las Vegas. - -## Technology Stack -- **Styling**: TailwindCSS (via CDN) -- **Animations**: Framer Motion (via CDN) -- **Images**: Picsum Photos -- **Templating**: Handlebars for reusable components -- **Structure**: Multi-page HTML site - -## Design Aesthetics -- **Modern & Sporty**: Bold typography, dynamic layouts, vibrant colors -- **Color Scheme**: - - Primary: Deep blue (#1e3a8a) - professional pool table felt - - Accent: Bright green (#10b981) - billiard table - - Secondary: Gold/Yellow (#fbbf24) - championship/winner - - Dark: #0f172a - - Light: #f8fafc -- **Typography**: Sans-serif, bold headings, clean body text -- **Animations**: Smooth transitions, scroll animations, hover effects - -## Site Structure - -### Pages -1. **Home (index.html)** - - Hero section with championship title and dates - - Quick facts/highlights - - Featured image gallery - - Call-to-action sections - - Latest news/updates section - -2. **About (about.html)** - - Tournament history - - WPA & CueSports International information - - Ten-ball discipline explanation - - Venue information (Rio All-Suite Hotel & Casino) - - Sponsorship (Predator Group) - -3. **Schedule (schedule.html)** - - Tournament dates (July 22-26, 2019) - - Daily schedule breakdown - - Concurrent BCA National Ten-ball event info - - Timeline visualization - -4. **Players (players.html)** - - Featured players/competitors - - Player profiles with images - - Past champions (2015 and earlier) - - Player statistics - -5. **Results (results.html)** - - Tournament brackets - - Match results - - Final standings - - Championship winner highlight - -6. **Gallery (gallery.html)** - - Photo gallery from the event - - Action shots - - Venue photos - - Award ceremony images - -7. **Contact (contact.html)** - - Contact form - - WPA contact information - - Venue location map - - Social media links - -## Reusable Components (Handlebars Templates) - -### 1. Navigation Bar (`/templates/nav.hbs`) -- Logo/Championship branding -- Navigation links to all pages -- Responsive mobile menu -- Sticky header with animation - -### 2. Footer (`/templates/footer.hbs`) -- Organization logos (WPA, CueSports International) -- Sponsor information (Predator Group) -- Quick links -- Social media icons -- Copyright information - -### 3. Hero Section (`/templates/hero.hbs`) -- Customizable per page -- Background image overlay -- Title and subtitle -- CTA buttons - -### 4. Card Component (`/templates/card.hbs`) -- Reusable for players, news, schedule items -- Image, title, description -- Hover animations - -## Animation Strategy (Framer Motion) -- **Page Load**: Fade-in animations for hero sections -- **Scroll**: Reveal animations for content sections -- **Hover**: Scale and shadow effects on cards -- **Navigation**: Smooth transitions between pages -- **Gallery**: Lightbox effects and image transitions - -## Implementation Order -1. ✅ Create plan.md -2. Create data.json with site data -3. Create Handlebars templates (nav, footer, hero, card) -4. Create global styles.css -5. Build index.html (Home) -6. Build about.html -7. Build schedule.html -8. Build players.html -9. Build results.html -10. Build gallery.html -11. Build contact.html -12. Add Framer Motion animations -13. Test responsive design -14. Final polish and optimization - -## Key Features -- Fully responsive design (mobile-first) -- Smooth animations and transitions -- Image optimization with Picsum -- Accessible navigation -- Clean, modern UI -- Fast loading times -- Cross-browser compatibility \ No newline at end of file diff --git a/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/players.html b/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/players.html deleted file mode 100644 index 1db62f638f6a82a5d3e7d2aac9671e9c4f4dcea0..0000000000000000000000000000000000000000 --- a/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/players.html +++ /dev/null @@ -1,1057 +0,0 @@ - - - - - - Players - 2019 WPA World Ten-ball Championship - - - - Testing 123 - - - - - - - - - - - - - - - -
- -
-
- Championship Players -
-
- -
-
-
- - 🌍 World-Class Athletes - -
-

- Championship Players -

-

- The world's best ten-ball professionals competing for glory -

-
-
- -
- - - -
-
- - -
-
-
-

- Featured Competitors -

-

- Elite players from across the globe -

-
- -
-
-
- Ko Pin-yi -
- - #1 - -
-
-
-

Ko Pin-yi

-

🌍 Taiwan

-
-
- World Ranking - Top 1 -
-
- Discipline - Ten-ball -
-
-
-
-
-
- Jayson Shaw -
- - #2 - -
-
-
-

Jayson Shaw

-

🌍 Scotland

-
-
- World Ranking - Top 2 -
-
- Discipline - Ten-ball -
-
-
-
-
-
- Fedor Gorst -
- - #3 - -
-
-
-

Fedor Gorst

-

🌍 Russia

-
-
- World Ranking - Top 3 -
-
- Discipline - Ten-ball -
-
-
-
-
-
- Joshua Filler -
- - #4 - -
-
-
-

Joshua Filler

-

🌍 Germany

-
-
- World Ranking - Top 4 -
-
- Discipline - Ten-ball -
-
-
-
-
-
- Albin Ouschan -
- - #5 - -
-
-
-

Albin Ouschan

-

🌍 Austria

-
-
- World Ranking - Top 5 -
-
- Discipline - Ten-ball -
-
-
-
-
-
- Shane Van Boening -
- - #6 - -
-
-
-

Shane Van Boening

-

🌍 USA

-
-
- World Ranking - Top 6 -
-
- Discipline - Ten-ball -
-
-
-
-
-
-
- - -
-
-
-

- Tournament Statistics -

-
- -
-
-
🌍
-
30
-

Countries Represented

-
-
-
🏆
-
64
-

Total Players

-
-
-
-
15
-

Former Champions

-
-
-
🎯
-
100
-

% Elite Competition

-
-
-
-
- - -
-
-
-

- Previous Champions -

-

- A legacy of excellence since the tournament's inception -

-
- -
-
-
🥇
-

2015 Champion

-

Previous Edition

-

4th WPA World Ten-ball

-
-
-
🏆
-

Historic Event

-

5th Edition

-

2019 Championship

-
-
-
🌟
-

World-Class

-

Elite Competition

-

Best of the Best

-
-
-
🎯
-

Las Vegas

-

New Era

-

3-Year Deal

-
-
-
-
- - -
-
-
-
- Player Spotlight -
-
-

- Global Competition -

-

- The 2019 WPA World Ten-ball Championship brought together the finest ten-ball players from over 30 countries, representing every continent and showcasing the truly global appeal of professional pool. -

-

- From seasoned veterans to rising stars, each competitor brought their unique style and strategy to the championship tables at the Rio All-Suite Hotel & Casino. -

-
-
-

64+

-

Elite Players

-
-
-

30+

-

Nations

-
-
-
-
-
-
- - -
-
-

- See the Results -

-

- Check out the tournament brackets and final standings -

- -
-
- - - - - - - - - - - - \ No newline at end of file diff --git a/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/robots.txt b/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/robots.txt deleted file mode 100644 index 3aef460e1591f243d5124ea6bb94d3a0d8042c73..0000000000000000000000000000000000000000 --- a/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/robots.txt +++ /dev/null @@ -1,9 +0,0 @@ -User-agent: * -Allow: / - -Sitemap: https://testing.com/sitemap.xml - -# Disallow common non-content paths -Disallow: /api/ -Disallow: /_next/ -Disallow: /admin/ diff --git a/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/schedule.html b/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/schedule.html deleted file mode 100644 index 9e759d0623dbdbe1e9ffd69e1fa0723d367c4a6e..0000000000000000000000000000000000000000 --- a/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/schedule.html +++ /dev/null @@ -1,1057 +0,0 @@ - - - - - - Schedule - 2019 WPA World Ten-ball Championship - - - - Testing 123 - - - - - - - - - - - - - - - -
- -
-
- Tournament Schedule -
-
- -
-
-
- - 📅 July 22-26, 2019 - -
-

- Tournament Schedule -

-

- Five days of world-class ten-ball competition -

-
-
- -
- - - -
-
- - -
-
-
-
-
📅
-
5
-

Days of Competition

-
-
-
🎱
-
100
-

+ Matches Played

-
-
-
🌍
-
30
-

+ Countries Represented

-
-
-
-
- - -
-
-
-

- Daily Schedule -

-

- Complete tournament timeline from July 22-26, 2019 -

-
- -
-
-
-
-
-

Monday

-

July 22, 2019

-
-
- - Day 0 - -
-
-
-
- - - -

Player Registration

-
-
- - - -

Opening Ceremony

-
-
- - - -

Preliminary Rounds Begin

-
-
-
-
-
-
-
-
-

Tuesday

-

July 23, 2019

-
-
- - Day 1 - -
-
-
-
- - - -

Round of 64

-
-
- - - -

Round of 32 Begins

-
-
-
-
-
-
-
-
-

Wednesday

-

July 24, 2019

-
-
- - Day 2 - -
-
-
-
- - - -

Round of 32 Continues

-
-
- - - -

Round of 16

-
-
-
-
-
-
-
-
-

Thursday

-

July 25, 2019

-
-
- - Day 3 - -
-
-
-
- - - -

Quarter Finals

-
-
- - - -

Semi Finals

-
-
-
-
-
-
-
-
-

Friday

-

July 26, 2019

-
-
- - Day 4 - -
-
-
-
- - - -

Championship Final

-
-
- - - -

Awards Ceremony

-
-
-
-
-
-
-
- - -
-
-
-
- ✨ Special Event -
-

- Concurrent BCA National Ten-ball Event -

-

- The WPA World Ten-ball Championship ran concurrently with the Billiard Congress of America's National Ten-ball event, creating an unprecedented week of elite ten-ball competition. -

-

- This collaboration brought together the world's best players and created a unique atmosphere of international and national competition under one roof at the Rio All-Suite Hotel & Casino. -

-
-
-
- - -
-
-
-
-

- Venue Details -

-
-
-
- - - - -
-
-

Location

-

Rio All-Suite Hotel & Casino

-

3700 W Flamingo Rd, Las Vegas, NV 89103

-
-
- -
-
- - - -
-
-

Tournament Hours

-

Daily sessions starting at 11:00 AM

-

Finals: Friday, July 26 - Evening Session

-
-
- -
-
- - - -
-
-

Spectator Access

-

Open to the public

-

Premium seating available for finals

-
-
-
-
-
- Tournament Venue -
-
-
-
- - -
-
-

- Explore More -

-

- Check out the tournament results and player profiles -

- -
-
- - - - - - - - - - - - \ No newline at end of file diff --git a/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/scripts/main.js b/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/scripts/main.js deleted file mode 100644 index 9feb8f36c9f9d1411f7f513d627c4ce30f02b00f..0000000000000000000000000000000000000000 --- a/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/scripts/main.js +++ /dev/null @@ -1,213 +0,0 @@ -// Main JavaScript for WPA World Ten-ball Championship 2019 - -// Mobile Menu Toggle -document.addEventListener('DOMContentLoaded', function() { - const mobileMenuButton = document.getElementById('mobile-menu-button'); - const mobileMenu = document.getElementById('mobile-menu'); - - if (mobileMenuButton && mobileMenu) { - mobileMenuButton.addEventListener('click', function() { - mobileMenu.classList.toggle('hidden'); - }); - } - - // Active Navigation Link - const currentPage = window.location.pathname.split('/').pop() || 'index.html'; - const navLinks = document.querySelectorAll('.nav-link'); - - navLinks.forEach(link => { - if (link.getAttribute('href') === currentPage) { - link.classList.add('active'); - } - }); - - // Smooth Scroll for Anchor Links - document.querySelectorAll('a[href^="#"]').forEach(anchor => { - anchor.addEventListener('click', function (e) { - e.preventDefault(); - const target = document.querySelector(this.getAttribute('href')); - if (target) { - target.scrollIntoView({ - behavior: 'smooth', - block: 'start' - }); - } - }); - }); - - // Navbar Background on Scroll - const navbar = document.getElementById('navbar'); - if (navbar) { - window.addEventListener('scroll', function() { - if (window.scrollY > 50) { - navbar.classList.add('shadow-xl'); - } else { - navbar.classList.remove('shadow-xl'); - } - }); - } - - // Lazy Loading Images - if ('IntersectionObserver' in window) { - const imageObserver = new IntersectionObserver((entries, observer) => { - entries.forEach(entry => { - if (entry.isIntersecting) { - const img = entry.target; - if (img.dataset.src) { - img.src = img.dataset.src; - img.classList.add('fade-in'); - observer.unobserve(img); - } - } - }); - }); - - document.querySelectorAll('img[data-src]').forEach(img => { - imageObserver.observe(img); - }); - } - - // Animate Elements on Scroll - const animateOnScroll = () => { - const elements = document.querySelectorAll('.animate-on-scroll'); - - elements.forEach(element => { - const elementTop = element.getBoundingClientRect().top; - const elementBottom = element.getBoundingClientRect().bottom; - - if (elementTop < window.innerHeight && elementBottom > 0) { - element.classList.add('fade-in'); - } - }); - }; - - window.addEventListener('scroll', animateOnScroll); - animateOnScroll(); // Initial check - - // Gallery Lightbox (Simple Implementation) - const galleryItems = document.querySelectorAll('.gallery-item'); - - galleryItems.forEach(item => { - item.addEventListener('click', function() { - const imgSrc = this.querySelector('img').src; - const lightbox = document.createElement('div'); - lightbox.className = 'fixed inset-0 bg-black/90 z-50 flex items-center justify-center p-4'; - lightbox.innerHTML = ` -
- Gallery Image - -
- `; - - document.body.appendChild(lightbox); - - // Close lightbox on click - lightbox.addEventListener('click', function(e) { - if (e.target === lightbox || e.target.closest('button')) { - lightbox.remove(); - } - }); - - // Close on Escape key - document.addEventListener('keydown', function(e) { - if (e.key === 'Escape' && lightbox) { - lightbox.remove(); - } - }); - }); - }); - - // Form Validation - const contactForm = document.getElementById('contact-form'); - - if (contactForm) { - contactForm.addEventListener('submit', function(e) { - e.preventDefault(); - - // Simple validation - const name = document.getElementById('name').value.trim(); - const email = document.getElementById('email').value.trim(); - const message = document.getElementById('message').value.trim(); - - if (!name || !email || !message) { - alert('Please fill in all fields'); - return; - } - - if (!isValidEmail(email)) { - alert('Please enter a valid email address'); - return; - } - - // Show success message - const successMessage = document.createElement('div'); - successMessage.className = 'fixed top-24 right-4 bg-emerald-500 text-white px-6 py-4 rounded-lg shadow-lg z-50'; - successMessage.textContent = 'Message sent successfully!'; - document.body.appendChild(successMessage); - - // Remove message after 3 seconds - setTimeout(() => { - successMessage.remove(); - }, 3000); - - // Reset form - contactForm.reset(); - }); - } - - // Email Validation Helper - function isValidEmail(email) { - const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; - return emailRegex.test(email); - } - - // Counter Animation for Stats - const animateCounter = (element, target, duration = 2000) => { - let start = 0; - const increment = target / (duration / 16); - - const timer = setInterval(() => { - start += increment; - if (start >= target) { - element.textContent = target; - clearInterval(timer); - } else { - element.textContent = Math.floor(start); - } - }, 16); - }; - - // Trigger counter animation when visible - const statNumbers = document.querySelectorAll('.stat-number'); - - if (statNumbers.length > 0 && 'IntersectionObserver' in window) { - const statsObserver = new IntersectionObserver((entries) => { - entries.forEach(entry => { - if (entry.isIntersecting) { - const target = parseInt(entry.target.dataset.target); - if (target) { - animateCounter(entry.target, target); - statsObserver.unobserve(entry.target); - } - } - }); - }); - - statNumbers.forEach(stat => { - statsObserver.observe(stat); - }); - } -}); - -// Initialize Framer Motion animations (if available) -if (typeof Motion !== 'undefined') { - // Add motion animations to elements - Motion.animate('.card-item', - { opacity: [0, 1], y: [50, 0] }, - { duration: 0.5, delay: Motion.stagger(0.1) } - ); -} \ No newline at end of file diff --git a/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/sitemap.xml b/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/sitemap.xml deleted file mode 100644 index ca2ae56b179ffbff76035b19238c5e4f5f7d01f7..0000000000000000000000000000000000000000 --- a/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/sitemap.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - https://testing.com/about.html - 2025-11-21 - weekly - 0.8 - - - https://testing.com - 2025-11-21 - weekly - 1.0 - - - https://testing.com/players.html - 2025-11-21 - weekly - 0.8 - - - https://testing.com/schedule.html - 2025-11-21 - weekly - 0.8 - - \ No newline at end of file diff --git a/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/styles/style.css b/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/styles/style.css deleted file mode 100644 index 8fd34c6a66ed3c7fd960198df5610b6d4b93923d..0000000000000000000000000000000000000000 --- a/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/styles/style.css +++ /dev/null @@ -1,266 +0,0 @@ -/* Global Styles for WPA World Ten-ball Championship 2019 */ - -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -html { - scroll-behavior: smooth; -} - -body { - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; - background-color: #f8fafc; - color: #0f172a; - line-height: 1.6; -} - -/* Active Navigation Link */ -.nav-link.active { - background-color: #10b981; - color: white; -} - -/* Hero Section Animations */ -.hero-section { - min-height: 600px; - display: flex; - align-items: center; - justify-content: center; -} - -/* Card Hover Effects */ -.card-item { - transition: all 0.3s ease; -} - -.card-item:hover { - transform: translateY(-8px); - box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15); -} - -/* Gradient Text */ -.gradient-text { - background: linear-gradient(135deg, #10b981 0%, #1e3a8a 100%); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; -} - -/* Section Spacing */ -.section { - padding: 80px 0; -} - -/* Custom Scrollbar */ -::-webkit-scrollbar { - width: 10px; -} - -::-webkit-scrollbar-track { - background: #f1f1f1; -} - -::-webkit-scrollbar-thumb { - background: #10b981; - border-radius: 5px; -} - -::-webkit-scrollbar-thumb:hover { - background: #059669; -} - -/* Image Lazy Loading */ -img { - max-width: 100%; - height: auto; -} - -/* Timeline Styles */ -.timeline-item { - position: relative; - padding-left: 40px; - padding-bottom: 40px; -} - -.timeline-item::before { - content: ''; - position: absolute; - left: 0; - top: 0; - width: 3px; - height: 100%; - background: linear-gradient(180deg, #10b981 0%, #1e3a8a 100%); -} - -.timeline-item::after { - content: ''; - position: absolute; - left: -6px; - top: 0; - width: 15px; - height: 15px; - background: #10b981; - border: 3px solid #fff; - border-radius: 50%; - box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.2); -} - -/* Gallery Grid */ -.gallery-grid { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); - gap: 20px; -} - -.gallery-item { - position: relative; - overflow: hidden; - border-radius: 12px; - cursor: pointer; - aspect-ratio: 4/3; -} - -.gallery-item img { - width: 100%; - height: 100%; - object-fit: cover; - transition: transform 0.3s ease; -} - -.gallery-item:hover img { - transform: scale(1.1); -} - -.gallery-item-overlay { - position: absolute; - inset: 0; - background: linear-gradient(to top, rgba(0,0,0,0.7) 0%, transparent 50%); - display: flex; - align-items: flex-end; - padding: 20px; - opacity: 0; - transition: opacity 0.3s ease; -} - -.gallery-item:hover .gallery-item-overlay { - opacity: 1; -} - -/* Form Styles */ -input, textarea, select { - width: 100%; - padding: 12px 16px; - border: 2px solid #e2e8f0; - border-radius: 8px; - font-size: 16px; - transition: border-color 0.2s ease; -} - -input:focus, textarea:focus, select:focus { - outline: none; - border-color: #10b981; - box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); -} - -/* Button Styles */ -.btn { - display: inline-block; - padding: 12px 24px; - border-radius: 8px; - font-weight: 600; - text-decoration: none; - transition: all 0.2s ease; - cursor: pointer; - border: none; -} - -.btn-primary { - background: #10b981; - color: white; -} - -.btn-primary:hover { - background: #059669; - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(16, 185, 129, 0.4); -} - -.btn-secondary { - background: #1e3a8a; - color: white; -} - -.btn-secondary:hover { - background: #1e40af; - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(30, 58, 138, 0.4); -} - -/* Stats Counter */ -.stat-item { - text-align: center; - padding: 30px; - background: white; - border-radius: 12px; - box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); -} - -.stat-number { - font-size: 3rem; - font-weight: 700; - background: linear-gradient(135deg, #10b981 0%, #1e3a8a 100%); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; -} - -/* Responsive Design */ -@media (max-width: 768px) { - .hero-section { - min-height: 500px; - display: flex; - align-items: center; - justify-content: center; - } - - .section { - padding: 60px 0; - } - - .stat-number { - font-size: 2rem; - } -} - -/* Loading Animation */ -@keyframes fadeIn { - from { - opacity: 0; - transform: translateY(20px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -.fade-in { - animation: fadeIn 0.6s ease-out; -} - -/* Pulse Animation for Badges */ -@keyframes pulse { - 0%, 100% { - opacity: 1; - } - 50% { - opacity: 0.7; - } -} - -.pulse { - animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; -} \ No newline at end of file diff --git a/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/testing.txt b/public/sites/18efcdfd-9309-45d1-bf13-82a968da7216/testing.txt deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/public/sites/20af6c75-4c1b-4c53-94bc-fa2ff7e445fa/benefits.html b/public/sites/20af6c75-4c1b-4c53-94bc-fa2ff7e445fa/benefits.html deleted file mode 100644 index f78ba08394b83e56e56dc13006ee0b50c854f8be..0000000000000000000000000000000000000000 --- a/public/sites/20af6c75-4c1b-4c53-94bc-fa2ff7e445fa/benefits.html +++ /dev/null @@ -1,338 +0,0 @@ - - - - - - Benefits of Basketball - Physical & Mental Health - - - - -
- -
-
-
-
-
-

- Transform Your Life Through Basketball -

-

- Discover the incredible physical, mental, and social benefits that make basketball - one of the most rewarding sports you can play at any age. -

-
-
-
95%
-
of players report improved fitness
-
-
-
87%
-
experience better mental health
-
-
-
92%
-
make lasting friendships
-
-
-
-
-
-
-
- -
-
-
💪
-

Cardiovascular Health

-

- Basketball is an excellent cardiovascular workout that strengthens your heart, - improves blood circulation, and reduces the risk of heart disease. -

-
    -
  • Lowers blood pressure
  • -
  • Improves cholesterol levels
  • -
  • Increases lung capacity
  • -
-
- -
-
🏃
-

Strength & Endurance

-

- Build lean muscle, increase stamina, and improve overall physical performance - through regular basketball practice. -

-
    -
  • Full-body workout
  • -
  • Improves agility
  • -
  • Enhances coordination
  • -
-
-
- - -
-
-
🧠
-

Mental Toughness

-

- Develop resilience, focus, and strategic thinking skills that translate - to success in all areas of life. -

-
    -
  • Stress reduction
  • -
  • Improved focus
  • -
  • Better decision-making
  • -
-
- -
-
🎯
-

Life Skills

-

- Learn valuable lessons in discipline, teamwork, and goal-setting that - will serve you throughout life. -

-
    -
  • Time management
  • -
  • Leadership skills
  • -
  • Goal achievement
  • -
-
-
- - -
-
-
🤝
-

Social Connection

-

- Build meaningful relationships and become part of a supportive community - that shares your passion. -

-
    -
  • Teamwork skills
  • -
  • Communication
  • -
  • Community building
  • -
-
- -
-
😊
-

Emotional Well-being

-

- Experience the joy of achievement, the thrill of competition, and the - satisfaction of personal growth. -

-
    -
  • Confidence boost
  • -
  • Mood enhancement
  • -
  • Self-discipline
  • -
-
-
-
-
-
-
-
-

The Science Behind Basketball's Benefits

-

- Research-backed evidence of how basketball transforms your health -

-
- -
-
-
600
-
Calories burned per hour
-
Comparable to running
-
-
-
30%
-
Lower risk of heart disease
-
Regular players vs. non-players
-
-
-
2.5x
-
Better bone density
-
Weight-bearing exercise benefits
-
-
-
40%
-
Reduced stress levels
-
After just 30 minutes of play
-
-
- -
-
-
-
🏥
-

Medical Approval

-

- Recommended by doctors and health professionals worldwide - for comprehensive fitness and mental wellness. -

-
-
-
📚
-

Research Proven

-

- Over 200 scientific studies confirm the physical and mental - health benefits of regular basketball participation. -

-
-
-
-

Expert Endorsed

-

- Professional athletes and trainers consistently recommend basketball - for total body conditioning. -

-
-
-
-
-
-
-
-

Ready to Start Playing?

-

- Join the millions who have discovered the joy and benefits of basketball. - Whether you're a complete beginner or looking to improve, there's a place for you on the court. -

- - -
-
-
- - - - - \ No newline at end of file diff --git a/public/sites/20af6c75-4c1b-4c53-94bc-fa2ff7e445fa/equipment.html b/public/sites/20af6c75-4c1b-4c53-94bc-fa2ff7e445fa/equipment.html deleted file mode 100644 index 1b13a6050a93456ec2e44584acb5689dcd243e04..0000000000000000000000000000000000000000 --- a/public/sites/20af6c75-4c1b-4c53-94bc-fa2ff7e445fa/equipment.html +++ /dev/null @@ -1,563 +0,0 @@ - - - - - - Basketball Equipment Guide - Gear for All Levels - - - - -
- -
-
-
-
-
-

- Basketball Equipment Guide -

-

- Everything you need to know about basketball gear - from essential basics - to professional equipment. Get the right gear for your game and budget. -

-
-
-
$25
-
Starter kit cost
-
-
-
5 items
-
Essential gear
-
-
-
100%
-
Ready to play
-
-
-
-
-
-
-
-

Essential Basketball Equipment

-

- Learn what you really need to start playing and what to consider as you improve -

-
- -
- -
-
🏀
-

Basketball

-
-
Size Guide:
-
    -
  • Size 7 (29.5") - Men/Boys 12+
  • -
  • Size 6 (28.5") - Women/Girls 12+
  • -
  • Size 5 (27.5") - Kids 9-11
  • -
  • Size 4 (25.5") - Kids 5-8
  • -
-
-
-
- Beginner: - $15-25 -
-
- Intermediate: - $30-60 -
-
- Professional: - $70-150+ -
-
-
-

- Pro Tip: Start with an indoor/outdoor ball for versatility -

-
-
- - -
-
👟
-

Basketball Shoes

-
-
Key Features:
-
    -
  • • Ankle support (high-top preferred)
  • -
  • • Good cushioning for jumps
  • -
  • • Non-marking rubber soles
  • -
  • • Breathable materials
  • -
-
-
-
- Beginner: - $40-70 -
-
- Intermediate: - $80-130 -
-
- Professional: - $140-250+ -
-
-
-

- Pro Tip: Try shoes on with basketball socks for proper fit -

-
-
- - -
-
👕
-

Athletic Clothing

-
-
Essential Items:
-
    -
  • • Moisture-wicking t-shirt/jersey
  • -
  • • Athletic shorts (above knee)
  • -
  • • Basketball socks (crew length)
  • -
  • • Compression gear (optional)
  • -
-
-
-
- Beginner: - $20-40 -
-
- Intermediate: - $50-100 -
-
- Professional: - $120-200+ -
-
-
-

- Pro Tip: Avoid cotton - it holds sweat and becomes heavy -

-
-
- - -
-
-

Training Accessories

-
-
Helpful Items:
-
    -
  • • Water bottle (32oz+)
  • -
  • • Towel
  • -
  • • Jump rope
  • -
  • • Agility cones
  • -
-
-
-
- Beginner: - $15-30 -
-
- Intermediate: - $35-75 -
-
- Professional: - $100-200+ -
-
-
-

- Pro Tip: Start with just water bottle and towel -

-
-
- - -
-
🛡️
-

Protective Gear

-
-
Optional Protection:
-
    -
  • • Mouthguard
  • -
  • • Knee pads
  • -
  • • Ankle braces
  • -
  • • Compression shorts
  • -
-
-
-
- Beginner: - $10-25 -
-
- Intermediate: - $30-60 -
-
- Professional: - $75-150+ -
-
-
-

- Pro Tip: Mouthguard recommended for competitive play -

-
-
- - -
-
🥅
-

Home Hoop Options

-
-
Types Available:
-
    -
  • • Door-mounted mini hoop
  • -
  • • Portable driveway system
  • -
  • • Wall-mounted garage hoop
  • -
  • • In-ground professional system
  • -
-
-
-
- Beginner: - $20-50 -
-
- Intermediate: - $100-300 -
-
- Professional: - $500-2000+ -
-
-
-

- Pro Tip: Start with a mini hoop for form practice -

-
-
-
-
-
-
-
-

Budget Packages for Every Level

-

- Complete starter kits tailored to your budget and commitment level -

-
- -
- -
-
-

Basic Starter

-
$50-75
-

Just getting started

-
-
-

What's Included:

-
    -
  • - - Basic basketball (indoor/outdoor) -
  • -
  • - - Basic athletic shoes -
  • -
  • - - 2 moisture-wicking shirts -
  • -
  • - - 1 pair basketball shorts -
  • -
  • - - Water bottle -
  • -
-
-

- Perfect for: Testing the waters, casual play with friends -

-
-
-
- - -
-
-
-

Serious Player

- Most Popular -
-
$150-250
-

Regular practice & games

-
-
-

Everything in Basic +:

-
    -
  • - - Quality indoor/outdoor ball -
  • -
  • - - Mid-range basketball shoes -
  • -
  • - - 4 moisture-wicking shirts -
  • -
  • - - 2 pairs basketball shorts -
  • -
  • - - 3 pairs quality basketball socks -
  • -
  • - - Gym bag -
  • -
  • - - Basic mouthguard -
  • -
-
-

- Perfect for: Regular players, league participants, skill development -

-
-
-
- - -
-
-

Elite Athlete

-
$400-800+
-

Competitive play focus

-
-
-

Everything in Serious +:

-
    -
  • - - Premium leather basketball -
  • -
  • - - High-end signature shoes -
  • -
  • - - Performance compression gear -
  • -
  • - - Professional mouthguard -
  • -
  • - - Knee pads/ankle braces -
  • -
  • - - Training accessories (cones, jump rope) -
  • -
  • - - Recovery tools (foam roller) -
  • -
-
-

- Perfect for: Competitive players, travel teams, serious athletes -

-
-
-
-
- -
-

Smart Shopping Tips

-
-
-
🏷️
-

Shop Off-Season

-

Buy gear during spring/summer for best basketball deals

-
-
-
🔄
-

Buy Used First

-

Second-hand gear can save 50-70% while still being quality

-
-
-
📈
-

Invest in Shoes

-

Never skimp on footwear - prevents injuries and improves performance

-
-
-
-
-
-
-
-

Ready to Start Playing?

-

- Join the millions who have discovered the joy and benefits of basketball. - Whether you're a complete beginner or looking to improve, there's a place for you on the court. -

- - -
-
-
- - - - - \ No newline at end of file diff --git a/public/sites/20af6c75-4c1b-4c53-94bc-fa2ff7e445fa/getting-started.html b/public/sites/20af6c75-4c1b-4c53-94bc-fa2ff7e445fa/getting-started.html deleted file mode 100644 index b968cb4ebd7e11e49683d874ab0ed90f07d191b1..0000000000000000000000000000000000000000 --- a/public/sites/20af6c75-4c1b-4c53-94bc-fa2ff7e445fa/getting-started.html +++ /dev/null @@ -1,604 +0,0 @@ - - - - - - Getting Started with Basketball - Beginner's Guide - - - - -
- -
-
-
-
-
-
-

- Start Your Basketball Journey Today -

-

- No experience needed! This complete beginner's guide will take you - from zero to confident player in just a few weeks. -

-
- - -
-
-
-
- 🏀 -
-
-
-
-
-
-
-

Your Path to Becoming a Player

-

- Follow these simple steps to start your basketball journey with confidence -

-
- -
-
- -
-
- 1 -
-
-

Get the Right Equipment

-

- You don't need much to start, but having the right basics makes learning easier and more enjoyable. -

-
-

Essential Items:

-
    -
  • 🏀 Basketball (size 7 for men, 6 for women, 5 for kids)
  • -
  • 👟 Athletic shoes with good ankle support
  • -
  • 👕 Comfortable athletic clothing
  • -
  • 💧 Water bottle
  • -
-
-
-
- - -
-
- 2 -
-
-

Learn the Basic Rules

-

- Understanding the fundamentals will help you enjoy the game and play safely with others. -

-
-

Key Rules to Know:

-
    -
  • Dribbling - can't run with the ball
  • -
  • ⏱️ Shot clock - 24 seconds to shoot
  • -
  • 🚫 Fouls - illegal contact with opponents
  • -
  • 📏 Court boundaries - stay in bounds
  • -
-
-
-
- - -
-
- 3 -
-
-

Master Fundamental Skills

-

- Focus on these core skills to build a strong foundation for your game. -

-
-

Core Skills:

-
    -
  • 🏀 Dribbling - control the ball while moving
  • -
  • 🎯 Shooting - proper form and accuracy
  • -
  • 🤚 Passing - share the ball with teammates
  • -
  • 🦶 Footwork - balance and movement
  • -
-
-
-
- - -
-
- 4 -
-
-

Practice Regularly

-

- Consistency is key to improvement. Even 15-30 minutes a few times per week makes a huge difference. -

-
-

Practice Schedule:

-
    -
  • 📅 Start with 2-3 sessions per week
  • -
  • 20-30 minutes per session
  • -
  • 🎯 Focus on one skill each session
  • -
  • 📈 Track your progress
  • -
-
-
-
- - -
-
- 5 -
-
-

Join a Game or League

-

- Once you're comfortable with basics, find others to play with and experience the real joy of basketball. -

-
-

Where to Play:

-
    -
  • 🏫 Local parks and recreation centers
  • -
  • 🏫 School courts (after hours)
  • -
  • 🏢 Community centers
  • -
  • 🌐 Online pickup game groups
  • -
-
-
-
-
-
-
-
-
-
-

Your First Week Training Plan

-

- Follow this structured plan to build confidence and see immediate progress -

-
- -
- -
-
-
Day 1
-
Monday
-
-

Ball Handling

-
    -
  • • Stationary dribbling
  • -
  • • Right hand only
  • -
  • • Left hand only
  • -
  • • 20 minutes
  • -
-
- - -
-
-
Day 2
-
Tuesday
-
-

Shooting Form

-
    -
  • • BEEF technique
  • -
  • • Close-range shots
  • -
  • • 50 attempts
  • -
  • • 25 minutes
  • -
-
- - -
-
-
Day 3
-
Wednesday
-
-

Passing

-
    -
  • • Chest passes
  • -
  • • Bounce passes
  • -
  • • Wall practice
  • -
  • • 20 minutes
  • -
-
- - -
-
-
Day 4
-
Thursday
-
-

Rest & Study

-
    -
  • • Watch tutorials
  • -
  • • Study rules
  • -
  • • Light stretching
  • -
  • • Recovery
  • -
-
- - -
-
-
Day 5
-
Friday
-
-

Dribbling

-
    -
  • • Moving dribbles
  • -
  • • Crossovers
  • -
  • • Speed drills
  • -
  • • 25 minutes
  • -
-
- - -
-
-
Day 6
-
Saturday
-
-

Game Time

-
    -
  • • Find pickup game
  • -
  • • Practice skills
  • -
  • • Have fun
  • -
  • • 60+ minutes
  • -
-
- - -
-
-
Day 7
-
Sunday
-
-

Review

-
    -
  • • Progress check
  • -
  • • Set new goals
  • -
  • • Light practice
  • -
  • • Plan week 2
  • -
-
-
- -
-

Quick Success Tips

-
-
- 💡 -
-

Start Close to the Hoop

-

Master close-range shots before moving further back

-
-
-
- 🎯 -
-

Focus on Form First

-

Proper technique is more important than making shots initially

-
-
-
- 🏀 -
-

Keep Your Eyes Up

-

Practice dribbling without looking at the ball

-
-
-
- 🤝 -
-

Play with Others

-

Learn faster by playing with experienced players

-
-
-
-
-
-
-
-
-

Avoid These Common Beginner Mistakes

-

- Learn from others' experience and accelerate your progress by avoiding these pitfalls -

-
- -
- -
-
- -
-

Using Wrong Ball Size

-

- Playing with an oversized or undersized basketball can seriously hurt your shooting form. -

-
-

✅ Fix: Choose the right size

-
    -
  • • Size 7 (29.5") - Men/Boys 12+
  • -
  • • Size 6 (28.5") - Women/Girls 12+
  • -
  • • Size 5 (27.5") - Kids 9-11
  • -
-
-
-
-
- - -
-
- -
-

Shooting with Two Hands

-

- Using both hands to shoot leads to inconsistency and poor accuracy. -

-
-

✅ Fix: BEEF Method

-
    -
  • Balance - solid stance
  • -
  • Eyes - target the rim
  • -
  • Elbow - under the ball
  • -
  • Follow-through - hold the pose
  • -
-
-
-
-
- - -
-
- -
-

Looking at the Ball While Dribbling

-

- This habit prevents you from seeing the court and making smart plays. -

-
-

✅ Fix: Head-up drills

-
    -
  • • Practice stationary dribbling eyes closed
  • -
  • • Dribble while walking forward
  • -
  • • Count repetitions out loud
  • -
  • • Use peripheral vision
  • -
-
-
-
-
- - -
-
- -
-

Skipping Warm-ups

-

- Jumping straight into intense play increases injury risk dramatically. -

-
-

✅ Fix: 5-minute warm-up routine

-
    -
  • • Light jogging (2 min)
  • -
  • • Dynamic stretches (2 min)
  • -
  • • Ball handling drills (1 min)
  • -
  • • Gradually increase intensity
  • -
-
-
-
-
- - -
-
- -
-

Trying Advanced Moves Too Soon

-

- Practicing crossovers and fancy moves before mastering basics creates bad habits. -

-
-

✅ Fix: Master fundamentals first

-
    -
  • • Perfect basic dribbling
  • -
  • • Consistent shooting form
  • -
  • • Basic passing techniques
  • -
  • • Then progress to advanced
  • -
-
-
-
-
- - -
-
- -
-

Playing Through Pain

-

- Ignoring minor injuries can lead to serious long-term damage. -

-
-

✅ Fix: Listen to your body

-
    -
  • • Stop if something hurts
  • -
  • • Rest and recover properly
  • -
  • • Seek medical advice when needed
  • -
  • • Focus on injury prevention
  • -
-
-
-
-
-
- -
-

Remember: Everyone Starts as a Beginner!

-

- Even NBA players made these mistakes when they were starting out. - The key is to learn, stay patient, and enjoy the process of getting better every day. -

-
-
-
-
-
-

Ready to Start Playing?

-

- Join the millions who have discovered the joy and benefits of basketball. - Whether you're a complete beginner or looking to improve, there's a place for you on the court. -

- - -
-
-
- - - - - \ No newline at end of file diff --git a/public/sites/20af6c75-4c1b-4c53-94bc-fa2ff7e445fa/index.html b/public/sites/20af6c75-4c1b-4c53-94bc-fa2ff7e445fa/index.html deleted file mode 100644 index ccab7e597b3a6f877c5a96ec49d455e623fac87b..0000000000000000000000000000000000000000 --- a/public/sites/20af6c75-4c1b-4c53-94bc-fa2ff7e445fa/index.html +++ /dev/null @@ -1,252 +0,0 @@ - - - - - - Basketball for Everyone - Benefits & Why You Should Play - - - - -
- -
-
-
-
-
-
-

- Why Everyone Should Play Basketball -

-

- Join millions worldwide in discovering the joy, health benefits, and life skills that basketball offers -

-
- - -
-
-
-
-
- 🏀 -
-
-
-
-
-
-
-
-

Amazing Benefits of Basketball

-

- Discover how basketball transforms your body, mind, and social life -

-
- -
-
-
💪
-

Physical Fitness

-

Build strength, endurance, and coordination through dynamic gameplay

-
-
-
🧠
-

Mental Toughness

-

Develop resilience, focus, and strategic thinking under pressure

-
-
-
🤝
-

Social Connection

-

Build friendships and teamwork skills in a supportive community

-
-
-
🎯
-

Life Skills

-

Learn discipline, time management, and goal-setting

-
-
-
😌
-

Stress Relief

-

Release tension and boost mood through physical activity

-
-
-
🏀
-

Accessibility

-

Easy to start - all you need is a ball and a hoop

-
-
-
-
-
-
-

Basketball by the Numbers

-

- See why basketball is one of the world's most beloved sports -

-
- -
-
-
450M
-
People play basketball worldwide
-
-
-
600
-
Calories burned per hour
-
-
-
1891
-
Year basketball was invented
-
-
-
99%
-
Of players report improved fitness
-
-
-
-
-
-
-

Ready to Start Playing?

-

- Join the millions who have discovered the joy and benefits of basketball. - Whether you're a complete beginner or looking to improve, there's a place for you on the court. -

- - -
-
-
- - - - - \ No newline at end of file diff --git a/public/sites/20af6c75-4c1b-4c53-94bc-fa2ff7e445fa/scripts/main.js b/public/sites/20af6c75-4c1b-4c53-94bc-fa2ff7e445fa/scripts/main.js deleted file mode 100644 index 485cab3ed1bc0fa572f74d9759cc56c8938dc661..0000000000000000000000000000000000000000 --- a/public/sites/20af6c75-4c1b-4c53-94bc-fa2ff7e445fa/scripts/main.js +++ /dev/null @@ -1,69 +0,0 @@ -// Basketball website functionality -document.addEventListener('DOMContentLoaded', () => { - console.log('Basketball website loaded!'); - - // Mobile menu toggle - window.toggleMobileMenu = function() { - const menu = document.getElementById('mobileMenu'); - menu.classList.toggle('hidden'); - }; - - // Smooth scrolling for anchor links - document.querySelectorAll('a[href^="#"]').forEach(anchor => { - anchor.addEventListener('click', function (e) { - e.preventDefault(); - const target = document.querySelector(this.getAttribute('href')); - if (target) { - target.scrollIntoView({ - behavior: 'smooth', - block: 'start' - }); - } - }); - }); - - // Add animation to stats when they come into view - const observerOptions = { - threshold: 0.5, - rootMargin: '0px' - }; - - const observer = new IntersectionObserver((entries) => { - entries.forEach(entry => { - if (entry.isIntersecting) { - entry.target.classList.add('animate-pulse'); - setTimeout(() => { - entry.target.classList.remove('animate-pulse'); - }, 2000); - } - }); - }, observerOptions); - - // Observe stat numbers - document.querySelectorAll('.text-5xl.font-bold').forEach(stat => { - observer.observe(stat); - }); - - // Add hover effects to benefit cards - const benefitCards = document.querySelectorAll('.bg-gray-50.rounded-xl'); - benefitCards.forEach(card => { - card.addEventListener('mouseenter', function() { - this.style.transform = 'translateY(-5px)'; - this.style.transition = 'all 0.3s ease'; - }); - - card.addEventListener('mouseleave', function() { - this.style.transform = 'translateY(0)'; - }); - }); - - // Basketball bouncing animation - const basketball = document.querySelector('.animate-bounce'); - if (basketball) { - setInterval(() => { - basketball.classList.remove('animate-bounce'); - void basketball.offsetWidth; // Trigger reflow - basketball.classList.add('animate-bounce'); - }, 3000); - } -}); \ No newline at end of file diff --git a/public/sites/20af6c75-4c1b-4c53-94bc-fa2ff7e445fa/styles/style.css b/public/sites/20af6c75-4c1b-4c53-94bc-fa2ff7e445fa/styles/style.css deleted file mode 100644 index ff9659b401a5a4c99ebdefc56a1c8cd09ef5302d..0000000000000000000000000000000000000000 --- a/public/sites/20af6c75-4c1b-4c53-94bc-fa2ff7e445fa/styles/style.css +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Custom styles to complement Tailwind CSS - * Additional animations and specific styles - */ - -/* Custom animations */ -@keyframes float { - 0%, 100% { transform: translateY(0px); } - 50% { transform: translateY(-20px); } -} - -.float-animation { - animation: float 6s ease-in-out infinite; -} - -/* Basketball court pattern background */ -.court-pattern { - background-image: - linear-gradient(90deg, #f97316 1px, transparent 1px), - linear-gradient(180deg, #f97316 1px, transparent 1px); - background-size: 50px 50px; - background-position: -1px -1px; - opacity: 0.05; -} - -/* Custom scrollbar */ -::-webkit-scrollbar { - width: 10px; -} - -::-webkit-scrollbar-track { - background: #f1f1f1; -} - -::-webkit-scrollbar-thumb { - background: linear-gradient(180deg, #f97316, #dc2626); - border-radius: 5px; -} - -::-webkit-scrollbar-thumb:hover { - background: linear-gradient(180deg, #ea580c, #b91c1c); -} - -/* Enhanced hover effects */ -.hover-lift { - transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); -} - -.hover-lift:hover { - transform: translateY(-8px) scale(1.02); - box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); -} - -/* Gradient text effect */ -.gradient-text { - background: linear-gradient(135deg, #f97316, #dc2626); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; -} - -/* Basketball court lines effect */ -.court-lines::before { - content: ''; - position: absolute; - top: 50%; - left: 0; - right: 0; - height: 2px; - background: rgba(249, 115, 22, 0.3); - transform: translateY(-50%); -} - -/* Mobile menu animation */ -.mobile-menu-enter { - animation: slideDown 0.3s ease-out; -} - -@keyframes slideDown { - from { - opacity: 0; - transform: translateY(-10px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -/* Card hover effects */ -.benefit-card { - position: relative; - overflow: hidden; -} - -.benefit-card::before { - content: ''; - position: absolute; - top: 0; - left: -100%; - width: 100%; - height: 100%; - background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent); - transition: left 0.5s; -} - -.benefit-card:hover::before { - left: 100%; -} - -/* Stats counter animation */ -.stat-counter { - display: inline-block; - transition: all 0.6s cubic-bezier(0.4, 0, 0.2, 1); -} - -.stat-counter.animate { - transform: scale(1.1); - color: #f97316; -} \ No newline at end of file diff --git a/public/sites/20af6c75-4c1b-4c53-94bc-fa2ff7e445fa/training.html b/public/sites/20af6c75-4c1b-4c53-94bc-fa2ff7e445fa/training.html deleted file mode 100644 index 4b451b23e326ed303f3c7cc6eb21ac1fd782a3a0..0000000000000000000000000000000000000000 --- a/public/sites/20af6c75-4c1b-4c53-94bc-fa2ff7e445fa/training.html +++ /dev/null @@ -1,703 +0,0 @@ - - - - - - Basketball Training & Drills - Improve Your Skills - - - - -
- -
-
-
-
-
-

- Basketball Training Programs -

-

- Professional training methods and drills to elevate your game. - From beginner basics to advanced techniques - everything you need to improve. -

-
-
-
50+
-
Training drills
-
-
-
4 levels
-
Skill progression
-
-
-
30 days
-
See results
-
-
-
-
-
-
-
-

Complete Training Programs

-

- Structured programs designed for different skill levels and goals -

-
- -
- -
-
-
- 1 -
-

Beginner Program

-
- -

- Perfect for players just starting out. Focus on fundamentals and building confidence. -

- -
-
-

Weekly Schedule:

-
-
- Monday: - Ball Handling (20 min) -
-
- Wednesday: - Shooting Form (25 min) -
-
- Friday: - Passing & Movement (20 min) -
-
- Saturday: - Game Practice (30 min) -
-
-
- -
-

Key Focus Areas:

-
    -
  • • Proper shooting mechanics (BEEF method)
  • -
  • • Basic dribbling techniques
  • -
  • • Essential passing skills
  • -
  • • Court awareness and positioning
  • -
-
- -
-

- Duration: 4-8 weeks | 3-4 sessions per week -

-
-
-
- - -
-
-
- 2 -
-

Intermediate Program

-
- -

- For players with basic skills looking to improve consistency and add new techniques. -

- -
-
-

Weekly Schedule:

-
-
- Monday: - Advanced Dribbling (30 min) -
-
- Tuesday: - Shooting Drills (30 min) -
-
- Thursday: - Defense & Footwork (25 min) -
-
- Friday: - Game Situations (35 min) -
-
- Saturday: - Pickup Games (60+ min) -
-
-
- -
-

Key Focus Areas:

-
    -
  • • Advanced dribbling moves (crossovers, behind back)
  • -
  • • Mid-range shooting consistency
  • -
  • • Defensive positioning and techniques
  • -
  • • Game strategy and basketball IQ
  • -
-
- -
-

- Duration: 8-12 weeks | 4-5 sessions per week -

-
-
-
- - -
-
-
- 3 -
-

Advanced Program

-
- -

- For experienced players aiming to play competitively or reach their peak performance. -

- -
-
-

Weekly Schedule:

-
-
- Monday: - Elite Ball Handling (40 min) -
-
- Tuesday: - Shooting & Scoring (45 min) -
-
- Wednesday: - Strength & Agility (30 min) -
-
- Thursday: - Advanced Defense (35 min) -
-
- Friday: - Game Simulation (45 min) -
-
- Weekend: - Competitive Games -
-
-
- -
-

Key Focus Areas:

-
    -
  • • Elite scoring moves and shot creation
  • -
  • • Advanced defensive strategies
  • -
  • • Leadership and court generalship
  • -
  • • Physical conditioning and injury prevention
  • -
-
- -
-

- Duration: 12+ weeks | 5-6 sessions per week -

-
-
-
- - -
-
-
- 4 -
-

Position-Specific Training

-
- -

- Specialized training for your specific position to maximize your impact on the court. -

- -
-
-

Choose Your Focus:

-
-
-
Point Guard
-

Leadership, court vision, playmaking, distribution

-
-
-
Shooting Guard
-

Shooting accuracy, off-ball movement, scoring

-
-
-
Small/Power Forward
-

Versatility, inside-outside game, rebounding

-
-
-
Center
-

Post moves, defense, rebounding, rim protection

-
-
-
- -
-

Training Components:

-
    -
  • • Position-specific skill development
  • -
  • • Game situation practice
  • -
  • • Physical conditioning for your role
  • -
  • • Film study and basketball IQ
  • -
-
- -
-

- Duration: 8-16 weeks | Integrated with main program -

-
-
-
-
-
-
-
-
-

Essential Basketball Drills

-

- Master fundamental skills with these proven drills used by players at all levels -

-
- -
- -
-
-
🏀
-

Ball Handling

-
- -
-
-

Stationary Dribbling

-

Dribble in place with both hands

-
- Sets: 3x30 seconds each hand
- Focus: Low dribble, eyes up -
-
- -
-

Crossover Drills

-

Practice crossover moves

-
- Sets: 4x20 crossovers
- Focus: Quick, low, explosive -
-
- -
-

Figure 8 Dribble

-

Dribble through legs in figure 8

-
- Sets: 3x30 seconds
- Focus: Control, smooth transitions -
-
-
-
- - -
-
-
🎯
-

Shooting

-
- -
-
-

Form Shooting

-

Close-range shooting focus

-
- Sets: 5x10 makes
- Focus: BEEF technique, follow-through -
-
- -
-

Mikan Drill

-

Layup sequence under basket

-
- Sets: 3x30 seconds
- Focus: Soft touch, footwork -
-
- -
-

Spot Shooting

-

Shoot from 5 spots around perimeter

-
- Sets: 5x10 makes per spot
- Focus: Consistency, routine -
-
-
-
- - -
-
-
🤝
-

Passing

-
- -
-
-

Wall Passing

-

Pass against wall for practice

-
- Sets: 3x50 passes
- Focus: Chest pass, bounce pass -
-
- -
-

Partner Passing

-

Work with a partner

-
- Sets: 4x30 passes each type
- Focus: Accuracy, timing -
-
- -
-

Passing on the Move

-

Pass while moving

-
- Sets: 3x20 passes
- Focus: Lead passes, communication -
-
-
-
- - -
-
-
🛡️
-

Defense

-
- -
-
-

Defensive Slides

-

Side-to-side defensive movement

-
- Sets: 5x30 seconds
- Focus: Low stance, quick feet -
-
- -
-

Zig-Zag Drill

-

-

-
-

Pro Training Tips & Best Practices

-

- Maximize your training results with these expert recommendations -

-
- -
- -
-
📈
-

Track Your Progress

-

- Keep a training journal to monitor improvements and identify areas needing work. -

-
-

What to Track:

-
    -
  • • Shooting percentages from different spots
  • -
  • • Dribbling speed and control
  • -
  • • Conditioning times and endurance
  • -
  • • Weekly practice hours and consistency
  • -
-
-
- - -
-
🎯
-

Quality Over Quantity

-

- Focus on perfect form rather than mindless repetition. Quality practice builds muscle memory. -

-
-

Quality Indicators:

-
    -
  • • Perfect shooting form on every shot
  • -
  • • Controlled dribbling at game speed
  • -
  • • Full defensive stance and intensity
  • -
  • • Game-like practice conditions
  • -
-
-
- - -
-
⚖️
-

Balance Your Training

-

- Work on all aspects of your game - don't neglect weaknesses or over-rely on strengths. -

-
-

Weekly Balance:

-
    -
  • • 30% ball handling and dribbling
  • -
  • • 30% shooting and scoring
  • -
  • • 20% defense and rebounding
  • -
  • • 20% conditioning and agility
  • -
-
-
- - -
-
🏀
-

Game-Like Practice

-

- Always practice how you play - incorporate game speed, pressure, and decision making. -

-
-

Game Simulation:

-
    -
  • • Practice shooting when tired
  • -
  • • Add time pressure to drills
  • -
  • • Practice with defenders
  • -
  • • Simulate game situations
  • -
-
-
- - -
-
💪
-

Recovery is Key

-

- Your body improves during rest, not just training. Prioritize recovery and injury prevention. -

-
-

Recovery Essentials:

-
    -
  • • 8+ hours of sleep per night
  • -
  • • Proper hydration and nutrition
  • -
  • • Stretching and foam rolling
  • -
  • • Rest days between intense sessions
  • -
-
-
- - -
-
🤝
-

Train with Others

-

- Competition and teamwork accelerate improvement. Find training partners and join pickup games. -

-
-

Benefits of Group Training:

-
    -
  • • Increased motivation and accountability
  • -
  • • Learn from others' strengths
  • -
  • • Real-game practice situations
  • -
  • • Build basketball IQ through experience
  • -
-
-
-
- -
-
-

The 10,000 Hour Rule

-

- Research shows it takes approximately 10,000 hours of deliberate practice - to achieve mastery in any skill, including basketball. But you can see - significant improvement in just 100 hours of focused training! -

-
-
-
20 hrs
-
Notice basic improvement
-
-
-
100 hrs
-
Become competent player
-
-
-
1000 hrs
-
Reach advanced level
-
-
-
-
-
-
-
-
-

Ready to Start Playing?

-

- Join the millions who have discovered the joy and benefits of basketball. - Whether you're a complete beginner or looking to improve, there's a place for you on the court. -

- - -
-
-
- - - - - \ No newline at end of file diff --git a/public/sites/22950e26-4edf-45c9-8719-b212f697a8b1/index.html b/public/sites/22950e26-4edf-45c9-8719-b212f697a8b1/index.html deleted file mode 100644 index 391528dd1638195c747cee75fb3c533cb3bb4aab..0000000000000000000000000000000000000000 --- a/public/sites/22950e26-4edf-45c9-8719-b212f697a8b1/index.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - Port of Helsinki - - - - -
-
- -
- -
-
- -
-
- -
- -

Our Services

-
- -
- -

Latest News

-
- -
- -
- -
- -

Gallery

- - -
- - - - - - - - - - - \ No newline at end of file diff --git a/public/sites/22950e26-4edf-45c9-8719-b212f697a8b1/robots.txt b/public/sites/22950e26-4edf-45c9-8719-b212f697a8b1/robots.txt deleted file mode 100644 index a9d75a8f86119f0d68f42096439b95b94ffad947..0000000000000000000000000000000000000000 --- a/public/sites/22950e26-4edf-45c9-8719-b212f697a8b1/robots.txt +++ /dev/null @@ -1,9 +0,0 @@ -User-agent: * -Allow: / - -Sitemap: http://localhost:3000/sites/22950e26-4edf-45c9-8719-b212f697a8b1/sitemap.xml - -# Disallow common non-content paths -Disallow: /api/ -Disallow: /_next/ -Disallow: /admin/ diff --git a/public/sites/22950e26-4edf-45c9-8719-b212f697a8b1/scripts/main.js b/public/sites/22950e26-4edf-45c9-8719-b212f697a8b1/scripts/main.js deleted file mode 100644 index 1ac1e0f57e0fa89c96d954871a5882dcf71ee852..0000000000000000000000000000000000000000 --- a/public/sites/22950e26-4edf-45c9-8719-b212f697a8b1/scripts/main.js +++ /dev/null @@ -1,43 +0,0 @@ -$(document).ready(function() { - $(document).foundation(); - - // Fetch data and templates - $.when( - $.getJSON('/data.json'), - $.get('/templates/welcome-card.hbs'), - $.get('/templates/service-card.hbs'), - $.get('/templates/news-card.hbs'), - $.get('/templates/contact-section.hbs'), - $.get('/templates/footer-section.hbs') - ).done(function(dataResponse, welcomeCardTemplateResponse, serviceCardTemplateResponse, newsCardTemplateResponse, contactTemplateResponse, footerTemplateResponse) { - const data = dataResponse[0]; - - // Welcome card - const welcomeCardTemplate = Handlebars.compile(welcomeCardTemplateResponse[0]); - $('#welcome-cards-container').html(welcomeCardTemplate(data)); - - // Services - const serviceCardTemplate = Handlebars.compile(serviceCardTemplateResponse[0]); - let servicesHtml = ''; - data.services.forEach(function(service) { - servicesHtml += serviceCardTemplate(service); - }); - $('#services-container').html(servicesHtml); - - // News - const newsCardTemplate = Handlebars.compile(newsCardTemplateResponse[0]); - let newsHtml = ''; - data.news.forEach(function(newsItem) { - newsHtml += newsCardTemplate(newsItem); - }); - $('#news-container').html(newsHtml); - - // Contact - const contactTemplate = Handlebars.compile(contactTemplateResponse[0]); - $('#contact-container').html(contactTemplate(data.contact)); - - // Footer - const footerTemplate = Handlebars.compile(footerTemplateResponse[0]); - $('#footer-container').html(footerTemplate(data.footer)); - }); -}); \ No newline at end of file diff --git a/public/sites/22950e26-4edf-45c9-8719-b212f697a8b1/sitemap.xml b/public/sites/22950e26-4edf-45c9-8719-b212f697a8b1/sitemap.xml deleted file mode 100644 index 92ea9b4e85257a64ad21a88a9372be6fffef3fca..0000000000000000000000000000000000000000 --- a/public/sites/22950e26-4edf-45c9-8719-b212f697a8b1/sitemap.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - http://localhost:3000/sites/22950e26-4edf-45c9-8719-b212f697a8b1 - 2025-11-12 - weekly - 1.0 - - \ No newline at end of file diff --git a/public/sites/22950e26-4edf-45c9-8719-b212f697a8b1/styles/style.css b/public/sites/22950e26-4edf-45c9-8719-b212f697a8b1/styles/style.css deleted file mode 100644 index 0fdef9ebdc0e69e025977a567bf943d4961fba10..0000000000000000000000000000000000000000 --- a/public/sites/22950e26-4edf-45c9-8719-b212f697a8b1/styles/style.css +++ /dev/null @@ -1,21 +0,0 @@ -.top-bar { - margin-bottom: 2rem; -} - -.card { - height: 100%; -} - -.card-section { - display: flex; - flex-direction: column; - justify-content: space-between; - flex-grow: 1; -} - -.footer { - background-color: #f2f2f2; - padding: 2rem 0; - margin-top: 2rem; - text-align: center; -} \ No newline at end of file diff --git a/public/sites/505b4e67-9ba5-4396-9a76-9368a6848874/contact.html b/public/sites/505b4e67-9ba5-4396-9a76-9368a6848874/contact.html deleted file mode 100644 index ec568c70942a18343a067a3520af9fa1ba8b6d56..0000000000000000000000000000000000000000 --- a/public/sites/505b4e67-9ba5-4396-9a76-9368a6848874/contact.html +++ /dev/null @@ -1,125 +0,0 @@ - -
-

⚠️ Handlebars Template Error

-

Error: The partial layout/head could not be found

-

Common fixes:

- -
- - - - -
-
-
- -
-

Request Your Quote

-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
- -
-
- - -
-

Contact Information

-
-
- -
-

Phone

-

{{business.phone}}

-
-
-
- -
-

Email

-

{{business.email}}

-
-
-
- -
-

Business Hours

-

{{business.hours}}

-
-
-
- -
-

Service Areas

-

{{business.serviceAreas}}

-
-
-
-
-
-
-
- - {{> components/footer}} - {{> layout/scripts}} - - ---> \ No newline at end of file diff --git a/public/sites/505b4e67-9ba5-4396-9a76-9368a6848874/index.html b/public/sites/505b4e67-9ba5-4396-9a76-9368a6848874/index.html deleted file mode 100644 index b65687cfb8f390ce26e480b1219a1b3c6fae7f78..0000000000000000000000000000000000000000 --- a/public/sites/505b4e67-9ba5-4396-9a76-9368a6848874/index.html +++ /dev/null @@ -1,85 +0,0 @@ - -
-

⚠️ Handlebars Template Error

-

Error: The partial layout/head could not be found

-

Common fixes:

- -
- -
-
-
-

{{business.tagline}}

-

Professional floor waxing services that transform your space

- Get a Free Quote -
-
- Shiny waxed floor showing perfect reflection -
-
-
- - -
-
-

Our Services

-
- {{#each features}} -
-
- {{title}} -
-
-

{{title}}

-

{{description}}

-
-
- {{/each}} -
-
-
- - -
-
-

Why Choose Miyagi's

-
- {{#each benefits}} -
-
{{icon}}
-

{{title}}

-

{{description}}

-
- {{/each}} -
-
-
- - -
-
-

What Our Clients Say

-
- {{#each testimonials}} -
-

"{{quote}}"

- – {{author}} -
- {{/each}} -
-
-
- - {{> components/footer}} - {{> layout/scripts}} ---> \ No newline at end of file diff --git a/public/sites/505b4e67-9ba5-4396-9a76-9368a6848874/scripts/main.js b/public/sites/505b4e67-9ba5-4396-9a76-9368a6848874/scripts/main.js deleted file mode 100644 index dfb56eec0b3ede6bcf55636c77482670e1b98df3..0000000000000000000000000000000000000000 --- a/public/sites/505b4e67-9ba5-4396-9a76-9368a6848874/scripts/main.js +++ /dev/null @@ -1,106 +0,0 @@ -// Miyagi's Floor Waxing Services - Main JavaScript - -document.addEventListener('DOMContentLoaded', function() { - // Load Handlebars templates and data - loadWebsiteData(); -}); - -// Load website data and render templates -function loadWebsiteData() { - fetch('/data.json') - .then(response => response.json()) - .then(data => { - // Register Handlebars partials - registerPartials().then(() => { - renderTemplates(data); - initNavigation(); - initQuoteForm(); - }); - }) - .catch(error => { - console.error('Error loading website data:', error); - }); -} - -// Register Handlebars partials -async function registerPartials() { - const partials = [ - { name: 'layout/head', path: '/templates/layout/head.html' }, - { name: 'components/navbar', path: '/templates/components/navbar.html' }, - { name: 'components/footer', path: '/templates/components/footer.html' }, - { name: 'layout/scripts', path: '/templates/layout/scripts.html' } - ]; - - for (const partial of partials) { - try { - const response = await fetch(partial.path); - const template = await response.text(); - Handlebars.registerPartial(partial.name, template); - } catch (error) { - console.error(`Error loading partial ${partial.name}:`, error); - } - } -} - -// Render Handlebars templates -function renderTemplates(data) { - // Check if Handlebars is loaded - if (typeof Handlebars === 'undefined') { - console.error('Handlebars not loaded'); - return; - } - - // Get the template from the body - const bodyHTML = document.body.innerHTML; - const compiledTemplate = Handlebars.compile(bodyHTML); - const renderedHTML = compiledTemplate(data); - document.body.innerHTML = renderedHTML; -} - -// Initialize navigation active states -function initNavigation() { - const currentPage = window.location.pathname; - const navLinks = document.querySelectorAll('.nav-link'); - - navLinks.forEach(link => { - const href = link.getAttribute('href'); - if (href === currentPage || (currentPage === '/' && href === '/index.html')) { - link.classList.add('active'); - } else { - link.classList.remove('active'); - } - }); -} - -// Initialize quote form handling -function initQuoteForm() { - const quoteForm = document.querySelector('.quote-form'); - - if (quoteForm) { - quoteForm.addEventListener('submit', function(e) { - e.preventDefault(); - - const formData = new FormData(quoteForm); - const serviceType = formData.get('service-type'); - - if (!serviceType) { - alert('Please select a service type'); - return; - } - - // Simple success message - alert('Thank you for your quote request! We will contact you within 24 hours.'); - quoteForm.reset(); - - // Reset service buttons - const serviceBtns = document.querySelectorAll('.service-btn'); - serviceBtns.forEach(btn => btn.classList.remove('active')); - - // Reset hidden input - const serviceTypeInput = document.getElementById('service-type'); - if (serviceTypeInput) { - serviceTypeInput.value = ''; - } - }); - } -} \ No newline at end of file diff --git a/public/sites/505b4e67-9ba5-4396-9a76-9368a6848874/services.html b/public/sites/505b4e67-9ba5-4396-9a76-9368a6848874/services.html deleted file mode 100644 index ec937a34199dcf4c0de77b7215e8f9583c332170..0000000000000000000000000000000000000000 --- a/public/sites/505b4e67-9ba5-4396-9a76-9368a6848874/services.html +++ /dev/null @@ -1,61 +0,0 @@ - -
-

⚠️ Handlebars Template Error

-

Error: The partial layout/head could not be found

-

Common fixes:

- -
- - - - -
-
-
- {{#each services}} -
-
-

{{name}}

-

{{description}}

-

{{price}}

-
    - {{#each features}} -
  • {{this}}
  • - {{/each}} -
-
-
- {{/each}} -
-
-
- - -
-
-
-

Not sure which service is right for you?

-

Ask for a free site visit and personalized recommendation

- Request Site Visit -
-
-
- - {{> components/footer}} - {{> layout/scripts}} ---> \ No newline at end of file diff --git a/public/sites/505b4e67-9ba5-4396-9a76-9368a6848874/styles/style.css b/public/sites/505b4e67-9ba5-4396-9a76-9368a6848874/styles/style.css deleted file mode 100644 index 9caa66619ebeef865c16382d8e39c7bc8380e98d..0000000000000000000000000000000000000000 --- a/public/sites/505b4e67-9ba5-4396-9a76-9368a6848874/styles/style.css +++ /dev/null @@ -1,403 +0,0 @@ -/* Miyagi's Floor Waxing Services - Custom Styles */ - -/* CSS Custom Properties */ -:root { - /* Colors */ - --ink-navy: #0B1E3B; - --shine-gold: #D9A441; - --porcelain: #F7F7F8; - --slate: #5D6676; - --pure-white: #FFFFFF; - - /* Typography */ - --font-ui: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; - --font-display: 'Playfair Display', serif; - - /* Spacing */ - --space-xs: 4px; - --space-sm: 8px; - --space-md: 16px; - --space-lg: 24px; - --space-xl: 32px; - --space-2xl: 48px; - --space-3xl: 64px; - --space-4xl: 96px; - - /* Border Radius */ - --radius: 16px; - - /* Shadows */ - --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05); - --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1); - --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1); -} - -/* Base Styles */ -* { - box-sizing: border-box; -} - -body { - font-family: var(--font-ui); - margin: 0; - padding: 0; - background: var(--pure-white); - color: var(--slate); - line-height: 1.6; -} - -/* Container */ -.container { - max-width: 1200px; - margin: 0 auto; - padding: 0 var(--space-lg); -} - -/* Typography */ -h1, h2, h3, h4, h5, h6 { - color: var(--ink-navy); - font-weight: 600; - line-height: 1.2; -} - -h1 { - font-size: 2.5rem; - margin-bottom: var(--space-md); -} - -h2 { - font-size: 2rem; - margin-bottom: var(--space-lg); -} - -h3 { - font-size: 1.5rem; - margin-bottom: var(--space-md); -} - -/* Navigation */ -.navbar { - background: var(--ink-navy); - padding: var(--space-lg) 0; -} - -.navbar .container { - display: flex; - justify-content: space-between; - align-items: center; -} - -.nav-brand h1 { - color: var(--pure-white); - font-size: 1.5rem; - margin: 0; -} - -.nav-menu { - display: flex; - list-style: none; - margin: 0; - padding: 0; - gap: var(--space-xl); -} - -.nav-link { - color: var(--porcelain); - text-decoration: none; - font-weight: 500; - transition: color 0.2s ease; -} - -.nav-link:hover, -.nav-link.active { - color: var(--shine-gold); -} - -/* Hero Section */ -.hero { - background: var(--ink-navy); - color: var(--pure-white); - padding: var(--space-4xl) 0; -} - -.hero .container { - display: grid; - grid-template-columns: 1fr 1fr; - gap: var(--space-3xl); - align-items: center; -} - -.hero-title { - font-family: var(--font-display); - font-size: 3rem; - color: var(--pure-white); - margin-bottom: var(--space-lg); -} - -.hero-subtitle { - font-size: 1.25rem; - color: var(--porcelain); - margin-bottom: var(--space-xl); -} - -.hero-image img { - width: 100%; - height: 400px; - object-fit: cover; - border-radius: var(--radius); -} - -/* Buttons */ -.btn { - display: inline-block; - padding: var(--space-md) var(--space-xl); - border-radius: var(--radius); - text-decoration: none; - font-weight: 600; - transition: all 0.2s ease; - border: none; - cursor: pointer; - font-family: var(--font-ui); - font-size: 1rem; - text-align: center; -} - -.btn-primary { - background: var(--shine-gold); - color: var(--ink-navy); -} - -.btn-primary:hover { - background: #e0b45c; - transform: translateY(-1px); - box-shadow: var(--shadow-lg); -} - -.btn-secondary { - background: transparent; - color: var(--ink-navy); - border: 2px solid var(--shine-gold); -} - -.btn-secondary:hover { - background: var(--shine-gold); -} - -/* Cards */ -.feature-card, -.service-card, -.plan-card { - background: var(--pure-white); - border-radius: var(--radius); - box-shadow: var(--shadow-md); - overflow: hidden; -} - -.feature-card img, -.service-card img { - width: 100%; - height: 200px; - object-fit: cover; -} - -/* Grid Layouts */ -.features-grid, -.services-grid, -.comparison-grid, -.benefits-grid { - display: grid; - gap: var(--space-xl); -} - -.features-grid { - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); -} - -.benefits-grid { - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); -} - -.services-grid { - grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); -} - -/* Sections */ -.features, -.benefits, -.testimonials, -.services, -.comparison, -.contact { - padding: var(--space-3xl) 0; -} - -.section-title { - text-align: center; - margin-bottom: var(--space-2xl); -} - -/* Testimonials */ -.testimonial { - background: var(--porcelain); - padding: var(--space-xl); - border-radius: var(--radius); - margin: 0; -} - -.testimonial p { - font-style: italic; - margin-bottom: var(--space-md); -} - -.testimonial cite { - color: var(--slate); - font-style: normal; - font-weight: 500; -} - -/* Form Styles */ -.form-group { - margin-bottom: var(--space-lg); -} - -.form-group label { - display: block; - margin-bottom: var(--space-sm); - font-weight: 500; -} - -.form-group input, -.form-group textarea { - width: 100%; - padding: var(--space-md); - border: 1px solid var(--slate); - border-radius: var(--radius); - font-family: var(--font-ui); - font-size: 1rem; - background: var(--pure-white); -} - -.form-group input:focus, -.form-group textarea:focus { - outline: 2px solid var(--shine-gold); -} - -/* Service Buttons */ -.service-buttons { - display: flex; - flex-wrap: wrap; - gap: var(--space-md); -} - -.service-btn { - background: var(--porcelain); - color: var(--ink-navy); - border: 1px solid var(--slate); - padding: var(--space-md) var(--space-lg); - border-radius: var(--radius); - border: none; - cursor: pointer; - font-family: var(--font-ui); - font-size: 0.875rem; - transition: all 0.2s ease; -} - -.service-btn:hover, -.service-btn.active { - background: var(--shine-gold); - color: var(--ink-navy); -} - -/* Footer */ -.footer { - background: var(--ink-navy); - color: var(--pure-white); - padding: var(--space-3xl) 0 var(--space-xl); -} - -.footer-content { - display: grid; - grid-template-columns: 2fr 1fr; - gap: var(--space-3xl); -} - -.footer-info h3 { - color: var(--pure-white); - margin-bottom: var(--space-md); -} - -.footer-nav ul { - list-style: none; - padding: 0; - margin: 0; -} - -.footer-nav a { - color: var(--porcelain); - text-decoration: none; -} - -.footer-nav a:hover { - color: var(--shine-gold); -} - -/* CTA Bar */ -.cta-bar { - background: var(--shine-gold); - color: var(--ink-navy); - padding: var(--space-2xl) 0; - text-align: center; -} - -/* Map Placeholder */ -.map-placeholder { - background: var(--porcelain); - padding: var(--space-3xl); - border-radius: var(--radius); - text-align: center; - color: var(--slate); -} - -/* Utility Classes */ -.text-center { - text-align: center; -} - -.mb-lg { - margin-bottom: var(--space-lg); -} - -.mb-xl { - margin-bottom: var(--space-xl); -} - -/* Responsive Design */ -@media (max-width: 768px) { - .hero .container { - grid-template-columns: 1fr; - gap: var(--space-xl); - } - - .footer-content { - grid-template-columns: 1fr; - } - - .nav-menu { - gap: var(--space-lg); - } - - .hero-title { - font-size: 2.25rem; - } - - .container { - padding: 0 var(--space-md); -} - -/* Accessibility */ -.btn:focus, -.nav-link:focus, -.service-btn:focus { - outline: 2px solid var(--shine-gold); - outline-offset: 2px; -} \ No newline at end of file diff --git a/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/about.html b/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/about.html deleted file mode 100644 index 643df54dd38f6a526c0c8bcf4d2114aeb1445484..0000000000000000000000000000000000000000 --- a/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/about.html +++ /dev/null @@ -1,933 +0,0 @@ - - - - - - About - 2019 WPA World Ten-ball Championship - - - - - - - - -
- -
-
- About Championship -
-
- -
-
-

- About the Championship -

-

- Discover the history and prestige of the WPA World Ten-ball Championship -

-
-
- -
- - - -
-
- - -
-
-
-
-

- Tournament History -

-

- The 2019 WPA World Ten-ball Championship represented the fifth edition of this prestigious tournament, continuing a legacy of excellence in professional pool competition. -

-

- After the previous championship in 2015, plans for events in both 2016 and 2018 to be held in Manila fell through. However, this setback led to an exciting new chapter when it was agreed to hold the 2019 event at the Rio All-Suite Hotel & Casino in Las Vegas. -

-

- This move to Las Vegas marked the beginning of a three-year deal for the event to be played in the United States, bringing world-class ten-ball competition to the entertainment capital of the world. -

-
-
- Tournament History -
-
-
-
- - -
-
-
-

- What is Ten-ball? -

-

- Understanding the discipline of professional ten-ball pool -

-
- -
-
-
🎱
-

The Game

-

- Ten-ball is a rotation pool game similar to nine-ball, but using ten object balls instead of nine. The game requires players to call their shots, adding an extra layer of strategy and skill. -

-
- -
-
🎯
-

The Rules

-

- Players must pocket balls in numerical order from 1 to 10. The player who legally pockets the 10-ball wins the game. All shots must be called, making it a true test of precision. -

-
- -
-
🏆
-

The Challenge

-

- Ten-ball is considered more challenging than nine-ball due to the call-shot requirement and additional ball, making it the perfect format for world championship competition. -

-
-
-
-
- - -
-
-
-

- Tournament Organizers -

-

- Leading organizations in professional pool -

-
- -
-
-

- World Pool-Billiard Association (WPA) -

-

- The WPA is the international governing body for pool (pocket billiards). Founded to promote the sport worldwide, the WPA sanctions major international tournaments and establishes standardized rules for professional competition. -

-

- The organization works to elevate pool to Olympic sport status and maintains the highest standards of professional play across the globe. -

-
- -
-

- CueSports International -

-

- CueSports International (CSI) is a premier organization dedicated to promoting professional pool and billiards. They organize and manage world-class tournaments, ensuring the highest level of competition and player experience. -

-

- CSI's partnership with the WPA brings together expertise in tournament management and international governance to create unforgettable championship events. -

-
-
-
-
- - -
-
-
-
- Rio All-Suite Hotel & Casino -
-
-

- Rio All-Suite Hotel & Casino -

-

- Located just off the Las Vegas Strip, the Rio All-Suite Hotel & Casino is an iconic Las Vegas destination known for hosting world-class events and entertainment. -

-
-
- 🏛️ -
-

World-Class Facilities

-

State-of-the-art tournament space with professional-grade tables and equipment

-
-
-
- 👥 -
-

Spectator Experience

-

Excellent viewing areas and amenities for fans and spectators

-
-
-
- -
-

Las Vegas Experience

-

Access to world-class dining, entertainment, and accommodations

-
-
-
-
-
-
-
- - -
-
-
-

- Concurrent Competition -

-

- The tournament ran concurrently with the Billiard Congress of America's National Ten-ball event, creating an unprecedented week of elite ten-ball competition in Las Vegas. -

-

- This collaboration between international and national governing bodies showcased the global appeal of ten-ball and provided players and fans with an unparalleled championship experience. -

-
-
-
- - -
-
-
-

- Official Tournament Sponsor -

-
-

Predator Group

-

Premium Cue Manufacturer

-
-

- Predator Group, renowned for manufacturing the world's finest pool cues, proudly sponsored the 2019 WPA World Ten-ball Championship, providing players with top-tier equipment for championship-level play. -

-
-
-
- - - - - - - - - - - - - \ No newline at end of file diff --git a/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/index.html b/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/index.html deleted file mode 100644 index f4cd0e45ed3b132a8803fa7a6e1f6749837a0ae1..0000000000000000000000000000000000000000 --- a/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/index.html +++ /dev/null @@ -1,1013 +0,0 @@ - - - - - - 2019 WPA World Ten-ball Championship - Las Vegas - - - - - - - - -
- -
- -
- Pool Championship -
-
- - -
-
-
- - 🏆 5th Edition Championship - -
- -

- 2019 WPA World
- Ten-ball Championship -

- -

- The World's Premier Ten-ball Tournament -

- -

- 📅 July 22-26, 2019 | 📍 Rio All-Suite Hotel & Casino, Las Vegas, Nevada -

- - -
-
- - -
- - - -
-
- - -
-
-
-
-
🏆
-

5th Edition

-

Fifth WPA World Ten-ball Championship

-
-
-
📅
-

July 22-26, 2019

-

Five days of elite competition

-
-
-
📍
-

Las Vegas, USA

-

Rio All-Suite Hotel & Casino

-
-
-
🎱
-

World-Class Players

-

Top ten-ball professionals worldwide

-
-
-
-
- - -
-
-
-
-

- A Historic Championship -

-

- The 2019 WPA World Ten-ball Championship marked the fifth edition of this prestigious tournament. After plans for events in 2016 and 2018 in Manila fell through, the championship found its new home in Las Vegas as part of a groundbreaking three-year deal. -

-

- Organized by the World Pool-Billiard Association (WPA) and CueSports International, the tournament ran concurrently with the Billiard Congress of America's National Ten-ball event, creating an unprecedented week of world-class ten-ball competition. -

- -
-
- Championship -
-
-
-
- - -
-
-
-

- Featured Players -

-

- World-class competitors from around the globe -

-
- -
-
-
- Ko Pin-yi -
-
-
-

Ko Pin-yi

- - #1 - -
-

🌍 Taiwan

-
-
-
-
- Jayson Shaw -
-
-
-

Jayson Shaw

- - #2 - -
-

🌍 Scotland

-
-
-
-
- Fedor Gorst -
-
-
-

Fedor Gorst

- - #3 - -
-

🌍 Russia

-
-
-
-
- Joshua Filler -
-
-
-

Joshua Filler

- - #4 - -
-

🌍 Germany

-
-
-
-
- Albin Ouschan -
-
-
-

Albin Ouschan

- - #5 - -
-

🌍 Austria

-
-
-
-
- Shane Van Boening -
-
-
-

Shane Van Boening

- - #6 - -
-

🌍 USA

-
-
-
- - -
-
- - -
-
-
-
- Rio All-Suite Hotel & Casino -
-
-

- The Venue: Rio Las Vegas -

-

- The Rio All-Suite Hotel & Casino provided the perfect backdrop for this world-class tournament. Located in the heart of Las Vegas, the Rio's state-of-the-art facilities and championship atmosphere created an unforgettable experience for players and spectators alike. -

-
-
- 📍 -
-

Location

-

3700 W Flamingo Rd, Las Vegas, NV 89103

-
-
-
- 🏨 -
-

World-Class Facilities

-

Professional tournament tables and viewing areas

-
-
-
- 🎰 -
-

Entertainment Capital

-

Las Vegas, the ultimate destination for world championships

-
-
-
-
-
-
-
- - -
-
-

Official Sponsor

-
-

Predator Group

-

Premium Cue Manufacturer

-
-
-
- - -
-
-

- Experience the Championship -

-

- Explore the tournament results, player profiles, and exclusive photo gallery from this historic event. -

- -
-
- - - - - - - - - - - - - \ No newline at end of file diff --git a/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/plan.md b/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/plan.md deleted file mode 100644 index ba6a7191b43e3903146d782b270d22aeb4f809dd..0000000000000000000000000000000000000000 --- a/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/plan.md +++ /dev/null @@ -1,127 +0,0 @@ -# 2019 WPA World Ten-ball Championship Website - Development Plan - -## Project Overview -A modern, sporty multipage website for the 2019 WPA World Ten-ball Championship held at Rio All-Suite Hotel & Casino, Las Vegas. - -## Technology Stack -- **Styling**: TailwindCSS (via CDN) -- **Animations**: Framer Motion (via CDN) -- **Images**: Picsum Photos -- **Templating**: Handlebars for reusable components -- **Structure**: Multi-page HTML site - -## Design Aesthetics -- **Modern & Sporty**: Bold typography, dynamic layouts, vibrant colors -- **Color Scheme**: - - Primary: Deep blue (#1e3a8a) - professional pool table felt - - Accent: Bright green (#10b981) - billiard table - - Secondary: Gold/Yellow (#fbbf24) - championship/winner - - Dark: #0f172a - - Light: #f8fafc -- **Typography**: Sans-serif, bold headings, clean body text -- **Animations**: Smooth transitions, scroll animations, hover effects - -## Site Structure - -### Pages -1. **Home (index.html)** - - Hero section with championship title and dates - - Quick facts/highlights - - Featured image gallery - - Call-to-action sections - - Latest news/updates section - -2. **About (about.html)** - - Tournament history - - WPA & CueSports International information - - Ten-ball discipline explanation - - Venue information (Rio All-Suite Hotel & Casino) - - Sponsorship (Predator Group) - -3. **Schedule (schedule.html)** - - Tournament dates (July 22-26, 2019) - - Daily schedule breakdown - - Concurrent BCA National Ten-ball event info - - Timeline visualization - -4. **Players (players.html)** - - Featured players/competitors - - Player profiles with images - - Past champions (2015 and earlier) - - Player statistics - -5. **Results (results.html)** - - Tournament brackets - - Match results - - Final standings - - Championship winner highlight - -6. **Gallery (gallery.html)** - - Photo gallery from the event - - Action shots - - Venue photos - - Award ceremony images - -7. **Contact (contact.html)** - - Contact form - - WPA contact information - - Venue location map - - Social media links - -## Reusable Components (Handlebars Templates) - -### 1. Navigation Bar (`/templates/nav.hbs`) -- Logo/Championship branding -- Navigation links to all pages -- Responsive mobile menu -- Sticky header with animation - -### 2. Footer (`/templates/footer.hbs`) -- Organization logos (WPA, CueSports International) -- Sponsor information (Predator Group) -- Quick links -- Social media icons -- Copyright information - -### 3. Hero Section (`/templates/hero.hbs`) -- Customizable per page -- Background image overlay -- Title and subtitle -- CTA buttons - -### 4. Card Component (`/templates/card.hbs`) -- Reusable for players, news, schedule items -- Image, title, description -- Hover animations - -## Animation Strategy (Framer Motion) -- **Page Load**: Fade-in animations for hero sections -- **Scroll**: Reveal animations for content sections -- **Hover**: Scale and shadow effects on cards -- **Navigation**: Smooth transitions between pages -- **Gallery**: Lightbox effects and image transitions - -## Implementation Order -1. ✅ Create plan.md -2. Create data.json with site data -3. Create Handlebars templates (nav, footer, hero, card) -4. Create global styles.css -5. Build index.html (Home) -6. Build about.html -7. Build schedule.html -8. Build players.html -9. Build results.html -10. Build gallery.html -11. Build contact.html -12. Add Framer Motion animations -13. Test responsive design -14. Final polish and optimization - -## Key Features -- Fully responsive design (mobile-first) -- Smooth animations and transitions -- Image optimization with Picsum -- Accessible navigation -- Clean, modern UI -- Fast loading times -- Cross-browser compatibility \ No newline at end of file diff --git a/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/players.html b/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/players.html deleted file mode 100644 index 1b8fb39ea2764d2201374407207cab43227f95d8..0000000000000000000000000000000000000000 --- a/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/players.html +++ /dev/null @@ -1,1044 +0,0 @@ - - - - - - Players - 2019 WPA World Ten-ball Championship - - - - - - - - -
- -
-
- Championship Players -
-
- -
-
-
- - 🌍 World-Class Athletes - -
-

- Championship Players -

-

- The world's best ten-ball professionals competing for glory -

-
-
- -
- - - -
-
- - -
-
-
-

- Featured Competitors -

-

- Elite players from across the globe -

-
- -
-
-
- Ko Pin-yi -
- - #1 - -
-
-
-

Ko Pin-yi

-

🌍 Taiwan

-
-
- World Ranking - Top 1 -
-
- Discipline - Ten-ball -
-
-
-
-
-
- Jayson Shaw -
- - #2 - -
-
-
-

Jayson Shaw

-

🌍 Scotland

-
-
- World Ranking - Top 2 -
-
- Discipline - Ten-ball -
-
-
-
-
-
- Fedor Gorst -
- - #3 - -
-
-
-

Fedor Gorst

-

🌍 Russia

-
-
- World Ranking - Top 3 -
-
- Discipline - Ten-ball -
-
-
-
-
-
- Joshua Filler -
- - #4 - -
-
-
-

Joshua Filler

-

🌍 Germany

-
-
- World Ranking - Top 4 -
-
- Discipline - Ten-ball -
-
-
-
-
-
- Albin Ouschan -
- - #5 - -
-
-
-

Albin Ouschan

-

🌍 Austria

-
-
- World Ranking - Top 5 -
-
- Discipline - Ten-ball -
-
-
-
-
-
- Shane Van Boening -
- - #6 - -
-
-
-

Shane Van Boening

-

🌍 USA

-
-
- World Ranking - Top 6 -
-
- Discipline - Ten-ball -
-
-
-
-
-
-
- - -
-
-
-

- Tournament Statistics -

-
- -
-
-
🌍
-
30
-

Countries Represented

-
-
-
🏆
-
64
-

Total Players

-
-
-
-
15
-

Former Champions

-
-
-
🎯
-
100
-

% Elite Competition

-
-
-
-
- - -
-
-
-

- Previous Champions -

-

- A legacy of excellence since the tournament's inception -

-
- -
-
-
🥇
-

2015 Champion

-

Previous Edition

-

4th WPA World Ten-ball

-
-
-
🏆
-

Historic Event

-

5th Edition

-

2019 Championship

-
-
-
🌟
-

World-Class

-

Elite Competition

-

Best of the Best

-
-
-
🎯
-

Las Vegas

-

New Era

-

3-Year Deal

-
-
-
-
- - -
-
-
-
- Player Spotlight -
-
-

- Global Competition -

-

- The 2019 WPA World Ten-ball Championship brought together the finest ten-ball players from over 30 countries, representing every continent and showcasing the truly global appeal of professional pool. -

-

- From seasoned veterans to rising stars, each competitor brought their unique style and strategy to the championship tables at the Rio All-Suite Hotel & Casino. -

-
-
-

64+

-

Elite Players

-
-
-

30+

-

Nations

-
-
-
-
-
-
- - -
-
-

- See the Results -

-

- Check out the tournament brackets and final standings -

- -
-
- - - - - - - - - - - - - \ No newline at end of file diff --git a/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/robots.txt b/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/robots.txt deleted file mode 100644 index bf1281b4aff80d990a540d0efc60db06ee642f7e..0000000000000000000000000000000000000000 --- a/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/robots.txt +++ /dev/null @@ -1,9 +0,0 @@ -User-agent: * -Allow: / - -Sitemap: http://localhost:3000/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/sitemap.xml - -# Disallow common non-content paths -Disallow: /api/ -Disallow: /_next/ -Disallow: /admin/ diff --git a/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/schedule.html b/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/schedule.html deleted file mode 100644 index e2bc893da88b925a94d26cb068e1f3e302a74ea5..0000000000000000000000000000000000000000 --- a/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/schedule.html +++ /dev/null @@ -1,1044 +0,0 @@ - - - - - - Schedule - 2019 WPA World Ten-ball Championship - - - - - - - - -
- -
-
- Tournament Schedule -
-
- -
-
-
- - 📅 July 22-26, 2019 - -
-

- Tournament Schedule -

-

- Five days of world-class ten-ball competition -

-
-
- -
- - - -
-
- - -
-
-
-
-
📅
-
5
-

Days of Competition

-
-
-
🎱
-
100
-

+ Matches Played

-
-
-
🌍
-
30
-

+ Countries Represented

-
-
-
-
- - -
-
-
-

- Daily Schedule -

-

- Complete tournament timeline from July 22-26, 2019 -

-
- -
-
-
-
-
-

Monday

-

July 22, 2019

-
-
- - Day 0 - -
-
-
-
- - - -

Player Registration

-
-
- - - -

Opening Ceremony

-
-
- - - -

Preliminary Rounds Begin

-
-
-
-
-
-
-
-
-

Tuesday

-

July 23, 2019

-
-
- - Day 1 - -
-
-
-
- - - -

Round of 64

-
-
- - - -

Round of 32 Begins

-
-
-
-
-
-
-
-
-

Wednesday

-

July 24, 2019

-
-
- - Day 2 - -
-
-
-
- - - -

Round of 32 Continues

-
-
- - - -

Round of 16

-
-
-
-
-
-
-
-
-

Thursday

-

July 25, 2019

-
-
- - Day 3 - -
-
-
-
- - - -

Quarter Finals

-
-
- - - -

Semi Finals

-
-
-
-
-
-
-
-
-

Friday

-

July 26, 2019

-
-
- - Day 4 - -
-
-
-
- - - -

Championship Final

-
-
- - - -

Awards Ceremony

-
-
-
-
-
-
-
- - -
-
-
-
- ✨ Special Event -
-

- Concurrent BCA National Ten-ball Event -

-

- The WPA World Ten-ball Championship ran concurrently with the Billiard Congress of America's National Ten-ball event, creating an unprecedented week of elite ten-ball competition. -

-

- This collaboration brought together the world's best players and created a unique atmosphere of international and national competition under one roof at the Rio All-Suite Hotel & Casino. -

-
-
-
- - -
-
-
-
-

- Venue Details -

-
-
-
- - - - -
-
-

Location

-

Rio All-Suite Hotel & Casino

-

3700 W Flamingo Rd, Las Vegas, NV 89103

-
-
- -
-
- - - -
-
-

Tournament Hours

-

Daily sessions starting at 11:00 AM

-

Finals: Friday, July 26 - Evening Session

-
-
- -
-
- - - -
-
-

Spectator Access

-

Open to the public

-

Premium seating available for finals

-
-
-
-
-
- Tournament Venue -
-
-
-
- - -
-
-

- Explore More -

-

- Check out the tournament results and player profiles -

- -
-
- - - - - - - - - - - - - \ No newline at end of file diff --git a/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/scripts/main.js b/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/scripts/main.js deleted file mode 100644 index 9feb8f36c9f9d1411f7f513d627c4ce30f02b00f..0000000000000000000000000000000000000000 --- a/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/scripts/main.js +++ /dev/null @@ -1,213 +0,0 @@ -// Main JavaScript for WPA World Ten-ball Championship 2019 - -// Mobile Menu Toggle -document.addEventListener('DOMContentLoaded', function() { - const mobileMenuButton = document.getElementById('mobile-menu-button'); - const mobileMenu = document.getElementById('mobile-menu'); - - if (mobileMenuButton && mobileMenu) { - mobileMenuButton.addEventListener('click', function() { - mobileMenu.classList.toggle('hidden'); - }); - } - - // Active Navigation Link - const currentPage = window.location.pathname.split('/').pop() || 'index.html'; - const navLinks = document.querySelectorAll('.nav-link'); - - navLinks.forEach(link => { - if (link.getAttribute('href') === currentPage) { - link.classList.add('active'); - } - }); - - // Smooth Scroll for Anchor Links - document.querySelectorAll('a[href^="#"]').forEach(anchor => { - anchor.addEventListener('click', function (e) { - e.preventDefault(); - const target = document.querySelector(this.getAttribute('href')); - if (target) { - target.scrollIntoView({ - behavior: 'smooth', - block: 'start' - }); - } - }); - }); - - // Navbar Background on Scroll - const navbar = document.getElementById('navbar'); - if (navbar) { - window.addEventListener('scroll', function() { - if (window.scrollY > 50) { - navbar.classList.add('shadow-xl'); - } else { - navbar.classList.remove('shadow-xl'); - } - }); - } - - // Lazy Loading Images - if ('IntersectionObserver' in window) { - const imageObserver = new IntersectionObserver((entries, observer) => { - entries.forEach(entry => { - if (entry.isIntersecting) { - const img = entry.target; - if (img.dataset.src) { - img.src = img.dataset.src; - img.classList.add('fade-in'); - observer.unobserve(img); - } - } - }); - }); - - document.querySelectorAll('img[data-src]').forEach(img => { - imageObserver.observe(img); - }); - } - - // Animate Elements on Scroll - const animateOnScroll = () => { - const elements = document.querySelectorAll('.animate-on-scroll'); - - elements.forEach(element => { - const elementTop = element.getBoundingClientRect().top; - const elementBottom = element.getBoundingClientRect().bottom; - - if (elementTop < window.innerHeight && elementBottom > 0) { - element.classList.add('fade-in'); - } - }); - }; - - window.addEventListener('scroll', animateOnScroll); - animateOnScroll(); // Initial check - - // Gallery Lightbox (Simple Implementation) - const galleryItems = document.querySelectorAll('.gallery-item'); - - galleryItems.forEach(item => { - item.addEventListener('click', function() { - const imgSrc = this.querySelector('img').src; - const lightbox = document.createElement('div'); - lightbox.className = 'fixed inset-0 bg-black/90 z-50 flex items-center justify-center p-4'; - lightbox.innerHTML = ` -
- Gallery Image - -
- `; - - document.body.appendChild(lightbox); - - // Close lightbox on click - lightbox.addEventListener('click', function(e) { - if (e.target === lightbox || e.target.closest('button')) { - lightbox.remove(); - } - }); - - // Close on Escape key - document.addEventListener('keydown', function(e) { - if (e.key === 'Escape' && lightbox) { - lightbox.remove(); - } - }); - }); - }); - - // Form Validation - const contactForm = document.getElementById('contact-form'); - - if (contactForm) { - contactForm.addEventListener('submit', function(e) { - e.preventDefault(); - - // Simple validation - const name = document.getElementById('name').value.trim(); - const email = document.getElementById('email').value.trim(); - const message = document.getElementById('message').value.trim(); - - if (!name || !email || !message) { - alert('Please fill in all fields'); - return; - } - - if (!isValidEmail(email)) { - alert('Please enter a valid email address'); - return; - } - - // Show success message - const successMessage = document.createElement('div'); - successMessage.className = 'fixed top-24 right-4 bg-emerald-500 text-white px-6 py-4 rounded-lg shadow-lg z-50'; - successMessage.textContent = 'Message sent successfully!'; - document.body.appendChild(successMessage); - - // Remove message after 3 seconds - setTimeout(() => { - successMessage.remove(); - }, 3000); - - // Reset form - contactForm.reset(); - }); - } - - // Email Validation Helper - function isValidEmail(email) { - const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; - return emailRegex.test(email); - } - - // Counter Animation for Stats - const animateCounter = (element, target, duration = 2000) => { - let start = 0; - const increment = target / (duration / 16); - - const timer = setInterval(() => { - start += increment; - if (start >= target) { - element.textContent = target; - clearInterval(timer); - } else { - element.textContent = Math.floor(start); - } - }, 16); - }; - - // Trigger counter animation when visible - const statNumbers = document.querySelectorAll('.stat-number'); - - if (statNumbers.length > 0 && 'IntersectionObserver' in window) { - const statsObserver = new IntersectionObserver((entries) => { - entries.forEach(entry => { - if (entry.isIntersecting) { - const target = parseInt(entry.target.dataset.target); - if (target) { - animateCounter(entry.target, target); - statsObserver.unobserve(entry.target); - } - } - }); - }); - - statNumbers.forEach(stat => { - statsObserver.observe(stat); - }); - } -}); - -// Initialize Framer Motion animations (if available) -if (typeof Motion !== 'undefined') { - // Add motion animations to elements - Motion.animate('.card-item', - { opacity: [0, 1], y: [50, 0] }, - { duration: 0.5, delay: Motion.stagger(0.1) } - ); -} \ No newline at end of file diff --git a/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/sitemap.xml b/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/sitemap.xml deleted file mode 100644 index 8ee76c27a6697e964a008fce3287370e48bfa506..0000000000000000000000000000000000000000 --- a/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/sitemap.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - http://localhost:3000/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/about.html - 2025-12-11 - weekly - 0.8 - - - http://localhost:3000/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7 - 2025-12-11 - weekly - 1.0 - - - http://localhost:3000/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/players.html - 2025-12-11 - weekly - 0.8 - - - http://localhost:3000/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/schedule.html - 2025-12-11 - weekly - 0.8 - - \ No newline at end of file diff --git a/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/styles/style.css b/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/styles/style.css deleted file mode 100644 index 8fd34c6a66ed3c7fd960198df5610b6d4b93923d..0000000000000000000000000000000000000000 --- a/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/styles/style.css +++ /dev/null @@ -1,266 +0,0 @@ -/* Global Styles for WPA World Ten-ball Championship 2019 */ - -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -html { - scroll-behavior: smooth; -} - -body { - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; - background-color: #f8fafc; - color: #0f172a; - line-height: 1.6; -} - -/* Active Navigation Link */ -.nav-link.active { - background-color: #10b981; - color: white; -} - -/* Hero Section Animations */ -.hero-section { - min-height: 600px; - display: flex; - align-items: center; - justify-content: center; -} - -/* Card Hover Effects */ -.card-item { - transition: all 0.3s ease; -} - -.card-item:hover { - transform: translateY(-8px); - box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15); -} - -/* Gradient Text */ -.gradient-text { - background: linear-gradient(135deg, #10b981 0%, #1e3a8a 100%); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; -} - -/* Section Spacing */ -.section { - padding: 80px 0; -} - -/* Custom Scrollbar */ -::-webkit-scrollbar { - width: 10px; -} - -::-webkit-scrollbar-track { - background: #f1f1f1; -} - -::-webkit-scrollbar-thumb { - background: #10b981; - border-radius: 5px; -} - -::-webkit-scrollbar-thumb:hover { - background: #059669; -} - -/* Image Lazy Loading */ -img { - max-width: 100%; - height: auto; -} - -/* Timeline Styles */ -.timeline-item { - position: relative; - padding-left: 40px; - padding-bottom: 40px; -} - -.timeline-item::before { - content: ''; - position: absolute; - left: 0; - top: 0; - width: 3px; - height: 100%; - background: linear-gradient(180deg, #10b981 0%, #1e3a8a 100%); -} - -.timeline-item::after { - content: ''; - position: absolute; - left: -6px; - top: 0; - width: 15px; - height: 15px; - background: #10b981; - border: 3px solid #fff; - border-radius: 50%; - box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.2); -} - -/* Gallery Grid */ -.gallery-grid { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); - gap: 20px; -} - -.gallery-item { - position: relative; - overflow: hidden; - border-radius: 12px; - cursor: pointer; - aspect-ratio: 4/3; -} - -.gallery-item img { - width: 100%; - height: 100%; - object-fit: cover; - transition: transform 0.3s ease; -} - -.gallery-item:hover img { - transform: scale(1.1); -} - -.gallery-item-overlay { - position: absolute; - inset: 0; - background: linear-gradient(to top, rgba(0,0,0,0.7) 0%, transparent 50%); - display: flex; - align-items: flex-end; - padding: 20px; - opacity: 0; - transition: opacity 0.3s ease; -} - -.gallery-item:hover .gallery-item-overlay { - opacity: 1; -} - -/* Form Styles */ -input, textarea, select { - width: 100%; - padding: 12px 16px; - border: 2px solid #e2e8f0; - border-radius: 8px; - font-size: 16px; - transition: border-color 0.2s ease; -} - -input:focus, textarea:focus, select:focus { - outline: none; - border-color: #10b981; - box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); -} - -/* Button Styles */ -.btn { - display: inline-block; - padding: 12px 24px; - border-radius: 8px; - font-weight: 600; - text-decoration: none; - transition: all 0.2s ease; - cursor: pointer; - border: none; -} - -.btn-primary { - background: #10b981; - color: white; -} - -.btn-primary:hover { - background: #059669; - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(16, 185, 129, 0.4); -} - -.btn-secondary { - background: #1e3a8a; - color: white; -} - -.btn-secondary:hover { - background: #1e40af; - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(30, 58, 138, 0.4); -} - -/* Stats Counter */ -.stat-item { - text-align: center; - padding: 30px; - background: white; - border-radius: 12px; - box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); -} - -.stat-number { - font-size: 3rem; - font-weight: 700; - background: linear-gradient(135deg, #10b981 0%, #1e3a8a 100%); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; -} - -/* Responsive Design */ -@media (max-width: 768px) { - .hero-section { - min-height: 500px; - display: flex; - align-items: center; - justify-content: center; - } - - .section { - padding: 60px 0; - } - - .stat-number { - font-size: 2rem; - } -} - -/* Loading Animation */ -@keyframes fadeIn { - from { - opacity: 0; - transform: translateY(20px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -.fade-in { - animation: fadeIn 0.6s ease-out; -} - -/* Pulse Animation for Badges */ -@keyframes pulse { - 0%, 100% { - opacity: 1; - } - 50% { - opacity: 0.7; - } -} - -.pulse { - animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; -} \ No newline at end of file diff --git a/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/testing.txt b/public/sites/6333fd6d-b2bf-4eb2-a48e-762b7a7be8b7/testing.txt deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/contact.html b/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/contact.html deleted file mode 100644 index e95dd042203c483f535b1a641048ca79260cd6c0..0000000000000000000000000000000000000000 --- a/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/contact.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - Contact & Quote - Miyagi's Floor Waxing Services - - - - - - - - -
- -
- -
-
-
- Professional floor waxing services -
-
-

Contact & Get a Quote

-

Ready for beautifully maintained floors? Let's talk!

-
-
- -
-
-
-
-

Request Your Free Quote

-
-
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- - -
- - -
- -
-
-

Business Information

-
- - - -
-

Business Hours

-

Monday - Friday: 8:00 AM - 6:00 PM

-

Saturday: 9:00 AM - 4:00 PM

-

Sunday: Closed

-
-
- -
- - - -
-

Contact

-

Phone: (555) 123-4567

-

Email: info@miyagifloorwaxing.com

-

Emergency: (555) 987-6543

-
-
- -
- - - - -
-

Service Areas

-

Greater Metropolitan Area

-

Within 50 miles of downtown

-

Commercial & Residential properties

-
-
-
- -
-

Service Area Map

-
-
- - - - -

Interactive map coming soon

- Google Maps integration will be added here -
-
-
-
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/data/services.json b/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/data/services.json deleted file mode 100644 index 5ef64a81944f7efff3eb52bd3ad51b1617b9c2cf..0000000000000000000000000000000000000000 --- a/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/data/services.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "services": [ - { - "id": "strip-wax", - "title": "Strip & Wax", - "summary": "Complete removal of old wax and application of fresh, durable coating for ultimate shine and protection.", - "image": "https://picsum.photos/400/300?random=1", - "description": "Our comprehensive strip and wax service removes all built-up wax, dirt, and grime, revealing the natural beauty of your floors. We apply multiple coats of high-quality commercial wax for long-lasting protection." - }, - { - "id": "buffing-polishing", - "title": "Buffing & Polishing", - "summary": "Restore shine and remove minor scratches without full stripping, perfect for regular maintenance.", - "image": "https://picsum.photos/400/300?random=2", - "description": "Professional buffing and polishing brings back the glossy finish of your floors. Ideal for high-traffic areas that need regular attention to maintain their appearance." - }, - { - "id": "deep-clean", - "title": "Deep Clean", - "summary": "Thorough cleaning service that removes deep-seated dirt and prepares floors for treatment.", - "image": "https://picsum.photos/400/300?random=3", - "description": "Intensive deep cleaning removes stubborn stains, embedded dirt, and buildup that regular mopping can't touch. Perfect preparation for waxing or as a standalone service." - }, - { - "id": "maintenance-plans", - "title": "Maintenance Plans", - "summary": "Scheduled service plans to keep your floors looking pristine year-round with discounted rates.", - "image": "https://picsum.photos/400/300?random=4", - "description": "Customized maintenance programs ensure your floors always look their best. Regular service prevents wear and extends the life of your flooring investment." - } - ] -} \ No newline at end of file diff --git a/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/data/testimonials.json b/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/data/testimonials.json deleted file mode 100644 index fc93f18e9ae8a2ca370ef35a4350774936520532..0000000000000000000000000000000000000000 --- a/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/data/testimonials.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "testimonials": [ - { - "name": "Sarah Johnson", - "business": "Office Manager, TechCorp", - "text": "Miyagi's transformed our office floors. Professional service and incredible results!", - "rating": 5 - }, - { - "name": "Michael Chen", - "business": "Restaurant Owner", - "text": "Our restaurant floors have never looked better. Customers notice the difference!", - "rating": 5 - }, - { - "name": "Lisa Martinez", - "business": "Homeowner", - "text": "Reliable, punctual, and exceptional quality. Highly recommend!", - "rating": 5 - } - ] -} \ No newline at end of file diff --git a/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/index.html b/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/index.html deleted file mode 100644 index 268ed4ee9127eda949aee23da2d423a049c6850a..0000000000000000000000000000000000000000 --- a/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/index.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - Home - Miyagi's Floor Waxing Services - - - - - - - - -
- -
- -
-
-
- Professional floor waxing services -
-
-

Miyagi's Floor Waxing Services

-

Wax on. Shine strong.

- Get a Free Quote -
-
- -
-
-
-
-
- Residential floor waxing -
-

Residential

-

Professional floor care for homes of all sizes. Keep your living spaces pristine and protected.

- Learn More -
- -
-
- Commercial floor waxing -
-

Commercial

-

Expert solutions for businesses, offices, and retail spaces. Make a lasting impression on clients.

- Learn More -
- -
-
- Floor maintenance plans -
-

Maintenance

-

Regular service plans to keep your floors looking pristine year-round with discounted rates.

- Learn More -
-
-
-
- -
-
-

Trusted by Local Businesses & Homeowners

-
-
-

"Miyagi's transformed our office floors. Professional service and incredible results!"

- – Sarah Johnson, Office Manager -
-
-

"Our restaurant floors have never looked better. Customers notice the difference!"

- – Michael Chen, Restaurant Owner -
-
-

"Reliable, punctual, and exceptional quality. Highly recommend!"

- – Lisa Martinez, Homeowner -
-
-
-
- -
-
-

Why Choose Miyagi's?

-
-
- - - -

Satisfaction Guaranteed

-

We stand behind our work with a 100% satisfaction guarantee.

-
- -
- - - -

Punctual Service

-

We respect your time and always arrive on schedule, every time.

-
- -
- - - -

Fully Insured

-

Complete peace of mind with full liability insurance coverage.

-
- -
- - - -

Eco-Friendly

-

Environmentally responsible products that are safe for your family and pets.

-
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/public/css/styles.css b/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/public/css/styles.css deleted file mode 100644 index dea7bbdeb789b145e30da2b321517a84b231fdd3..0000000000000000000000000000000000000000 --- a/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/public/css/styles.css +++ /dev/null @@ -1,777 +0,0 @@ -/* Reset and Base Styles */ -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -:root { - --navy: #0b1e3b; - --gold: #d9a441; - --white: #ffffff; - --gray-light: #f8f9fa; - --gray-medium: #6c757d; - --gray-dark: #343a40; - --shadow-sm: 0 2px 4px rgba(0,0,0,0.1); - --shadow-md: 0 4px 6px rgba(0,0,0,0.1); - --shadow-lg: 0 10px 25px rgba(0,0,0,0.15); - --radius-sm: 4px; - --radius-md: 8px; - --radius-lg: 12px; -} - -body { - font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; - line-height: 1.6; - color: var(--gray-dark); - background-color: var(--white); -} - -.container { - max-width: 1200px; - margin: 0 auto; - padding: 0 20px; -} - -/* Typography */ -h1, h2, h3, h4 { - color: var(--navy); - font-weight: 600; - line-height: 1.2; -} - -h1 { font-size: clamp(2rem, 5vw, 3rem); } -h2 { font-size: clamp(1.5rem, 4vw, 2.5rem); } -h3 { font-size: clamp(1.25rem, 3vw, 1.75rem); } -h4 { font-size: clamp(1.1rem, 2.5vw, 1.25rem); } - -p { - margin-bottom: 1rem; - color: var(--gray-medium); -} - -/* Buttons */ -.btn { - display: inline-flex; - align-items: center; - justify-content: center; - padding: 12px 24px; - border: none; - border-radius: var(--radius-md); - font-size: 1rem; - font-weight: 500; - text-decoration: none; - cursor: pointer; - transition: all 0.3s ease; - min-height: 48px; -} - -.btn-primary { - background-color: var(--gold); - color: var(--white); -} - -.btn-primary:hover { - background-color: #c19638; - transform: translateY(-2px); - box-shadow: var(--shadow-md); -} - -.btn-secondary { - background-color: transparent; - color: var(--navy); - border: 2px solid var(--navy); -} - -.btn-secondary:hover { - background-color: var(--navy); - color: var(--white); - transform: translateY(-2px); - box-shadow: var(--shadow-md); -} - -.btn-large { - padding: 16px 32px; - font-size: 1.125rem; -} - -.btn-full { - width: 100%; -} - -/* Navigation */ -.header { - background-color: var(--white); - box-shadow: var(--shadow-sm); - position: sticky; - top: 0; - z-index: 1000; -} - -.nav-container { - max-width: 1200px; - margin: 0 auto; - padding: 0 20px; - display: flex; - justify-content: space-between; - align-items: center; - height: 70px; -} - -.nav-brand h1 { - font-size: 1.25rem; - color: var(--navy); - margin: 0; -} - -.nav-menu { - display: flex; - list-style: none; - gap: 2rem; -} - -.nav-link { - color: var(--gray-dark); - text-decoration: none; - font-weight: 500; - transition: color 0.3s ease; - position: relative; -} - -.nav-link:hover, -.nav-link.active { - color: var(--gold); -} - -.nav-link.active::after { - content: ''; - position: absolute; - bottom: -5px; - left: 0; - right: 0; - height: 2px; - background-color: var(--gold); -} - -.nav-toggle { - display: none; - flex-direction: column; - background: none; - border: none; - cursor: pointer; - padding: 5px; -} - -.nav-toggle span { - width: 25px; - height: 3px; - background-color: var(--navy); - margin: 3px 0; - transition: 0.3s; - border-radius: 2px; -} - -/* Hero Section */ -.hero { - position: relative; - height: 70vh; - min-height: 500px; - display: flex; - align-items: center; - justify-content: center; - overflow: hidden; -} - -.hero-background { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - z-index: -1; -} - -.hero-background img { - width: 100%; - height: 100%; - object-fit: cover; -} - -.hero::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: linear-gradient(135deg, rgba(11, 30, 59, 0.8), rgba(217, 164, 65, 0.6)); - z-index: 0; -} - -.hero-content { - text-align: center; - color: var(--white); - z-index: 1; - max-width: 800px; - padding: 0 20px; -} - -.hero-title { - font-size: clamp(2.5rem, 6vw, 4rem); - font-weight: 700; - margin-bottom: 1rem; - text-shadow: 2px 2px 4px rgba(0,0,0,0.3); -} - -.hero-subtitle { - font-size: clamp(1.25rem, 3vw, 1.75rem); - margin-bottom: 2rem; - opacity: 0.95; -} - -/* Features Section */ -.features { - padding: 80px 0; - background-color: var(--gray-light); -} - -.features-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: 2rem; - margin-top: 3rem; -} - -.feature-card { - background-color: var(--white); - border-radius: var(--radius-lg); - padding: 2rem; - box-shadow: var(--shadow-md); - transition: transform 0.3s ease, box-shadow 0.3s ease; - text-align: center; -} - -.feature-card:hover { - transform: translateY(-5px); - box-shadow: var(--shadow-lg); -} - -.feature-image { - width: 100%; - height: 200px; - border-radius: var(--radius-md); - overflow: hidden; - margin-bottom: 1.5rem; -} - -.feature-image img { - width: 100%; - height: 100%; - object-fit: cover; -} - -/* Trust Section */ -.trust { - padding: 80px 0; - text-align: center; -} - -.trust h2 { - margin-bottom: 3rem; -} - -.testimonials-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: 2rem; -} - -.testimonial { - background-color: var(--gray-light); - padding: 2rem; - border-radius: var(--radius-lg); - border-left: 4px solid var(--gold); -} - -.testimonial p { - font-style: italic; - margin-bottom: 1rem; - color: var(--gray-dark); -} - -.testimonial cite { - color: var(--gold); - font-weight: 500; - font-style: normal; -} - -/* Why Choose Section */ -.why-choose { - padding: 80px 0; - background-color: var(--gray-light); -} - -.why-choose h2 { - text-align: center; - margin-bottom: 3rem; -} - -.benefits-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); - gap: 2rem; -} - -.benefit { - text-align: center; - padding: 2rem; -} - -.benefit .icon { - width: 60px; - height: 60px; - color: var(--gold); - margin-bottom: 1rem; -} - -/* Services Section */ -.services-list { - padding: 80px 0; -} - -.grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); - gap: 2rem; - margin-top: 3rem; -} - -.card { - background-color: var(--white); - border-radius: var(--radius-lg); - overflow: hidden; - box-shadow: var(--shadow-md); - transition: transform 0.3s ease, box-shadow 0.3s ease; -} - -.card:hover { - transform: translateY(-5px); - box-shadow: var(--shadow-lg); -} - -.card-image { - width: 100%; - height: 250px; - overflow: hidden; -} - -.card-image img { - width: 100%; - height: 100%; - object-fit: cover; -} - -.card-content { - padding: 2rem; -} - -.card-title { - margin-bottom: 1rem; -} - -.card-summary { - margin-bottom: 1rem; - font-weight: 500; - color: var(--gray-dark); -} - -.card-description { - margin-bottom: 1.5rem; - font-size: 0.95rem; -} - -/* Pricing Section */ -.pricing-comparison { - padding: 80px 0; - background-color: var(--gray-light); -} - -.pricing-comparison h2 { - text-align: center; - margin-bottom: 3rem; -} - -.pricing-table { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: 2rem; - max-width: 1000px; - margin: 0 auto; -} - -.pricing-card { - background-color: var(--white); - border-radius: var(--radius-lg); - padding: 2.5rem 2rem; - text-align: center; - box-shadow: var(--shadow-md); - position: relative; - transition: transform 0.3s ease; -} - -.pricing-card:hover { - transform: translateY(-5px); -} - -.pricing-card.featured { - border: 2px solid var(--gold); - transform: scale(1.05); -} - -.popular-badge { - position: absolute; - top: -15px; - left: 50%; - transform: translateX(-50%); - background-color: var(--gold); - color: var(--white); - padding: 5px 15px; - border-radius: 20px; - font-size: 0.875rem; - font-weight: 600; -} - -.pricing-card h3 { - margin-bottom: 1rem; - font-size: 1.5rem; -} - -.price { - font-size: 2.5rem; - font-weight: 700; - color: var(--gold); - margin-bottom: 2rem; -} - -.price span { - font-size: 1rem; - color: var(--gray-medium); -} - -.pricing-card ul { - list-style: none; - margin-bottom: 2rem; - text-align: left; -} - -.pricing-card li { - padding: 0.5rem 0; - color: var(--gray-dark); - position: relative; - padding-left: 1.5rem; -} - -.pricing-card li::before { - content: '✓'; - position: absolute; - left: 0; - color: var(--gold); - font-weight: bold; -} - -/* Contact Section */ -.contact-content { - padding: 80px 0; -} - -.contact-grid { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 4rem; - margin-top: 3rem; -} - -.contact-form-section h2 { - margin-bottom: 2rem; -} - -.contact-form { - background-color: var(--gray-light); - padding: 2rem; - border-radius: var(--radius-lg); -} - -.form-group { - margin-bottom: 1.5rem; -} - -.form-group label { - display: block; - margin-bottom: 0.5rem; - font-weight: 500; - color: var(--gray-dark); -} - -.form-group input, -.form-group select, -.form-group textarea { - width: 100%; - padding: 12px; - border: 2px solid #e0e0e0; - border-radius: var(--radius-sm); - font-size: 1rem; - transition: border-color 0.3s ease; - font-family: inherit; -} - -.form-group input:focus, -.form-group select:focus, -.form-group textarea:focus { - outline: none; - border-color: var(--gold); -} - -.form-group textarea { - resize: vertical; - min-height: 120px; -} - -.form-success { - background-color: #d4edda; - border: 1px solid #c3e6cb; - color: #155724; - padding: 2rem; - border-radius: var(--radius-lg); - text-align: center; -} - -.business-info { - margin-bottom: 3rem; -} - -.business-info h2 { - margin-bottom: 2rem; -} - -.info-item { - display: flex; - align-items: flex-start; - gap: 1rem; - margin-bottom: 2rem; -} - -.info-item .icon { - width: 24px; - height: 24px; - color: var(--gold); - flex-shrink: 0; - margin-top: 2px; -} - -.map-placeholder h2 { - margin-bottom: 1rem; -} - -.map-container { - height: 300px; - background-color: var(--gray-light); - border-radius: var(--radius-lg); - display: flex; - align-items: center; - justify-content: center; -} - -.map-placeholder-content { - text-align: center; - color: var(--gray-medium); -} - -.map-placeholder-content .icon { - width: 48px; - height: 48px; - margin-bottom: 1rem; -} - -/* Footer */ -.footer { - background-color: var(--navy); - color: var(--white); - padding: 60px 0 20px; -} - -.footer-container { - max-width: 1200px; - margin: 0 auto; - padding: 0 20px; -} - -.footer-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); - gap: 2rem; - margin-bottom: 3rem; -} - -.footer-section h3, -.footer-section h4 { - color: var(--white); - margin-bottom: 1rem; -} - -.footer-section p { - color: rgba(255, 255, 255, 0.8); - margin-bottom: 0.5rem; -} - -.footer-bottom { - border-top: 1px solid rgba(255, 255, 255, 0.1); - padding-top: 2rem; - text-align: center; - color: rgba(255, 255, 255, 0.6); -} - -/* Utility Classes */ -.text-center { - text-align: center; -} - -.mb-0 { margin-bottom: 0; } -.mt-0 { margin-top: 0; } - -/* Responsive Design */ -@media (max-width: 768px) { - .nav-menu { - position: fixed; - top: 70px; - right: -100%; - width: 100%; - height: calc(100vh - 70px); - background-color: var(--white); - flex-direction: column; - justify-content: flex-start; - align-items: center; - padding-top: 2rem; - transition: right 0.3s ease; - box-shadow: var(--shadow-lg); - } - - .nav-menu.active { - right: 0; - } - - .nav-toggle { - display: flex; - } - - .nav-toggle.active span:nth-child(1) { - transform: rotate(-45deg) translate(-5px, 6px); - } - - .nav-toggle.active span:nth-child(2) { - opacity: 0; - } - - .nav-toggle.active span:nth-child(3) { - transform: rotate(45deg) translate(-5px, -6px); - } - - .hero { - height: 60vh; - min-height: 400px; - } - - .contact-grid { - grid-template-columns: 1fr; - gap: 3rem; - } - - .pricing-table { - grid-template-columns: 1fr; - } - - .pricing-card.featured { - transform: none; - } - - .features-grid, - .testimonials-grid, - .benefits-grid, - .grid { - grid-template-columns: 1fr; - } - - .container { - padding: 0 15px; - } -} - -@media (max-width: 480px) { - .feature-card, - .card, - .pricing-card { - padding: 1.5rem; - } - - .contact-form { - padding: 1.5rem; - } - - .hero-title { - font-size: 2rem; - } - - .hero-subtitle { - font-size: 1.25rem; - } -} - -/* Smooth Scrolling */ -html { - scroll-behavior: smooth; -} - -/* Loading and Transitions */ -img { - transition: opacity 0.3s ease; -} - -img[loading="lazy"] { - opacity: 0; -} - -img[loading="lazy"]:not(.loaded) { - opacity: 0; -} - -img[loading="lazy"].loaded { - opacity: 1; -} - -/* Focus States for Accessibility */ -.btn:focus, -input:focus, -select:focus, -textarea:focus { - outline: 2px solid var(--gold); - outline-offset: 2px; -} - -/* Print Styles */ -@media print { - .header, - .footer, - .nav-toggle, - .btn { - display: none; - } - - .hero { - height: auto; - min-height: 200px; - } - - body { - font-size: 12pt; - line-height: 1.4; - } -} \ No newline at end of file diff --git a/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/public/js/main.js b/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/public/js/main.js deleted file mode 100644 index 0a1c2a0b3aebdab40b943587a8552bf22e7a3d36..0000000000000000000000000000000000000000 --- a/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/public/js/main.js +++ /dev/null @@ -1,332 +0,0 @@ -// DOM Content Loaded -document.addEventListener('DOMContentLoaded', function() { - // Initialize all functionality - initMobileNavigation(); - initSmoothScroll(); - initQuoteButtons(); - initContactForm(); - initLazyLoading(); -}); - -// Mobile Navigation Toggle -function initMobileNavigation() { - const navToggle = document.querySelector('.nav-toggle'); - const navMenu = document.querySelector('.nav-menu'); - - if (!navToggle || !navMenu) return; - - navToggle.addEventListener('click', function() { - navToggle.classList.toggle('active'); - navMenu.classList.toggle('active'); - }); - - // Close mobile menu when clicking on a link - const navLinks = document.querySelectorAll('.nav-link'); - navLinks.forEach(link => { - link.addEventListener('click', function() { - navToggle.classList.remove('active'); - navMenu.classList.remove('active'); - }); - }); - - // Close mobile menu when clicking outside - document.addEventListener('click', function(e) { - if (!navToggle.contains(e.target) && !navMenu.contains(e.target)) { - navToggle.classList.remove('active'); - navMenu.classList.remove('active'); - } - }); -} - -// Smooth Scroll for Anchor Links -function initSmoothScroll() { - const anchorLinks = document.querySelectorAll('a[href^="#"]'); - - anchorLinks.forEach(link => { - link.addEventListener('click', function(e) { - e.preventDefault(); - - const targetId = this.getAttribute('href'); - const targetElement = document.querySelector(targetId); - - if (targetElement) { - const headerHeight = document.querySelector('.header').offsetHeight; - const targetPosition = targetElement.offsetTop - headerHeight; - - window.scrollTo({ - top: targetPosition, - behavior: 'smooth' - }); - } - }); - }); -} - -// Quote Request Buttons -function initQuoteButtons() { - const quoteButtons = document.querySelectorAll('.request-quote, [data-service]'); - - quoteButtons.forEach(button => { - button.addEventListener('click', function() { - const serviceType = this.getAttribute('data-service') || this.textContent.trim(); - - // Navigate to contact page - window.location.href = '/contact.html'; - - // Store the selected service in sessionStorage - sessionStorage.setItem('selectedService', serviceType); - }); - }); -} - -// Contact Form Handler -function initContactForm() { - const contactForm = document.getElementById('contactForm'); - const formSuccess = document.getElementById('formSuccess'); - - if (!contactForm) return; - - // Pre-fill service type if stored - const selectedService = sessionStorage.getItem('selectedService'); - if (selectedService) { - const serviceSelect = document.getElementById('serviceType'); - if (serviceSelect) { - const option = Array.from(serviceSelect.options).find(opt => - opt.value.toLowerCase().includes(selectedService.toLowerCase()) || - opt.textContent.toLowerCase().includes(selectedService.toLowerCase()) - ); - if (option) { - serviceSelect.value = option.value; - } - } - // Clear the stored service after using it - sessionStorage.removeItem('selectedService'); - } - - // Form validation and submission - contactForm.addEventListener('submit', function(e) { - e.preventDefault(); - - if (validateForm()) { - // Show success message - contactForm.style.display = 'none'; - if (formSuccess) { - formSuccess.style.display = 'block'; - } - - // In a real application, you would send the form data to a server here - console.log('Form submitted successfully'); - - // Reset form after 5 seconds - setTimeout(() => { - contactForm.reset(); - contactForm.style.display = 'block'; - if (formSuccess) { - formSuccess.style.display = 'none'; - } - }, 5000); - } - }); - - // Real-time validation - const requiredFields = contactForm.querySelectorAll('[required]'); - requiredFields.forEach(field => { - field.addEventListener('blur', function() { - validateField(this); - }); - - field.addEventListener('input', function() { - if (this.classList.contains('error')) { - validateField(this); - } - }); - }); -} - -// Form Validation -function validateForm() { - const contactForm = document.getElementById('contactForm'); - const requiredFields = contactForm.querySelectorAll('[required]'); - let isValid = true; - - requiredFields.forEach(field => { - if (!validateField(field)) { - isValid = false; - } - }); - - return isValid; -} - -function validateField(field) { - const fieldName = field.name; - const value = field.value.trim(); - let isValid = true; - let errorMessage = ''; - - // Remove existing error message - const existingError = field.parentNode.querySelector('.error-message'); - if (existingError) { - existingError.remove(); - } - - field.classList.remove('error'); - - // Required field validation - if (field.hasAttribute('required') && !value) { - isValid = false; - errorMessage = 'This field is required'; - } - - // Email validation - if (fieldName === 'email' && value) { - const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; - if (!emailPattern.test(value)) { - isValid = false; - errorMessage = 'Please enter a valid email address'; - } - } - - // Phone validation - if (fieldName === 'phone' && value) { - const phonePattern = /^[\d\s\-\(\)\+]+$/; - if (!phonePattern.test(value) || value.replace(/\D/g, '').length < 10) { - isValid = false; - errorMessage = 'Please enter a valid phone number'; - } - } - - // Postcode validation - if (fieldName === 'postcode' && value) { - if (value.length < 3) { - isValid = false; - errorMessage = 'Please enter a valid postcode'; - } - } - - // Display error if invalid - if (!isValid) { - field.classList.add('error'); - const errorElement = document.createElement('div'); - errorElement.className = 'error-message'; - errorElement.textContent = errorMessage; - errorElement.style.color = '#dc3545'; - errorElement.style.fontSize = '0.875rem'; - errorElement.style.marginTop = '0.25rem'; - field.parentNode.appendChild(errorElement); - } - - return isValid; -} - -// Lazy Loading for Images -function initLazyLoading() { - const images = document.querySelectorAll('img[loading="lazy"]'); - - if ('IntersectionObserver' in window) { - const imageObserver = new IntersectionObserver((entries, observer) => { - entries.forEach(entry => { - if (entry.isIntersecting) { - const img = entry.target; - img.classList.add('loaded'); - observer.unobserve(img); - } - }); - }); - - images.forEach(img => { - imageObserver.observe(img); - }); - } else { - // Fallback for browsers that don't support IntersectionObserver - images.forEach(img => { - img.classList.add('loaded'); - }); - } -} - -// Utility function to show toast notifications -function showToast(message, type = 'success') { - // Remove existing toast - const existingToast = document.querySelector('.toast'); - if (existingToast) { - existingToast.remove(); - } - - // Create new toast - const toast = document.createElement('div'); - toast.className = `toast toast-${type}`; - toast.textContent = message; - - // Style the toast - Object.assign(toast.style, { - position: 'fixed', - bottom: '20px', - right: '20px', - backgroundColor: type === 'success' ? '#28a745' : '#dc3545', - color: 'white', - padding: '12px 24px', - borderRadius: '4px', - boxShadow: '0 4px 6px rgba(0,0,0,0.1)', - zIndex: '9999', - opacity: '0', - transform: 'translateY(20px)', - transition: 'opacity 0.3s ease, transform 0.3s ease' - }); - - document.body.appendChild(toast); - - // Animate in - setTimeout(() => { - toast.style.opacity = '1'; - toast.style.transform = 'translateY(0)'; - }, 100); - - // Remove after 3 seconds - setTimeout(() => { - toast.style.opacity = '0'; - toast.style.transform = 'translateY(20px)'; - setTimeout(() => { - toast.remove(); - }, 300); - }, 3000); -} - -// Add CSS for error states -const style = document.createElement('style'); -style.textContent = ` - .form-group input.error, - .form-group select.error, - .form-group textarea.error { - border-color: #dc3545 !important; - box-shadow: 0 0 0 2px rgba(220, 53, 69, 0.1) !important; - } -`; -document.head.appendChild(style); - -// Performance optimization: Debounce function -function debounce(func, wait) { - let timeout; - return function executedFunction(...args) { - const later = () => { - clearTimeout(timeout); - func(...args); - }; - clearTimeout(timeout); - timeout = setTimeout(later, wait); - }; -} - -// Responsive image handling -function handleResponsiveImages() { - const images = document.querySelectorAll('img'); - images.forEach(img => { - // Add error handling - img.addEventListener('error', function() { - this.src = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAwIiBoZWlnaHQ9IjMwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjMwMCIgZmlsbD0iI2Y4ZjlmYSIvPjx0ZXh0IHg9IjUwJSIgeT0iNTAlIiBmb250LWZhbWlseT0iQXJpYWwiIGZvbnQtc2l6ZT0iMTgiIGZpbGw9IiM2Yzc1N2QiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiPkltYWdlIG5vdCBhdmFpbGFibGU8L3RleHQ+PC9zdmc+'; - }); - }); -} - -// Initialize responsive image handling -document.addEventListener('DOMContentLoaded', handleResponsiveImages); \ No newline at end of file diff --git a/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/robots.txt b/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/robots.txt deleted file mode 100644 index 60a5f0b47d5c61b527c6f0a28147cd0f4c384417..0000000000000000000000000000000000000000 --- a/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/robots.txt +++ /dev/null @@ -1,9 +0,0 @@ -User-agent: * -Allow: / - -Sitemap: http://localhost:3000/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/sitemap.xml - -# Disallow common non-content paths -Disallow: /api/ -Disallow: /_next/ -Disallow: /admin/ diff --git a/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/services.html b/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/services.html deleted file mode 100644 index 7e0e6a3be18239929a201ef90408a101a9112c17..0000000000000000000000000000000000000000 --- a/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/services.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - Services - Miyagi's Floor Waxing Services - - - - - - - - -
- -
- -
-
-
- Professional floor waxing services -
-
-

Our Professional Services

-

Complete floor care solutions for every need

-
-
- -
-
-
-
-
- Strip & Wax -
-
-

Strip & Wax

-

Complete removal of old wax and application of fresh, durable coating for ultimate shine and protection.

-

Our comprehensive strip and wax service removes all built-up wax, dirt, and grime, revealing the natural beauty of your floors. We apply multiple coats of high-quality commercial wax for long-lasting protection.

- -
-
-
-
- Buffing & Polishing -
-
-

Buffing & Polishing

-

Restore shine and remove minor scratches without full stripping, perfect for regular maintenance.

-

Professional buffing and polishing brings back the glossy finish of your floors. Ideal for high-traffic areas that need regular attention to maintain their appearance.

- -
-
-
-
- Deep Clean -
-
-

Deep Clean

-

Thorough cleaning service that removes deep-seated dirt and prepares floors for treatment.

-

Intensive deep cleaning removes stubborn stains, embedded dirt, and buildup that regular mopping can't touch. Perfect preparation for waxing or as a standalone service.

- -
-
-
-
- Maintenance Plans -
-
-

Maintenance Plans

-

Scheduled service plans to keep your floors looking pristine year-round with discounted rates.

-

Customized maintenance programs ensure your floors always look their best. Regular service prevents wear and extends the life of your flooring investment.

- -
-
-
-
-
- -
-
-

Service Plans

-
-
-

Basic

-
$0.99/sq ft
-
    -
  • Single strip & wax
  • -
  • Basic cleaning
  • -
  • 30-day warranty
  • -
  • Residential only
  • -
- Get Quote -
- - - -
-

Premium

-
$1.99/sq ft
-
    -
  • Everything in Standard
  • -
  • Quarterly maintenance
  • -
  • 90-day warranty
  • -
  • Emergency service
  • -
  • Dedicated account manager
  • -
- Get Quote -
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/sitemap.xml b/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/sitemap.xml deleted file mode 100644 index 9b1fdb25a868c989d48c52060dbde9dc1b463c96..0000000000000000000000000000000000000000 --- a/public/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/sitemap.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - http://localhost:3000/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/contact.html - 2025-11-17 - weekly - 0.8 - - - http://localhost:3000/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc - 2025-11-17 - weekly - 1.0 - - - http://localhost:3000/sites/69d3cb0a-3cd3-4d41-981c-3d4ba5c978cc/services.html - 2025-11-17 - weekly - 0.8 - - \ No newline at end of file diff --git a/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/PLAN.md b/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/PLAN.md deleted file mode 100644 index dcb4078da8ae569a27080d863e6f96fc98a6731c..0000000000000000000000000000000000000000 --- a/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/PLAN.md +++ /dev/null @@ -1,38 +0,0 @@ -# Project Plan - Pupp Barber Shop Landing Page - -## Overview -A modern, playful landing page for a pet grooming business specializing in dog grooming services. The site should convey professionalism while maintaining a fun, pet-friendly aesthetic. - -## Pages -- index.html - Homepage with hero, services, about, testimonials, contact CTA -- about.html - About page with team/story, values -- contact.html - Contact form, location, hours - -## Tech Stack -- CSS Framework: Tailwind CSS (via CDN) - provides modern utilities and responsive design -- Icons: FontAwesome (comprehensive icon set for social, grooming tools) -- Fonts: Google Fonts - Inter (body) & Playfair Display (headings) for contrast -- Images: Unsplash/Picsum for placeholder dog/grooming images -- Animation: AOS (Animate on Scroll) for subtle entrance animations -- Forms: Netlify Forms for static form handling - -## Color Palette -- Primary: #3B82F6 (Tailwind Blue-600) - trust, professionalism -- Secondary: #F59E0B (Tailwind Amber-500) - warmth, energy -- Accent: #10B981 (Tailwind Emerald-500) - natural, fresh -- Neutral: #F9FAFB (Gray-50) / #111827 (Gray-900) - -## Component Structure -- /templates/components/nav.hbs - Navigation with logo, links -- /templates/components/footer.hbs - Footer with contact, social, links -- /templates/components/hero.hbs - Reusable hero section -- /templates/components/service-card.hbs - Service card component -- /templates/components/testimonial-card.hbs - Testimonial card - -## Execution Order -1. Create PLAN.md (done) -2. Create reusable Handlebars components (nav, footer, hero, cards) -3. Build index.html with complete landing page structure -4. Create about.html and contact.html using components -5. Add interactivity (mobile menu, form validation) -6. Test and refine responsive design diff --git a/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/README.md b/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/README.md deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/about.html b/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/about.html deleted file mode 100644 index acafdb067fd270140bff38f0d6b0a07b471d6405..0000000000000000000000000000000000000000 --- a/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/about.html +++ /dev/null @@ -1,529 +0,0 @@ - - - - - - About Us - PuppBarber - - - - - - - - - - - - - - - - - -
-
-
-

Our Story

-

- More than just a grooming salon. We're a family of dog lovers dedicated to making your furry friend look and feel their best. -

-
-
- - -
-
- - -
-
-
-
- Dog grooming with love -
-
-
-

Started with a Passion for Paws

-

- PuppBarber began in 2018 when our founder, Sarah, realized that many grooming salons felt clinical and stressful for dogs. She wanted to create a space that felt more like a spa day and less like a vet visit. -

-

- What started as a mobile grooming van has grown into our beloved salon, but our core mission remains the same: to provide a calm, loving, and professional grooming experience for every dog that walks through our doors. -

-

- We believe that grooming is an essential part of your dog's health and happiness, and we're honored to be a part of their care routine. -

-
-
- - -
-
-

Our Values

-

The principles that guide every snip, clip, and bath.

-
- -
-
-
- -
-

Love & Care

-

We treat every dog with the same patience and affection we'd give our own pets. No rushing, no stress.

-
- -
-
- -
-

Safety First

-

Our salon is sanitized daily, and our equipment is top-tier. We prioritize your dog's safety above all else.

-
- -
-
- -
-

Quality Styling

-

Our groomers are certified professionals who stay updated on the latest styles and techniques.

-
-
-
- - -
-
-

Meet The Team

-

The talented humans behind the happy pups.

-
- -
- -
-
- Sarah -
-

"I love seeing the transformation from scruffy to fluffy!"

-
-
-

Sarah Jenkins

-

Founder & Master Groomer

-
- - -
-
- Mike -
-

"Big dogs are just puppies that take up more space."

-
-
-

Mike Ross

-

Senior Stylist

-
- - -
-
- Jessica -
-

"Patience is the key to a happy grooming session."

-
-
-

Jessica Lee

-

Grooming Specialist

-
- - -
-
- Alex -
-

"Making dogs look their best is the best job in the world."

-
-
-

Alex Chen

-

Bather & Assistant

-
-
-
- -
-
- - -
-
-

Ready to Pamper Your Pooch?

-

Join the PuppBarber family today and see the difference love makes.

- - Book an Appointment - -
-
- - - - - - - - \ No newline at end of file diff --git a/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/contact.html b/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/contact.html deleted file mode 100644 index 952133be39d7b09f4f9f7e42f1011f6c8fa77366..0000000000000000000000000000000000000000 --- a/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/contact.html +++ /dev/null @@ -1,511 +0,0 @@ - - - - - - Contact Us - PuppBarber - - - - - - - - - - - - - - - - -
-
-
-

Get In Touch

-

- Ready to book an appointment or have questions about our services? We're here to help! -

-
-
- -
-
-
- - -
-

Contact Information

- -
-
-
- -
-
-

Visit Us

-

123 Puppy Lane
Dogville, CA 90210

-
-
- -
-
- -
-
-

Call Us

-

(555) 123-4567

-
-
- -
-
- -
-
-

Email Us

-

hello@puppbarber.com

-
-
- -
-
- -
-
-

Business Hours

-
    -
  • Mon - Fri: 8am - 6pm
  • -
  • Saturday: 9am - 5pm
  • -
  • Sunday: Closed
  • -
-
-
-
- - -
- -
-
- - -
-

Send us a Message

-
- - - -
- - -
- -
-
- - -
-
- - -
-
- -
-
- - -
-
- - -
-
- -
- - -
- - -
-
-
-
-
- - - - - - - - - \ No newline at end of file diff --git a/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/index.html b/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/index.html deleted file mode 100644 index 6352eecc963664b3fe366fbedcc122014174577f..0000000000000000000000000000000000000000 --- a/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/index.html +++ /dev/null @@ -1,497 +0,0 @@ - - - - - - PuppBarber - Professional Dog Grooming Services - - - - - - - - - - - - - - - - -
-
-
-
-
-

- Your Pup's Favorite Place for a Fresh Look -

-

- Professional grooming services that make tails wag. From bath to brush, we treat every dog like family. -

- -
-
-
- Happy golden retriever getting groomed -
-
-
-
- -
-
-

100% Safe

-

Certified Groomers

-
-
-
-
-
-
-
- -
-
-
-
-
1,500+
-

Happy Pups

-
-
-
5+
-

Years Experience

-
-
-
100%
-

Satisfaction Rate

-
-
-
24/7
-

Support Available

-
-
-
-
- -
-
-
-

Our Paw-some Services

-

We offer comprehensive grooming services to keep your furry friend looking and feeling their best.

-
- -
-
-
- -
-

Bath & Brush

-

Gentle cleansing with premium shampoos, thorough brushing, and blow-drying for a shiny, clean coat.

-
- $45+ - Learn More -
-
- -
-
- -
-

Haircut & Styling

-

Expert trimming and styling tailored to your dog's breed, coat type, and your preferences.

-
- $65+ - Learn More -
-
- -
-
- -
-

Spa Package

-

Full grooming experience including nail trimming, ear cleaning, teeth brushing, and paw pad treatment.

-
- $95+ - Learn More -
-
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/robots.txt b/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/robots.txt deleted file mode 100644 index 2941df15f34c609fef45aac83c848895532996fb..0000000000000000000000000000000000000000 --- a/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/robots.txt +++ /dev/null @@ -1,9 +0,0 @@ -User-agent: * -Allow: / - -Sitemap: http://localhost:3000/sites/8a671c27-1498-4164-9cdf-5429469f45f6/sitemap.xml - -# Disallow common non-content paths -Disallow: /api/ -Disallow: /_next/ -Disallow: /admin/ diff --git a/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/scripts/main.js b/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/scripts/main.js deleted file mode 100644 index da41df1c7d867dfc51957f26f6a4b35dda8af23b..0000000000000000000000000000000000000000 --- a/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/scripts/main.js +++ /dev/null @@ -1,6 +0,0 @@ -// Welcome to your project! -// Use this file to add interactivity to your pages. - -document.addEventListener('DOMContentLoaded', () => { - console.log('Project ready. Happy building!'); -}); diff --git a/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/sitemap.xml b/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/sitemap.xml deleted file mode 100644 index d779eaab71ec1379c124efac13cf69e049425f66..0000000000000000000000000000000000000000 --- a/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/sitemap.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - http://localhost:3000/sites/8a671c27-1498-4164-9cdf-5429469f45f6/about.html - 2026-01-03 - weekly - 0.8 - - - http://localhost:3000/sites/8a671c27-1498-4164-9cdf-5429469f45f6/contact.html - 2026-01-03 - weekly - 0.8 - - - http://localhost:3000/sites/8a671c27-1498-4164-9cdf-5429469f45f6 - 2026-01-03 - weekly - 1.0 - - \ No newline at end of file diff --git a/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/styles/style.css b/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/styles/style.css deleted file mode 100644 index c05971d7240332bcb3b27de314d1c14c3ebc54da..0000000000000000000000000000000000000000 --- a/public/sites/8a671c27-1498-4164-9cdf-5429469f45f6/styles/style.css +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Your project styles start here. - * Use this file to customize typography, layout, and colors. - */ - -body { - font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; - margin: 0; - padding: 2rem; - background: #f9fafb; - color: #0f172a; -} - -h1 { - font-size: 2.25rem; - margin-bottom: 0.5rem; -} - -p { - font-size: 1rem; - line-height: 1.6; -} - -.container { - max-width: 800px; - margin: 0 auto; - padding: 2rem; -} - -.tic-tac-toe-game { - text-align: center; - background: white; - border-radius: 16px; - box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1); - padding: 2rem; - margin-top: 2rem; -} diff --git a/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/benefits.html b/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/benefits.html deleted file mode 100644 index a55d7d2d466203b765330cb374a39fbf880317fe..0000000000000000000000000000000000000000 --- a/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/benefits.html +++ /dev/null @@ -1,338 +0,0 @@ - - - - - - Benefits of Basketball - Physical & Mental Health - - - - -
- -
-
-
-
-
-

- Transform Your Life Through Basketball -

-

- Discover the incredible physical, mental, and social benefits that make basketball - one of the most rewarding sports you can play at any age. -

-
-
-
95%
-
of players report improved fitness
-
-
-
87%
-
experience better mental health
-
-
-
92%
-
make lasting friendships
-
-
-
-
-
-
-
- -
-
-
💪
-

Cardiovascular Health

-

- Basketball is an excellent cardiovascular workout that strengthens your heart, - improves blood circulation, and reduces the risk of heart disease. -

-
    -
  • Lowers blood pressure
  • -
  • Improves cholesterol levels
  • -
  • Increases lung capacity
  • -
-
- -
-
🏃
-

Strength & Endurance

-

- Build lean muscle, increase stamina, and improve overall physical performance - through regular basketball practice. -

-
    -
  • Full-body workout
  • -
  • Improves agility
  • -
  • Enhances coordination
  • -
-
-
- - -
-
-
🧠
-

Mental Toughness

-

- Develop resilience, focus, and strategic thinking skills that translate - to success in all areas of life. -

-
    -
  • Stress reduction
  • -
  • Improved focus
  • -
  • Better decision-making
  • -
-
- -
-
🎯
-

Life Skills

-

- Learn valuable lessons in discipline, teamwork, and goal-setting that - will serve you throughout life. -

-
    -
  • Time management
  • -
  • Leadership skills
  • -
  • Goal achievement
  • -
-
-
- - -
-
-
🤝
-

Social Connection

-

- Build meaningful relationships and become part of a supportive community - that shares your passion. -

-
    -
  • Teamwork skills
  • -
  • Communication
  • -
  • Community building
  • -
-
- -
-
😊
-

Emotional Well-being

-

- Experience the joy of achievement, the thrill of competition, and the - satisfaction of personal growth. -

-
    -
  • Confidence boost
  • -
  • Mood enhancement
  • -
  • Self-discipline
  • -
-
-
-
-
-
-
-
-

The Science Behind Basketball's Benefits

-

- Research-backed evidence of how basketball transforms your health -

-
- -
-
-
600
-
Calories burned per hour
-
Comparable to running
-
-
-
30%
-
Lower risk of heart disease
-
Regular players vs. non-players
-
-
-
2.5x
-
Better bone density
-
Weight-bearing exercise benefits
-
-
-
40%
-
Reduced stress levels
-
After just 30 minutes of play
-
-
- -
-
-
-
🏥
-

Medical Approval

-

- Recommended by doctors and health professionals worldwide - for comprehensive fitness and mental wellness. -

-
-
-
📚
-

Research Proven

-

- Over 200 scientific studies confirm the physical and mental - health benefits of regular basketball participation. -

-
-
-
-

Expert Endorsed

-

- Professional athletes and trainers consistently recommend basketball - for total body conditioning. -

-
-
-
-
-
-
-
-

Ready to Start Playing?

-

- Join the millions who have discovered the joy and benefits of basketball. - Whether you're a complete beginner or looking to improve, there's a place for you on the court. -

- - -
-
-
- - - - - \ No newline at end of file diff --git a/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/equipment.html b/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/equipment.html deleted file mode 100644 index 4dc19900a09ea6f5861937faf5c3b3a804dfb70c..0000000000000000000000000000000000000000 --- a/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/equipment.html +++ /dev/null @@ -1,563 +0,0 @@ - - - - - - Basketball Equipment Guide - Gear for All Levels - - - - -
- -
-
-
-
-
-

- Basketball Equipment Guide -

-

- Everything you need to know about basketball gear - from essential basics - to professional equipment. Get the right gear for your game and budget. -

-
-
-
$25
-
Starter kit cost
-
-
-
5 items
-
Essential gear
-
-
-
100%
-
Ready to play
-
-
-
-
-
-
-
-

Essential Basketball Equipment

-

- Learn what you really need to start playing and what to consider as you improve -

-
- -
- -
-
🏀
-

Basketball

-
-
Size Guide:
-
    -
  • Size 7 (29.5") - Men/Boys 12+
  • -
  • Size 6 (28.5") - Women/Girls 12+
  • -
  • Size 5 (27.5") - Kids 9-11
  • -
  • Size 4 (25.5") - Kids 5-8
  • -
-
-
-
- Beginner: - $15-25 -
-
- Intermediate: - $30-60 -
-
- Professional: - $70-150+ -
-
-
-

- Pro Tip: Start with an indoor/outdoor ball for versatility -

-
-
- - -
-
👟
-

Basketball Shoes

-
-
Key Features:
-
    -
  • • Ankle support (high-top preferred)
  • -
  • • Good cushioning for jumps
  • -
  • • Non-marking rubber soles
  • -
  • • Breathable materials
  • -
-
-
-
- Beginner: - $40-70 -
-
- Intermediate: - $80-130 -
-
- Professional: - $140-250+ -
-
-
-

- Pro Tip: Try shoes on with basketball socks for proper fit -

-
-
- - -
-
👕
-

Athletic Clothing

-
-
Essential Items:
-
    -
  • • Moisture-wicking t-shirt/jersey
  • -
  • • Athletic shorts (above knee)
  • -
  • • Basketball socks (crew length)
  • -
  • • Compression gear (optional)
  • -
-
-
-
- Beginner: - $20-40 -
-
- Intermediate: - $50-100 -
-
- Professional: - $120-200+ -
-
-
-

- Pro Tip: Avoid cotton - it holds sweat and becomes heavy -

-
-
- - -
-
-

Training Accessories

-
-
Helpful Items:
-
    -
  • • Water bottle (32oz+)
  • -
  • • Towel
  • -
  • • Jump rope
  • -
  • • Agility cones
  • -
-
-
-
- Beginner: - $15-30 -
-
- Intermediate: - $35-75 -
-
- Professional: - $100-200+ -
-
-
-

- Pro Tip: Start with just water bottle and towel -

-
-
- - -
-
🛡️
-

Protective Gear

-
-
Optional Protection:
-
    -
  • • Mouthguard
  • -
  • • Knee pads
  • -
  • • Ankle braces
  • -
  • • Compression shorts
  • -
-
-
-
- Beginner: - $10-25 -
-
- Intermediate: - $30-60 -
-
- Professional: - $75-150+ -
-
-
-

- Pro Tip: Mouthguard recommended for competitive play -

-
-
- - -
-
🥅
-

Home Hoop Options

-
-
Types Available:
-
    -
  • • Door-mounted mini hoop
  • -
  • • Portable driveway system
  • -
  • • Wall-mounted garage hoop
  • -
  • • In-ground professional system
  • -
-
-
-
- Beginner: - $20-50 -
-
- Intermediate: - $100-300 -
-
- Professional: - $500-2000+ -
-
-
-

- Pro Tip: Start with a mini hoop for form practice -

-
-
-
-
-
-
-
-

Budget Packages for Every Level

-

- Complete starter kits tailored to your budget and commitment level -

-
- -
- -
-
-

Basic Starter

-
$50-75
-

Just getting started

-
-
-

What's Included:

-
    -
  • - - Basic basketball (indoor/outdoor) -
  • -
  • - - Basic athletic shoes -
  • -
  • - - 2 moisture-wicking shirts -
  • -
  • - - 1 pair basketball shorts -
  • -
  • - - Water bottle -
  • -
-
-

- Perfect for: Testing the waters, casual play with friends -

-
-
-
- - -
-
-
-

Serious Player

- Most Popular -
-
$150-250
-

Regular practice & games

-
-
-

Everything in Basic +:

-
    -
  • - - Quality indoor/outdoor ball -
  • -
  • - - Mid-range basketball shoes -
  • -
  • - - 4 moisture-wicking shirts -
  • -
  • - - 2 pairs basketball shorts -
  • -
  • - - 3 pairs quality basketball socks -
  • -
  • - - Gym bag -
  • -
  • - - Basic mouthguard -
  • -
-
-

- Perfect for: Regular players, league participants, skill development -

-
-
-
- - -
-
-

Elite Athlete

-
$400-800+
-

Competitive play focus

-
-
-

Everything in Serious +:

-
    -
  • - - Premium leather basketball -
  • -
  • - - High-end signature shoes -
  • -
  • - - Performance compression gear -
  • -
  • - - Professional mouthguard -
  • -
  • - - Knee pads/ankle braces -
  • -
  • - - Training accessories (cones, jump rope) -
  • -
  • - - Recovery tools (foam roller) -
  • -
-
-

- Perfect for: Competitive players, travel teams, serious athletes -

-
-
-
-
- -
-

Smart Shopping Tips

-
-
-
🏷️
-

Shop Off-Season

-

Buy gear during spring/summer for best basketball deals

-
-
-
🔄
-

Buy Used First

-

Second-hand gear can save 50-70% while still being quality

-
-
-
📈
-

Invest in Shoes

-

Never skimp on footwear - prevents injuries and improves performance

-
-
-
-
-
-
-
-

Ready to Start Playing?

-

- Join the millions who have discovered the joy and benefits of basketball. - Whether you're a complete beginner or looking to improve, there's a place for you on the court. -

- - -
-
-
- - - - - \ No newline at end of file diff --git a/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/getting-started.html b/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/getting-started.html deleted file mode 100644 index 073f3c8d5facdaa75c10311c42c6dfa33f849efa..0000000000000000000000000000000000000000 --- a/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/getting-started.html +++ /dev/null @@ -1,604 +0,0 @@ - - - - - - Getting Started with Basketball - Beginner's Guide - - - - -
- -
-
-
-
-
-
-

- Start Your Basketball Journey Today -

-

- No experience needed! This complete beginner's guide will take you - from zero to confident player in just a few weeks. -

-
- - -
-
-
-
- 🏀 -
-
-
-
-
-
-
-

Your Path to Becoming a Player

-

- Follow these simple steps to start your basketball journey with confidence -

-
- -
-
- -
-
- 1 -
-
-

Get the Right Equipment

-

- You don't need much to start, but having the right basics makes learning easier and more enjoyable. -

-
-

Essential Items:

-
    -
  • 🏀 Basketball (size 7 for men, 6 for women, 5 for kids)
  • -
  • 👟 Athletic shoes with good ankle support
  • -
  • 👕 Comfortable athletic clothing
  • -
  • 💧 Water bottle
  • -
-
-
-
- - -
-
- 2 -
-
-

Learn the Basic Rules

-

- Understanding the fundamentals will help you enjoy the game and play safely with others. -

-
-

Key Rules to Know:

-
    -
  • Dribbling - can't run with the ball
  • -
  • ⏱️ Shot clock - 24 seconds to shoot
  • -
  • 🚫 Fouls - illegal contact with opponents
  • -
  • 📏 Court boundaries - stay in bounds
  • -
-
-
-
- - -
-
- 3 -
-
-

Master Fundamental Skills

-

- Focus on these core skills to build a strong foundation for your game. -

-
-

Core Skills:

-
    -
  • 🏀 Dribbling - control the ball while moving
  • -
  • 🎯 Shooting - proper form and accuracy
  • -
  • 🤚 Passing - share the ball with teammates
  • -
  • 🦶 Footwork - balance and movement
  • -
-
-
-
- - -
-
- 4 -
-
-

Practice Regularly

-

- Consistency is key to improvement. Even 15-30 minutes a few times per week makes a huge difference. -

-
-

Practice Schedule:

-
    -
  • 📅 Start with 2-3 sessions per week
  • -
  • 20-30 minutes per session
  • -
  • 🎯 Focus on one skill each session
  • -
  • 📈 Track your progress
  • -
-
-
-
- - -
-
- 5 -
-
-

Join a Game or League

-

- Once you're comfortable with basics, find others to play with and experience the real joy of basketball. -

-
-

Where to Play:

-
    -
  • 🏫 Local parks and recreation centers
  • -
  • 🏫 School courts (after hours)
  • -
  • 🏢 Community centers
  • -
  • 🌐 Online pickup game groups
  • -
-
-
-
-
-
-
-
-
-
-

Your First Week Training Plan

-

- Follow this structured plan to build confidence and see immediate progress -

-
- -
- -
-
-
Day 1
-
Monday
-
-

Ball Handling

-
    -
  • • Stationary dribbling
  • -
  • • Right hand only
  • -
  • • Left hand only
  • -
  • • 20 minutes
  • -
-
- - -
-
-
Day 2
-
Tuesday
-
-

Shooting Form

-
    -
  • • BEEF technique
  • -
  • • Close-range shots
  • -
  • • 50 attempts
  • -
  • • 25 minutes
  • -
-
- - -
-
-
Day 3
-
Wednesday
-
-

Passing

-
    -
  • • Chest passes
  • -
  • • Bounce passes
  • -
  • • Wall practice
  • -
  • • 20 minutes
  • -
-
- - -
-
-
Day 4
-
Thursday
-
-

Rest & Study

-
    -
  • • Watch tutorials
  • -
  • • Study rules
  • -
  • • Light stretching
  • -
  • • Recovery
  • -
-
- - -
-
-
Day 5
-
Friday
-
-

Dribbling

-
    -
  • • Moving dribbles
  • -
  • • Crossovers
  • -
  • • Speed drills
  • -
  • • 25 minutes
  • -
-
- - -
-
-
Day 6
-
Saturday
-
-

Game Time

-
    -
  • • Find pickup game
  • -
  • • Practice skills
  • -
  • • Have fun
  • -
  • • 60+ minutes
  • -
-
- - -
-
-
Day 7
-
Sunday
-
-

Review

-
    -
  • • Progress check
  • -
  • • Set new goals
  • -
  • • Light practice
  • -
  • • Plan week 2
  • -
-
-
- -
-

Quick Success Tips

-
-
- 💡 -
-

Start Close to the Hoop

-

Master close-range shots before moving further back

-
-
-
- 🎯 -
-

Focus on Form First

-

Proper technique is more important than making shots initially

-
-
-
- 🏀 -
-

Keep Your Eyes Up

-

Practice dribbling without looking at the ball

-
-
-
- 🤝 -
-

Play with Others

-

Learn faster by playing with experienced players

-
-
-
-
-
-
-
-
-

Avoid These Common Beginner Mistakes

-

- Learn from others' experience and accelerate your progress by avoiding these pitfalls -

-
- -
- -
-
- -
-

Using Wrong Ball Size

-

- Playing with an oversized or undersized basketball can seriously hurt your shooting form. -

-
-

✅ Fix: Choose the right size

-
    -
  • • Size 7 (29.5") - Men/Boys 12+
  • -
  • • Size 6 (28.5") - Women/Girls 12+
  • -
  • • Size 5 (27.5") - Kids 9-11
  • -
-
-
-
-
- - -
-
- -
-

Shooting with Two Hands

-

- Using both hands to shoot leads to inconsistency and poor accuracy. -

-
-

✅ Fix: BEEF Method

-
    -
  • Balance - solid stance
  • -
  • Eyes - target the rim
  • -
  • Elbow - under the ball
  • -
  • Follow-through - hold the pose
  • -
-
-
-
-
- - -
-
- -
-

Looking at the Ball While Dribbling

-

- This habit prevents you from seeing the court and making smart plays. -

-
-

✅ Fix: Head-up drills

-
    -
  • • Practice stationary dribbling eyes closed
  • -
  • • Dribble while walking forward
  • -
  • • Count repetitions out loud
  • -
  • • Use peripheral vision
  • -
-
-
-
-
- - -
-
- -
-

Skipping Warm-ups

-

- Jumping straight into intense play increases injury risk dramatically. -

-
-

✅ Fix: 5-minute warm-up routine

-
    -
  • • Light jogging (2 min)
  • -
  • • Dynamic stretches (2 min)
  • -
  • • Ball handling drills (1 min)
  • -
  • • Gradually increase intensity
  • -
-
-
-
-
- - -
-
- -
-

Trying Advanced Moves Too Soon

-

- Practicing crossovers and fancy moves before mastering basics creates bad habits. -

-
-

✅ Fix: Master fundamentals first

-
    -
  • • Perfect basic dribbling
  • -
  • • Consistent shooting form
  • -
  • • Basic passing techniques
  • -
  • • Then progress to advanced
  • -
-
-
-
-
- - -
-
- -
-

Playing Through Pain

-

- Ignoring minor injuries can lead to serious long-term damage. -

-
-

✅ Fix: Listen to your body

-
    -
  • • Stop if something hurts
  • -
  • • Rest and recover properly
  • -
  • • Seek medical advice when needed
  • -
  • • Focus on injury prevention
  • -
-
-
-
-
-
- -
-

Remember: Everyone Starts as a Beginner!

-

- Even NBA players made these mistakes when they were starting out. - The key is to learn, stay patient, and enjoy the process of getting better every day. -

-
-
-
-
-
-

Ready to Start Playing?

-

- Join the millions who have discovered the joy and benefits of basketball. - Whether you're a complete beginner or looking to improve, there's a place for you on the court. -

- - -
-
-
- - - - - \ No newline at end of file diff --git a/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/index.html b/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/index.html deleted file mode 100644 index 4ed68001000c2ceafb6efad8fd766c2fddc52bb4..0000000000000000000000000000000000000000 --- a/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/index.html +++ /dev/null @@ -1,252 +0,0 @@ - - - - - - Basketball for Everyone - Benefits & Why You Should Play - - - - -
- -
-
-
-
-
-
-

- Why Everyone Should Play Basketball -

-

- Join millions worldwide in discovering the joy, health benefits, and life skills that basketball offers -

-
- - -
-
-
-
-
- 🏀 -
-
-
-
-
-
-
-
-

Amazing Benefits of Basketball

-

- Discover how basketball transforms your body, mind, and social life -

-
- -
-
-
💪
-

Physical Fitness

-

Build strength, endurance, and coordination through dynamic gameplay

-
-
-
🧠
-

Mental Toughness

-

Develop resilience, focus, and strategic thinking under pressure

-
-
-
🤝
-

Social Connection

-

Build friendships and teamwork skills in a supportive community

-
-
-
🎯
-

Life Skills

-

Learn discipline, time management, and goal-setting

-
-
-
😌
-

Stress Relief

-

Release tension and boost mood through physical activity

-
-
-
🏀
-

Accessibility

-

Easy to start - all you need is a ball and a hoop

-
-
-
-
-
-
-

Basketball by the Numbers

-

- See why basketball is one of the world's most beloved sports -

-
- -
-
-
450M
-
People play basketball worldwide
-
-
-
600
-
Calories burned per hour
-
-
-
1891
-
Year basketball was invented
-
-
-
99%
-
Of players report improved fitness
-
-
-
-
-
-
-

Ready to Start Playing?

-

- Join the millions who have discovered the joy and benefits of basketball. - Whether you're a complete beginner or looking to improve, there's a place for you on the court. -

- - -
-
-
- - - - - \ No newline at end of file diff --git a/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/robots.txt b/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/robots.txt deleted file mode 100644 index 2386d4b62a9283ae079338d90b88ce67fa441e20..0000000000000000000000000000000000000000 --- a/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/robots.txt +++ /dev/null @@ -1,9 +0,0 @@ -User-agent: * -Allow: / - -Sitemap: http://localhost:3000/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/sitemap.xml - -# Disallow common non-content paths -Disallow: /api/ -Disallow: /_next/ -Disallow: /admin/ diff --git a/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/scripts/main.js b/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/scripts/main.js deleted file mode 100644 index 485cab3ed1bc0fa572f74d9759cc56c8938dc661..0000000000000000000000000000000000000000 --- a/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/scripts/main.js +++ /dev/null @@ -1,69 +0,0 @@ -// Basketball website functionality -document.addEventListener('DOMContentLoaded', () => { - console.log('Basketball website loaded!'); - - // Mobile menu toggle - window.toggleMobileMenu = function() { - const menu = document.getElementById('mobileMenu'); - menu.classList.toggle('hidden'); - }; - - // Smooth scrolling for anchor links - document.querySelectorAll('a[href^="#"]').forEach(anchor => { - anchor.addEventListener('click', function (e) { - e.preventDefault(); - const target = document.querySelector(this.getAttribute('href')); - if (target) { - target.scrollIntoView({ - behavior: 'smooth', - block: 'start' - }); - } - }); - }); - - // Add animation to stats when they come into view - const observerOptions = { - threshold: 0.5, - rootMargin: '0px' - }; - - const observer = new IntersectionObserver((entries) => { - entries.forEach(entry => { - if (entry.isIntersecting) { - entry.target.classList.add('animate-pulse'); - setTimeout(() => { - entry.target.classList.remove('animate-pulse'); - }, 2000); - } - }); - }, observerOptions); - - // Observe stat numbers - document.querySelectorAll('.text-5xl.font-bold').forEach(stat => { - observer.observe(stat); - }); - - // Add hover effects to benefit cards - const benefitCards = document.querySelectorAll('.bg-gray-50.rounded-xl'); - benefitCards.forEach(card => { - card.addEventListener('mouseenter', function() { - this.style.transform = 'translateY(-5px)'; - this.style.transition = 'all 0.3s ease'; - }); - - card.addEventListener('mouseleave', function() { - this.style.transform = 'translateY(0)'; - }); - }); - - // Basketball bouncing animation - const basketball = document.querySelector('.animate-bounce'); - if (basketball) { - setInterval(() => { - basketball.classList.remove('animate-bounce'); - void basketball.offsetWidth; // Trigger reflow - basketball.classList.add('animate-bounce'); - }, 3000); - } -}); \ No newline at end of file diff --git a/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/sitemap.xml b/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/sitemap.xml deleted file mode 100644 index 16495779783adf0945873183517a525b1f40dc68..0000000000000000000000000000000000000000 --- a/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/sitemap.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - http://localhost:3000/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/benefits.html - 2025-11-17 - weekly - 0.8 - - - http://localhost:3000/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/equipment.html - 2025-11-17 - weekly - 0.8 - - - http://localhost:3000/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/getting-started.html - 2025-11-17 - weekly - 0.8 - - - http://localhost:3000/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4 - 2025-11-17 - weekly - 1.0 - - - http://localhost:3000/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/training.html - 2025-11-17 - weekly - 0.8 - - \ No newline at end of file diff --git a/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/styles/style.css b/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/styles/style.css deleted file mode 100644 index ff9659b401a5a4c99ebdefc56a1c8cd09ef5302d..0000000000000000000000000000000000000000 --- a/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/styles/style.css +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Custom styles to complement Tailwind CSS - * Additional animations and specific styles - */ - -/* Custom animations */ -@keyframes float { - 0%, 100% { transform: translateY(0px); } - 50% { transform: translateY(-20px); } -} - -.float-animation { - animation: float 6s ease-in-out infinite; -} - -/* Basketball court pattern background */ -.court-pattern { - background-image: - linear-gradient(90deg, #f97316 1px, transparent 1px), - linear-gradient(180deg, #f97316 1px, transparent 1px); - background-size: 50px 50px; - background-position: -1px -1px; - opacity: 0.05; -} - -/* Custom scrollbar */ -::-webkit-scrollbar { - width: 10px; -} - -::-webkit-scrollbar-track { - background: #f1f1f1; -} - -::-webkit-scrollbar-thumb { - background: linear-gradient(180deg, #f97316, #dc2626); - border-radius: 5px; -} - -::-webkit-scrollbar-thumb:hover { - background: linear-gradient(180deg, #ea580c, #b91c1c); -} - -/* Enhanced hover effects */ -.hover-lift { - transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); -} - -.hover-lift:hover { - transform: translateY(-8px) scale(1.02); - box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); -} - -/* Gradient text effect */ -.gradient-text { - background: linear-gradient(135deg, #f97316, #dc2626); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; -} - -/* Basketball court lines effect */ -.court-lines::before { - content: ''; - position: absolute; - top: 50%; - left: 0; - right: 0; - height: 2px; - background: rgba(249, 115, 22, 0.3); - transform: translateY(-50%); -} - -/* Mobile menu animation */ -.mobile-menu-enter { - animation: slideDown 0.3s ease-out; -} - -@keyframes slideDown { - from { - opacity: 0; - transform: translateY(-10px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -/* Card hover effects */ -.benefit-card { - position: relative; - overflow: hidden; -} - -.benefit-card::before { - content: ''; - position: absolute; - top: 0; - left: -100%; - width: 100%; - height: 100%; - background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent); - transition: left 0.5s; -} - -.benefit-card:hover::before { - left: 100%; -} - -/* Stats counter animation */ -.stat-counter { - display: inline-block; - transition: all 0.6s cubic-bezier(0.4, 0, 0.2, 1); -} - -.stat-counter.animate { - transform: scale(1.1); - color: #f97316; -} \ No newline at end of file diff --git a/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/training.html b/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/training.html deleted file mode 100644 index ec8f3ddc90b50fed5c8cc33dd21cc5952a87f2dc..0000000000000000000000000000000000000000 --- a/public/sites/9e5a46cf-1efd-4377-9da5-1e2eb63b8ca4/training.html +++ /dev/null @@ -1,703 +0,0 @@ - - - - - - Basketball Training & Drills - Improve Your Skills - - - - -
- -
-
-
-
-
-

- Basketball Training Programs -

-

- Professional training methods and drills to elevate your game. - From beginner basics to advanced techniques - everything you need to improve. -

-
-
-
50+
-
Training drills
-
-
-
4 levels
-
Skill progression
-
-
-
30 days
-
See results
-
-
-
-
-
-
-
-

Complete Training Programs

-

- Structured programs designed for different skill levels and goals -

-
- -
- -
-
-
- 1 -
-

Beginner Program

-
- -

- Perfect for players just starting out. Focus on fundamentals and building confidence. -

- -
-
-

Weekly Schedule:

-
-
- Monday: - Ball Handling (20 min) -
-
- Wednesday: - Shooting Form (25 min) -
-
- Friday: - Passing & Movement (20 min) -
-
- Saturday: - Game Practice (30 min) -
-
-
- -
-

Key Focus Areas:

-
    -
  • • Proper shooting mechanics (BEEF method)
  • -
  • • Basic dribbling techniques
  • -
  • • Essential passing skills
  • -
  • • Court awareness and positioning
  • -
-
- -
-

- Duration: 4-8 weeks | 3-4 sessions per week -

-
-
-
- - -
-
-
- 2 -
-

Intermediate Program

-
- -

- For players with basic skills looking to improve consistency and add new techniques. -

- -
-
-

Weekly Schedule:

-
-
- Monday: - Advanced Dribbling (30 min) -
-
- Tuesday: - Shooting Drills (30 min) -
-
- Thursday: - Defense & Footwork (25 min) -
-
- Friday: - Game Situations (35 min) -
-
- Saturday: - Pickup Games (60+ min) -
-
-
- -
-

Key Focus Areas:

-
    -
  • • Advanced dribbling moves (crossovers, behind back)
  • -
  • • Mid-range shooting consistency
  • -
  • • Defensive positioning and techniques
  • -
  • • Game strategy and basketball IQ
  • -
-
- -
-

- Duration: 8-12 weeks | 4-5 sessions per week -

-
-
-
- - -
-
-
- 3 -
-

Advanced Program

-
- -

- For experienced players aiming to play competitively or reach their peak performance. -

- -
-
-

Weekly Schedule:

-
-
- Monday: - Elite Ball Handling (40 min) -
-
- Tuesday: - Shooting & Scoring (45 min) -
-
- Wednesday: - Strength & Agility (30 min) -
-
- Thursday: - Advanced Defense (35 min) -
-
- Friday: - Game Simulation (45 min) -
-
- Weekend: - Competitive Games -
-
-
- -
-

Key Focus Areas:

-
    -
  • • Elite scoring moves and shot creation
  • -
  • • Advanced defensive strategies
  • -
  • • Leadership and court generalship
  • -
  • • Physical conditioning and injury prevention
  • -
-
- -
-

- Duration: 12+ weeks | 5-6 sessions per week -

-
-
-
- - -
-
-
- 4 -
-

Position-Specific Training

-
- -

- Specialized training for your specific position to maximize your impact on the court. -

- -
-
-

Choose Your Focus:

-
-
-
Point Guard
-

Leadership, court vision, playmaking, distribution

-
-
-
Shooting Guard
-

Shooting accuracy, off-ball movement, scoring

-
-
-
Small/Power Forward
-

Versatility, inside-outside game, rebounding

-
-
-
Center
-

Post moves, defense, rebounding, rim protection

-
-
-
- -
-

Training Components:

-
    -
  • • Position-specific skill development
  • -
  • • Game situation practice
  • -
  • • Physical conditioning for your role
  • -
  • • Film study and basketball IQ
  • -
-
- -
-

- Duration: 8-16 weeks | Integrated with main program -

-
-
-
-
-
-
-
-
-

Essential Basketball Drills

-

- Master fundamental skills with these proven drills used by players at all levels -

-
- -
- -
-
-
🏀
-

Ball Handling

-
- -
-
-

Stationary Dribbling

-

Dribble in place with both hands

-
- Sets: 3x30 seconds each hand
- Focus: Low dribble, eyes up -
-
- -
-

Crossover Drills

-

Practice crossover moves

-
- Sets: 4x20 crossovers
- Focus: Quick, low, explosive -
-
- -
-

Figure 8 Dribble

-

Dribble through legs in figure 8

-
- Sets: 3x30 seconds
- Focus: Control, smooth transitions -
-
-
-
- - -
-
-
🎯
-

Shooting

-
- -
-
-

Form Shooting

-

Close-range shooting focus

-
- Sets: 5x10 makes
- Focus: BEEF technique, follow-through -
-
- -
-

Mikan Drill

-

Layup sequence under basket

-
- Sets: 3x30 seconds
- Focus: Soft touch, footwork -
-
- -
-

Spot Shooting

-

Shoot from 5 spots around perimeter

-
- Sets: 5x10 makes per spot
- Focus: Consistency, routine -
-
-
-
- - -
-
-
🤝
-

Passing

-
- -
-
-

Wall Passing

-

Pass against wall for practice

-
- Sets: 3x50 passes
- Focus: Chest pass, bounce pass -
-
- -
-

Partner Passing

-

Work with a partner

-
- Sets: 4x30 passes each type
- Focus: Accuracy, timing -
-
- -
-

Passing on the Move

-

Pass while moving

-
- Sets: 3x20 passes
- Focus: Lead passes, communication -
-
-
-
- - -
-
-
🛡️
-

Defense

-
- -
-
-

Defensive Slides

-

Side-to-side defensive movement

-
- Sets: 5x30 seconds
- Focus: Low stance, quick feet -
-
- -
-

Zig-Zag Drill

-

-

-
-

Pro Training Tips & Best Practices

-

- Maximize your training results with these expert recommendations -

-
- -
- -
-
📈
-

Track Your Progress

-

- Keep a training journal to monitor improvements and identify areas needing work. -

-
-

What to Track:

-
    -
  • • Shooting percentages from different spots
  • -
  • • Dribbling speed and control
  • -
  • • Conditioning times and endurance
  • -
  • • Weekly practice hours and consistency
  • -
-
-
- - -
-
🎯
-

Quality Over Quantity

-

- Focus on perfect form rather than mindless repetition. Quality practice builds muscle memory. -

-
-

Quality Indicators:

-
    -
  • • Perfect shooting form on every shot
  • -
  • • Controlled dribbling at game speed
  • -
  • • Full defensive stance and intensity
  • -
  • • Game-like practice conditions
  • -
-
-
- - -
-
⚖️
-

Balance Your Training

-

- Work on all aspects of your game - don't neglect weaknesses or over-rely on strengths. -

-
-

Weekly Balance:

-
    -
  • • 30% ball handling and dribbling
  • -
  • • 30% shooting and scoring
  • -
  • • 20% defense and rebounding
  • -
  • • 20% conditioning and agility
  • -
-
-
- - -
-
🏀
-

Game-Like Practice

-

- Always practice how you play - incorporate game speed, pressure, and decision making. -

-
-

Game Simulation:

-
    -
  • • Practice shooting when tired
  • -
  • • Add time pressure to drills
  • -
  • • Practice with defenders
  • -
  • • Simulate game situations
  • -
-
-
- - -
-
💪
-

Recovery is Key

-

- Your body improves during rest, not just training. Prioritize recovery and injury prevention. -

-
-

Recovery Essentials:

-
    -
  • • 8+ hours of sleep per night
  • -
  • • Proper hydration and nutrition
  • -
  • • Stretching and foam rolling
  • -
  • • Rest days between intense sessions
  • -
-
-
- - -
-
🤝
-

Train with Others

-

- Competition and teamwork accelerate improvement. Find training partners and join pickup games. -

-
-

Benefits of Group Training:

-
    -
  • • Increased motivation and accountability
  • -
  • • Learn from others' strengths
  • -
  • • Real-game practice situations
  • -
  • • Build basketball IQ through experience
  • -
-
-
-
- -
-
-

The 10,000 Hour Rule

-

- Research shows it takes approximately 10,000 hours of deliberate practice - to achieve mastery in any skill, including basketball. But you can see - significant improvement in just 100 hours of focused training! -

-
-
-
20 hrs
-
Notice basic improvement
-
-
-
100 hrs
-
Become competent player
-
-
-
1000 hrs
-
Reach advanced level
-
-
-
-
-
-
-
-
-

Ready to Start Playing?

-

- Join the millions who have discovered the joy and benefits of basketball. - Whether you're a complete beginner or looking to improve, there's a place for you on the court. -

- - -
-
-
- - - - - \ No newline at end of file diff --git a/public/sites/a57c81e5-0175-49b9-b333-d0a4d1094271/index.html b/public/sites/a57c81e5-0175-49b9-b333-d0a4d1094271/index.html deleted file mode 100644 index 16c8556032378bde59b1dbb2ee3dbadfd2e4c0de..0000000000000000000000000000000000000000 --- a/public/sites/a57c81e5-0175-49b9-b333-d0a4d1094271/index.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - Reddit Clone - Home - - - - - - - - -
-
- -
- - - - - - - -
-
-

Welcome to Reddit Clone

-

Join thousands of communities and start sharing your interests with people around the world.

-
- - -
-
-
- - -
- -
-
- - - -
-
- - - - - \ No newline at end of file diff --git a/public/sites/a57c81e5-0175-49b9-b333-d0a4d1094271/plan.md b/public/sites/a57c81e5-0175-49b9-b333-d0a4d1094271/plan.md deleted file mode 100644 index 36f4420059f97c90d3da550e536857b1d61c6da0..0000000000000000000000000000000000000000 --- a/public/sites/a57c81e5-0175-49b9-b333-d0a4d1094271/plan.md +++ /dev/null @@ -1,225 +0,0 @@ -# Reddit Clone Development Plan - -## Overview -A comprehensive Reddit clone built with HTML, CSS, JavaScript, and Handlebars templating. This plan outlines the template structure, reusable components, and demo page organization. - -## Core Components Analysis - -### 1. Layout Components -- **Header/Navbar**: Logo, search bar, navigation menu, user menu -- **Sidebar**: Subreddit navigation, trending topics, user info -- **Main Content Area**: Post listings, individual post views -- **Footer**: Links and information - -### 2. Content Components -- **Post Card**: Vote controls, content area, metadata, actions -- **Comment Thread**: Nested comments with vote controls and replies -- **User Profile**: User info, post history, karma, badges -- **Subreddit Info**: Description, rules, moderators - -### 3. Interactive Elements -- **Vote System**: Upvote/downvote with score display -- **Comment System**: Reply, edit, delete functionality -- **User Authentication**: Login/logout states -- **Modal Windows**: Image previews, user settings - -## Handlebars Template Hierarchy - -### Base Templates -``` -templates/ -├── layout/ -│ ├── main.hbs # Main page wrapper -│ ├── header.hbs # Site header/navbar -│ ├── sidebar.hbs # Left sidebar -│ └── footer.hbs # Site footer -├── components/ -│ ├── post/ -│ │ ├── post-card.hbs # Individual post display -│ │ ├── post-list.hbs # Container for multiple posts -│ │ ├── post-vote.hbs # Vote controls -│ │ └── post-metadata.hbs # Post info (author, time, subreddit) -│ ├── comment/ -│ │ ├── comment.hbs # Single comment -│ │ ├── comment-list.hbs # Comment thread container -│ │ ├── comment-form.hbs # New comment form -│ │ └── nested-comment.hbs # Nested reply structure -│ ├── user/ -│ │ ├── user-avatar.hbs # User profile image -│ │ ├── user-info.hbs # Basic user info -│ │ └── user-menu.hbs # Dropdown user menu -│ └── subreddit/ -│ ├── subreddit-info.hbs # Subreddit details -│ ├── subreddit-rules.hbs # Rules display -│ └── create-post.hbs # Post creation form -└── pages/ - ├── home.hbs # Homepage with posts - ├── post-detail.hbs # Individual post view - ├── profile.hbs # User profile page - ├── subreddit.hbs # Subreddit page - ├── login.hbs # Login page - └── settings.hbs # User settings -``` - -## Demo Page Structure - -### 1. Homepage (/index.html) -``` -Header -├── Logo (Reddit Clone) -├── Search Bar -├── Navigation (Home, Popular, All) -└── User Menu (Login/Profile) - -Main Content -├── Sort Controls (Hot, New, Top, Rising) -├── Post Feed -│ ├── Post 1: Text post with comments -│ ├── Post 2: Image post with vote simulation -│ ├── Post 3: Link post with thumbnail -│ ├── Post 4: Video post placeholder -│ └── Post 5: Question post -└── Create Post Button (if logged in) - -Sidebar -├── Home Feed Info -├── Popular Subreddits -├── Active Communities -└── Footer Links -``` - -### 2. Individual Post Page (/post.html) -``` -Header (same as homepage) - -Main Content -├── Breadcrumb Navigation -├── Full Post Display -│ ├── Enhanced vote system -│ ├── Full post content -│ ├── Post actions (share, save, etc.) -│ └── Post metadata -├── Comment Section -│ ├── Sort controls -│ ├── Comment form (if logged in) -│ ├── Comment 1 (with replies) -│ │ ├── Reply form -│ │ ├── Nested comment 1.1 -│ │ └── Nested comment 1.2 -│ ├── Comment 2 -│ └── Comment 3 -└── Related Posts - -Sidebar -├── About Community -├── Community Rules -├── Moderators -└── Similar Posts -``` - -### 3. User Profile Page (/profile.html) -``` -Header (same as homepage) - -Main Content -├── Profile Header -│ ├── User avatar -│ ├── Username and title -│ ├── Karma and join date -│ └── Follow/Message buttons -├── Profile Navigation Tabs -│ ├── Overview (default) -│ ├── Posts -│ ├── Comments -│ └──Upvoted -└── Content Area (changes based on tab) - ├── Overview: Recent activity summary - ├── Posts: List of user's posts - ├── Comments: List of user's comments - └── Upvoted: Posts user has upvoted - -Sidebar -├── User Statistics -├── About Section -├── Recent Activity -└── Suggested Communities -``` - -## Sample Data Structure - -### Posts Data Example -```javascript -{ - posts: [ - { - id: "abc123", - title: "Just found this abandoned building downtown", - text: "Walked past this place today and couldn't believe it was just sitting there empty. The architecture looks really interesting, like something from the 1920s.", - author: "urban_explorer", - subreddit: "architecture", - createdAt: "2 hours ago", - score: 245, - userVote: 1, - commentCount: 34, - thumbnail: null, - isVideo: false, - url: null, - flair: "Discussion" - }, - { - id: "def456", - title: "My dog decided to become an interior designer", - text: null, - author: "dogmom2023", - subreddit: "funny", - createdAt: "4 hours ago", - score: 892, - userVote: 1, - commentCount: 67, - thumbnail: "/images/dog-design.jpg", - isVideo: false, - url: null, - flair: "Photo" - } - ] -} -``` - -## Key Features to Implement - -### Core Functionality -1. **Vote System**: Interactive upvoting/downvoting with score updates -2. **Comment System**: Nested comments with replies, voting, and actions -3. **Post Display**: Multiple post types (text, image, link, video) -4. **User Profiles**: Profile pages with activity history and stats -5. **Sorting**: Hot, New, Top, Rising sorting options -6. **Responsive Design**: Mobile-first responsive layout - -### Interactive Elements -1. **Authentication UI**: Login/logout states and user menus -2. **Post Creation**: Forms for creating new posts -3. **Search**: Basic search functionality -4. **Navigation**: Smooth transitions between pages -5. **Infinite Scroll**: Load more content dynamically - -## Implementation Strategy - -### Phase 1: Foundation -1. Set up HTML structure and basic layout -2. Create Handlebars template files -3. Implement core CSS styling -4. Add sample data and basic templating - -### Phase 2: Interactivity -1. JavaScript for voting system -2. Comment functionality with replies -3. User authentication simulation -4. Post creation forms - -### Phase 3: Enhancement -1. Advanced styling and animations -2. Mobile optimization -3. Accessibility improvements -4. Performance optimization - -This plan provides a comprehensive roadmap for building a fully functional Reddit clone with proper separation of concerns, reusable components, and a scalable architecture. \ No newline at end of file diff --git a/public/sites/a57c81e5-0175-49b9-b333-d0a4d1094271/robots.txt b/public/sites/a57c81e5-0175-49b9-b333-d0a4d1094271/robots.txt deleted file mode 100644 index 9cea8e2739541537393d4cdb30a8e8d70206806a..0000000000000000000000000000000000000000 --- a/public/sites/a57c81e5-0175-49b9-b333-d0a4d1094271/robots.txt +++ /dev/null @@ -1,9 +0,0 @@ -User-agent: * -Allow: / - -Sitemap: http://localhost:3000/sites/a57c81e5-0175-49b9-b333-d0a4d1094271/sitemap.xml - -# Disallow common non-content paths -Disallow: /api/ -Disallow: /_next/ -Disallow: /admin/ diff --git a/public/sites/a57c81e5-0175-49b9-b333-d0a4d1094271/scripts/main.js b/public/sites/a57c81e5-0175-49b9-b333-d0a4d1094271/scripts/main.js deleted file mode 100644 index 371b16b1fef14edd828a5a888aa6916a9ad23a9e..0000000000000000000000000000000000000000 --- a/public/sites/a57c81e5-0175-49b9-b333-d0a4d1094271/scripts/main.js +++ /dev/null @@ -1,401 +0,0 @@ -// Welcome to your project! -// Use this file to add interactivity to your pages. - -// Global state -let postsData = null; -let currentUser = null; - -// DOM Elements -const postFeed = document.getElementById('post-feed'); -const welcomeCard = document.getElementById('welcome-card'); -const authButtons = document.getElementById('auth-buttons'); -const userProfile = document.getElementById('user-profile'); -const createPostPrompt = document.getElementById('create-post-prompt'); - -// Initialize the application -document.addEventListener('DOMContentLoaded', async () => { - await loadNavbar(); - await loadData(); - initializeUserState(); - renderPosts(); - setupEventListeners(); -}); - -// Load and render navbar template -async function loadNavbar() { - try { - // Fetch the navbar template - const response = await fetch('./templates/navbar.hbs'); - const navbarTemplate = await response.text(); - - // Compile the template - const compiledTemplate = Handlebars.compile(navbarTemplate); - - // Create context for the template (you can add data here if needed) - const navbarContext = {}; - - // Render the template - const navbarHTML = compiledTemplate(navbarContext); - - // Insert the rendered HTML into the container - document.getElementById('navbar-container').innerHTML = navbarHTML; - - console.log('Navbar template loaded successfully'); - } catch (error) { - console.error('Failed to load navbar template:', error); - } -} - -// Load data from data.json -async function loadData() { - try { - const response = await fetch('./data.json'); - postsData = await response.json(); - console.log('Data loaded:', postsData); - } catch (error) { - console.error('Failed to load data:', error); - // Fallback data if data.json fails to load - postsData = { - posts: [ - { - id: 1, - title: "Welcome to our Reddit Clone!", - author: "u/admin", - subreddit: "r/announcements", - content: "This is our first post on the platform. We're excited to have you here!", - votes: 42, - comments: 15, - createdAt: "2 hours ago", - image: null - }, - { - id: 2, - title: "Check out this amazing feature", - author: "u/developer", - subreddit: "r/webdev", - content: "Just implemented a new feature that makes the platform much faster!", - votes: 28, - comments: 8, - createdAt: "4 hours ago", - image: null - }, - { - id: 3, - title: "Weekly discussion thread", - author: "u/moderator", - subreddit: "r/discussions", - content: "Share your thoughts on the latest tech trends in this week's discussion thread.", - votes: 16, - comments: 24, - createdAt: "6 hours ago", - image: null - } - ] - }; - } -} - -// Initialize user state based on data -function initializeUserState() { - if (postsData && postsData.user) { - currentUser = postsData.user; - updateUserInterface(); - } -} - -// Update user interface based on login state -function updateUserInterface() { - if (currentUser && currentUser.isLoggedIn) { - // Show logged in state - authButtons.style.display = 'none'; - userProfile.style.display = 'block'; - createPostPrompt.style.display = 'block'; - welcomeCard.style.display = 'none'; - - // Update user info - document.getElementById('username').textContent = currentUser.username; - document.getElementById('user-avatar').src = currentUser.avatar; - } else { - // Show logged out state - authButtons.style.display = 'flex'; - userProfile.style.display = 'none'; - createPostPrompt.style.display = 'none'; - welcomeCard.style.display = 'block'; - } -} - -// Render posts to the feed -function renderPosts() { - if (!postsData || !postsData.posts) { - console.error('No posts data available'); - return; - } - - // Clear existing posts - postFeed.innerHTML = ''; - - // Render each post - postsData.posts.forEach(post => { - const postElement = createPostElement(post); - postFeed.appendChild(postElement); - }); -} - -// Create a post element -function createPostElement(post) { - const article = document.createElement('article'); - article.className = 'post-card'; - article.dataset.postId = post.id; - - article.innerHTML = ` -
- - ${post.votes} - -
- -
-
- - -
- -

${post.title}

- -
-

${post.content}

-
- -
- - - - -
-
- `; - - return article; -} - -// Setup event listeners -function setupEventListeners() { - // Login/Signup buttons - const loginBtn = document.getElementById('login-btn'); - const signupBtn = document.getElementById('signup-btn'); - - if (loginBtn) { - loginBtn.addEventListener('click', handleLogin); - } - - if (signupBtn) { - signupBtn.addEventListener('click', handleSignup); - } - - // Welcome card buttons - const getStartedBtn = document.getElementById('get-started-btn'); - const learnMoreBtn = document.getElementById('learn-more-btn'); - - if (getStartedBtn) { - getStartedBtn.addEventListener('click', handleGetStarted); - } - - if (learnMoreBtn) { - learnMoreBtn.addEventListener('click', handleLearnMore); - } - - // Sort controls - const sortBtns = document.querySelectorAll('.sort-btn'); - sortBtns.forEach(btn => { - btn.addEventListener('click', () => handleSort(btn)); - }); - - // Vote buttons (using event delegation) - postFeed.addEventListener('click', (e) => { - if (e.target.closest('.vote-btn')) { - const voteBtn = e.target.closest('.vote-btn'); - const postCard = voteBtn.closest('.post-card'); - handleVote(voteBtn, postCard); - } - }); - - // Search functionality - const searchInput = document.querySelector('.search-input'); - if (searchInput) { - searchInput.addEventListener('input', handleSearch); - } - - // Create post prompt - const postInput = document.querySelector('.post-input'); - if (postInput) { - postInput.addEventListener('click', handleCreatePost); - postInput.addEventListener('keydown', (e) => { - if (e.key === 'Enter' || e.key === ' ') { - e.preventDefault(); - handleCreatePost(); - } - }); - } -} - -// Event handlers -function handleLogin() { - console.log('Login clicked'); - // Simulate login - if (currentUser) { - currentUser.isLoggedIn = true; - currentUser.username = 'demo_user'; - updateUserInterface(); - } -} - -function handleSignup() { - console.log('Signup clicked'); - // Simulate signup - if (currentUser) { - currentUser.isLoggedIn = true; - currentUser.username = 'new_user'; - updateUserInterface(); - } -} - -function handleGetStarted() { - console.log('Get Started clicked'); - handleSignup(); -} - -function handleLearnMore() { - console.log('Learn More clicked'); - alert('Learn more about Reddit Clone features coming soon!'); -} - -function handleSort(clickedBtn) { - const sortBtns = document.querySelectorAll('.sort-btn'); - - // Update active state - sortBtns.forEach(btn => { - btn.classList.remove('active'); - btn.setAttribute('aria-pressed', 'false'); - }); - - clickedBtn.classList.add('active'); - clickedBtn.setAttribute('aria-pressed', 'true'); - - const sortType = clickedBtn.dataset.sort; - console.log(`Sorting by: ${sortType}`); - - // Here you would implement actual sorting logic - // For now, just log the action -} - -function handleVote(voteBtn, postCard) { - const action = voteBtn.dataset.action; - const scoreElement = postCard.querySelector('.vote-score'); - let currentScore = parseInt(scoreElement.textContent); - - if (action === 'upvote') { - // Toggle upvote (simplified logic) - currentScore += 1; - voteBtn.classList.toggle('active'); - } else if (action === 'downvote') { - // Toggle downvote (simplified logic) - currentScore -= 1; - voteBtn.classList.toggle('active'); - } - - scoreElement.textContent = currentScore; - console.log(`Vote ${action} on post ${postCard.dataset.postId}, new score: ${currentScore}`); -} - -function handleSearch(event) { - const query = event.target.value.toLowerCase(); - console.log(`Searching for: ${query}`); - - // Here you would implement actual search logic - // For now, just log the search query -} - -function handleCreatePost() { - console.log('Create post clicked'); - alert('Post creation form coming soon!'); -} - -// Utility functions -function formatNumber(num) { - if (num >= 1000000) { - return (num / 1000000).toFixed(1) + 'M'; - } else if (num >= 1000) { - return (num / 1000).toFixed(1) + 'K'; - } - return num.toString(); -} - -function timeAgo(dateString) { - const now = new Date(); - const date = new Date(dateString); - const diffInSeconds = Math.floor((now - date) / 1000); - - if (diffInSeconds < 60) { - return 'just now'; - } else if (diffInSeconds < 3600) { - return `${Math.floor(diffInSeconds / 60)}m ago`; - } else if (diffInSeconds < 86400) { - return `${Math.floor(diffInSeconds / 3600)}h ago`; - } else { - return `${Math.floor(diffInSeconds / 86400)}d ago`; - } -} - -// Export functions for testing (if needed) -if (typeof module !== 'undefined' && module.exports) { - module.exports = { - loadData, - renderPosts, - createPostElement, - formatNumber, - timeAgo - }; -} \ No newline at end of file diff --git a/public/sites/a57c81e5-0175-49b9-b333-d0a4d1094271/sitemap.xml b/public/sites/a57c81e5-0175-49b9-b333-d0a4d1094271/sitemap.xml deleted file mode 100644 index 4512cd276dcf90afafe9f8f94b5c629981aa25a1..0000000000000000000000000000000000000000 --- a/public/sites/a57c81e5-0175-49b9-b333-d0a4d1094271/sitemap.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - http://localhost:3000/sites/a57c81e5-0175-49b9-b333-d0a4d1094271 - 2025-11-17 - weekly - 1.0 - - \ No newline at end of file diff --git a/public/sites/a57c81e5-0175-49b9-b333-d0a4d1094271/styles/style.css b/public/sites/a57c81e5-0175-49b9-b333-d0a4d1094271/styles/style.css deleted file mode 100644 index 305cf0d019ab1586b213b2dcb8669bc0392de0f5..0000000000000000000000000000000000000000 --- a/public/sites/a57c81e5-0175-49b9-b333-d0a4d1094271/styles/style.css +++ /dev/null @@ -1,630 +0,0 @@ -/* Reddit Clone Styles */ - -/* CSS Reset and Base Styles */ -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -body { - font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; - background: #DAE0E6; - color: #0f172a; - line-height: 1.5; -} - -/* Header Styles */ -.header { - background: #fff; - border-bottom: 1px solid #e5e7eb; - position: sticky; - top: 0; - z-index: 100; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); -} - -.header-container { - display: flex; - align-items: center; - justify-content: space-between; - max-width: 1200px; - margin: 0 auto; - padding: 0 1rem; - height: 64px; -} - -.header-left { - display: flex; - align-items: center; - gap: 1rem; -} - -.logo { - display: flex; - align-items: center; - gap: 0.5rem; - color: #ff4500; - font-weight: bold; - font-size: 1.25rem; - text-decoration: none; -} - -.logo:hover { - color: #e03c00; -} - -.nav-list { - display: flex; - list-style: none; - gap: 1rem; -} - -.nav-link { - padding: 0.5rem 0.75rem; - border-radius: 6px; - color: #7c8aa1; - text-decoration: none; - font-weight: 500; - transition: all 0.2s; -} - -.nav-link:hover, -.nav-link.active { - background: #f1f5f9; - color: #0f172a; -} - -.header-center { - flex: 1; - max-width: 600px; - margin: 0 2rem; -} - -.search-container { - position: relative; - width: 100%; -} - -.search-icon { - position: absolute; - left: 0.75rem; - top: 50%; - transform: translateY(-50%); - color: #64748b; - pointer-events: none; -} - -.search-input { - width: 100%; - padding: 0.5rem 0.75rem 0.5rem 2.5rem; - border: 1px solid #e5e7eb; - border-radius: 24px; - background: #f8fafc; - font-size: 0.875rem; - transition: all 0.2s; -} - -.search-input:focus { - outline: none; - border-color: #ff4500; - background: #fff; - box-shadow: 0 0 0 2px rgba(255, 69, 0, 0.1); -} - -.header-right { - display: flex; - align-items: center; - gap: 1rem; -} - -.auth-buttons { - display: flex; - gap: 0.75rem; - align-items: center; -} - -.btn { - padding: 0.5rem 1rem; - border: none; - border-radius: 6px; - font-weight: 600; - font-size: 0.875rem; - cursor: pointer; - transition: all 0.2s; - text-decoration: none; - display: inline-flex; - align-items: center; - justify-content: center; -} - -.btn-primary { - background: #ff4500; - color: white; -} - -.btn-primary:hover { - background: #e03c00; -} - -.btn-secondary { - background: transparent; - color: #0f172a; - border: 1px solid #e5e7eb; -} - -.btn-secondary:hover { - background: #f8fafc; -} - -.user-profile { - position: relative; -} - -.user-avatar { - display: flex; - align-items: center; - gap: 0.5rem; - padding: 0.5rem; - border: 1px solid #e5e7eb; - border-radius: 6px; - background: #fff; - cursor: pointer; - transition: all 0.2s; -} - -.user-avatar:hover { - background: #f8fafc; -} - -.user-avatar img { - width: 32px; - height: 32px; - border-radius: 50%; -} - -.username { - font-weight: 500; - color: #0f172a; -} - -/* Main Content Layout */ -.main-content { - max-width: 1200px; - margin: 1.5rem auto; - padding: 0 1rem; -} - -.content-container { - display: grid; - grid-template-columns: 1fr 320px; - gap: 1.5rem; -} - -/* Feed Styles */ -.feed-main { - background: #fff; - border-radius: 8px; - overflow: hidden; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); -} - -.sort-controls { - display: flex; - padding: 1rem; - background: #f8fafc; - border-bottom: 1px solid #e5e7eb; - gap: 0.5rem; -} - -.sort-btn { - display: flex; - align-items: center; - gap: 0.5rem; - padding: 0.5rem 0.75rem; - border: none; - background: transparent; - color: #64748b; - border-radius: 6px; - font-size: 0.875rem; - font-weight: 500; - cursor: pointer; - transition: all 0.2s; -} - -.sort-btn:hover { - background: #e2e8f0; - color: #0f172a; -} - -.sort-btn.active { - background: #ff4500; - color: white; -} - -/* Create Post Prompt */ -.create-post-prompt { - padding: 1rem; - background: #fff; - border-bottom: 1px solid #e5e7eb; -} - -.post-input { - display: flex; - align-items: center; - gap: 0.75rem; - padding: 0.75rem 1rem; - border: 1px solid #e5e7eb; - border-radius: 24px; - cursor: pointer; - transition: all 0.2s; - background: #f8fafc; -} - -.post-input:hover { - background: #e2e8f0; - border-color: #cbd5e1; -} - -.post-input-avatar img { - width: 32px; - height: 32px; - border-radius: 50%; -} - -.post-input-text { - color: #64748b; - font-size: 0.875rem; -} - -/* Welcome Card */ -.welcome-card { - padding: 2rem; - text-align: center; - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - color: white; -} - -.welcome-content h2 { - font-size: 2rem; - margin-bottom: 0.5rem; -} - -.welcome-content p { - font-size: 1.125rem; - margin-bottom: 1.5rem; - opacity: 0.9; -} - -.welcome-actions { - display: flex; - gap: 1rem; - justify-content: center; -} - -.welcome-actions .btn { - padding: 0.75rem 1.5rem; - font-size: 1rem; -} - -/* Post Styles */ -.post-card { - display: flex; - border-bottom: 1px solid #e5e7eb; - transition: background-color 0.2s; -} - -.post-card:hover { - background: #f8fafc; -} - -.post-card:last-child { - border-bottom: none; -} - -.vote-section { - display: flex; - flex-direction: column; - align-items: center; - padding: 0.75rem 0.5rem; - background: #f8fafc; - border-right: 1px solid #e5e7eb; - min-width: 60px; -} - -.vote-btn { - background: none; - border: none; - padding: 0.25rem; - border-radius: 4px; - cursor: pointer; - transition: all 0.2s; - color: #64748b; -} - -.vote-btn:hover { - background: #e2e8f0; - color: #0f172a; -} - -.vote-btn.upvote.active { - color: #ff4500; -} - -.vote-btn.downvote.active { - color: #6b7280; -} - -.vote-score { - font-weight: 600; - font-size: 0.875rem; - margin: 0.25rem 0; - color: #0f172a; -} - -.post-content { - flex: 1; - padding: 0.75rem 1rem; -} - -.post-header { - display: flex; - justify-content: space-between; - align-items: flex-start; - margin-bottom: 0.5rem; -} - -.post-meta { - display: flex; - align-items: center; - gap: 0.5rem; - font-size: 0.75rem; - color: #64748b; -} - -.subreddit { - color: #ff4500; - font-weight: 600; -} - -.separator { - color: #cbd5e1; -} - -.post-menu-btn { - background: none; - border: none; - padding: 0.25rem; - border-radius: 4px; - cursor: pointer; - color: #64748b; - transition: all 0.2s; -} - -.post-menu-btn:hover { - background: #e2e8f0; - color: #0f172a; -} - -.post-title { - font-size: 1.125rem; - font-weight: 600; - line-height: 1.3; - margin-bottom: 0.5rem; - color: #0f172a; -} - -.post-text { - font-size: 0.875rem; - line-height: 1.5; - color: #374151; - margin-bottom: 0.75rem; -} - -.post-actions { - display: flex; - gap: 0.5rem; -} - -.action-btn { - display: flex; - align-items: center; - gap: 0.5rem; - padding: 0.5rem 0.75rem; - background: none; - border: none; - border-radius: 6px; - color: #64748b; - font-size: 0.875rem; - cursor: pointer; - transition: all 0.2s; -} - -.action-btn:hover { - background: #f1f5f9; - color: #0f172a; -} - -.action-text { - font-weight: 500; -} - -/* Sidebar Styles */ -.sidebar { - display: flex; - flex-direction: column; - gap: 1rem; -} - -.sidebar-card { - background: #fff; - border-radius: 8px; - padding: 1rem; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); -} - -.sidebar-card h3 { - font-size: 1rem; - font-weight: 600; - margin-bottom: 0.75rem; - color: #0f172a; -} - -.sidebar-card p { - font-size: 0.875rem; - color: #64748b; - line-height: 1.5; - margin-bottom: 1rem; -} - -.sidebar-actions { - display: flex; - flex-direction: column; - gap: 0.5rem; -} - -.sidebar-btn { - width: 100%; - justify-content: center; -} - -.subreddit-list { - list-style: none; -} - -.subreddit-item { - display: block; - padding: 0.5rem 0; - color: #64748b; - text-decoration: none; - font-size: 0.875rem; - transition: color 0.2s; -} - -.subreddit-item:hover { - color: #ff4500; -} - -.subreddit-item:not(:last-child) { - border-bottom: 1px solid #f1f5f9; -} - -.community-list { - list-style: none; -} - -.community-item { - display: flex; - align-items: center; - gap: 0.75rem; - padding: 0.5rem 0; - color: #64748b; - text-decoration: none; - transition: all 0.2s; -} - -.community-item:hover { - background: #f8fafc; - color: #0f172a; - border-radius: 6px; - margin: 0 -0.5rem; - padding: 0.5rem; -} - -.community-avatar { - width: 32px; - height: 32px; - border-radius: 50%; - background: #ff4500; - color: white; - display: flex; - align-items: center; - justify-content: center; - font-weight: bold; - font-size: 0.875rem; -} - -.community-info { - display: flex; - flex-direction: column; -} - -.community-name { - font-weight: 500; - color: #0f172a; -} - -.community-stats { - font-size: 0.75rem; - color: #64748b; -} - -/* Responsive Design */ -@media (max-width: 1024px) { - .content-container { - grid-template-columns: 1fr; - } - - .sidebar { - display: none; - } -} - -@media (max-width: 768px) { - .header-container { - padding: 0 0.5rem; - } - - .header-left .nav-menu { - display: none; - } - - .header-center { - margin: 0 1rem; - } - - .main-content { - margin: 0.5rem auto; - padding: 0 0.5rem; - } - - .welcome-content h2 { - font-size: 1.5rem; - } - - .welcome-content p { - font-size: 1rem; - } - - .welcome-actions { - flex-direction: column; - } - - .sort-controls { - overflow-x: auto; - padding: 0.75rem; - } - - .post-actions { - flex-wrap: wrap; - } - - .action-btn .action-text { - display: none; - } -} - -@media (max-width: 480px) { - .auth-buttons { - gap: 0.5rem; - } - - .auth-buttons .btn { - padding: 0.375rem 0.75rem; - font-size: 0.75rem; - } - - .username { - display: none; - } -} \ No newline at end of file diff --git a/public/sites/af3ba693-4c5a-4564-9c93-0c9b9f3d74f1/index.html b/public/sites/af3ba693-4c5a-4564-9c93-0c9b9f3d74f1/index.html deleted file mode 100644 index 9ff10b7d1c15a085451f45722a5421e484e3df70..0000000000000000000000000000000000000000 --- a/public/sites/af3ba693-4c5a-4564-9c93-0c9b9f3d74f1/index.html +++ /dev/null @@ -1,336 +0,0 @@ - - - - - - QuickTalks - Simple, Reliable, Private Messaging - - - - - -
-
-
-
-
-

- Message friends, family and groups -

-

- Start a video call, share your screen, or get closer with voice messages. Connect from anywhere in the world, for free. -

- -
-
-
- QuickTalks Mobile App -
-
-
-
-
-
- -
-
-
-

Features

-

- With QuickTalks, you'll always have a way to stay in touch. -

-
- -
-
-
- - - -
-

End-to-end encryption

-

Your personal messages and calls are end-to-end encrypted. This means only you and the person you're communicating with can read or listen to what is sent.

-
-
-
- - - -
-

Voice and video calls

-

Stay connected with friends and family through secure voice and video calls. Make crystal-clear calls anywhere in the world.

-
-
-
- - - -
-

Group conversations

-

Create groups for the people you message most. Name them, set group photos and keep them all in one place.

-
-
-
- - - -
-

Photos and videos

-

Send photos and videos on QuickTalks instantly. You can even capture the moments that matter to you most with a built-in camera.

-
-
-
- - - -
-

Voice messages

-

Sometimes, your voice says it all. With just one tap you can record a Voice Message and send it to your contacts.

-
-
-
- - - -
-

Document sharing

-

Send PDFs, documents, spreadsheets, slideshows and more, without the hassle of email or file-sharing apps.

-
-
-
-
- - -
-
-
-
-
- 2B+ -
-
Users worldwide
-
-
-
- 100+ -
-
Countries
-
-
-
- 60+ -
-
Languages
-
-
-
- 180 -
-
Countries where available
-
-
-
-
- - -
-
-
-
-

End-to-end encryption

-

- Some of your most personal moments are shared on QuickTalks, which is why we built end-to-end encryption into our app. When end-to-end encrypted, your messages, photos, videos, voice messages, documents, and calls are secured from falling into the wrong hands. -

- - Learn more about security - - - - -
-
- Security -
-
-
-
- - -
-
-

Ready to get started?

-

- Download QuickTalks today and start connecting with friends and family around the world. -

- -
-
-
- - - - - - \ No newline at end of file diff --git a/public/sites/af3ba693-4c5a-4564-9c93-0c9b9f3d74f1/plan.md b/public/sites/af3ba693-4c5a-4564-9c93-0c9b9f3d74f1/plan.md deleted file mode 100644 index d922faabe8367ccc7e90521278398dbffeba44cb..0000000000000000000000000000000000000000 --- a/public/sites/af3ba693-4c5a-4564-9c93-0c9b9f3d74f1/plan.md +++ /dev/null @@ -1,158 +0,0 @@ -# QuickTalks - WhatsApp Clone Development Plan - -## Project Overview -Create a multipage website for QuickTalks, a WhatsApp clone with identical design and aesthetics to whatsapp.com. - -## Tech Stack -- **Styling**: TailwindCSS -- **Animations**: Framer Motion -- **Templates**: Handlebars (for DRY components) -- **Structure**: Multipage website - -## Pages to Implement -Based on WhatsApp's website structure: - -### 1. Home Page (`index.html`) -- Hero section with app download CTAs -- Features overview -- Security highlights -- Platform availability -- Footer with links - -### 2. Features Page (`features.html`) -- Detailed feature breakdown -- Privacy & Security -- Business features -- Group communication -- Multimedia sharing - -### 3. Download Page (`download.html`) -- Multi-platform download options -- Desktop/Mac downloads -- Mobile app stores -- System requirements - -### 4. Business Page (`business.html`) -- WhatsApp Business features -- Business API information -- Customer success stories -- Pricing information - -### 5. Security Page (`security.html`) -- End-to-end encryption details -- Privacy features -- Security best practices -- Two-factor authentication - -### 6. About Page (`about.html`) -- Company information -- Mission/vision -- Press releases -- Careers - -## Design System -### Color Palette (WhatsApp-inspired) -- Primary: #25D366 (WhatsApp Green) -- Secondary: #128C7E (Dark Green) -- Dark: #111B21 (Dark Mode) -- Light: #ECE5DD (Light Background) -- Text: #3B4A54 (Primary Text) -- Light Text: #8696A0 (Secondary Text) - -### Typography -- Headings: System UI, sans-serif -- Body: System UI, sans-serif -- Weights: 400, 500, 600, 700 - -### Components to Create (Handlebars Partials) -1. **Navigation** (`/templates/partials/nav.hbs`) - - Logo - - Navigation links - - Download CTA - - Mobile menu toggle - -2. **Footer** (`/templates/partials/footer.hbs`) - - Company links - - Product links - - Legal links - - Social media - - Copyright - -3. **Download Buttons** (`/templates/partials/download-buttons.hbs`) - - App Store - - Google Play - - Desktop download - -4. **Feature Card** (`/templates/partials/feature-card.hbs`) - - Icon - - Title - - Description - -5. **Hero Section** (`/templates/partials/hero.hbs`) - - Main heading - - Subheading - - Download CTAs - - Phone mockup - -## Directory Structure -``` -/ -├── index.html -├── features.html -├── download.html -├── business.html -├── security.html -├── about.html -├── styles/ -│ └── style.css (TailwindCSS + custom) -├── scripts/ -│ ├── main.js -│ └── animations.js (Framer Motion) -├── templates/ -│ ├── partials/ -│ │ ├── nav.hbs -│ │ ├── footer.hbs -│ │ ├── download-buttons.hbs -│ │ ├── feature-card.hbs -│ │ └── hero.hbs -│ └── layouts/ -│ └── base.hbs -├── data.json -└── plan.md -``` - -## Implementation Steps -1. ✅ Explore current codebase -2. ✅ Create development plan -3. Set up TailwindCSS -4. Create base layout template -5. Build reusable components (nav, footer, etc.) -6. Implement Home page -7. Implement Features page -8. Implement Download page -9. Implement Business page -10. Implement Security page -11. Implement About page -12. Add Framer Motion animations -13. Responsive design optimization -14. Final testing and polish - -## Key Features to Include -- Responsive design (mobile-first) -- Smooth scroll animations -- Interactive hover states -- Mobile navigation menu -- Download CTAs on every page -- Consistent branding -- Accessibility features -- Fast loading animations - -## WhatsApp Design Elements to Replicate -- Clean, minimalist interface -- Green accent colors -- Rounded corners on buttons -- High-quality mockup images -- Clear typography hierarchy -- Professional business aesthetic -- Trust-focused messaging -- Security-first communication diff --git a/public/sites/af3ba693-4c5a-4564-9c93-0c9b9f3d74f1/robots.txt b/public/sites/af3ba693-4c5a-4564-9c93-0c9b9f3d74f1/robots.txt deleted file mode 100644 index a1969f4d0a651ad00629977e738a4cccf96e8336..0000000000000000000000000000000000000000 --- a/public/sites/af3ba693-4c5a-4564-9c93-0c9b9f3d74f1/robots.txt +++ /dev/null @@ -1,9 +0,0 @@ -User-agent: * -Allow: / - -Sitemap: http://localhost:3000/sites/af3ba693-4c5a-4564-9c93-0c9b9f3d74f1/sitemap.xml - -# Disallow common non-content paths -Disallow: /api/ -Disallow: /_next/ -Disallow: /admin/ diff --git a/public/sites/af3ba693-4c5a-4564-9c93-0c9b9f3d74f1/scripts/animations.js b/public/sites/af3ba693-4c5a-4564-9c93-0c9b9f3d74f1/scripts/animations.js deleted file mode 100644 index 3bcadc762686a63aa81cba5b7a3710cd566fd734..0000000000000000000000000000000000000000 --- a/public/sites/af3ba693-4c5a-4564-9c93-0c9b9f3d74f1/scripts/animations.js +++ /dev/null @@ -1,189 +0,0 @@ -// QuickTalks Animation Scripts (Framer Motion style) - -// Since we can't use React Framer Motion directly in vanilla JS, -// we'll create similar animation effects using vanilla JS - -class QuickTalksAnimations { - constructor() { - this.init(); - } - - init() { - this.setupScrollAnimations(); - this.setupHoverAnimations(); - this.setupTypewriterEffect(); - this.setupCounterAnimations(); - } - - // Smooth scroll animations - setupScrollAnimations() { - const animatedElements = document.querySelectorAll('[data-animate]'); - - const observer = new IntersectionObserver((entries) => { - entries.forEach(entry => { - if (entry.isIntersecting) { - const animationType = entry.target.dataset.animate; - this.performAnimation(entry.target, animationType); - } - }); - }, { - threshold: 0.1, - rootMargin: '0px 0px -50px 0px' - }); - - animatedElements.forEach(el => observer.observe(el)); - } - - performAnimation(element, type) { - switch(type) { - case 'slideInLeft': - element.style.transform = 'translateX(0)'; - element.style.opacity = '1'; - break; - case 'slideInRight': - element.style.transform = 'translateX(0)'; - element.style.opacity = '1'; - break; - case 'fadeInUp': - element.style.transform = 'translateY(0)'; - element.style.opacity = '1'; - break; - case 'scaleIn': - element.style.transform = 'scale(1)'; - element.style.opacity = '1'; - break; - } - } - - // Hover animations - setupHoverAnimations() { - const hoverElements = document.querySelectorAll('[data-hover]'); - - hoverElements.forEach(element => { - element.addEventListener('mouseenter', (e) => { - const hoverType = e.target.dataset.hover; - this.applyHoverEffect(e.target, hoverType, true); - }); - - element.addEventListener('mouseleave', (e) => { - const hoverType = e.target.dataset.hover; - this.applyHoverEffect(e.target, hoverType, false); - }); - }); - } - - applyHoverEffect(element, type, isEntering) { - switch(type) { - case 'lift': - element.style.transform = isEntering ? 'translateY(-5px)' : 'translateY(0)'; - break; - case 'scale': - element.style.transform = isEntering ? 'scale(1.05)' : 'scale(1)'; - break; - case 'glow': - element.style.boxShadow = isEntering - ? '0 0 20px rgba(37, 211, 102, 0.3)' - : 'none'; - break; - } - } - - // Typewriter effect - setupTypewriterEffect() { - const typewriterElements = document.querySelectorAll('[data-typewriter]'); - - typewriterElements.forEach(element => { - const text = element.textContent; - const speed = parseInt(element.dataset.speed) || 100; - element.textContent = ''; - - let i = 0; - const typeWriter = () => { - if (i < text.length) { - element.textContent += text.charAt(i); - i++; - setTimeout(typeWriter, speed); - } - }; - - // Start typing when element is in view - const observer = new IntersectionObserver((entries) => { - if (entries[0].isIntersecting) { - typeWriter(); - observer.disconnect(); - } - }); - - observer.observe(element); - }); - } - - // Counter animations - setupCounterAnimations() { - const counterElements = document.querySelectorAll('[data-counter]'); - - const observer = new IntersectionObserver((entries) => { - entries.forEach(entry => { - if (entry.isIntersecting) { - const target = parseInt(entry.target.dataset.counter); - const duration = parseInt(entry.target.dataset.duration) || 2000; - this.animateCounter(entry.target, target, duration); - observer.unobserve(entry.target); - } - }); - }); - - counterElements.forEach(el => observer.observe(el)); - } - - animateCounter(element, target, duration) { - const increment = target / (duration / 16); - let current = 0; - - const updateCounter = () => { - current += increment; - if (current < target) { - element.textContent = Math.floor(current); - requestAnimationFrame(updateCounter); - } else { - element.textContent = target; - } - }; - - updateCounter(); - } - - // Parallax scrolling effect - setupParallax() { - const parallaxElements = document.querySelectorAll('[data-parallax]'); - - window.addEventListener('scroll', () => { - const scrolled = window.pageYOffset; - - parallaxElements.forEach(element => { - const speed = parseFloat(element.dataset.parallax) || 0.5; - const yPos = -(scrolled * speed); - element.style.transform = `translateY(${yPos}px)`; - }); - }); - } - - // Staggered animations - staggerAnimation(elements, delay = 100) { - elements.forEach((element, index) => { - setTimeout(() => { - element.classList.add('animate-fadeInUp'); - }, index * delay); - }); - } -} - -// Initialize animations when DOM is ready -document.addEventListener('DOMContentLoaded', () => { - window.qtAnimations = new QuickTalksAnimations(); -}); - -// Export for use in other files -if (typeof module !== 'undefined' && module.exports) { - module.exports = QuickTalksAnimations; -} \ No newline at end of file diff --git a/public/sites/af3ba693-4c5a-4564-9c93-0c9b9f3d74f1/scripts/main.js b/public/sites/af3ba693-4c5a-4564-9c93-0c9b9f3d74f1/scripts/main.js deleted file mode 100644 index 71d40b17febc9da1bf79be317325ee8ffff2df9b..0000000000000000000000000000000000000000 --- a/public/sites/af3ba693-4c5a-4564-9c93-0c9b9f3d74f1/scripts/main.js +++ /dev/null @@ -1,91 +0,0 @@ -// QuickTalks Main JavaScript - -document.addEventListener('DOMContentLoaded', () => { - console.log('QuickTalks loaded successfully!'); - - // Mobile menu toggle - const mobileMenuButton = document.getElementById('mobile-menu-button'); - const mobileMenu = document.getElementById('mobile-menu'); - - if (mobileMenuButton && mobileMenu) { - mobileMenuButton.addEventListener('click', () => { - mobileMenu.classList.toggle('hidden'); - mobileMenu.classList.toggle('mobile-menu-enter'); - }); - } - - // Smooth scrolling for anchor links - document.querySelectorAll('a[href^="#"]').forEach(anchor => { - anchor.addEventListener('click', function (e) { - e.preventDefault(); - const target = document.querySelector(this.getAttribute('href')); - if (target) { - target.scrollIntoView({ - behavior: 'smooth', - block: 'start' - }); - } - }); - }); - - // Add scroll animations - const observerOptions = { - threshold: 0.1, - rootMargin: '0px 0px -50px 0px' - }; - - const observer = new IntersectionObserver((entries) => { - entries.forEach(entry => { - if (entry.isIntersecting) { - entry.target.classList.add('animate-fadeInUp'); - } - }); - }, observerOptions); - - // Observe elements for animation - document.querySelectorAll('.feature-card, .animate-on-scroll').forEach(el => { - observer.observe(el); - }); - - // Add hover effects to buttons - document.querySelectorAll('.btn-animated').forEach(button => { - button.addEventListener('mouseenter', function() { - this.style.transform = 'scale(1.05)'; - }); - - button.addEventListener('mouseleave', function() { - this.style.transform = 'scale(1)'; - }); - }); - - // Lazy loading for images - if ('IntersectionObserver' in window) { - const imageObserver = new IntersectionObserver((entries, observer) => { - entries.forEach(entry => { - if (entry.isIntersecting) { - const img = entry.target; - img.src = img.dataset.src; - img.classList.remove('lazy'); - imageObserver.unobserve(img); - } - }); - }); - - document.querySelectorAll('img[data-src]').forEach(img => { - imageObserver.observe(img); - }); - } -}); - -// Utility functions -function scrollToTop() { - window.scrollTo({ - top: 0, - behavior: 'smooth' - }); -} - -function downloadApp(platform) { - console.log(`Downloading QuickTalks for ${platform}`); - // Implement download logic here -} \ No newline at end of file diff --git a/public/sites/af3ba693-4c5a-4564-9c93-0c9b9f3d74f1/sitemap.xml b/public/sites/af3ba693-4c5a-4564-9c93-0c9b9f3d74f1/sitemap.xml deleted file mode 100644 index 45dab94b9703bd92cf19a96053137ce18a99ddbf..0000000000000000000000000000000000000000 --- a/public/sites/af3ba693-4c5a-4564-9c93-0c9b9f3d74f1/sitemap.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - http://localhost:3000/sites/af3ba693-4c5a-4564-9c93-0c9b9f3d74f1 - 2025-11-17 - weekly - 1.0 - - \ No newline at end of file diff --git a/public/sites/af3ba693-4c5a-4564-9c93-0c9b9f3d74f1/styles/style.css b/public/sites/af3ba693-4c5a-4564-9c93-0c9b9f3d74f1/styles/style.css deleted file mode 100644 index 8c7b33d1d8ded41fbc8fd5341f1feac55ba2d4f2..0000000000000000000000000000000000000000 --- a/public/sites/af3ba693-4c5a-4564-9c93-0c9b9f3d74f1/styles/style.css +++ /dev/null @@ -1,167 +0,0 @@ -/* Custom QuickTalks Styles */ -@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap'); - -body { - font-family: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; -} - -/* WhatsApp-inspired color palette */ -.text-whatsapp-green { - color: #25D366; -} - -.bg-whatsapp-green { - background-color: #25D366; -} - -.hover\:bg-whatsapp-green-dark:hover { - background-color: #128C7E; -} - -/* Animations */ -@keyframes fadeInUp { - from { - opacity: 0; - transform: translateY(20px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -.animate-fadeInUp { - animation: fadeInUp 0.6s ease-out; -} - -@keyframes slideInLeft { - from { - opacity: 0; - transform: translateX(-30px); - } - to { - opacity: 1; - transform: translateX(0); - } -} - -.animate-slideInLeft { - animation: slideInLeft 0.6s ease-out; -} - -@keyframes slideInRight { - from { - opacity: 0; - transform: translateX(30px); - } - to { - opacity: 1; - transform: translateX(0); - } -} - -.animate-slideInRight { - animation: slideInRight 0.6s ease-out; -} - -/* Enhanced shadows and hover effects */ -.shadow-enhanced { - box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); -} - -.shadow-enhanced-hover:hover { - box-shadow: 0 25px 30px -5px rgba(0, 0, 0, 0.15), 0 15px 15px -5px rgba(0, 0, 0, 0.08); - transform: translateY(-2px); - transition: all 0.3s ease; -} - -/* Custom scrollbar */ -::-webkit-scrollbar { - width: 8px; -} - -::-webkit-scrollbar-track { - background: #f1f1f1; -} - -::-webkit-scrollbar-thumb { - background: #25D366; - border-radius: 4px; -} - -::-webkit-scrollbar-thumb:hover { - background: #128C7E; -} - -/* Mobile menu animations */ -.mobile-menu-enter { - animation: slideDown 0.3s ease-out; -} - -@keyframes slideDown { - from { - opacity: 0; - transform: translateY(-10px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -/* Feature card hover effects */ -.feature-card { - transition: all 0.3s ease; -} - -.feature-card:hover { - transform: translateY(-5px); -} - -/* Button animations */ -.btn-animated { - position: relative; - overflow: hidden; - transition: all 0.3s ease; -} - -.btn-animated::before { - content: ''; - position: absolute; - top: 50%; - left: 50%; - width: 0; - height: 0; - border-radius: 50%; - background: rgba(255, 255, 255, 0.3); - transform: translate(-50%, -50%); - transition: width 0.6s, height 0.6s; -} - -.btn-animated:hover::before { - width: 300px; - height: 300px; -} - -/* Responsive text sizes */ -@media (max-width: 640px) { - .hero-heading { - font-size: 2.5rem; - line-height: 1.2; - } -} - -/* Loading animations */ -.loading-spinner { - border: 3px solid #f3f3f3; - border-top: 3px solid #25D366; - border-radius: 50%; - width: 20px; - height: 20px; - animation: spin 1s linear infinite; -} - -@keyframes spin { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } -} \ No newline at end of file diff --git a/public/sites/be28436b-5a58-4c1b-a1da-ec28036b41e3/index.html b/public/sites/be28436b-5a58-4c1b-a1da-ec28036b41e3/index.html deleted file mode 100644 index 42f554b9e9df6bd6abb27bd64d1167a6ed2b236f..0000000000000000000000000000000000000000 --- a/public/sites/be28436b-5a58-4c1b-a1da-ec28036b41e3/index.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - Under Construction - glm-4.6-one-shot-site-2 - - - -
-
- -
- -

Under Construction

-
glm-4.6-one-shot-site-2
-

This site is currently being updated and improved.

-

Please check back soon!

- - -
- - \ No newline at end of file diff --git a/public/sites/ea724ee7-fc57-4bde-a505-e083d72d52b2/index.html b/public/sites/ea724ee7-fc57-4bde-a505-e083d72d52b2/index.html deleted file mode 100644 index b5f243e4f0f3291c59f2228e9fe03f814ddca715..0000000000000000000000000000000000000000 --- a/public/sites/ea724ee7-fc57-4bde-a505-e083d72d52b2/index.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - Snake Game - - - -
-

Snake Game

-
-
Score: 0
-
High Score: 0
-
- -
- - - -
-
-

Use arrow keys to move the snake

-

Eat food (red) to grow and score points

-

Avoid hitting walls or yourself!

-
-
- - - \ No newline at end of file diff --git a/public/sites/ea724ee7-fc57-4bde-a505-e083d72d52b2/robots.txt b/public/sites/ea724ee7-fc57-4bde-a505-e083d72d52b2/robots.txt deleted file mode 100644 index 26a9ab4af40a7b89b6682f7dca5b63186a7da40c..0000000000000000000000000000000000000000 --- a/public/sites/ea724ee7-fc57-4bde-a505-e083d72d52b2/robots.txt +++ /dev/null @@ -1,9 +0,0 @@ -User-agent: * -Allow: / - -Sitemap: http://localhost:3000/sites/ea724ee7-fc57-4bde-a505-e083d72d52b2/sitemap.xml - -# Disallow common non-content paths -Disallow: /api/ -Disallow: /_next/ -Disallow: /admin/ diff --git a/public/sites/ea724ee7-fc57-4bde-a505-e083d72d52b2/scripts/main.js b/public/sites/ea724ee7-fc57-4bde-a505-e083d72d52b2/scripts/main.js deleted file mode 100644 index 6752881356936a6d11231fa3506e6d68895a3786..0000000000000000000000000000000000000000 --- a/public/sites/ea724ee7-fc57-4bde-a505-e083d72d52b2/scripts/main.js +++ /dev/null @@ -1,254 +0,0 @@ -// Snake Game Implementation - -document.addEventListener('DOMContentLoaded', () => { - const canvas = document.getElementById('game-canvas'); - const ctx = canvas.getContext('2d'); - const scoreElement = document.getElementById('score'); - const highScoreElement = document.getElementById('high-score'); - const startBtn = document.getElementById('start-btn'); - const pauseBtn = document.getElementById('pause-btn'); - const restartBtn = document.getElementById('restart-btn'); - - // Game constants - const GRID_SIZE = 20; - const GRID_WIDTH = canvas.width / GRID_SIZE; - const GRID_HEIGHT = canvas.height / GRID_SIZE; - - // Game state - let snake = []; - let food = {}; - let direction = 'right'; - let nextDirection = 'right'; - let gameRunning = false; - let gamePaused = false; - let score = 0; - let highScore = localStorage.getItem('snakeHighScore') || 0; - let gameLoop; - - // Initialize game - function init() { - snake = [ - { x: 5, y: 10 }, - { x: 4, y: 10 }, - { x: 3, y: 10 } - ]; - - generateFood(); - score = 0; - direction = 'right'; - nextDirection = 'right'; - - updateScore(); - draw(); - } - - // Generate food at random position - function generateFood() { - food = { - x: Math.floor(Math.random() * GRID_WIDTH), - y: Math.floor(Math.random() * GRID_HEIGHT) - }; - - // Ensure food doesn't appear on snake - for (let segment of snake) { - if (segment.x === food.x && segment.y === food.y) { - generateFood(); - break; - } - } - } - - // Update game state - function update() { - if (gamePaused) return; - - // Update direction - direction = nextDirection; - - // Calculate new head position - const head = { ...snake[0] }; - - switch (direction) { - case 'up': head.y--; break; - case 'down': head.y++; break; - case 'left': head.x--; break; - case 'right': head.x++; break; - } - - // Check wall collision - if (head.x < 0 || head.x >= GRID_WIDTH || head.y < 0 || head.y >= GRID_HEIGHT) { - gameOver(); - return; - } - - // Check self collision - for (let segment of snake) { - if (head.x === segment.x && head.y === segment.y) { - gameOver(); - return; - } - } - - // Move snake - snake.unshift(head); - - // Check food collision - if (head.x === food.x && head.y === food.y) { - score += 10; - updateScore(); - generateFood(); - } else { - snake.pop(); - } - - draw(); - } - - // Draw game - function draw() { - // Clear canvas - ctx.fillStyle = '#000'; - ctx.fillRect(0, 0, canvas.width, canvas.height); - - // Draw snake - snake.forEach((segment, index) => { - ctx.fillStyle = index === 0 ? '#4CAF50' : '#8BC34A'; - ctx.fillRect(segment.x * GRID_SIZE, segment.y * GRID_SIZE, GRID_SIZE - 1, GRID_SIZE - 1); - }); - - // Draw food - ctx.fillStyle = '#e94560'; - ctx.fillRect(food.x * GRID_SIZE, food.y * GRID_SIZE, GRID_SIZE - 1, GRID_SIZE - 1); - } - - // Update score display - function updateScore() { - scoreElement.textContent = score; - highScoreElement.textContent = highScore; - } - - // Game over - function gameOver() { - gameRunning = false; - gamePaused = false; - - if (score > highScore) { - highScore = score; - localStorage.setItem('snakeHighScore', highScore); - } - - updateScore(); - clearInterval(gameLoop); - - startBtn.disabled = false; - pauseBtn.disabled = true; - pauseBtn.textContent = 'Pause'; - - // Show game over message - ctx.fillStyle = 'rgba(0, 0, 0, 0.7)'; - ctx.fillRect(0, 0, canvas.width, canvas.height); - - ctx.fillStyle = '#e94560'; - ctx.font = 'bold 24px system-ui'; - ctx.textAlign = 'center'; - ctx.fillText('Game Over!', canvas.width / 2, canvas.height / 2 - 20); - ctx.font = '16px system-ui'; - ctx.fillText(`Score: ${score}`, canvas.width / 2, canvas.height / 2 + 10); - ctx.fillText('Click Start to play again', canvas.width / 2, canvas.height / 2 + 40); - } - - // Start game - function startGame() { - if (!gameRunning) { - init(); - gameRunning = true; - gamePaused = false; - - gameLoop = setInterval(update, 120); - - startBtn.disabled = true; - pauseBtn.disabled = false; - } - } - - // Pause/resume game - function togglePause() { - if (!gameRunning) return; - - gamePaused = !gamePaused; - pauseBtn.textContent = gamePaused ? 'Resume' : 'Pause'; - } - - // Restart game - function restartGame() { - clearInterval(gameLoop); - gameRunning = false; - gamePaused = false; - init(); - - startBtn.disabled = false; - pauseBtn.disabled = true; - pauseBtn.textContent = 'Pause'; - } - - // Handle keyboard input - document.addEventListener('keydown', (e) => { - if (!gameRunning || gamePaused) return; - - switch (e.key) { - case 'ArrowUp': - if (direction !== 'down') nextDirection = 'up'; - break; - case 'ArrowDown': - if (direction !== 'up') nextDirection = 'down'; - break; - case 'ArrowLeft': - if (direction !== 'right') nextDirection = 'left'; - break; - case 'ArrowRight': - if (direction !== 'left') nextDirection = 'right'; - break; - } - }); - - // Button event listeners - startBtn.addEventListener('click', startGame); - pauseBtn.addEventListener('click', togglePause); - restartBtn.addEventListener('click', restartGame); - - // Touch controls for mobile - let touchStartX = 0; - let touchStartY = 0; - - canvas.addEventListener('touchstart', (e) => { - touchStartX = e.touches[0].clientX; - touchStartY = e.touches[0].clientY; - e.preventDefault(); - }); - - canvas.addEventListener('touchmove', (e) => { - if (!gameRunning || gamePaused) return; - - const touchX = e.touches[0].clientX; - const touchY = e.touches[0].clientY; - - const dx = touchX - touchStartX; - const dy = touchY - touchStartY; - - if (Math.abs(dx) > Math.abs(dy)) { - // Horizontal swipe - if (dx > 50 && direction !== 'left') nextDirection = 'right'; - else if (dx < -50 && direction !== 'right') nextDirection = 'left'; - } else { - // Vertical swipe - if (dy > 50 && direction !== 'up') nextDirection = 'down'; - else if (dy < -50 && direction !== 'down') nextDirection = 'up'; - } - - e.preventDefault(); - }); - - // Initialize on load - highScoreElement.textContent = highScore; - init(); -}); \ No newline at end of file diff --git a/public/sites/ea724ee7-fc57-4bde-a505-e083d72d52b2/sitemap.xml b/public/sites/ea724ee7-fc57-4bde-a505-e083d72d52b2/sitemap.xml deleted file mode 100644 index abe5cdc4d1351df82a44ee9ea9c53e46348b391a..0000000000000000000000000000000000000000 --- a/public/sites/ea724ee7-fc57-4bde-a505-e083d72d52b2/sitemap.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - http://localhost:3000/sites/ea724ee7-fc57-4bde-a505-e083d72d52b2 - 2025-11-17 - weekly - 1.0 - - \ No newline at end of file diff --git a/public/sites/ea724ee7-fc57-4bde-a505-e083d72d52b2/styles/style.css b/public/sites/ea724ee7-fc57-4bde-a505-e083d72d52b2/styles/style.css deleted file mode 100644 index 69b1ce3efb4c8b08ca6766fcb13ee0a2b80491b0..0000000000000000000000000000000000000000 --- a/public/sites/ea724ee7-fc57-4bde-a505-e083d72d52b2/styles/style.css +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Snake Game Styles - */ - -body { - font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; - margin: 0; - padding: 0; - background: #1a1a2e; - color: #ffffff; - display: flex; - justify-content: center; - align-items: center; - min-height: 100vh; -} - -.game-container { - text-align: center; - background: #16213e; - border-radius: 12px; - padding: 2rem; - box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3); - max-width: 500px; -} - -h1 { - font-size: 2.5rem; - margin-bottom: 1rem; - color: #e94560; - text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5); -} - -.game-info { - display: flex; - justify-content: space-between; - margin-bottom: 1rem; - font-size: 1.2rem; - font-weight: bold; -} - -.score, .high-score { - padding: 0.5rem 1rem; - background: #0f3460; - border-radius: 6px; -} - -#game-canvas { - border: 3px solid #0f3460; - border-radius: 8px; - background: #000; - margin: 1rem 0; -} - -.controls { - margin: 1rem 0; -} - -.controls button { - padding: 0.75rem 1.5rem; - margin: 0 0.5rem; - border: none; - border-radius: 6px; - background: #e94560; - color: white; - font-size: 1rem; - font-weight: bold; - cursor: pointer; - transition: all 0.3s ease; -} - -.controls button:hover:not(:disabled) { - background: #ff6b8b; - transform: translateY(-2px); -} - -.controls button:disabled { - background: #6c757d; - cursor: not-allowed; - transform: none; -} - -.instructions { - margin-top: 1rem; - font-size: 0.9rem; - color: #cccccc; - line-height: 1.5; -} - -.instructions p { - margin: 0.25rem 0; -} - -@media (max-width: 480px) { - .game-container { - padding: 1rem; - margin: 1rem; - } - - h1 { - font-size: 2rem; - } - - #game-canvas { - width: 300px; - height: 300px; - } - - .controls button { - padding: 0.5rem 1rem; - font-size: 0.9rem; - } -} \ No newline at end of file