From b1986a25d3afc004794a7475901c44143f9c855c Mon Sep 17 00:00:00 2001 From: Shivam Suryawanshi Date: Fri, 17 Oct 2025 21:29:16 +0530 Subject: [PATCH 1/7] updated faq for lazyAndSuspense --- apps/api/package.json | 4 +- .../20251014050423_init/migration.sql | 46 + .../api/prisma/migrations/migration_lock.toml | 3 + apps/web/src/app/(main)/(landing)/layout.tsx | 40 +- apps/web/src/app/(main)/(landing)/page.tsx | 177 ++- .../(landing)/pricing/PricingContent.tsx | 480 ++++++++ .../src/app/(main)/(landing)/pricing/page.tsx | 588 +--------- .../src/app/(main)/dashboard/home/page.tsx | 24 +- apps/web/src/app/(main)/dashboard/layout.tsx | 64 +- apps/web/src/app/(main)/dashboard/page.tsx | 23 +- .../app/(main)/dashboard/projects/page.tsx | 24 +- .../legal/privacy/PrivacyPolicyPage.tsx | 991 ++++++++++++++++ .../web/src/app/(main)/legal/privacy/page.tsx | 1000 +---------------- .../app/(main)/legal/terms/TermsContent.tsx | 436 +++++++ apps/web/src/app/(main)/legal/terms/page.tsx | 560 +-------- apps/web/src/app/(main)/login/page.tsx | 21 +- apps/web/src/app/checkout/page.tsx | 21 +- apps/web/src/components/faq/FaqSection.tsx | 2 +- apps/web/src/components/ui/skeleton.tsx | 9 + pnpm-lock.yaml | 460 +++++--- pnpm-workspace.yaml | 10 +- 21 files changed, 2652 insertions(+), 2331 deletions(-) create mode 100644 apps/api/prisma/migrations/20251014050423_init/migration.sql create mode 100644 apps/api/prisma/migrations/migration_lock.toml create mode 100644 apps/web/src/app/(main)/(landing)/pricing/PricingContent.tsx create mode 100644 apps/web/src/app/(main)/legal/privacy/PrivacyPolicyPage.tsx create mode 100644 apps/web/src/app/(main)/legal/terms/TermsContent.tsx create mode 100644 apps/web/src/components/ui/skeleton.tsx diff --git a/apps/api/package.json b/apps/api/package.json index 4e0703f..95bec84 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -19,14 +19,14 @@ "@types/express": "^4.17.21", "@types/jsonwebtoken": "^9.0.7", "@types/node": "^24.5.1", - "prisma": "^5.22.0", + "prisma": "^6.17.1", "tsx": "^4.20.3", "typescript": "^5.9.2" }, "dependencies": { "@octokit/graphql": "^9.0.1", "@opensox/shared": "workspace:*", - "@prisma/client": "^5.22.0", + "@prisma/client": "^6.17.1", "@trpc/server": "^11.5.1", "cors": "^2.8.5", "dotenv": "^16.5.0", diff --git a/apps/api/prisma/migrations/20251014050423_init/migration.sql b/apps/api/prisma/migrations/20251014050423_init/migration.sql new file mode 100644 index 0000000..6ae3afa --- /dev/null +++ b/apps/api/prisma/migrations/20251014050423_init/migration.sql @@ -0,0 +1,46 @@ +-- CreateTable +CREATE TABLE "QueryCount" ( + "id" INTEGER NOT NULL DEFAULT 1, + "total_queries" BIGINT NOT NULL, + + CONSTRAINT "QueryCount_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "User" ( + "id" TEXT NOT NULL, + "email" TEXT NOT NULL, + "firstName" TEXT NOT NULL, + "authMethod" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "lastLogin" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "User_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Account" ( + "id" TEXT NOT NULL, + "userId" TEXT NOT NULL, + "type" TEXT NOT NULL, + "provider" TEXT NOT NULL, + "providerAccountId" TEXT NOT NULL, + "refresh_token" TEXT, + "access_token" TEXT, + "expires_at" INTEGER, + "token_type" TEXT, + "scope" TEXT, + "id_token" TEXT, + "session_state" TEXT, + + CONSTRAINT "Account_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); + +-- CreateIndex +CREATE UNIQUE INDEX "Account_provider_providerAccountId_key" ON "Account"("provider", "providerAccountId"); + +-- AddForeignKey +ALTER TABLE "Account" ADD CONSTRAINT "Account_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/apps/api/prisma/migrations/migration_lock.toml b/apps/api/prisma/migrations/migration_lock.toml new file mode 100644 index 0000000..044d57c --- /dev/null +++ b/apps/api/prisma/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (e.g., Git) +provider = "postgresql" diff --git a/apps/web/src/app/(main)/(landing)/layout.tsx b/apps/web/src/app/(main)/(landing)/layout.tsx index 3a5bdbe..14ffbd0 100644 --- a/apps/web/src/app/(main)/(landing)/layout.tsx +++ b/apps/web/src/app/(main)/(landing)/layout.tsx @@ -1,13 +1,31 @@ -import Navbar from '@/components/landing-sections/navbar' -import React from 'react' +"use client"; + +import React, { Suspense, lazy } from "react"; + +import { Skeleton } from "@/components/ui/skeleton"; + +const Navbar = lazy(() => import("@/components/landing-sections/navbar")); const Layout = ({ children }: { children: React.ReactNode }) => { - return ( -
- - {children} -
- ) -} - -export default Layout \ No newline at end of file + return ( +
+ +
+ + + + +
+ + } + > + +
+ {children} +
+ ); +}; + +export default Layout; \ No newline at end of file diff --git a/apps/web/src/app/(main)/(landing)/page.tsx b/apps/web/src/app/(main)/(landing)/page.tsx index 94caacb..21e4051 100644 --- a/apps/web/src/app/(main)/(landing)/page.tsx +++ b/apps/web/src/app/(main)/(landing)/page.tsx @@ -1,33 +1,166 @@ 'use client' -import Bento from '@/components/landing-sections/Bento' -import Brands from '@/components/landing-sections/Brands' -import CTA from '@/components/landing-sections/CTA' -import Footer from '@/components/landing-sections/footer' -import Hero from '@/components/landing-sections/Hero' -import HowItWorks from '@/components/landing-sections/how-it-works' -import Navbar from '@/components/landing-sections/navbar' -import Testimonials from '@/components/landing-sections/testimonials' -import Video from '@/components/landing-sections/video' -import React from 'react' -import { FaqSection } from '@/components/faq/FaqSection' +import React, { Suspense, lazy } from 'react' + +import { Skeleton } from "@/components/ui/skeleton"; + +const Navbar = lazy(() => import('@/components/landing-sections/navbar')) +const Hero = lazy(() => import('@/components/landing-sections/Hero')) +const Bento = lazy(() => import('@/components/landing-sections/Bento')) +const Video = lazy(() => import('@/components/landing-sections/video')) +const HowItWorks = lazy(() => import('@/components/landing-sections/how-it-works')) +const Brands = lazy(() => import('@/components/landing-sections/Brands')) +const Testimonials = lazy(() => import('@/components/landing-sections/testimonials')) +const FaqSection = lazy(() => import('@/components/faq/FaqSection')) +const CTA = lazy(() => import('@/components/landing-sections/CTA')) +const Footer = lazy(() => import('@/components/landing-sections/footer')) const Landing = () => { return (
- -
- - -
+ } + > + + +
+ +
+ + + + +
+
+ } + > + + + +
+ + + + +
+ + } + > + +
+ +
+ + + + +
+ + } + > +
+ +
+ + + + +
+ + } + > + +
+ +
+ + + + +
+ + } + > + +
+ +
+ + + + +
+ + } + > + +
+ +
+ + + + +
+ + } + > + +
- -
+ +
+ + + + +
+
+ } + > + + + +
+ + + + +
+ + } + > +
+
) diff --git a/apps/web/src/app/(main)/(landing)/pricing/PricingContent.tsx b/apps/web/src/app/(main)/(landing)/pricing/PricingContent.tsx new file mode 100644 index 0000000..1031a6f --- /dev/null +++ b/apps/web/src/app/(main)/(landing)/pricing/PricingContent.tsx @@ -0,0 +1,480 @@ +"use client"; + +import Footer from "@/components/landing-sections/footer"; +import Header from "@/components/ui/header"; +import PrimaryButton from "@/components/ui/custom-button"; +import { ShineBorder } from "@/components/ui/shine-borders"; +import { motion } from "framer-motion"; +import { Check, CornerDownRight, Target, Terminal } from "lucide-react"; +import Image from "next/image"; +import Link from "next/link"; +import React from "react"; + +const opensoxFeatures = [ + { + id: 1, + title: "Opensox Advanced search tool", + description: + "One and only tool in the market that let you find open source with blizzing speed and scary accuracy. It will have:", + features: [ + "Faster and accurate search of projects", + "Higher accuracy (so that you exactly land on your dream open source project)", + "Advanced filters like, GSOC, YC, funding, hire contributors, trending, niche (like AI, Core ML, Web3, MERN), bounties, and many more.", + ], + }, + { + id: 2, + title: "OX Newsletter", + description: + "A newsletter that keeps you ahead in open source world. It will cover:", + features: [ + "Jobs/internships in opensource projects/companies", + "Funding news", + "What's trending in open source ecosystem", + "Upcoming trends", + "Tips to ace in open source", + "What's happening in open source companies?", + ], + }, + { + id: 3, + title: "30 days Opensox challenge sheet", + description: [ + "A comprehensive sheet of 30+ modules along with detailed videos to give you a clear path to start rocking in open source.", + "It will contain videos, resouces and hand made docs.", + <> + In each of the 30 steps, you will learn, then apply, If stuck, we'll help and then we'll do an + accountability check. + Check here. + + , + ], + features: [], + }, +]; + +const whySub = [ + { + content: + "Currently, Opensox 2.0 is in progress (70% done) so till the launch, we are offering premium plan at a discounted price - $49 for the whole year", + }, + { + content: + "This offer is only available for the first 1000 (20 slots booked) users", + }, + { + content: + "After the launch, this $49 offer be removed and Opensox premium will be around ~ $120 for whole year ($10/mo.)", + }, + { + content: "The price of the dollar is constantly increasing.", + }, +]; + +const freePlanCard = { + whatYouGetImmediately: [ + "Free filters to search projects (tech stack, competition, activity, etc)", + "Access to the general community", + ], + whatYouGetAfterLaunch: [ + "Everything mentioned above", + "30 days opensox challenge sheet", + ], +}; + +const premiumPlanCard = { + whatYouGetImmediately: [ + "Everything in free plan +", + "1:1 session on finding remote jobs and internships in open-source companies.", + "Quick doubts resolution.", + "Personalized guidance for GSoC, LFX, Outreachy, etc", + "Access to premium Slack where you can ask anything anytime.", + "Support to enhance skills for open source", + "GSOC proposal, resume reviews, etc.", + "Upcoming premium features", + ], + whatYouGetAfterLaunch: [ + "Everything mentioned above", + "Advanced tool with premium filters to find open source projects", + "Premium newsletter", + "30 days opensox challenge sheet", + "Upcoming premium features.", + ], +}; + +const PricingContent = () => { + return ( + <> +
+
+
+
+
+ + What is Opensox 2.0? + +
+
+
    + {opensoxFeatures.map((feature, index) => ( + +
    +
    +
    + {index + 1} +
    +

    {feature.title}

    +
    + {Array.isArray(feature.description) ? ( +
    + {feature.description.map((sentence, sentenceIndex) => ( +

    + {sentence} +

    + ))} +
    + ) : ( +

    {feature.description}

    + )} +
    +
    +
      + {feature.features.map((item, featureIndex) => ( +
    • + + {item} +
    • + ))} +
    +
    +
    + ))} +
+
+
+
+
+ + Why should you subscribe to Opensox premium now? + +
+
+
+ {whySub.map((sub, index) => ( + + + {sub.content} + + ))} +
+
+
+
+
+
+ background +
+
+ + +
+
+
+ +
+ For any doubts or queries, feel free to ping us at + + {" "}hi@opensox.ai + +
+
+
+