├── .env.example ├── .prettierignore ├── src ├── components │ └── shared │ │ ├── link │ │ ├── index.ts │ │ └── link.tsx │ │ ├── footer │ │ ├── index.ts │ │ └── footer.tsx │ │ ├── header │ │ ├── index.ts │ │ ├── burger │ │ │ ├── index.ts │ │ │ └── burger.tsx │ │ └── header.tsx │ │ └── mobile-menu │ │ ├── index.ts │ │ └── mobile-menu.tsx ├── images │ ├── nextjs-logo.png │ ├── typescript-logo.png │ └── tailwindcss-logo.png ├── lib │ ├── .eslintrc.js │ └── get-metadata.ts ├── app │ ├── layout.tsx │ ├── page.tsx │ └── about │ │ └── page.tsx ├── svgs │ ├── github.inline.svg │ └── logo.svg └── styles │ └── globals.css ├── postcss.config.js ├── next-sitemap.config.js ├── .lintstagedrc ├── markdownlint-config.js ├── simple-git-hooks.js ├── .commitlintrc.js ├── svgo.config.js ├── .editorconfig ├── .prettierrc.js ├── .vscode └── settings.json ├── .gitignore ├── tsconfig.json ├── next.config.js ├── TODO ├── .eslintrc.js ├── tailwind.config.js ├── package.json ├── README.md └── DEPENDENCY_UPDATES.md /.env.example: -------------------------------------------------------------------------------- 1 | NEXT_PUBLIC_DEFAULT_SITE_URL=http://localhost:3000 -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | package.json 2 | package-lock.json 3 | .next 4 | -------------------------------------------------------------------------------- /src/components/shared/link/index.ts: -------------------------------------------------------------------------------- 1 | import Link from './link'; 2 | 3 | export default Link; 4 | -------------------------------------------------------------------------------- /src/components/shared/footer/index.ts: -------------------------------------------------------------------------------- 1 | import Footer from './footer'; 2 | 3 | export default Footer; 4 | -------------------------------------------------------------------------------- /src/components/shared/header/index.ts: -------------------------------------------------------------------------------- 1 | import Header from './header'; 2 | 3 | export default Header; 4 | -------------------------------------------------------------------------------- /src/components/shared/header/burger/index.ts: -------------------------------------------------------------------------------- 1 | import Burger from './burger'; 2 | 3 | export default Burger; 4 | -------------------------------------------------------------------------------- /src/components/shared/mobile-menu/index.ts: -------------------------------------------------------------------------------- 1 | import MobileMenu from './mobile-menu'; 2 | 3 | export default MobileMenu; 4 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: ['postcss-import', 'tailwindcss/nesting', 'tailwindcss', 'autoprefixer'], 3 | }; 4 | -------------------------------------------------------------------------------- /src/images/nextjs-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pixel-point/nextjs-typescript-tailwind-starter/HEAD/src/images/nextjs-logo.png -------------------------------------------------------------------------------- /src/images/typescript-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pixel-point/nextjs-typescript-tailwind-starter/HEAD/src/images/typescript-logo.png -------------------------------------------------------------------------------- /src/images/tailwindcss-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pixel-point/nextjs-typescript-tailwind-starter/HEAD/src/images/tailwindcss-logo.png -------------------------------------------------------------------------------- /next-sitemap.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | siteUrl: process.env.NEXT_PUBLIC_DEFAULT_SITE_URL || 'http://localhost:3000', 3 | generateRobotsTxt: true, 4 | }; 5 | -------------------------------------------------------------------------------- /.lintstagedrc: -------------------------------------------------------------------------------- 1 | { 2 | "*.{js,jsx,ts,tsx,html,css}": "prettier --write", 3 | "*.{md,mdx}": "prettier --write", 4 | "*.{js,jsx,ts,tsx}": "eslint --cache --fix" 5 | } 6 | -------------------------------------------------------------------------------- /markdownlint-config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 'first-line-h1': false, 3 | 'line-length': false, 4 | 'no-inline-html': { 5 | allowed_elements: ['summary', 'details', 'img'], 6 | }, 7 | }; 8 | -------------------------------------------------------------------------------- /simple-git-hooks.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 'pre-commit': 'npx --no-install lint-staged --concurrent false && npm run type-check', 3 | 'commit-msg': 'npx --no-install commitlint --edit ${1}', 4 | }; 5 | -------------------------------------------------------------------------------- /.commitlintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: ['@commitlint/config-conventional'], 3 | rules: { 4 | 'scope-enum': [2, 'always', ['apps', 'components', 'assets', 'styles', 'hooks', 'lib']], 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /svgo.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: [ 3 | { 4 | name: 'preset-default', 5 | params: { 6 | overrides: { 7 | removeViewBox: false, 8 | }, 9 | }, 10 | }, 11 | 'prefixIds', 12 | 'removeDimensions', 13 | ], 14 | }; 15 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # See http://EditorConfig.org for more information 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | # Every File 7 | [*] 8 | end_of_line = lf 9 | insert_final_newline = true 10 | trim_trailing_whitespace = true 11 | charset = utf-8 12 | indent_style = space 13 | indent_size = 2 14 | -------------------------------------------------------------------------------- /src/lib/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | rules: { 3 | 'no-restricted-exports': [ 4 | 'error', 5 | { 6 | restrictDefaultExports: { 7 | direct: true, 8 | named: true, 9 | defaultFrom: true, 10 | namedFrom: true, 11 | namespaceFrom: true, 12 | }, 13 | }, 14 | ], 15 | }, 16 | }; 17 | -------------------------------------------------------------------------------- /src/components/shared/footer/footer.tsx: -------------------------------------------------------------------------------- 1 | function Footer() { 2 | return ( 3 | 8 | ); 9 | } 10 | 11 | export default Footer; 12 | -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | printWidth: 100, 3 | trailingComma: 'all', 4 | singleQuote: true, 5 | importOrder: [ 6 | '^(next)|(next/(.*))$', 7 | '^(react)|(react/(.*))$', 8 | '', 9 | '^@/components/(.*)$', 10 | '^@/types/(.*)$', 11 | '^@/lib/(.*)$', 12 | '^@/styles/(.*)$', 13 | '^@/svgs/(.*)$', 14 | '^[./]', 15 | ], 16 | importOrderSeparation: true, 17 | importOrderSortSpecifiers: true, 18 | importOrderCaseInsensitive: false, 19 | plugins: [require('prettier-plugin-tailwindcss')], 20 | }; 21 | -------------------------------------------------------------------------------- /src/app/layout.tsx: -------------------------------------------------------------------------------- 1 | import Footer from '@/components/shared/footer'; 2 | import Header from '@/components/shared/header/header'; 3 | 4 | import '@/styles/globals.css'; 5 | 6 | export default function RootLayout({ children }: { children: React.ReactNode }) { 7 | return ( 8 | 9 | 10 |
11 |
{children}
12 |