From 3f2d3560dc04dbee23237d896c1325389035c738 Mon Sep 17 00:00:00 2001 From: MohamedBassem Date: Sun, 6 Apr 2025 22:57:07 +0100 Subject: refactor: Migrate the landing page from nextjs to vite --- apps/landing/app/apple-icon.png | Bin 3476 -> 0 bytes apps/landing/app/favicon.ico | Bin 15086 -> 0 bytes apps/landing/app/icon.png | Bin 3476 -> 0 bytes apps/landing/app/layout.tsx | 27 ---- apps/landing/app/opengraph-image.png | Bin 3195946 -> 0 bytes apps/landing/app/page.tsx | 265 ------------------------------- apps/landing/app/privacy/page.tsx | 217 ------------------------- apps/landing/app/twitter-image.png | Bin 3195946 -> 0 bytes apps/landing/components.json | 2 +- apps/landing/components/HoarderLogo.tsx | 9 -- apps/landing/index.html | 40 +++++ apps/landing/next-env.d.ts | 5 - apps/landing/next.config.mjs | 15 -- apps/landing/package.json | 24 +-- apps/landing/public/icons/apple-icon.png | Bin 0 -> 3476 bytes apps/landing/public/icons/favicon.ico | Bin 0 -> 15086 bytes apps/landing/public/icons/icon.png | Bin 0 -> 3476 bytes apps/landing/public/opengraph-image.png | Bin 0 -> 3195946 bytes apps/landing/public/twitter-image.png | Bin 0 -> 3195946 bytes apps/landing/src/App.tsx | 13 ++ apps/landing/src/Homepage.tsx | 256 +++++++++++++++++++++++++++++ apps/landing/src/Privacy.tsx | 217 +++++++++++++++++++++++++ apps/landing/src/main.tsx | 9 ++ apps/landing/tsconfig.json | 7 +- apps/landing/vite-env.d.ts | 2 + apps/landing/vite.config.ts | 14 ++ 26 files changed, 565 insertions(+), 557 deletions(-) delete mode 100644 apps/landing/app/apple-icon.png delete mode 100644 apps/landing/app/favicon.ico delete mode 100644 apps/landing/app/icon.png delete mode 100644 apps/landing/app/layout.tsx delete mode 100644 apps/landing/app/opengraph-image.png delete mode 100644 apps/landing/app/page.tsx delete mode 100644 apps/landing/app/privacy/page.tsx delete mode 100644 apps/landing/app/twitter-image.png delete mode 100644 apps/landing/components/HoarderLogo.tsx create mode 100644 apps/landing/index.html delete mode 100644 apps/landing/next-env.d.ts delete mode 100644 apps/landing/next.config.mjs create mode 100644 apps/landing/public/icons/apple-icon.png create mode 100644 apps/landing/public/icons/favicon.ico create mode 100644 apps/landing/public/icons/icon.png create mode 100644 apps/landing/public/opengraph-image.png create mode 100644 apps/landing/public/twitter-image.png create mode 100644 apps/landing/src/App.tsx create mode 100644 apps/landing/src/Homepage.tsx create mode 100644 apps/landing/src/Privacy.tsx create mode 100644 apps/landing/src/main.tsx create mode 100644 apps/landing/vite-env.d.ts create mode 100644 apps/landing/vite.config.ts (limited to 'apps') diff --git a/apps/landing/app/apple-icon.png b/apps/landing/app/apple-icon.png deleted file mode 100644 index 8b600d2f..00000000 Binary files a/apps/landing/app/apple-icon.png and /dev/null differ diff --git a/apps/landing/app/favicon.ico b/apps/landing/app/favicon.ico deleted file mode 100644 index d940a939..00000000 Binary files a/apps/landing/app/favicon.ico and /dev/null differ diff --git a/apps/landing/app/icon.png b/apps/landing/app/icon.png deleted file mode 100644 index 3dcfd34c..00000000 Binary files a/apps/landing/app/icon.png and /dev/null differ diff --git a/apps/landing/app/layout.tsx b/apps/landing/app/layout.tsx deleted file mode 100644 index e655a770..00000000 --- a/apps/landing/app/layout.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import type { Metadata } from "next"; -import { Inter } from "next/font/google"; - -import "@hoarder/tailwind-config/globals.css"; - -import React from "react"; - -const inter = Inter({ subsets: ["latin"] }); - -export const metadata: Metadata = { - title: "Karakeep", - metadataBase: new URL("https://karakeep.app"), - description: - "The Bookmark Everything app. Hoard links, notes, and images and they will get automatically tagged AI.", -}; - -export default async function RootLayout({ - children, -}: Readonly<{ - children: React.ReactNode; -}>) { - return ( - - {children} - - ); -} diff --git a/apps/landing/app/opengraph-image.png b/apps/landing/app/opengraph-image.png deleted file mode 100644 index b0dce115..00000000 Binary files a/apps/landing/app/opengraph-image.png and /dev/null differ diff --git a/apps/landing/app/page.tsx b/apps/landing/app/page.tsx deleted file mode 100644 index 88fc1b03..00000000 --- a/apps/landing/app/page.tsx +++ /dev/null @@ -1,265 +0,0 @@ -import Image from "next/image"; -import Link from "next/link"; -import HoarderLogo from "@/components/HoarderLogo"; -import { buttonVariants } from "@/components/ui/button"; -import { cn } from "@/lib/utils"; -import appStoreBadge from "@/public/app-store-badge.png"; -import chromeExtensionBadge from "@/public/chrome-extension-badge.png"; -import firefoxAddonBadge from "@/public/firefox-addon.png"; -import playStoreBadge from "@/public/google-play-badge.webp"; -import screenshot from "@/public/hero.webp"; -import { - ArrowDownNarrowWide, - Bookmark, - BrainCircuit, - CheckCheck, - Github, - Server, - SunMoon, - TextSearch, - WalletCards, -} from "lucide-react"; - -const GITHUB_LINK = "https://github.com/hoarder-app/hoarder"; -const DOCS_LINK = "https://docs.karakeep.app"; -const DEMO_LINK = "https://try.karakeep.app"; - -const platforms = [ - { - name: "iOS", - url: "https://apps.apple.com/us/app/hoarder-app/id6479258022", - badge: appStoreBadge, - }, - { - name: "Android", - url: "https://play.google.com/store/apps/details?id=app.hoarder.hoardermobile&pcampaignid=web_share", - badge: playStoreBadge, - }, - { - name: "Chrome Extension", - url: "https://chromewebstore.google.com/detail/hoarder/kgcjekpmcjjogibpjebkhaanilehneje", - badge: chromeExtensionBadge, - }, - { - name: "Firefox Addon", - url: "https://addons.mozilla.org/en-US/firefox/addon/hoarder/", - badge: firefoxAddonBadge, - }, -]; - -const featuresList = [ - { - icon: Bookmark, - title: "Bookmark", - description: "Bookmark links, take simple notes and store images and pdfs.", - }, - { - icon: BrainCircuit, - title: "AI Tagging", - description: - "Automatically tags your bookmarks using AI for faster retrieval.", - }, - { - icon: ArrowDownNarrowWide, - title: "Auto Fetch", - description: - "Automatically fetches title, description and images for links.", - }, - { - icon: WalletCards, - title: "Lists", - description: "Sort your bookmarks into lists for better organization.", - }, - { - icon: TextSearch, - title: "Search", - description: "Search through all your bookmarks using full text search.", - }, - { - icon: Server, - title: "Self Hosting", - description: "Easy self hosting with docker for privacy and control.", - }, - { - icon: CheckCheck, - title: "Bulk Actions", - description: "Quickly manage your bookmarks with bulk actions.", - }, - { - icon: SunMoon, - title: "Dark Mode", - description: "Hoarder supports dark mode for better reading experience.", - }, -]; - -function NavBar() { - return ( -
- -
- - Docs - - - GitHub - - - Try Demo - -
-
- ); -} - -function Hero() { - return ( -
-
-

- The{" "} - - Bookmark Everything - {" "} - App -

-
-

- Quickly save links, notes, and images and hoarder will automatically - tag them for you using AI for faster retrieval. Built for the data - hoarders out there! -

-
-
-
- - Try Demo - - - GitHub - -
-
- ); -} - -function Platforms() { - return ( -
-

- Apps & Extensions for Seamless Access -

-

- Enjoy seamless access with our mobile apps and browser extensions. -

-
- {platforms.map((platform) => ( -
- - {platform.name} - -
- ))} -
-
- ); -} - -function Features() { - return ( -
-
- {featuresList.map((feature) => ( -
-
- -

- {feature.title} -

-
-

{feature.description}

-
- ))} -
-
- ); -} - -function Footer() { - return ( -
-
© 2024 karakeep.app
-
- - Docs - - - GitHub - -
-
- ); -} - -function Screenshots() { - return ( -
- screenshot -
- ); -} - -export default function LandingPage() { - return ( -
-
- - -
- - - -
-
- ); -} diff --git a/apps/landing/app/privacy/page.tsx b/apps/landing/app/privacy/page.tsx deleted file mode 100644 index 366a0395..00000000 --- a/apps/landing/app/privacy/page.tsx +++ /dev/null @@ -1,217 +0,0 @@ -export default function PrivacyPolicy() { - return ( -
- Hoarder - Privacy Policy - Privacy Policy -

- This privacy policy applies to the Hoarder App app (hereby referred to - as "Application") for mobile devices that was created by - Mohamed Bassem (hereby referred to as "Service Provider") as - an Open Source service. This service is intended for use "AS - IS". -

-
- Information Collection and Use -

- The Application collects information when you download and use it. This - information may include information such as -

- -

-
-

- The Application does not gather precise information about the location - of your mobile device. -

-
-

- The Application collects your device's location, which helps the - Service Provider determine your approximate geographical location and - make use of in below ways: -

-
    -
  • - Geolocation Services: The Service Provider utilizes location data to - provide features such as personalized content, relevant - recommendations, and location-based services. -
  • -
  • - Analytics and Improvements: Aggregated and anonymized location data - helps the Service Provider to analyze user behavior, identify - trends, and improve the overall performance and functionality of the - Application. -
  • -
  • - Third-Party Services: Periodically, the Service Provider may - transmit anonymized location data to external services. These - services assist them in enhancing the Application and optimizing - their offerings. -
  • -
-
-
-

- The Service Provider may use the information you provided to contact you - from time to time to provide you with important information, required - notices and marketing promotions. -

-
-

- For a better experience, while using the Application, the Service - Provider may require you to provide us with certain personally - identifiable information, including but not limited to Name,Email. The - information that the Service Provider request will be retained by them - and used as described in this privacy policy. -

-
- Third Party Access -

- Only aggregated, anonymized data is periodically transmitted to external - services to aid the Service Provider in improving the Application and - their service. The Service Provider may share your information with - third parties in the ways that are described in this privacy statement. -

-
-
-

- Please note that the Application utilizes third-party services that - have their own Privacy Policy about handling data. Below are the links - to the Privacy Policy of the third-party service providers used by the - Application: -

- -
-
-

- The Service Provider may disclose User Provided and Automatically - Collected Information: -

- -

-
- Opt-Out Rights -

- You can stop all collection of information by the Application easily by - uninstalling it. You may use the standard uninstall processes as may be - available as part of your mobile device or via the mobile application - marketplace or network. -

-
- Data Retention Policy -

- The Service Provider will retain User Provided data for as long as you - use the Application and for a reasonable time thereafter. If you'd - like them to delete User Provided Data that you have provided via the - Application, please contact them at me@mbassem.com and they will respond - in a reasonable time. -

-
- Children -

- The Service Provider does not use the Application to knowingly solicit - data from or market to children under the age of 13. -

-
-
-

- The Application does not address anyone under the age of 13. The - Service Provider does not knowingly collect personally identifiable - information from children under 13 years of age. In the case the - Service Provider discover that a child under 13 has provided personal - information, the Service Provider will immediately delete this from - their servers. If you are a parent or guardian and you are aware that - your child has provided us with personal information, please contact - the Service Provider (me@mbassem.com) so that they will be able to - take the necessary actions. -

-
-
- Security -

- The Service Provider is concerned about safeguarding the confidentiality - of your information. The Service Provider provides physical, electronic, - and procedural safeguards to protect information the Service Provider - processes and maintains. -

-
- Changes -

- This Privacy Policy may be updated from time to time for any reason. The - Service Provider will notify you of any changes to the Privacy Policy by - updating this page with the new Privacy Policy. You are advised to - consult this Privacy Policy regularly for any changes, as continued use - is deemed approval of all changes. -

-
-

This privacy policy is effective as of 2024-03-19

-
- Your Consent -

- By using the Application, you are consenting to the processing of your - information as set forth in this Privacy Policy now and as amended by - us. -

-
- Contact Us -

- If you have any questions regarding privacy while using the Application, - or have questions about the practices, please contact the Service - Provider via email at me@mbassem.com. -

-
-

- This privacy policy page was generated by{" "} - - App Privacy Policy Generator - -

-
- ); -} diff --git a/apps/landing/app/twitter-image.png b/apps/landing/app/twitter-image.png deleted file mode 100644 index b0dce115..00000000 Binary files a/apps/landing/app/twitter-image.png and /dev/null differ diff --git a/apps/landing/components.json b/apps/landing/components.json index fa674c93..698ac253 100644 --- a/apps/landing/components.json +++ b/apps/landing/components.json @@ -5,7 +5,7 @@ "tsx": true, "tailwind": { "config": "tailwind.config.ts", - "css": "app/globals.css", + "css": "src/styles.css", "baseColor": "slate", "cssVariables": true, "prefix": "" diff --git a/apps/landing/components/HoarderLogo.tsx b/apps/landing/components/HoarderLogo.tsx deleted file mode 100644 index 94c201e9..00000000 --- a/apps/landing/components/HoarderLogo.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import KarakeepFull from "@/public/icons/karakeep-full.svg"; - -export default function HoarderLogo({ height }: { height: number }) { - return ( - - - - ); -} diff --git a/apps/landing/index.html b/apps/landing/index.html new file mode 100644 index 00000000..266bc2f6 --- /dev/null +++ b/apps/landing/index.html @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + +
+ + + diff --git a/apps/landing/next-env.d.ts b/apps/landing/next-env.d.ts deleted file mode 100644 index 40c3d680..00000000 --- a/apps/landing/next-env.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -/// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information. diff --git a/apps/landing/next.config.mjs b/apps/landing/next.config.mjs deleted file mode 100644 index c9153017..00000000 --- a/apps/landing/next.config.mjs +++ /dev/null @@ -1,15 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = { - webpack: (config) => { - config.module.rules.push({ - test: /\.svg$/, - use: ["@svgr/webpack"], - }); - return config; - }, - /** We already do linting and typechecking as separate tasks in CI */ - eslint: { ignoreDuringBuilds: true }, - typescript: { ignoreBuildErrors: true }, -}; - -export default nextConfig; diff --git a/apps/landing/package.json b/apps/landing/package.json index b6eff4bc..73971f0e 100644 --- a/apps/landing/package.json +++ b/apps/landing/package.json @@ -5,15 +5,14 @@ "private": true, "type": "module", "scripts": { - "dev": "next dev", - "clean": "git clean -xdf .next .turbo node_modules", - "build": "next build", - "start": "next start", - "lint": "next lint", - "typecheck": "tsc --noEmit", - "format": "prettier --check . --ignore-path ../../.gitignore", - "format:fix": "prettier --write . --ignore-path ../../.gitignore", - "lint:fix": "next lint --fix" + "dev": "vite", + "build": "tsc -b && vite build", + "preview": "vite preview", + "lint": "eslint .", + "lint:fix": "eslint . --fix", + "format": "prettier . --ignore-path ../../.prettierignore", + "format:fix": "prettier . --ignore-path ../../.prettierignore --write", + "typecheck": "tsc --noEmit" }, "dependencies": { "@radix-ui/react-slot": "^1.0.2", @@ -21,7 +20,6 @@ "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", "lucide-react": "^0.330.0", - "next": "14.2.25", "react": "^18.3.1", "react-dom": "^18.3.1", "react-select": "^5.8.0", @@ -37,15 +35,17 @@ "@tailwindcss/typography": "^0.5.10", "@types/react": "^18.2.55", "@types/react-dom": "^18.2.19", + "@vitejs/plugin-react": "^4.3.4", "autoprefixer": "^10.4.17", "postcss": "^8.4.35", - "tailwindcss": "^3.4.1" + "tailwindcss": "^3.4.1", + "vite": "^5.1.0", + "vite-plugin-svgr": "^4.3.0" }, "eslintConfig": { "root": true, "extends": [ "@hoarder/eslint-config/base", - "@hoarder/eslint-config/nextjs", "@hoarder/eslint-config/react" ] }, diff --git a/apps/landing/public/icons/apple-icon.png b/apps/landing/public/icons/apple-icon.png new file mode 100644 index 00000000..8b600d2f Binary files /dev/null and b/apps/landing/public/icons/apple-icon.png differ diff --git a/apps/landing/public/icons/favicon.ico b/apps/landing/public/icons/favicon.ico new file mode 100644 index 00000000..d940a939 Binary files /dev/null and b/apps/landing/public/icons/favicon.ico differ diff --git a/apps/landing/public/icons/icon.png b/apps/landing/public/icons/icon.png new file mode 100644 index 00000000..3dcfd34c Binary files /dev/null and b/apps/landing/public/icons/icon.png differ diff --git a/apps/landing/public/opengraph-image.png b/apps/landing/public/opengraph-image.png new file mode 100644 index 00000000..b0dce115 Binary files /dev/null and b/apps/landing/public/opengraph-image.png differ diff --git a/apps/landing/public/twitter-image.png b/apps/landing/public/twitter-image.png new file mode 100644 index 00000000..b0dce115 Binary files /dev/null and b/apps/landing/public/twitter-image.png differ diff --git a/apps/landing/src/App.tsx b/apps/landing/src/App.tsx new file mode 100644 index 00000000..06a1e5b8 --- /dev/null +++ b/apps/landing/src/App.tsx @@ -0,0 +1,13 @@ +import Homepage from "@/src/Homepage"; +import Privacy from "@/src/Privacy"; + +import "@hoarder/tailwind-config/globals.css"; + +export default function App() { + // Poor man router + if (window.location.pathname === "/privacy") { + return ; + } + + return ; +} diff --git a/apps/landing/src/Homepage.tsx b/apps/landing/src/Homepage.tsx new file mode 100644 index 00000000..85290a26 --- /dev/null +++ b/apps/landing/src/Homepage.tsx @@ -0,0 +1,256 @@ +import { buttonVariants } from "@/components/ui/button"; +import { cn } from "@/lib/utils"; +import { + ArrowDownNarrowWide, + Bookmark, + BrainCircuit, + CheckCheck, + Github, + Server, + SunMoon, + TextSearch, + WalletCards, +} from "lucide-react"; + +import appStoreBadge from "/app-store-badge.png?url"; +import chromeExtensionBadge from "/chrome-extension-badge.png?url"; +import firefoxAddonBadge from "/firefox-addon.png?url"; +import playStoreBadge from "/google-play-badge.webp?url"; +import screenshot from "/hero.webp?url"; +import Logo from "/icons/karakeep-full.svg?url"; + +const GITHUB_LINK = "https://github.com/karakeep-app/karakeep"; +const DOCS_LINK = "https://docs.karakeep.app"; +const DEMO_LINK = "https://try.karakeep.app"; + +const platforms = [ + { + name: "iOS", + url: "https://apps.apple.com/us/app/hoarder-app/id6479258022", + badge: appStoreBadge, + }, + { + name: "Android", + url: "https://play.google.com/store/apps/details?id=app.hoarder.hoardermobile&pcampaignid=web_share", + badge: playStoreBadge, + }, + { + name: "Chrome Extension", + url: "https://chromewebstore.google.com/detail/hoarder/kgcjekpmcjjogibpjebkhaanilehneje", + badge: chromeExtensionBadge, + }, + { + name: "Firefox Addon", + url: "https://addons.mozilla.org/en-US/firefox/addon/hoarder/", + badge: firefoxAddonBadge, + }, +]; + +const featuresList = [ + { + icon: Bookmark, + title: "Bookmark", + description: "Bookmark links, take simple notes and store images and pdfs.", + }, + { + icon: BrainCircuit, + title: "AI Tagging", + description: + "Automatically tags your bookmarks using AI for faster retrieval.", + }, + { + icon: ArrowDownNarrowWide, + title: "Auto Fetch", + description: + "Automatically fetches title, description and images for links.", + }, + { + icon: WalletCards, + title: "Lists", + description: "Sort your bookmarks into lists for better organization.", + }, + { + icon: TextSearch, + title: "Search", + description: "Search through all your bookmarks using full text search.", + }, + { + icon: Server, + title: "Self Hosting", + description: "Easy self hosting with docker for privacy and control.", + }, + { + icon: CheckCheck, + title: "Bulk Actions", + description: "Quickly manage your bookmarks with bulk actions.", + }, + { + icon: SunMoon, + title: "Dark Mode", + description: "Karakeep supports dark mode for better reading experience.", + }, +]; + +function NavBar() { + return ( + + ); +} + +function Hero() { + return ( +
+
+

+ The{" "} + + Bookmark Everything + {" "} + App +

+
+

+ Quickly save links, notes, and images and karakeep will + automatically tag them for you using AI for faster retrieval. Built + for the data hoarders out there! +

+
+
+ +
+ ); +} + +function Platforms() { + return ( +
+

+ Apps & Extensions for Seamless Access +

+

+ Enjoy seamless access with our mobile apps and browser extensions. +

+
+ {platforms.map((platform) => ( +
+ + {platform.name} + +
+ ))} +
+
+ ); +} + +function Features() { + return ( +
+
+ {featuresList.map((feature) => ( +
+
+ +

+ {feature.title} +

+
+

{feature.description}

+
+ ))} +
+
+ ); +} + +function Footer() { + return ( +
+
© 2024-2025 karakeep.app
+ +
+ ); +} + +function Screenshots() { + return ( +
+ screenshot +
+ ); +} + +export default function Homepage() { + return ( +
+
+ + +
+ + + +
+
+ ); +} diff --git a/apps/landing/src/Privacy.tsx b/apps/landing/src/Privacy.tsx new file mode 100644 index 00000000..366a0395 --- /dev/null +++ b/apps/landing/src/Privacy.tsx @@ -0,0 +1,217 @@ +export default function PrivacyPolicy() { + return ( +
+ Hoarder - Privacy Policy + Privacy Policy +

+ This privacy policy applies to the Hoarder App app (hereby referred to + as "Application") for mobile devices that was created by + Mohamed Bassem (hereby referred to as "Service Provider") as + an Open Source service. This service is intended for use "AS + IS". +

+
+ Information Collection and Use +

+ The Application collects information when you download and use it. This + information may include information such as +

+
    +
  • Your device's Internet Protocol address (e.g. IP address)
  • +
  • + The pages of the Application that you visit, the time and date of your + visit, the time spent on those pages +
  • +
  • The time spent on the Application
  • +
  • The operating system you use on your mobile device
  • +
+

+
+

+ The Application does not gather precise information about the location + of your mobile device. +

+
+

+ The Application collects your device's location, which helps the + Service Provider determine your approximate geographical location and + make use of in below ways: +

+
    +
  • + Geolocation Services: The Service Provider utilizes location data to + provide features such as personalized content, relevant + recommendations, and location-based services. +
  • +
  • + Analytics and Improvements: Aggregated and anonymized location data + helps the Service Provider to analyze user behavior, identify + trends, and improve the overall performance and functionality of the + Application. +
  • +
  • + Third-Party Services: Periodically, the Service Provider may + transmit anonymized location data to external services. These + services assist them in enhancing the Application and optimizing + their offerings. +
  • +
+
+
+

+ The Service Provider may use the information you provided to contact you + from time to time to provide you with important information, required + notices and marketing promotions. +

+
+

+ For a better experience, while using the Application, the Service + Provider may require you to provide us with certain personally + identifiable information, including but not limited to Name,Email. The + information that the Service Provider request will be retained by them + and used as described in this privacy policy. +

+
+ Third Party Access +

+ Only aggregated, anonymized data is periodically transmitted to external + services to aid the Service Provider in improving the Application and + their service. The Service Provider may share your information with + third parties in the ways that are described in this privacy statement. +

+
+
+

+ Please note that the Application utilizes third-party services that + have their own Privacy Policy about handling data. Below are the links + to the Privacy Policy of the third-party service providers used by the + Application: +

+ +
+
+

+ The Service Provider may disclose User Provided and Automatically + Collected Information: +

+
    +
  • + as required by law, such as to comply with a subpoena, or similar + legal process; +
  • +
  • + when they believe in good faith that disclosure is necessary to + protect their rights, protect your safety or the safety of others, + investigate fraud, or respond to a government request; +
  • +
  • + with their trusted services providers who work on their behalf, do not + have an independent use of the information we disclose to them, and + have agreed to adhere to the rules set forth in this privacy + statement. +
  • +
+

+
+ Opt-Out Rights +

+ You can stop all collection of information by the Application easily by + uninstalling it. You may use the standard uninstall processes as may be + available as part of your mobile device or via the mobile application + marketplace or network. +

+
+ Data Retention Policy +

+ The Service Provider will retain User Provided data for as long as you + use the Application and for a reasonable time thereafter. If you'd + like them to delete User Provided Data that you have provided via the + Application, please contact them at me@mbassem.com and they will respond + in a reasonable time. +

+
+ Children +

+ The Service Provider does not use the Application to knowingly solicit + data from or market to children under the age of 13. +

+
+
+

+ The Application does not address anyone under the age of 13. The + Service Provider does not knowingly collect personally identifiable + information from children under 13 years of age. In the case the + Service Provider discover that a child under 13 has provided personal + information, the Service Provider will immediately delete this from + their servers. If you are a parent or guardian and you are aware that + your child has provided us with personal information, please contact + the Service Provider (me@mbassem.com) so that they will be able to + take the necessary actions. +

+
+
+ Security +

+ The Service Provider is concerned about safeguarding the confidentiality + of your information. The Service Provider provides physical, electronic, + and procedural safeguards to protect information the Service Provider + processes and maintains. +

+
+ Changes +

+ This Privacy Policy may be updated from time to time for any reason. The + Service Provider will notify you of any changes to the Privacy Policy by + updating this page with the new Privacy Policy. You are advised to + consult this Privacy Policy regularly for any changes, as continued use + is deemed approval of all changes. +

+
+

This privacy policy is effective as of 2024-03-19

+
+ Your Consent +

+ By using the Application, you are consenting to the processing of your + information as set forth in this Privacy Policy now and as amended by + us. +

+
+ Contact Us +

+ If you have any questions regarding privacy while using the Application, + or have questions about the practices, please contact the Service + Provider via email at me@mbassem.com. +

+
+

+ This privacy policy page was generated by{" "} + + App Privacy Policy Generator + +

+
+ ); +} diff --git a/apps/landing/src/main.tsx b/apps/landing/src/main.tsx new file mode 100644 index 00000000..ed52e896 --- /dev/null +++ b/apps/landing/src/main.tsx @@ -0,0 +1,9 @@ +import { StrictMode } from "react"; +import App from "@/src/App"; +import { createRoot } from "react-dom/client"; + +createRoot(document.getElementById("root")!).render( + + + , +); diff --git a/apps/landing/tsconfig.json b/apps/landing/tsconfig.json index db90cf17..71752aad 100644 --- a/apps/landing/tsconfig.json +++ b/apps/landing/tsconfig.json @@ -3,15 +3,10 @@ "extends": "@hoarder/tsconfig/base.json", "compilerOptions": { "baseUrl": ".", - "plugins": [ - { - "name": "next" - } - ], "paths": { "@/*": ["./*"] } }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts", "vite.config.ts"], "exclude": ["node_modules"] } diff --git a/apps/landing/vite-env.d.ts b/apps/landing/vite-env.d.ts new file mode 100644 index 00000000..ee9857a6 --- /dev/null +++ b/apps/landing/vite-env.d.ts @@ -0,0 +1,2 @@ +/// +/// diff --git a/apps/landing/vite.config.ts b/apps/landing/vite.config.ts new file mode 100644 index 00000000..4f4273b6 --- /dev/null +++ b/apps/landing/vite.config.ts @@ -0,0 +1,14 @@ +import { fileURLToPath, URL } from "node:url"; +import react from "@vitejs/plugin-react"; +import { defineConfig } from "vite"; +import svgr from "vite-plugin-svgr"; + +// https://vite.dev/config/ +export default defineConfig({ + resolve: { + alias: { + "@/": fileURLToPath(new URL("./", import.meta.url)), + }, + }, + plugins: [react(), svgr()], +}); -- cgit v1.2.3-70-g09d2