├── .husky ├── .gitignore ├── pre-commit ├── commit-msg ├── prepare-commit-msg └── common.sh ├── .npmrc ├── .commitlintrc.json ├── public ├── screenshot.png ├── images │ ├── case-1.webp │ ├── case-2.webp │ ├── case-3.webp │ ├── social-1.webp │ └── social-2.webp └── logo.svg ├── src ├── styles │ └── global.css ├── constants │ └── svg │ │ ├── quote.svg │ │ ├── arrow.svg │ │ ├── play.svg │ │ ├── check.svg │ │ ├── nike.svg │ │ ├── figma.svg │ │ ├── aws.svg │ │ ├── netlify.svg │ │ ├── preferences.svg │ │ └── features.svg ├── pages │ ├── api │ │ └── hello.ts │ ├── _app.tsx │ ├── index.tsx │ └── _document.tsx ├── twind.config.js └── components │ ├── page │ └── index.tsx │ ├── button │ └── index.tsx │ ├── video-section │ └── index.tsx │ ├── header │ └── index.tsx │ ├── list-section │ └── index.tsx │ ├── pricing-table │ └── index.tsx │ ├── footer │ └── index.tsx │ ├── cases-section │ └── index.tsx │ ├── feature-section │ └── index.tsx │ ├── social-proof │ └── index.tsx │ └── navigation │ └── index.tsx ├── .editorconfig ├── renovate.json ├── next.config.js ├── next-env.d.ts ├── .prettierrc ├── .gitignore ├── tsconfig.json ├── LICENSE.md ├── package.json ├── README.md └── .eslintrc /.husky/.gitignore: -------------------------------------------------------------------------------- 1 | _ -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | save-exact = true 2 | -------------------------------------------------------------------------------- /.commitlintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["@commitlint/config-conventional"] 3 | } 4 | -------------------------------------------------------------------------------- /public/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jkytoela/next-startd/HEAD/public/screenshot.png -------------------------------------------------------------------------------- /public/images/case-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jkytoela/next-startd/HEAD/public/images/case-1.webp -------------------------------------------------------------------------------- /public/images/case-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jkytoela/next-startd/HEAD/public/images/case-2.webp -------------------------------------------------------------------------------- /public/images/case-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jkytoela/next-startd/HEAD/public/images/case-3.webp -------------------------------------------------------------------------------- /public/images/social-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jkytoela/next-startd/HEAD/public/images/social-1.webp -------------------------------------------------------------------------------- /public/images/social-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jkytoela/next-startd/HEAD/public/images/social-2.webp -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | . "$(dirname "$0")/common.sh" 4 | 5 | yarn lint-staged 6 | -------------------------------------------------------------------------------- /.husky/commit-msg: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | . "$(dirname "$0")/common.sh" 4 | 5 | yarn commitlint --edit $1 6 | -------------------------------------------------------------------------------- /src/styles/global.css: -------------------------------------------------------------------------------- 1 | @import "@fontsource/inter/400.css"; 2 | @import "@fontsource/inter/500.css"; 3 | @import "@fontsource/inter/700.css"; 4 | -------------------------------------------------------------------------------- /.husky/prepare-commit-msg: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | . "$(dirname "$0")/common.sh" 4 | 5 | exec < /dev/tty && yarn cz --hook || true 6 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | charset = utf-8 7 | end_of_line = lf 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["config:base"], 3 | "semanticCommits": true, 4 | "stabilityDays": 3, 5 | "prCreation": "not-pending", 6 | "labels": ["type: dependencies"] 7 | } 8 | -------------------------------------------------------------------------------- /.husky/common.sh: -------------------------------------------------------------------------------- 1 | command_exists () { 2 | command -v "$1" >/dev/null 2>&1 3 | } 4 | 5 | # Workaround for Windows 10, Git Bash and Yarn 6 | if command_exists winpty && test -t 1; then 7 | exec < /dev/tty 8 | fi 9 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | webpack(config) { 3 | config.module.rules.push({ 4 | test: /\.svg$/, 5 | use: [`@svgr/webpack`], 6 | }); 7 | 8 | return config; 9 | }, 10 | }; 11 | -------------------------------------------------------------------------------- /next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // eslint-disable-next-line prettier/prettier 5 | declare module "*.svg" { 6 | const content: any; 7 | export default content; 8 | } 9 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "all", 3 | "singleQuote": true, 4 | "tabWidth": 2, 5 | "printWidth": 120, 6 | "proseWrap": "preserve", 7 | "useTabs": false, 8 | "bracketSpacing": true, 9 | "arrowParens": "always" 10 | } 11 | -------------------------------------------------------------------------------- /src/constants/svg/quote.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/constants/svg/arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/constants/svg/play.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/pages/api/hello.ts: -------------------------------------------------------------------------------- 1 | import { NextApiRequest, NextApiResponse } from 'next'; 2 | 3 | // Next.js API route support: https://nextjs.org/docs/api-routes/introduction 4 | export default (req: NextApiRequest, res: NextApiResponse) => { 5 | res.statusCode = 200; 6 | res.json({ name: `John Doe` }); 7 | }; 8 | -------------------------------------------------------------------------------- /src/twind.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | theme: { 3 | extend: { 4 | fontFamily: { 5 | sans: `Inter, ui-sans-serif, system-ui, -apple-system, 6 | BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", 7 | sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"`, 8 | }, 9 | }, 10 | }, 11 | }; 12 | -------------------------------------------------------------------------------- /src/pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import { AppProps } from 'next/app'; 2 | import '@/styles/global.css'; 3 | import '@fontsource/inter'; 4 | 5 | import { setup } from 'twind'; 6 | import twindConfig from '../twind.config'; 7 | 8 | if (typeof window !== `undefined`) { 9 | setup(twindConfig); 10 | } 11 | 12 | export default function MyApp({ Component, pageProps }: AppProps) { 13 | return ; 14 | } 15 | -------------------------------------------------------------------------------- /src/components/page/index.tsx: -------------------------------------------------------------------------------- 1 | import Head from 'next/head'; 2 | import Navigation from '@/components/navigation'; 3 | import { tw } from 'twind'; 4 | 5 | interface IProps { 6 | children: React.ReactNode; 7 | } 8 | 9 | const Page = ({ children }: IProps) => ( 10 |
11 | 12 | 13 | 14 |
15 | 16 | {children} 17 |
18 |
19 | ); 20 | 21 | export default Page; 22 | -------------------------------------------------------------------------------- /.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 | 27 | # local env files 28 | .env.local 29 | .env.development.local 30 | .env.test.local 31 | .env.production.local 32 | 33 | # vercel 34 | .vercel 35 | -------------------------------------------------------------------------------- /src/constants/svg/check.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2015", 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 | "baseUrl": "./src", 17 | "paths": { 18 | "@/*": ["./*"] 19 | } 20 | }, 21 | "exclude": ["node_modules"], 22 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"] 23 | } 24 | -------------------------------------------------------------------------------- /src/components/button/index.tsx: -------------------------------------------------------------------------------- 1 | import { tw } from 'twind'; 2 | 3 | interface IButton { 4 | primary?: boolean; 5 | children: React.ReactNode; 6 | modifier?: string; 7 | } 8 | 9 | const Button = ({ primary, modifier, children, ...rest }: IButton) => { 10 | const baseStyle = `font-sans font-medium py-2 px-4 border rounded`; 11 | const styles = primary 12 | ? `bg-indigo-600 text-white border-indigo-500 hover:bg-indigo-700` 13 | : `bg-white text-gray-600 border-gray-300 hover:bg-gray-100`; 14 | 15 | return ( 16 | 19 | ); 20 | }; 21 | 22 | export default Button; 23 | -------------------------------------------------------------------------------- /src/constants/svg/nike.svg: -------------------------------------------------------------------------------- 1 | Nike 2 | -------------------------------------------------------------------------------- /src/pages/index.tsx: -------------------------------------------------------------------------------- 1 | import { NextSeo } from 'next-seo'; 2 | import Page from '@/components/page'; 3 | import Header from '@/components/header'; 4 | import VideoSection from '@/components/video-section'; 5 | import ListSection from '@/components/list-section'; 6 | import FeatureSection from '@/components/feature-section'; 7 | import CasesSection from '@/components/cases-section'; 8 | import SocialProof from '@/components/social-proof'; 9 | import PricingTable from '@/components/pricing-table'; 10 | import Footer from '@/components/footer'; 11 | 12 | export default function Home() { 13 | return ( 14 | 15 | 19 |
20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 |