Skip to content

Commit

Permalink
feat: free trial
Browse files Browse the repository at this point in the history
  • Loading branch information
Rahuletto committed Feb 4, 2025
1 parent 448624a commit c4826a8
Show file tree
Hide file tree
Showing 12 changed files with 94 additions and 28 deletions.
6 changes: 3 additions & 3 deletions app/academia/components/Attendance/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ export default async function Attendance({ data }: { data: AllResponse }) {

const { data: subscriptionData, error } = await supabase
.from("goscrape")
.select("subscribed, subscribedSince")
.select("subscribed, subscribedSince, freesub")
.eq("regNumber", data.user?.regNumber)
.single();

Expand All @@ -45,10 +45,10 @@ export default async function Attendance({ data }: { data: AllResponse }) {
}

const subscribedSince = subscriptionData?.subscribedSince ?? null;
const isSubscriptionValid = subscribedSince
const isSubscriptionValid = subscriptionData?.freesub ? subscriptionData?.freesub : subscribedSince
? new Date(subscribedSince).getTime() + (30 * 24 * 60 * 60 * 1000) > new Date().getTime()
: false;
const subscribed = (data?.subscribed ?? false) && isSubscriptionValid;
const subscribed = subscriptionData?.freesub ? true : (data?.subscribed ?? false) && isSubscriptionValid;

const mappedCal = cal.calendar?.flatMap((day) => {
const month = months.findIndex(
Expand Down
8 changes: 4 additions & 4 deletions app/academia/components/Timetable/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,24 +20,24 @@ export default async function Timetable({

const { data, error } = await supabase
.from("goscrape")
.select("subscribed, subscribedSince")
.select("subscribed, subscribedSince, freesub")
.eq("regNumber", user?.regNumber)
.single();

if (error) {
console.warn("Cannot find data?", user?.regNumber, user);
}

const subscribed = data?.subscribed ?? false;
const subscribedSince = data?.subscribedSince ?? null;
const subscribed = data?.freesub ? true : data?.subscribed ?? false;
const subscribedSince = data?.freesub ? true : data?.subscribedSince ?? null;


return (
<section id="timetable">
<div className="flex justify-between items-center px-2 mb-1">
<h1 className="text-2xl font-semibold">Timetable</h1>
<div className="flex items-center justify-center gap-3">
{subscribed && subscribedSince && (new Date().getTime() - subscribedSince) < (30 * 24 * 60 * 60 * 1000) ? (
{(data?.freesub ? true : (subscribed && subscribedSince && (new Date().getTime() - subscribedSince) < (30 * 24 * 60 * 60 * 1000)) )? (
<a
href="/api/timetable"
download
Expand Down
4 changes: 2 additions & 2 deletions app/academia/courses/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@ export default async function Courses() {

const { data, error } = await supabase
.from("goscrape")
.select("subscribed, subscribedSince")
.select("subscribed, subscribedSince, freesub")
.eq("regNumber", json.user?.regNumber)
.single();

if (error) {
console.warn("Cannot find data?", json.user?.regNumber, json);
}

const subscribed = data?.subscribed ?? false;
const subscribed = data?.freesub ? true : data?.subscribed ?? false;


return (
Expand Down
6 changes: 3 additions & 3 deletions app/academia/faculties/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,16 @@ export default async function Faculties() {

const { data, error } = await supabase
.from("goscrape")
.select("subscribed, subscribedSince")
.select("subscribed, subscribedSince, freesub")
.eq("token", encode(cookie?.value ?? ""))
.single();

if (error) {

}

const subscribed = data?.subscribed ?? false;
const subscribedSince = data?.subscribedSince ?? null;
const subscribed = data?.freesub ? true : data?.subscribed ?? false;
const subscribedSince = data?.freesub ? Date.now() : data?.subscribedSince ?? null;

if (
!subscribed ||
Expand Down
6 changes: 3 additions & 3 deletions app/academia/library/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,16 @@ export default async function Docupro() {

const { data, error } = await supabase
.from("goscrape")
.select("subscribed, subscribedSince")
.select("subscribed, subscribedSince, freesub")
.eq("regNumber", user?.regNumber)
.single();

if (error) {
console.warn("Cannot find data?", user?.regNumber, user);
}

const subscribed = data?.subscribed ?? false;
const subscribedSince = data?.subscribedSince ?? null;
const subscribed = data?.freesub ? true : data?.subscribed ?? false;
const subscribedSince = data?.freesub ? Date.now() : data?.subscribedSince ?? null;

if (
!subscribed ||
Expand Down
6 changes: 3 additions & 3 deletions app/academia/library/pyq/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,16 @@ export default async function Docupro() {

const { data, error } = await supabase
.from("goscrape")
.select("subscribed, subscribedSince")
.select("subscribed, subscribedSince, freesub")
.eq("regNumber", user?.regNumber)
.single();

if (error) {
console.warn("Cannot find data?", user?.regNumber, user);
}

const subscribed = data?.subscribed ?? false;
const subscribedSince = data?.subscribedSince ?? null;
const subscribed = data?.freesub ? true : data?.subscribed ?? false;
const subscribedSince = data?.freesub ? Date.now() : data?.subscribedSince ?? null;

if (
!subscribed ||
Expand Down
6 changes: 3 additions & 3 deletions app/academia/library/resources/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,16 @@ export default async function Docupro() {

const { data, error } = await supabase
.from("goscrape")
.select("subscribed, subscribedSince")
.select("subscribed, subscribedSince, freesub")
.eq("regNumber", user?.regNumber)
.single();

if (error) {
console.warn("Cannot find data?", user?.regNumber, user);
}

const subscribed = data?.subscribed ?? false;
const subscribedSince = data?.subscribedSince ?? null;
const subscribed = data?.freesub ? true : data?.subscribed ?? false;
const subscribedSince = data?.freesub ? Date.now() : data?.subscribedSince ?? null;

if (
!subscribed ||
Expand Down
3 changes: 1 addition & 2 deletions app/subscribe/Button.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
"use client";
import type { UserInfo } from "@/types/User";
import { supabase } from "@/utils/Database/supabase";
import React from "react";
import { FaArrowRightLong } from "react-icons/fa6";
import { SiRazorpay } from "react-icons/si";
Expand Down Expand Up @@ -42,7 +41,7 @@ export default function Button({ user }: { user: UserInfo }) {

const options = {
key: process.env.NEXT_PUBLIC_RAZOR_KEY,
amount: 30 * 100,
amount: 29.99 * 100,
currency: "INR",
name: "ClassPro",
description: `Supporting ClassPro - ${user.regNumber}`,
Expand Down
8 changes: 4 additions & 4 deletions app/subscribe/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,16 @@ export default async function Subscribe() {

const { data, error } = await supabase
.from("goscrape")
.select("subscribed, subscribedSince")
.select("subscribed, subscribedSince, freesub")
.eq("regNumber", user?.regNumber)
.single();

if (error) {
console.warn("Cannot find");
}

const subscribed = data?.subscribed ?? false;
const subscribedSince = data?.subscribedSince ?? 0;
const subscribed = data?.freesub ? true : data?.subscribed ?? false;
const subscribedSince = data?.freesub ? Date.now() : data?.subscribedSince ?? 0;

return (
<>
Expand Down Expand Up @@ -128,7 +128,7 @@ export default async function Subscribe() {
Supporter
</h3>
<h1 className="text-5xl mt-1 text-light-color dark:text-dark-color font-semibold text-center">
30<span className="opacity-80 text-sm">/month</span>
29<span className="opacity-80 text-sm">/month</span>
</h1>
<div className="flex flex-col gap-2 text-left items-start justify-start mx-3 mt-8 px-5">
<p className="text-light-color dark:text-dark-color flex flex-row items-center justify-start gap-2 text-left opacity-80">
Expand Down
65 changes: 65 additions & 0 deletions components/Sidebar/Free.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
// biome-ignore lint/a11y/useSemanticElements: <explanation>
"use client";

import Link from "next/link";
import { FaBookOpen } from "react-icons/fa";
import { useState, useEffect } from "react";
import { FaCrown } from "react-icons/fa6";

export default function FreeTrial() {
const [opened, setOpened] = useState(false);

useEffect(() => {
const isAcknowledged = localStorage.getItem("freetrial");
if (!isAcknowledged) setOpened(true);
}, []);

function clicked() {
setOpened(false);
localStorage.setItem("freetrial", "true");
}

return (
opened && (
<div

role="button"
tabIndex={0}
className="fixed inset-0 z-50 flex animate-fastfade items-center justify-center bg-black/30 backdrop-blur-xs transition duration-150"
>
<div
role="button"
tabIndex={-1}
onKeyDown={() => {}}
onClick={(e) => {
e.stopPropagation();
}}
className="relative md:w-[30%] w-[25%] min-w-[350px] max-w-[400px] text-light-color dark:text-dark-color cursor-default items-center justify-center flex flex-col rounded-[42px] bg-light-background-normal p-4 pb-20 shadow-lg dark:bg-dark-background-normal"
>
<div className="mb-6 flex flex-col items-center justify-center gap-5 p-2">
<FaCrown
style={{ filter: "drop-shadow(0px 0px 0.7px var(--accent))" }}
className="text-4xl text-light-accent dark:text-dark-accent"
/>
<h2 className="text-2xl -mb-3 font-semibold capitalize text-light-color dark:text-dark-color">
Received Supporters
</h2>
{/* <p className="-mt-3 text-sm underline text-light-color dark:text-dark-color decoration-light-accent opacity-40 dark:decoration-dark-accent">
AcademiaPro is now ClassPro
</p> */}
</div>
<p className="mx-2 text-center opacity-50 text-light-color dark:text-dark-color">
We are excited to offer you a free trial of our Supporters role (worth 29.99) for a month. For people who paid, This will cover an extra month for free.
</p>
<button
type="button"
onClick={clicked}
className="absolute bottom-0 left-0 flex h-12 w-full items-center justify-center rounded-b-[42px] bg-light-accent font-medium text-light-background-light dark:text-dark-background-darker"
>
Claim
</button>
</div>
</div>
)
);
}
2 changes: 2 additions & 0 deletions components/Sidebar/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ const OpenButton = dynamic(
);
import ThemeToggle from '@/components/themes/ThemeToggle';
import { IoLibrarySharp } from 'react-icons/io5';
import FreeTrial from './Free';
// import GradeXIcon from '@/public/images/GradeX';

export function Sidebar({
Expand Down Expand Up @@ -184,6 +185,7 @@ export function Sidebar({
</header>

<Popup />
<FreeTrial />

<OpenButton
mobile
Expand Down
2 changes: 1 addition & 1 deletion utils/Cookies.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export function setCookie(name:string, value: string, expirationMonths = 3) {

const cookieString = `${name}=${encodedValue}; expires=${exdate.toUTCString()}; path=/; ${
window.location.hostname === "localhost" ? "" : "Secure; "
}HttpOnly; SameSite=Lax`;
} SameSite=Lax`;

document.cookie = cookieString;

Expand Down

0 comments on commit c4826a8

Please sign in to comment.