├── .env.example ├── .eslintrc.json ├── .gitignore ├── README.md ├── app ├── (home) │ ├── categories │ │ └── page.tsx │ ├── category │ │ └── [category] │ │ │ └── page.tsx │ ├── edit │ │ └── [productId] │ │ │ ├── delete-product.tsx │ │ │ ├── edit-product-form.tsx │ │ │ ├── edit-product.tsx │ │ │ └── page.tsx │ ├── layout.tsx │ ├── my-products │ │ └── page.tsx │ ├── my-upvoted │ │ └── page.tsx │ ├── new-product │ │ ├── layout.tsx │ │ └── page.tsx │ ├── page.tsx │ └── settings │ │ ├── manage-billing.tsx │ │ └── page.tsx ├── admin │ ├── activate-product-modal-content.tsx │ ├── page.tsx │ ├── pending-products.tsx │ └── reject-product-modal-content.tsx ├── api │ ├── auth │ │ └── [...nextauth] │ │ │ └── route.ts │ ├── stripe │ │ └── route.ts │ └── uploadthing │ │ ├── core.ts │ │ └── route.ts ├── favicon.ico ├── globals.css ├── layout.tsx ├── not-found.tsx └── product │ └── [slug] │ ├── go-to-website.tsx │ ├── layout.tsx │ └── page.tsx ├── auth.config.ts ├── auth.ts ├── components.json ├── components ├── active-products.tsx ├── carousel-component.tsx ├── images-uploader.tsx ├── logo-uploader.tsx ├── navbar │ ├── auth-content.tsx │ ├── avatar.tsx │ ├── logo.tsx │ ├── menu.tsx │ ├── menus │ │ ├── about-menu.tsx │ │ ├── community-menu.tsx │ │ └── launches-menu.tsx │ ├── navbar.tsx │ ├── notification-icon.tsx │ ├── search.tsx │ ├── sign-in-button.tsx │ ├── sign-up-button.tsx │ └── submit.tsx ├── overview-chart.tsx ├── product-item.tsx ├── product-modal-content.tsx ├── recent-activity.tsx ├── share-modal-content.tsx ├── spinner.tsx ├── ui │ ├── badge.tsx │ ├── breadcrumb.tsx │ ├── button.tsx │ ├── calendar.tsx │ ├── card.tsx │ ├── carousel.tsx │ ├── dropdown-menu.tsx │ ├── modals │ │ ├── activate-product-modal.tsx │ │ ├── edit-product-modal.tsx │ │ ├── modal.tsx │ │ ├── product-modal.tsx │ │ ├── reject-product-modal.tsx │ │ ├── share-product-modal.tsx │ │ └── upgrade-membership-modal.tsx │ ├── popover.tsx │ ├── separator.tsx │ ├── sheet.tsx │ └── sonner.tsx └── upgrade-membership.tsx ├── lib ├── db.ts ├── server-actions.ts ├── stripe.ts ├── uploadthing.ts └── utils.ts ├── middleware.ts ├── next.config.mjs ├── package-lock.json ├── package.json ├── postcss.config.mjs ├── prisma └── schema.prisma ├── public ├── images │ └── start-up-14.png ├── logo │ ├── discord-logo.png │ ├── logo.png │ ├── small-logo.png │ └── twitter-logo.png ├── next.svg └── vercel.svg ├── tailwind.config.ts └── tsconfig.json /.env.example: -------------------------------------------------------------------------------- 1 | AUTH_SECRET=secret 2 | 3 | GITHUB_ID= 4 | GITHUB_SECRET= 5 | 6 | GOOGLE_ID= 7 | GOOGLE_SECRET= 8 | 9 | 10 | DATABASE_URL= 11 | 12 | UPLOADTHING_SECRET= 13 | UPLOADTHING_APP_ID= 14 | 15 | STRIPE_WEBHOOK_SIGNING_SECRET= 16 | STRIPE_SECRET_KEY= 17 | 18 | ADMIN_USERNAME=admin 19 | ADMIN_PASSWORD=password -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /.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 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). 2 | 3 | ## Getting Started 4 | 5 | First, run the development server: 6 | 7 | ```bash 8 | npm run dev 9 | # or 10 | yarn dev 11 | # or 12 | pnpm dev 13 | # or 14 | bun dev 15 | ``` 16 | 17 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 18 | 19 | You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. 20 | 21 | This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. 22 | 23 | ## Learn More 24 | 25 | To learn more about Next.js, take a look at the following resources: 26 | 27 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. 28 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. 29 | 30 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! 31 | 32 | ## Deploy on Vercel 33 | 34 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. 35 | 36 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. 37 | -------------------------------------------------------------------------------- /app/(home)/categories/page.tsx: -------------------------------------------------------------------------------- 1 | import { getCategories } from "@/lib/server-actions"; 2 | import Link from "next/link"; 3 | 4 | const Categories = async () => { 5 | const categories = await getCategories(); 6 | 7 | return ( 8 |
12 | Discover new products in different categories and find what you need 13 | to make your life easier 14 |
15 |36 | View all products 37 |
38 |44 | Check out whats's going on in the {capitalizedCategory}! Discover 45 | new products 46 |
47 | 48 |{product.headline}
65 |72 | We're sorry to see you go. Once your product is deleted, all of 73 | your content will be permanently gone, including your products and 74 | product settings. 75 |
76 | 77 |78 | This action cannot be undone. This will permanently delete your 79 | product and all of your content. 80 |
81 | 82 |To confirm deletion, type “delete” below:
83 | 84 | 90 | 91 |Go Back
38 | 39 | 40 |{product.website}
53 | 54 | {product.status === "PENDING" && ( 55 |{comment.body}
135 |144 | Be the first to comment on this product 145 |
146 |30 | Looks like you have not created any products yet, click the button 31 | below to get started 32 |
33 | 34 | 35 |Create a product
41 |Manage your products here
48 | 49 | {isPremium ? ( 50 |You are a premium user
53 |({products.length} / 2) free products
57 | > 58 | )} 59 | 60 |27 | Upvote products to get started, and they will display here 28 |
29 |View all the products you have upvoted
37 |Could not create checkout session. Please try again
23 |Manage your settings
24 | 25 |30 | {subscriptionDetails ? subscriptionDetails.nextPaymentDate : "No payment date"} 31 |
32 |37 | {subscriptionDetails ? subscriptionDetails.amount : "No payment amount"} 38 |
39 |49 | Are you sure you want to activate this product ? 50 |
51 | 52 |53 | Once activated, the product will be visible to the public and users 54 | will be able to interact with it 55 |
56 | 57 | 63 |61 | Here is what's happening in your business today 62 |
63 |113 | {product.description} 114 |
115 |55 | Are you sure you want to reject this product? 56 |
57 |58 | Once rejected, the owner will be notified with the neccessary steps to 59 | take. 60 |
61 | 62 |{product.headline}
36 | 37 |{product.description}
59 |{comment.body}
83 |92 | Be the first to comment on this product 93 |
94 |122 | {notification.createdAt && 123 | timeAgo(notification.createdAt)} 124 |
125 |130 | {notification.createdAt && 131 | timeAgo(notification.createdAt)} 132 |
133 |-
125 |126 | {product.headline} 127 |
128 |120 | {currentProduct.headline} 121 |
122 | 123 |Discuss
175 |Share
184 |53 | Stay connect by following the product on social media 54 |
55 | 56 |29 | Could not create checkout session. Please try again later. 30 |
31 | 32 |58 | Looking to create more projects ? Upgrade your membership 59 | to unlock unlimited projects 60 |
61 | 62 |