├── public ├── favicon.ico ├── videos │ └── video.mp4 └── images │ ├── hero-image-01.jpg │ ├── testimonial-01.jpg │ ├── testimonial-02.jpg │ ├── testimonial-03.jpg │ ├── features-03-image-01.png │ ├── features-03-image-02.png │ └── features-03-image-03.png ├── app ├── api │ └── hello │ │ └── route.ts ├── (auth) │ ├── layout.tsx │ ├── reset-password │ │ └── page.tsx │ ├── signin │ │ └── page.tsx │ └── signup │ │ └── page.tsx ├── (default) │ ├── page.tsx │ └── layout.tsx ├── css │ ├── style.css │ └── additional-styles │ │ ├── toggle-switch.css │ │ ├── utility-patterns.css │ │ ├── range-slider.css │ │ └── theme.css └── layout.tsx ├── .vscode └── settings.json ├── postcss.config.js ├── next.config.js ├── CHANGELOG.md ├── .gitignore ├── tsconfig.json ├── package.json ├── components ├── banner.tsx ├── ui │ ├── header.tsx │ ├── mobile-menu.tsx │ └── footer.tsx ├── modal-video.tsx ├── testimonials.tsx ├── features.tsx ├── blocks.tsx ├── zigzag.tsx ├── hero.tsx ├── newsletter.tsx └── page-illustration.tsx ├── tailwind.config.js └── README.md /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/frozen-dev71/open-react-template/main/public/favicon.ico -------------------------------------------------------------------------------- /public/videos/video.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/frozen-dev71/open-react-template/main/public/videos/video.mp4 -------------------------------------------------------------------------------- /app/api/hello/route.ts: -------------------------------------------------------------------------------- 1 | export async function GET(request: Request) { 2 | return new Response('Hello, Next.js!') 3 | } 4 | -------------------------------------------------------------------------------- /public/images/hero-image-01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/frozen-dev71/open-react-template/main/public/images/hero-image-01.jpg -------------------------------------------------------------------------------- /public/images/testimonial-01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/frozen-dev71/open-react-template/main/public/images/testimonial-01.jpg -------------------------------------------------------------------------------- /public/images/testimonial-02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/frozen-dev71/open-react-template/main/public/images/testimonial-02.jpg -------------------------------------------------------------------------------- /public/images/testimonial-03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/frozen-dev71/open-react-template/main/public/images/testimonial-03.jpg -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript.tsdk": "node_modules/typescript/lib", 3 | "typescript.enablePromptUseWorkspaceTsdk": true 4 | } -------------------------------------------------------------------------------- /public/images/features-03-image-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/frozen-dev71/open-react-template/main/public/images/features-03-image-01.png -------------------------------------------------------------------------------- /public/images/features-03-image-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/frozen-dev71/open-react-template/main/public/images/features-03-image-02.png -------------------------------------------------------------------------------- /public/images/features-03-image-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/frozen-dev71/open-react-template/main/public/images/features-03-image-03.png -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | 'postcss-import': {}, 4 | tailwindcss: {}, 5 | autoprefixer: {}, 6 | }, 7 | } 8 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | experimental: { 4 | appDir: true, 5 | }, 6 | } 7 | 8 | module.exports = nextConfig 9 | -------------------------------------------------------------------------------- /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 | 13 | {children} 14 | 15 |
16 | ) 17 | } 18 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # CHANGELOG.md 2 | 3 | ## [3.1.0] - 2023-05-07 4 | 5 | Modal video improvements 6 | 7 | ## [3.0.0] - 2023-04-12 8 | 9 | Conversion to Next.js 10 | 11 | ## [2.0.3] - 2023-03-28 12 | 13 | Fix video 14 | 15 | ## [2.0.2] - 2023-03-28 16 | 17 | Add self-hosted video 18 | 19 | ## [2.0.1] - 2023-02-16 20 | 21 | Remove header links 22 | 23 | ## [2.0.0] - 2023-02-16 24 | 25 | Replace Cruip CSS with Tailwind CSS 26 | 27 | ## [1.0.0] - 2020-04-07 28 | 29 | First release -------------------------------------------------------------------------------- /app/(default)/page.tsx: -------------------------------------------------------------------------------- 1 | export const metadata = { 2 | title: 'Home - Open PRO', 3 | description: 'Page description', 4 | } 5 | 6 | import Hero from '@/components/hero' 7 | import Features from '@/components/features' 8 | import Newsletter from '@/components/newsletter' 9 | import Zigzag from '@/components/zigzag' 10 | import Testimonials from '@/components/testimonials' 11 | 12 | export default function Home() { 13 | return ( 14 | <> 15 | 16 | 17 | 18 | 19 | 20 | 21 | ) 22 | } 23 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /app/css/style.css: -------------------------------------------------------------------------------- 1 | @import 'tailwindcss/base'; 2 | @import 'tailwindcss/components'; 3 | 4 | /* Additional styles */ 5 | @import 'additional-styles/utility-patterns.css'; 6 | @import 'additional-styles/range-slider.css'; 7 | @import 'additional-styles/toggle-switch.css'; 8 | @import 'additional-styles/theme.css'; 9 | 10 | @import 'tailwindcss/utilities'; 11 | 12 | /* Additional Tailwind directives: https://tailwindcss.com/docs/functions-and-directives/#responsive */ 13 | @layer utilities { 14 | .rtl { 15 | direction: rtl; 16 | } 17 | } 18 | 19 | /* See Alpine.js: https://github.com/alpinejs/alpine#x-cloak */ 20 | [x-cloak=""] { 21 | display: none; 22 | } 23 | -------------------------------------------------------------------------------- /app/css/additional-styles/toggle-switch.css: -------------------------------------------------------------------------------- 1 | /* Switch element */ 2 | .form-switch { 3 | @apply relative select-none; 4 | width: 60px; 5 | } 6 | 7 | .form-switch label { 8 | @apply block overflow-hidden cursor-pointer h-8 rounded-full; 9 | } 10 | 11 | .form-switch label>span:first-child { 12 | @apply absolute block rounded-full; 13 | width: 28px; 14 | height: 28px; 15 | top: 2px; 16 | left: 2px; 17 | right: 50%; 18 | transition: all .15s ease-out; 19 | } 20 | 21 | .form-switch input[type="checkbox"]:checked+label { 22 | @apply bg-purple-600; 23 | } 24 | 25 | .form-switch input[type="checkbox"]:checked+label>span:first-child { 26 | left: 30px; 27 | } -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "noEmit": true, 10 | "esModuleInterop": true, 11 | "module": "esnext", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "jsx": "preserve", 16 | "incremental": true, 17 | "plugins": [ 18 | { 19 | "name": "next" 20 | } 21 | ], 22 | "paths": { 23 | "@/*": ["./*"] 24 | } 25 | }, 26 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], 27 | "exclude": ["node_modules"] 28 | } 29 | -------------------------------------------------------------------------------- /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 PageIllustration from '@/components/page-illustration' 9 | import Footer from '@/components/ui/footer' 10 | 11 | export default function DefaultLayout({ 12 | children, 13 | }: { 14 | children: React.ReactNode 15 | }) { 16 | 17 | useEffect(() => { 18 | AOS.init({ 19 | once: true, 20 | disable: 'phone', 21 | duration: 600, 22 | easing: 'ease-out-sine', 23 | }) 24 | }) 25 | 26 | return ( 27 | <> 28 |
29 | 30 | 31 | 32 | {children} 33 | 34 |
35 | 36 |