├── .env.example ├── .gitignore ├── README.md ├── app ├── (root) │ ├── (home) │ │ ├── loading.tsx │ │ └── page.tsx │ ├── layout.tsx │ ├── privacy │ │ └── page.tsx │ └── terms │ │ └── page.tsx ├── favicon.ico ├── globals.css ├── layout.tsx └── studio │ └── [[...index]] │ └── page.tsx ├── components.json ├── components ├── Filters.tsx ├── Footer.tsx ├── Header.tsx ├── Navbar.tsx ├── ResourceCard.tsx ├── SearchForm.tsx └── ui │ ├── button.tsx │ ├── card.tsx │ ├── dropdown-menu.tsx │ ├── input.tsx │ └── skeleton.tsx ├── lib └── utils.ts ├── next.config.mjs ├── package-lock.json ├── package.json ├── postcss.config.js ├── public ├── arrow-blue.svg ├── arrow_trail.svg ├── arrow_white.svg ├── downloads.svg ├── hamburger-menu.svg ├── jsm-logo.svg ├── jsm_resources_banner.svg ├── jsm_resources_banner.webp ├── logo.png ├── magnifying-glass.svg ├── next.svg └── vercel.svg ├── sanity.cli.ts ├── sanity.config.ts ├── sanity ├── actions.ts ├── env.ts ├── lib │ ├── client.ts │ └── image.ts ├── schemas │ ├── index.ts │ ├── resource-playlist.schema.ts │ └── resource.schema.ts └── utils.ts ├── tailwind.config.ts └── tsconfig.json /.env.example: -------------------------------------------------------------------------------- 1 | NEXT_PUBLIC_SANITY_PROJECT_ID="" 2 | NEXT_PUBLIC_SANITY_DATASET="" 3 | NEXT_PUBLIC_SANITY_TOKEN="" -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | .yarn/install-state.gz 8 | 9 | # testing 10 | /coverage 11 | 12 | # next.js 13 | /.next/ 14 | /out/ 15 | 16 | # production 17 | /build 18 | 19 | # misc 20 | .DS_Store 21 | *.pem 22 | 23 | # debug 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | 28 | # local env files 29 | .env*.local 30 | .env 31 | 32 | # vercel 33 | .vercel 34 | 35 | # typescript 36 | *.tsbuildinfo 37 | next-env.d.ts 38 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | veena mam pdf 2 | -------------------------------------------------------------------------------- /app/(root)/(home)/loading.tsx: -------------------------------------------------------------------------------- 1 | import { Skeleton } from "@/components/ui/skeleton"; 2 | 3 | const Loading = () => { 4 | return ( 5 |
6 |
7 | 8 |
9 | 10 |
11 | 12 |
13 | 14 | 15 | 16 |
17 |
18 |
19 | ); 20 | }; 21 | 22 | export default Loading; 23 | -------------------------------------------------------------------------------- /app/(root)/(home)/page.tsx: -------------------------------------------------------------------------------- 1 | import Filters from "@/components/Filters"; 2 | import Header from "@/components/Header"; 3 | import ResourceCard from "@/components/ResourceCard"; 4 | import SearchForm from "@/components/SearchForm"; 5 | import { getResources, getResourcesPlaylist } from "@/sanity/actions"; 6 | 7 | export const revalidate = 900; 8 | interface Props { 9 | searchParams: { [key: string]: string | undefined }; 10 | } 11 | 12 | const Page = async ({ searchParams }: Props) => { 13 | const resources = await getResources({ 14 | query: searchParams?.query || "", 15 | category: searchParams?.category || "", 16 | page: "1", 17 | }); 18 | 19 | const resourcesPlaylist = await getResourcesPlaylist(); 20 | return ( 21 |
22 |
23 |
24 |

25 | V Notes 26 |

27 |

28 | A One Stop Solution for all the handwritten notes and other resources 29 |

30 |
31 | 32 |
33 | 34 | 35 | {(searchParams?.query || searchParams?.category) && ( 36 |
37 |
41 |
42 | {resources?.length > 0 ? ( 43 | resources.map((resource: any) => ( 44 | 51 | )) 52 | ) : ( 53 |

No resources found

54 | )} 55 |
56 |
57 | )} 58 | 59 | {resourcesPlaylist.map((item: any) => ( 60 |
64 |

{item.title}

65 |
66 | {item.resources.map((resource: any) => ( 67 | 74 | ))} 75 |
76 |
77 | ))} 78 |
79 | ); 80 | }; 81 | 82 | export default Page; 83 | -------------------------------------------------------------------------------- /app/(root)/layout.tsx: -------------------------------------------------------------------------------- 1 | import Footer from '@/components/Footer' 2 | import Navbar from '@/components/Navbar' 3 | import React from 'react' 4 | 5 | const layout = ({ children}: {children: React.ReactNode}) => { 6 | return ( 7 | <> 8 | 9 | {children} 10 |