├── .gitignore ├── .vscode └── settings.json ├── CHANGELOG.md ├── README.md ├── app ├── (auth) │ ├── layout.tsx │ ├── reset-password │ │ └── page.tsx │ ├── signin │ │ └── page.tsx │ └── signup │ │ └── page.tsx ├── (default) │ ├── layout.tsx │ └── page.tsx ├── api │ └── hello │ │ └── route.ts ├── css │ ├── additional-styles │ │ ├── theme.css │ │ └── utility-patterns.css │ └── style.css └── layout.tsx ├── components ├── cta.tsx ├── features.tsx ├── hero-home.tsx ├── modal-video.tsx ├── page-illustration.tsx ├── spotlight.tsx ├── testimonials.tsx ├── ui │ ├── footer.tsx │ ├── header.tsx │ └── logo.tsx └── workflows.tsx ├── next.config.js ├── package.json ├── pnpm-lock.yaml ├── postcss.config.js ├── public ├── favicon.ico ├── fonts │ ├── nacelle-italic.woff2 │ ├── nacelle-regular.woff2 │ ├── nacelle-semibold.woff2 │ └── nacelle-semibolditalic.woff2 ├── images │ ├── blurred-shape-gray.svg │ ├── blurred-shape.svg │ ├── client-logo-01.svg │ ├── client-logo-02.svg │ ├── client-logo-03.svg │ ├── client-logo-04.svg │ ├── client-logo-05.svg │ ├── client-logo-06.svg │ ├── client-logo-07.svg │ ├── client-logo-08.svg │ ├── client-logo-09.svg │ ├── features.png │ ├── footer-illustration.svg │ ├── hero-image-01.jpg │ ├── logo.svg │ ├── page-illustration.svg │ ├── secondary-illustration.svg │ ├── testimonial-01.jpg │ ├── testimonial-02.jpg │ ├── testimonial-03.jpg │ ├── testimonial-04.jpg │ ├── testimonial-05.jpg │ ├── testimonial-06.jpg │ ├── testimonial-07.jpg │ ├── testimonial-08.jpg │ ├── testimonial-09.jpg │ ├── workflow-01.png │ ├── workflow-02.png │ └── workflow-03.png └── videos │ └── video.mp4 ├── tsconfig.json └── utils ├── useMasonry.tsx └── useMousePosition.tsx /.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 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | .pnpm-debug.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | 38 | # contentlayer 39 | .contentlayer 40 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript.tsdk": "node_modules/typescript/lib", 3 | "typescript.enablePromptUseWorkspaceTsdk": true 4 | } 5 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # CHANGELOG.md 2 | 3 | ## [5.0.0] - 2025-02-04 4 | 5 | - Updgrade to Tailwind v4 6 | - Update dependencies 7 | 8 | ## [4.1.0] - 2024-12-08 9 | 10 | - Update dependencies + Upgrade to Next.js 15 11 | 12 | ## [4.0.0] - 2024-09-11 13 | 14 | Redesign the entire template 15 | 16 | ## [3.3.0] - 2023-12-08 17 | 18 | Update to Next.js 14 19 | Update dependencies 20 | 21 | ## [3.2.2] - 2023-10-04 22 | 23 | Update Twitter icon 24 | Update dependencies 25 | 26 | ## [3.2.0] - 2023-05-31 27 | 28 | Update dependencies and fix some issues 29 | 30 | ## [3.1.0] - 2023-05-07 31 | 32 | Modal video improvements 33 | 34 | ## [3.0.0] - 2023-04-12 35 | 36 | Conversion to Next.js 37 | 38 | ## [2.0.3] - 2023-03-28 39 | 40 | Fix video 41 | 42 | ## [2.0.2] - 2023-03-28 43 | 44 | Add self-hosted video 45 | 46 | ## [2.0.1] - 2023-02-16 47 | 48 | Remove header links 49 | 50 | ## [2.0.0] - 2023-02-16 51 | 52 | Replace Cruip CSS with Tailwind CSS 53 | 54 | ## [1.0.0] - 2020-04-07 55 | 56 | First release 57 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Free React / Next.js landing page template 2 | 3 | ![Open React / Next.js template preview](https://github.com/user-attachments/assets/522a5e46-2a0e-48ca-80eb-87c7fa58f3ea) 4 | 5 | **Open** is a **free React / Next.js landing page template built with Tailwind CSS** for developers/makers who want to create a quick and professional landing page for their open source projects, SaaS products, online services, and more. 6 | 7 | **UPDATE 2025-02-04** Added Tailwind v4 support! 8 | 9 | Use it for whatever you want, and be sure to reach us out on [Twitter](https://twitter.com/Cruip_com) if you build anything cool/useful with it. 10 | 11 | Created and maintained with ❤️ by [Cruip.com](https://cruip.com). 12 | 13 | _Version 1.0.0 built with the Cruip CSS is available [here](https://github.com/cruip/open-react-template/releases/tag/1.0.0)._ 14 | _Version 2.0.3 built with Tailwind CSS and React + Vite is available [here](https://github.com/cruip/open-react-template/releases/tag/2.0.3)._ 15 | _Version 3.3.0 (before redesign) built with Tailwind CSS and Next.js is available [here](https://github.com/cruip/open-react-template/releases/tag/3.3.0)._ 16 | 17 | ## Live demo 18 | 19 | Check the live demo here 👉️ [https://open.cruip.com/](https://open.cruip.com/) 20 | 21 | ## Open PRO 22 | 23 | [![Open Pro](https://github.com/user-attachments/assets/2062c728-95f1-4d59-aa2d-d63556f625d5)](https://cruip.com/) 24 | 25 | ## Design files 26 | 27 | If you need the design files, you can download them from Figma's Community 👉 https://bit.ly/401KSUS 28 | 29 | ## Usage 30 | 31 | 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). 32 | 33 | ### Getting Started 34 | 35 | First, run the development server: 36 | 37 | ```bash 38 | npm run dev 39 | # or 40 | pnpm dev (recommended) 41 | # or 42 | yarn dev 43 | ``` 44 | 45 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 46 | 47 | You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. 48 | 49 | [API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`. 50 | 51 | The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. 52 | 53 | This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. 54 | 55 | ### Learn More 56 | 57 | To learn more about Next.js, take a look at the following resources: 58 | 59 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. 60 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. 61 | 62 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! 63 | 64 | ### Deploy on Vercel 65 | 66 | 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. 67 | 68 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. 69 | 70 | ### Support notes 71 | 72 | This template has been developed with the App Router (`app`) and React Server Components. If you’re unfamiliar with these beta features, you can find more information about them on the Next.js beta documentation page. So, please note that any request dealing with React (e.g. extra features, customisations, et cetera) is to be considered out of the support scope. 73 | 74 | For more information about what support covers, please see our (FAQs)[https://cruip.com/faq/]. 75 | 76 | ## Credits 77 | 78 | - [Nucleo](https://nucleoapp.com/) 79 | 80 | ## Terms and License 81 | 82 | - Released under the [GPL](https://www.gnu.org/licenses/gpl-3.0.html). 83 | - Copyright 2024 [Cruip](https://cruip.com/). 84 | - Use it for personal and commercial projects, but please don’t republish, redistribute, or resell the template. 85 | - Attribution is not required, although it is really appreciated. 86 | 87 | ## About Us 88 | 89 | We're an Italian developer/designer duo creating high-quality design/code resources for developers, makers, and startups. 90 | 91 | ## Stay in the loop 92 | 93 | If you would like to know when we release new resources, you can follow [@pacovitiello](https://x.com/pacovitiello) and [@DavidePacilio](https://x.com/DavidePacilio) on X, or you can subscribe to our [newsletter](https://cruip.com/newsletter/). 94 | -------------------------------------------------------------------------------- /app/(auth)/layout.tsx: -------------------------------------------------------------------------------- 1 | import PageIllustration from "@/components/page-illustration"; 2 | 3 | export default function AuthLayout({ 4 | children, 5 | }: { 6 | children: React.ReactNode; 7 | }) { 8 | return ( 9 |
10 | 11 | 12 | {children} 13 |
14 | ); 15 | } 16 | -------------------------------------------------------------------------------- /app/(auth)/reset-password/page.tsx: -------------------------------------------------------------------------------- 1 | export const metadata = { 2 | title: "Reset Password - Open PRO", 3 | description: "Page description", 4 | }; 5 | 6 | import Link from "next/link"; 7 | 8 | export default function ResetPassword() { 9 | return ( 10 |
11 |
12 |
13 | {/* Section header */} 14 |
15 |

16 | Reset your password 17 |

18 |
19 | {/* Contact form */} 20 |
21 |
22 | 28 | 34 |
35 |
36 | 39 |
40 |
41 |
42 |
43 |
44 | ); 45 | } 46 | -------------------------------------------------------------------------------- /app/(auth)/signin/page.tsx: -------------------------------------------------------------------------------- 1 | export const metadata = { 2 | title: "Sign In - Open PRO", 3 | description: "Page description", 4 | }; 5 | 6 | import Link from "next/link"; 7 | 8 | export default function SignIn() { 9 | return ( 10 |
11 |
12 |
13 | {/* Section header */} 14 |
15 |

16 | Welcome back 17 |

18 |
19 | {/* Contact form */} 20 |
21 |
22 |
23 | 29 | 35 |
36 |
37 |
38 | 44 | 48 | Forgot? 49 | 50 |
51 | 57 |
58 |
59 |
60 | 63 |
64 | or 65 |
66 | 69 |
70 |
71 | {/* Bottom link */} 72 |
73 | Don't you have an account?{" "} 74 | 75 | Sign Up 76 | 77 |
78 |
79 |
80 |
81 | ); 82 | } 83 | -------------------------------------------------------------------------------- /app/(auth)/signup/page.tsx: -------------------------------------------------------------------------------- 1 | export const metadata = { 2 | title: "Sign Up - Open PRO", 3 | description: "Page description", 4 | }; 5 | 6 | import Link from "next/link"; 7 | 8 | export default function SignUp() { 9 | return ( 10 |
11 |
12 |
13 | {/* Section header */} 14 |
15 |

16 | Create an account 17 |

18 |
19 | {/* Contact form */} 20 |
21 |
22 |
23 | 29 | 36 |
37 |
38 | 44 | 51 |
52 |
53 | 59 | 65 |
66 |
67 | 73 | 79 |
80 |
81 |
82 | 85 |
86 | or 87 |
88 | 91 |
92 |
93 | {/* Bottom link */} 94 |
95 | Already have an account?{" "} 96 | 97 | Sign in 98 | 99 |
100 |
101 |
102 |
103 | ); 104 | } 105 | -------------------------------------------------------------------------------- /app/(default)/layout.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { useEffect } from "react"; 4 | 5 | import AOS from "aos"; 6 | import "aos/dist/aos.css"; 7 | 8 | import Footer from "@/components/ui/footer"; 9 | 10 | export default function DefaultLayout({ 11 | children, 12 | }: { 13 | children: React.ReactNode; 14 | }) { 15 | useEffect(() => { 16 | AOS.init({ 17 | once: true, 18 | disable: "phone", 19 | duration: 600, 20 | easing: "ease-out-sine", 21 | }); 22 | }); 23 | 24 | return ( 25 | <> 26 |
{children}
27 | 28 |