add lifetime deal

This commit is contained in:
MuslemRahimi 2025-02-19 01:12:48 +01:00
parent 43f31efe4a
commit a92fdf77ce
4 changed files with 166 additions and 8 deletions

View File

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -76,6 +76,8 @@ export const POST = async ({ request, locals }) => {
const userId = payload?.meta?.custom_data?.userId;
const { status, refunded } = payload?.data?.attributes || {};
const productName = payload?.data?.attributes?.first_order_item?.product_name;
if (!userId || status === undefined) {
console.error("Missing userId or status in payload:", payload);
return new Response(
@ -91,11 +93,14 @@ export const POST = async ({ request, locals }) => {
// Update the user and log the payment
try {
await locals.pb.collection("users").update(userId, {
tier,
freeTrial: false,
lifetime: productName?.includes("Life Time"),
});
const paymentData = { user: userId, data: payload };
await locals.pb.collection("payments").create(paymentData);
} catch (dbError) {

View File

@ -2,14 +2,15 @@
import { openLemonSqueezyUrl } from "$lib/lemonsqueezy";
//import Discount from '$lib/components/Discount.svelte';
import { onMount } from "svelte";
import SEO from "$lib/components/SEO.svelte";
import life_time_access_logo from "$lib/images/life_time_access_logo.png";
import pro_tier_logo from "$lib/images/pro_tier_logo.png";
import free_tier_logo from "$lib/images/free_tier_logo.png";
//import proTierLogo from "$lib/images/pro_tier_logo.png";
import SEO from "$lib/components/SEO.svelte";
export let data;
export let form;
let cloudFrontUrl = import.meta.env.VITE_IMAGE_URL;
let mode = true;
//let mode = false;
const emailAddress = "support@stocknear.com";
@ -41,7 +42,10 @@
async function purchasePlan(subscriptionType: string = "") {
if (data?.user) {
let subId = "";
if (mode) {
if (subscriptionType === "lifeTime") {
subId = import.meta.env.VITE_LEMON_SQUEEZY_LIFE_TIME_ACCESS_ID;
} else if (mode) {
subId = import.meta.env.VITE_LEMON_SQUEEZY_ANNUAL_ID;
} else {
subId = import.meta.env.VITE_LEMON_SQUEEZY_MONTHLY_ID;
@ -83,7 +87,7 @@
/>
<section
class="bg-default min-h-screen mb-40 w-full max-w-3xl sm:max-w-screen-lg pt-10 m-auto"
class="bg-default min-h-screen mb-40 w-full max-w-3xl sm:max-w-screen-xl pt-10 m-auto"
>
<!--
{#if data?.user?.tier !== "Pro" || data?.user?.freeTrial === true}
@ -184,7 +188,7 @@
>
<div class="flex flex-row items-center justify-start items-center mt-2">
<img
src={cloudFrontUrl + "/assets/free_tier_logo.png"}
src={free_tier_logo}
class="w-16 transform ease-in-out duration-300"
loading="lazy"
alt="free tier"
@ -386,7 +390,7 @@
<div class="flex flex-row justify-start items-center mt-10 mb-3">
<img
src={cloudFrontUrl + "/assets/pro_tier_logo.png"}
src={pro_tier_logo}
class="w-28 transform ease-in-out duration-300"
style="transform: rotate(23deg);"
loading="lazy"
@ -732,6 +736,155 @@
</div>
</div>
<!--End Pricing Card-->
<!--Start Pricing Card-->
<div
class="sm:h-[660px] sm:order-2 box sm:-mt-10 flex flex-col p-6 lg:p-8 mx-auto ring-[1px] ring-gray-400 rounded-md w-full text-center text-white"
>
<div
class="absolute top-0 left-1/2 transform -translate-x-1/2 rounded-b-2xl flex flex-row border-l border-r border-b border-gray-400 items-center p-2"
>
<span class="text-white text-md font-semibold px-3">
Limited Offer
</span>
</div>
<div class="flex flex-row justify-start items-center mt-10">
<img
src={life_time_access_logo}
class="mr-4 w-28 transform ease-in-out duration-300"
loading="lazy"
alt="Lifetime tier"
/>
<h2 class="text-4xl text-center font-bold text-white">Lifetime</h2>
</div>
<div class="flex flex-col mb-6 items-center">
<div class="flex flex-row items-center">
<span class="mr-2 text-4xl font-bold">$449</span>
</div>
</div>
<ol class="mb-8 space-y-4 text-left mt-6">
<li class="flex items-center space-x-3">
<svg
class="flex-shrink-0 w-5 h-5"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 48 48"
><mask id="ipSSuccess0"
><g
fill="none"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="4"
><path
fill="#fff"
stroke="#fff"
d="m24 4l5.253 3.832l6.503-.012l1.997 6.188l5.268 3.812L41 24l2.021 6.18l-5.268 3.812l-1.997 6.188l-6.503-.012L24 44l-5.253-3.832l-6.503.012l-1.997-6.188l-5.268-3.812L7 24l-2.021-6.18l5.268-3.812l1.997-6.188l6.503.012L24 4Z"
/><path stroke="#09090B" d="m17 24l5 5l10-10" /></g
></mask
><path
fill="#00FC50"
d="M0 0h48v48H0z"
mask="url(#ipSSuccess0)"
/></svg
>
<span class="text-white text-[1rem] font-semibold"
>Everything in Pro Tier.</span
>
</li>
<li class="flex items-center space-x-3">
<svg
class="flex-shrink-0 w-5 h-5"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 48 48"
><mask id="ipSSuccess0"
><g
fill="none"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="4"
><path
fill="#fff"
stroke="#fff"
d="m24 4l5.253 3.832l6.503-.012l1.997 6.188l5.268 3.812L41 24l2.021 6.18l-5.268 3.812l-1.997 6.188l-6.503-.012L24 44l-5.253-3.832l-6.503.012l-1.997-6.188l-5.268-3.812L7 24l-2.021-6.18l5.268-3.812l1.997-6.188l6.503.012L24 4Z"
/><path stroke="#09090B" d="m17 24l5 5l10-10" /></g
></mask
><path
fill="#00FC50"
d="M0 0h48v48H0z"
mask="url(#ipSSuccess0)"
/></svg
>
<span class="text-white text-[1rem] font-semibold"
>Pay Once and use forever.</span
>
</li>
<li class="flex items-center space-x-3">
<svg
class="flex-shrink-0 w-5 h-5"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 48 48"
><mask id="ipSSuccess0"
><g
fill="none"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="4"
><path
fill="#fff"
stroke="#fff"
d="m24 4l5.253 3.832l6.503-.012l1.997 6.188l5.268 3.812L41 24l2.021 6.18l-5.268 3.812l-1.997 6.188l-6.503-.012L24 44l-5.253-3.832l-6.503.012l-1.997-6.188l-5.268-3.812L7 24l-2.021-6.18l5.268-3.812l1.997-6.188l6.503.012L24 4Z"
/><path stroke="#09090B" d="m17 24l5 5l10-10" /></g
></mask
><path
fill="#00FC50"
d="M0 0h48v48H0z"
mask="url(#ipSSuccess0)"
/></svg
>
<span class="text-white text-[1rem] font-semibold"
>If you ❤️ Stocknear and want to support us, this is the best way.</span
>
</li>
</ol>
<div class="divider"></div>
<div class="m-auto w-full text-white font-medium text-sm mb-6">
+ Unlimited feature updates
</div>
<label
for={!data?.user ? "userLogin" : ""}
on:click={() => purchasePlan("lifeTime")}
class="cursor-pointer py-3 rounded-md text-black bg-[#fff] font-semibold sm:hover:bg-gray-300 transition duration-100 ease-in-out group"
>
Get Lifetime Access
<span
class="tracking-normal group-hover:translate-x-0.5 transition-transform duration-150 ease-in-out"
>
<svg
class="w-4 h-4 inline-block"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
><g transform="rotate(90 12 12)"
><g fill="none"
><path
d="M24 0v24H0V0h24ZM12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035c-.01-.004-.019-.001-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427c-.002-.01-.009-.017-.017-.018Zm.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093c.012.004.023 0 .029-.008l.004-.014l-.034-.614c-.003-.012-.01-.02-.02-.022Zm-.715.002a.023.023 0 0 0-.027.006l-.006.014l-.034.614c0 .012.007.02.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01l-.184-.092Z"
/><path
fill="black"
d="M13.06 3.283a1.5 1.5 0 0 0-2.12 0L5.281 8.939a1.5 1.5 0 0 0 2.122 2.122L10.5 7.965V19.5a1.5 1.5 0 0 0 3 0V7.965l3.096 3.096a1.5 1.5 0 1 0 2.122-2.122L13.06 3.283Z"
/></g
></g
></svg
>
</span>
</label>
</div>
<!--End Pricing Card-->
</div>
<!--Feature Table-->

View File

@ -556,7 +556,7 @@
<span class="text-white mt-5">
Please wait a moment; you will be updated to Pro in a second.
</span>
{:else if subscriptionData?.first_order_item?.product_name === "Pro Subscription (Lifetime Access)"}{:else}
{:else if subscriptionData?.first_order_item?.product_name?.includes("Life Time")}{:else}
<a href="/pricing" class="sm:hover:text-white text-blue-400">
Get Full Access with Pro Subscription.
</a>