From ac74faadbe3b739bf544306b2fb7d0194360a498 Mon Sep 17 00:00:00 2001 From: lethdat Date: Sun, 25 Jan 2026 16:12:34 +0700 Subject: [PATCH] done --- src/routes/home/Home.vue | 307 ++++++++++++++++++------------------ src/routes/home/Layout.vue | 84 ++++++++++ src/routes/home/Privacy.vue | 61 +++++++ src/routes/home/Terms.vue | 67 ++++++++ src/routes/index.ts | 90 +++++++---- 5 files changed, 423 insertions(+), 186 deletions(-) create mode 100644 src/routes/home/Layout.vue create mode 100644 src/routes/home/Privacy.vue create mode 100644 src/routes/home/Terms.vue diff --git a/src/routes/home/Home.vue b/src/routes/home/Home.vue index e370799..cd7dacb 100644 --- a/src/routes/home/Home.vue +++ b/src/routes/home/Home.vue @@ -1,117 +1,154 @@ +const pricing = { + title: "Simple, transparent pricing", + subtitle: "Choose the plan that fits your needs. No hidden fees.", + packs: [ + { + name: "Hobby", + price: "$0", + features: [ + "Unlimited upload", + "1 Hour of Storage", + "Standard Support", + ], + buttonText: "Start Free", + tag: "", + bg: "#f9fafb", + }, + { + name: "Pro", + price: "$29", + features: [ + "Ads free player", + "Support M3U8", + "Unlimited upload", + "Custom ads" + ], + buttonText: "Get Started", + tag: "POPULAR", + bg: "#eff6ff", + }, + { + name: "Scale", + price: "$99", + features: [ + "5 TB Bandwidth", + "500 Hours Storage", + "Priority Support" + ], + buttonText: "Contact Sales", + tag: "Best Value", + bg: "#eef4f7", + } + ] +} + \ No newline at end of file diff --git a/src/routes/home/Layout.vue b/src/routes/home/Layout.vue new file mode 100644 index 0000000..a58491d --- /dev/null +++ b/src/routes/home/Layout.vue @@ -0,0 +1,84 @@ + + diff --git a/src/routes/home/Privacy.vue b/src/routes/home/Privacy.vue new file mode 100644 index 0000000..8811d9a --- /dev/null +++ b/src/routes/home/Privacy.vue @@ -0,0 +1,61 @@ + + \ No newline at end of file diff --git a/src/routes/home/Terms.vue b/src/routes/home/Terms.vue new file mode 100644 index 0000000..8c6d491 --- /dev/null +++ b/src/routes/home/Terms.vue @@ -0,0 +1,67 @@ + + \ No newline at end of file diff --git a/src/routes/index.ts b/src/routes/index.ts index 71006cf..d162d0f 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -1,5 +1,5 @@ import { type ReactiveHead, type ResolvableValue } from "@unhead/vue"; -import { headSymbol } from '@unhead/vue' +import { headSymbol } from "@unhead/vue"; import { createMemoryHistory, createRouter, @@ -19,15 +19,31 @@ const routes: RouteData[] = [ children: [ { path: "", - component: () => import("./home/Home.vue"), - beforeEnter: (to, from, next) => { - const auth = useAuthStore(); - if (auth.user) { - next({ name: "overview" }); - } else { - next(); - } - }, + component: () => import("./home/Layout.vue"), + children: [ + { + path: "", + component: () => import("./home/Home.vue"), + beforeEnter: (to, from, next) => { + const auth = useAuthStore(); + if (auth.user) { + next({ name: "overview" }); + } else { + next(); + } + }, + }, + { + path: "/terms", + name: "terms", + component: () => import("./home/Terms.vue"), + }, + { + path: "/privacy", + name: "privacy", + component: () => import("./home/Privacy.vue"), + }, + ], }, { path: "", @@ -69,9 +85,9 @@ const routes: RouteData[] = [ component: () => import("./overview/Overview.vue"), meta: { head: { - title: 'Overview - Holistream', + title: "Overview - Holistream", }, - } + }, }, { path: "upload", @@ -79,9 +95,9 @@ const routes: RouteData[] = [ component: () => import("./upload/Upload.vue"), meta: { head: { - title: 'Upload - Holistream', + title: "Upload - Holistream", }, - } + }, }, { path: "video", @@ -89,12 +105,15 @@ const routes: RouteData[] = [ component: () => import("./video/Videos.vue"), meta: { head: { - title: 'Videos - Holistream', + title: "Videos - Holistream", meta: [ - { name: 'description', content: 'Manage your video content.' }, + { + name: "description", + content: "Manage your video content.", + }, ], }, - } + }, }, { path: "payments-and-plans", @@ -102,12 +121,15 @@ const routes: RouteData[] = [ component: () => import("./plans/Plans.vue"), meta: { head: { - title: 'Payments & Plans - Holistream', + title: "Payments & Plans - Holistream", meta: [ - { name: 'description', content: 'Manage your plans and billing information.' }, + { + name: "description", + content: "Manage your plans and billing information.", + }, ], }, - } + }, }, { path: "notification", @@ -115,9 +137,9 @@ const routes: RouteData[] = [ component: () => import("./notification/Notification.vue"), // TODO: create notification page meta: { head: { - title: 'Notification - Holistream', + title: "Notification - Holistream", }, - } + }, }, { path: "profile", @@ -125,9 +147,9 @@ const routes: RouteData[] = [ component: () => import("./profile/Profile.vue"), // TODO: create profile page meta: { head: { - title: 'Profile - Holistream', + title: "Profile - Holistream", }, - } + }, }, ], }, @@ -135,17 +157,23 @@ const routes: RouteData[] = [ path: "/:pathMatch(.*)*", name: "not-found", component: () => import("./NotFound.vue"), - } + }, ], }, ]; const createAppRouter = () => { const router = createRouter({ - history: import.meta.env.SSR - ? createMemoryHistory() // server - : createWebHistory(), // client - routes, - }); + history: import.meta.env.SSR + ? createMemoryHistory() // server + : createWebHistory(), // client + routes, + scrollBehavior(to, from, savedPosition) { + if (savedPosition) { + return savedPosition + } + return { top: 0 } + } + }); router.beforeEach((to, from, next) => { const auth = useAuthStore(); @@ -162,6 +190,6 @@ const createAppRouter = () => { } }); return router; -} +}; export default createAppRouter;