├── .env.example ├── src ├── app │ ├── favicon.ico │ ├── layout.tsx │ ├── globals.css │ └── page.tsx └── lib │ └── utils.ts ├── .husky ├── commit-msg └── pre-commit ├── .vscode ├── settings.json └── extensions.json ├── postcss.config.js ├── lint-staged.config.js ├── next-sitemap.config.js ├── commitlint.config.js ├── env.mjs ├── .github ├── workflows │ ├── commitlint.yml │ └── typos.yml ├── dependabot.yml ├── ISSUE_TEMPLATE │ ├── feature_request.md │ └── bug_report.md ├── PULL_REQUEST_TEMPLATE.md ├── CONTRIBUTING.md └── CODE_OF_CONDUCT.md ├── .eslintignore ├── .editorconfig ├── .gitattributes ├── public ├── vercel.svg └── next.svg ├── next.config.js ├── tsconfig.json ├── LICENSE ├── tailwind.config.js ├── package.json ├── .gitignore └── README.md /.env.example: -------------------------------------------------------------------------------- 1 | NEXT_PUBLIC_SITE_URL=http://localhost:3000/ -------------------------------------------------------------------------------- /src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/natainditama/nevel/HEAD/src/app/favicon.ico -------------------------------------------------------------------------------- /.husky/commit-msg: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | npx --no -- commitlint --edit ${1} 5 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | npx lint-staged --concurrent false 5 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnPaste": true, 3 | "editor.defaultFormatter": "esbenp.prettier-vscode" 4 | } -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /lint-staged.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "*.{js,jsx,ts,tsx}": ["eslint"], 3 | "*.{json,yaml}": ["prettier --write"], 4 | }; 5 | -------------------------------------------------------------------------------- /next-sitemap.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next-sitemap').IConfig} */ 2 | module.exports = { 3 | siteUrl: process.env.NEXT_PUBLIC_SITE_URL, 4 | generateRobotsTxt: true, 5 | } -------------------------------------------------------------------------------- /commitlint.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: ["@commitlint/config-conventional"], 3 | rules: { 4 | "subject-case": [1, "always", "sentence-case"], 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /src/lib/utils.ts: -------------------------------------------------------------------------------- 1 | import { ClassValue, clsx } from "clsx"; 2 | import { twMerge } from "tailwind-merge"; 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)); 6 | } 7 | -------------------------------------------------------------------------------- /env.mjs: -------------------------------------------------------------------------------- 1 | import { createEnv } from "@t3-oss/env-nextjs"; 2 | import { z } from "zod"; 3 | 4 | export const env = createEnv({ 5 | client: { 6 | NEXT_PUBLIC_SITE_URL: z.string().min(1), 7 | }, 8 | }); 9 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "bradlc.vscode-tailwindcss", 4 | "esbenp.prettier-vscode", 5 | "dbaeumer.vscode-eslint", 6 | "stylelint.vscode-stylelint", 7 | "christian-kohler.path-intellisense" 8 | ] 9 | } -------------------------------------------------------------------------------- /.github/workflows/commitlint.yml: -------------------------------------------------------------------------------- 1 | name: Lint Commit Messages 2 | on: [pull_request] 3 | 4 | jobs: 5 | commitlint: 6 | runs-on: ubuntu-latest 7 | steps: 8 | - uses: actions/checkout@v4 9 | with: 10 | fetch-depth: 0 11 | - uses: wagoid/commitlint-github-action@v5 -------------------------------------------------------------------------------- /.github/workflows/typos.yml: -------------------------------------------------------------------------------- 1 | name: Spell Check 2 | on: 3 | pull_request: 4 | push: 5 | branches: 6 | - "main" 7 | jobs: 8 | typos: 9 | name: Spell Check with Typos 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Checkout Actions Repository 13 | uses: actions/checkout@v4 14 | - name: Check spelling 15 | uses: crate-ci/typos@master 16 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # For more information about the properties used in 2 | # this file, please see the EditorConfig documentation: 3 | # https://editorconfig.org/ 4 | 5 | root = true 6 | 7 | [*] 8 | charset = utf-8 9 | end_of_line = lf 10 | indent_size = 2 11 | indent_style = space 12 | insert_final_newline = true 13 | trim_trailing_whitespace = true 14 | 15 | [*.md] 16 | trim_trailing_whitespace = false 17 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: npm 4 | directory: "/" 5 | schedule: 6 | interval: monthly 7 | versioning-strategy: increase 8 | - package-ecosystem: npm 9 | directory: "/src/" 10 | schedule: 11 | interval: monthly 12 | versioning-strategy: increase 13 | - package-ecosystem: github-actions 14 | directory: "/" 15 | schedule: 16 | interval: monthly 17 | -------------------------------------------------------------------------------- /src/app/layout.tsx: -------------------------------------------------------------------------------- 1 | import "./globals.css"; 2 | 3 | import { Inter } from "next/font/google"; 4 | 5 | const inter = Inter({ subsets: ["latin"] }); 6 | 7 | export const metadata = { 8 | title: "Create Next App", 9 | description: "Generated by create next app", 10 | }; 11 | 12 | export default function RootLayout({ 13 | children, 14 | }: { 15 | children: React.ReactNode; 16 | }) { 17 | return ( 18 | 19 | {children} 20 | 21 | ); 22 | } 23 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Set default behavior for text files 2 | * text=auto 3 | 4 | # Ignore line endings for specific file types 5 | .* text eol=lf 6 | *.css text eol=lf 7 | *.html text eol=lf 8 | *.js text eol=lf 9 | *.json text eol=lf 10 | *.md text eol=lf 11 | *.sh text eol=lf 12 | *.txt text eol=lf 13 | *.xml text eol=lf 14 | 15 | # Ignore file mode changes 16 | * -text 17 | 18 | # Ignore binary files 19 | *.png binary 20 | *.jpg binary 21 | *.gif binary 22 | 23 | # Specify Git merge strategy for specific files 24 | *.csv merge=union 25 | *.json merge=union 26 | -------------------------------------------------------------------------------- /public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/no-var-requires */ 2 | const withBundleAnalyzer = require("@next/bundle-analyzer"); 3 | const withTM = require("next-transpile-modules"); 4 | 5 | /** @type {import('next').NextConfig} */ 6 | const nextConfig = { 7 | reactStrictMode: false, 8 | swcMinify: true, 9 | images: { 10 | formats: ["image/avif", "image/webp"], 11 | }, 12 | experimental: {}, 13 | }; 14 | 15 | const nextPlugins = [ 16 | withBundleAnalyzer({ enabled: process.env.ANALYZE === "true" }), 17 | withTM([]), 18 | ]; 19 | 20 | module.exports = (_phase, { defaultConfig: _ }) => { 21 | return nextPlugins.reduce((acc, plugin) => plugin(acc), { ...nextConfig }); 22 | }; 23 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /src/app/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | :root { 6 | --foreground-rgb: 0, 0, 0; 7 | --background-start-rgb: 214, 219, 220; 8 | --background-end-rgb: 255, 255, 255; 9 | --color-primary: 186, 230, 253; 10 | } 11 | 12 | @media (prefers-color-scheme: dark) { 13 | :root { 14 | --foreground-rgb: 255, 255, 255; 15 | --background-start-rgb: 0, 0, 0; 16 | --background-end-rgb: 0, 0, 0; 17 | --color-primary: 1, 65, 255; 18 | } 19 | } 20 | 21 | body { 22 | color: rgb(var(--foreground-rgb)); 23 | background: linear-gradient( 24 | to bottom, 25 | transparent, 26 | rgb(var(--background-end-rgb)) 27 | ) 28 | rgb(var(--background-start-rgb)); 29 | } 30 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## 🔗 Related Issue(s) 2 | If this pull request is related to any existing issues, please reference them here using the syntax `Fixes #issue_number`. 3 | 4 | ## 🔄 Type of Changes 5 | Please indicate the type of changes made in this pull request by putting an 'x' in the relevant checkboxes: 6 | 7 | - [ ] Bug fix 8 | - [ ] New feature 9 | - [ ] Documentation update 10 | - [ ] Code refactoring 11 | - [ ] Performance improvement 12 | 13 | ## ✅ Checklist 14 | Please review and check the following items before submitting the pull request: 15 | 16 | - [ ] Code follows project's style and conventions. 17 | - [ ] Existing tests pass successfully. 18 | - [ ] New tests added (if applicable). 19 | - [ ] Documentation updated (if necessary). 20 | - [ ] Pull request title is clear and descriptive. 21 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "noEmit": true, 9 | "esModuleInterop": true, 10 | "module": "esnext", 11 | "moduleResolution": "bundler", 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "jsx": "preserve", 15 | "incremental": true, 16 | /* Linting */ 17 | "noImplicitAny": true, 18 | "noImplicitReturns": true, 19 | "noImplicitThis": true, 20 | "noUnusedLocals": true, 21 | "noUnusedParameters": true, 22 | "allowUnreachableCode": false, 23 | "noFallthroughCasesInSwitch": true, 24 | "plugins": [ 25 | { 26 | "name": "next" 27 | } 28 | ], 29 | "paths": { 30 | "@/*": ["./*"] 31 | } 32 | }, 33 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], 34 | "exclude": ["node_modules"] 35 | } 36 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Nata Inditama 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/no-var-requires */ 2 | const defaultTheme = require("tailwindcss/defaultTheme"); 3 | const colors = require("tailwindcss/colors"); 4 | 5 | /** @type {import('tailwindcss').Config} */ 6 | module.exports = { 7 | content: [ 8 | './src/pages/**/*.{js,ts,jsx,tsx,mdx}', 9 | './src/components/**/*.{js,ts,jsx,tsx,mdx}', 10 | './src/app/**/*.{js,ts,jsx,tsx,mdx}', 11 | ], 12 | theme: { 13 | fontFamily: { 14 | sans: ["var(--font-body)", ...defaultTheme.fontFamily.sans], 15 | }, 16 | colors: { 17 | primary: colors.blue, 18 | dark: colors.neutral[900], 19 | light: colors.neutral[50], 20 | ...colors, 21 | }, 22 | container: { 23 | center: true, 24 | padding: { 25 | DEFAULT: "1rem", 26 | sm: "2rem", 27 | lg: "4rem", 28 | xl: "5rem", 29 | "2xl": "6rem", 30 | }, 31 | }, 32 | extend: { 33 | backgroundImage: { 34 | 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))', 35 | 'gradient-conic': 36 | 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))', 37 | }, 38 | }, 39 | }, 40 | plugins: [], 41 | }; 42 | -------------------------------------------------------------------------------- /public/next.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contribution Guidelines 2 | 3 | Thank you for your interest in contributing to the projects! We appreciate your support and collaboration. To ensure a smooth and effective contribution process, please follow these guidelines: 4 | 5 | ## 📚 Questions and Discussions 6 | 7 | If you have any questions or want to engage in project-related discussions, please use the designated channels, such as forums or community platforms. 8 | 9 | ## 🐛 Bug Reports 10 | 11 | If you come across any bugs or issues, we encourage you to submit a detailed bug report using the issue tracker. Include relevant information like version details, steps to reproduce, and error messages or logs, if applicable. 12 | 13 | ## 💡 Feature Requests 14 | 15 | We welcome and value your ideas for new features. To propose a feature, create an issue with clear specifications and use cases. It's helpful to discuss the potential impact and benefits of the feature as well. 16 | 17 | ## 💻 Code Contributions 18 | 19 | Contributing code is a great way to improve the project. Follow these steps to contribute: 20 | 21 | 1. Fork the repository to your own GitHub account. 22 | 2. Create a new branch with a descriptive name for your changes. 23 | 3. Implement your changes, following the project's coding conventions and best practices. 24 | 4. Thoroughly test your changes to ensure they work as intended. 25 | 5. Commit your changes and push them to your branch in the forked repository. 26 | 6. Open a pull request from your branch to the original repository's main branch. 27 | 7. Provide a clear and concise description of your changes in the pull request, including any relevant context or motivation. 28 | 29 | ## 🎨 Style and Best Practices 30 | 31 | Maintain consistency by adhering to the project's coding style and conventions. If there are any provided style guides or documentation, make sure to consult them for specific guidelines. 32 | 33 | ## 📝 Documentation 34 | 35 | Improvements to the project's documentation are highly appreciated. Feel free to update the README file, add usage examples, or enhance any other relevant documentation. 36 | 37 | ## ⚠️ Licensing 38 | 39 | By contributing to the project, you agree to license your contributions under the project's specified license. 40 | 41 | ## 🙏 Acknowledgements 42 | 43 | We would like to express our gratitude to all contributors for their valuable contributions to this project. Your efforts are greatly appreciated! 44 | 45 | ## 🤝 Contact 46 | 47 | If you have any inquiries, suggestions, or additional contributions, you can reach out to us via the following channels: 48 | 49 | - [Email](mailto:natainditama.dev@gmail.com) 50 | - [LinkedIn](https://www.linkedin.com/in/natainditama) 51 | - [GitHub](https://github.com/natainditama) 52 | 53 | Thank you for your support, interest, feedback, and contributions! Together, we can make this project even better. Happy coding! 😊 54 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nevel", 3 | "version": "0.1.0", 4 | "private": true, 5 | "description": "Minimalist boilerplate for Next with Tailwind CSS", 6 | "homepage": "https://nevel.pages.dev/", 7 | "bugs": { 8 | "url": "https://github.com/natainditama/nevel/issues", 9 | "email": "natainditama.dev@gmail.com" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "https://github.com/natainditama/nevel" 14 | }, 15 | "license": "MIT", 16 | "author": { 17 | "name": "natainditama", 18 | "email": "natainditama.dev@gmail.com", 19 | "url": "https://github.com/natainditama/" 20 | }, 21 | "scripts": { 22 | "analyze": "cross-env ANALYZE=true next build", 23 | "build": "next build", 24 | "postbuild": "next-sitemap", 25 | "dev": "next dev", 26 | "format": "prettier -w \"src/*/*.{tsx,ts,js,jsx,css}\"", 27 | "lint": "next lint", 28 | "prepare": "husky install", 29 | "start": "next start", 30 | "tsc": "tsc --pretty --noEmit" 31 | }, 32 | "dependencies": { 33 | "@t3-oss/env-nextjs": "^0.7.1", 34 | "clsx": "^2.0.0", 35 | "next": "^14.0.1", 36 | "react": "^18.2.0", 37 | "react-dom": "^18.2.0", 38 | "tailwind-merge": "^2.0.0", 39 | "zod": "^3.22.4" 40 | }, 41 | "devDependencies": { 42 | "@commitlint/cli": "^18.2.0", 43 | "@commitlint/config-conventional": "^18.1.0", 44 | "@next/bundle-analyzer": "^14.0.1", 45 | "@types/node": "^20.8.10", 46 | "@types/react": "18.2.14", 47 | "@types/react-dom": "18.2.6", 48 | "@typescript-eslint/eslint-plugin": "^6.9.1", 49 | "@typescript-eslint/parser": "^6.9.1", 50 | "autoprefixer": "10.4.14", 51 | "cross-env": "^7.0.3", 52 | "eslint": "^8.52.0", 53 | "eslint-config-next": "^14.0.1", 54 | "eslint-config-prettier": "^9.0.0", 55 | "eslint-plugin-import": "^2.29.0", 56 | "eslint-plugin-jsx-a11y": "^6.7.1", 57 | "eslint-plugin-prettier": "^5.0.1", 58 | "eslint-plugin-react": "^7.33.2", 59 | "eslint-plugin-react-hooks": "^4.6.0", 60 | "eslint-plugin-simple-import-sort": "^10.0.0", 61 | "eslint-plugin-tailwindcss": "^3.13.0", 62 | "husky": "^8.0.3", 63 | "lint-staged": "^15.0.2", 64 | "next-sitemap": "^4.1.8", 65 | "next-transpile-modules": "^9.0.0", 66 | "postcss": "^8.4.31", 67 | "prettier": "^3.0.3", 68 | "prettier-plugin-tailwindcss": "^0.3.0", 69 | "tailwindcss": "^3.3.5", 70 | "typescript": "5.1.6" 71 | }, 72 | "engines": { 73 | "node": ">18", 74 | "yarn": "1.x" 75 | }, 76 | "prettier": { 77 | "semi": true, 78 | "singleQuote": false, 79 | "arrowParens": "always", 80 | "tabWidth": 2, 81 | "printWidth": 80, 82 | "trailingComma": "all", 83 | "endOfLine": "auto" 84 | }, 85 | "eslintConfig": { 86 | "env": { 87 | "es6": true, 88 | "browser": true, 89 | "node": true 90 | }, 91 | "extends": [ 92 | "eslint:recommended", 93 | "plugin:import/recommended", 94 | "plugin:import/typescript", 95 | "plugin:react/recommended", 96 | "plugin:@typescript-eslint/recommended", 97 | "plugin:@typescript-eslint/eslint-recommended", 98 | "prettier", 99 | "plugin:prettier/recommended", 100 | "plugin:@next/next/recommended", 101 | "next/core-web-vitals" 102 | ], 103 | "parser": "@typescript-eslint/parser", 104 | "parserOptions": { 105 | "ecmaVersion": "latest", 106 | "sourceType": "module" 107 | }, 108 | "plugins": [ 109 | "react", 110 | "react-hooks", 111 | "tailwindcss", 112 | "simple-import-sort", 113 | "@typescript-eslint" 114 | ], 115 | "settings": { 116 | "react": { 117 | "version": "detect" 118 | } 119 | }, 120 | "rules": { 121 | "react/prop-types": "off", 122 | "react/react-in-jsx-scope": "off", 123 | "@typescript-eslint/no-unused-vars": "warn", 124 | "@typescript-eslint/explicit-function-return-type": "off", 125 | "@typescript-eslint/ban-ts-comment": "off", 126 | "@typescript-eslint/no-explicit-any": "off", 127 | "import/no-unresolved": "off", 128 | "simple-import-sort/imports": "warn", 129 | "simple-import-sort/exports": "warn", 130 | "no-console": [ 131 | "warn", 132 | { 133 | "allow": [ 134 | "warn", 135 | "error" 136 | ] 137 | } 138 | ], 139 | "prettier/prettier": [ 140 | "off", 141 | { 142 | "endOfLine": "auto" 143 | } 144 | ] 145 | } 146 | } 147 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by https://www.toptal.com/developers/gitignore/api/yarn,nextjs,node,visualstudiocode,git 2 | # Edit at https://www.toptal.com/developers/gitignore?templates=yarn,nextjs,node,visualstudiocode,git 3 | 4 | ### Git ### 5 | # Created by git for backups. To disable backups in Git: 6 | # $ git config --global mergetool.keepBackup false 7 | *.orig 8 | 9 | # Created by git when using merge tools for conflicts 10 | *.BACKUP.* 11 | *.BASE.* 12 | *.LOCAL.* 13 | *.REMOTE.* 14 | *_BACKUP_*.txt 15 | *_BASE_*.txt 16 | *_LOCAL_*.txt 17 | *_REMOTE_*.txt 18 | 19 | ### NextJS ### 20 | # dependencies 21 | /node_modules 22 | /.pnp 23 | .pnp.js 24 | 25 | # testing 26 | /coverage 27 | 28 | # next.js 29 | /.next/ 30 | /out/ 31 | 32 | # production 33 | /build 34 | 35 | # misc 36 | .DS_Store 37 | *.pem 38 | 39 | # debug 40 | npm-debug.log* 41 | yarn-debug.log* 42 | yarn-error.log* 43 | .pnpm-debug.log* 44 | 45 | # local env files 46 | .env*.local 47 | 48 | # vercel 49 | .vercel 50 | 51 | # typescript 52 | *.tsbuildinfo 53 | next-env.d.ts 54 | 55 | ### Node ### 56 | # Logs 57 | logs 58 | *.log 59 | lerna-debug.log* 60 | 61 | # Diagnostic reports (https://nodejs.org/api/report.html) 62 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 63 | 64 | # Runtime data 65 | pids 66 | *.pid 67 | *.seed 68 | *.pid.lock 69 | 70 | # Directory for instrumented libs generated by jscoverage/JSCover 71 | lib-cov 72 | 73 | # Coverage directory used by tools like istanbul 74 | coverage 75 | *.lcov 76 | 77 | # nyc test coverage 78 | .nyc_output 79 | 80 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 81 | .grunt 82 | 83 | # Bower dependency directory (https://bower.io/) 84 | bower_components 85 | 86 | # node-waf configuration 87 | .lock-wscript 88 | 89 | # Compiled binary addons (https://nodejs.org/api/addons.html) 90 | build/Release 91 | 92 | # Dependency directories 93 | node_modules/ 94 | jspm_packages/ 95 | 96 | # Snowpack dependency directory (https://snowpack.dev/) 97 | web_modules/ 98 | 99 | # TypeScript cache 100 | 101 | # Optional npm cache directory 102 | .npm 103 | 104 | # Optional eslint cache 105 | .eslintcache 106 | 107 | # Optional stylelint cache 108 | .stylelintcache 109 | 110 | # Microbundle cache 111 | .rpt2_cache/ 112 | .rts2_cache_cjs/ 113 | .rts2_cache_es/ 114 | .rts2_cache_umd/ 115 | 116 | # Optional REPL history 117 | .node_repl_history 118 | 119 | # Output of 'npm pack' 120 | *.tgz 121 | 122 | # Yarn Integrity file 123 | .yarn-integrity 124 | 125 | # dotenv environment variable files 126 | .env 127 | .env.development.local 128 | .env.test.local 129 | .env.production.local 130 | .env.local 131 | 132 | # parcel-bundler cache (https://parceljs.org/) 133 | .cache 134 | .parcel-cache 135 | 136 | # Next.js build output 137 | .next 138 | out 139 | 140 | # Nuxt.js build / generate output 141 | .nuxt 142 | dist 143 | 144 | # Gatsby files 145 | .cache/ 146 | # Comment in the public line in if your project uses Gatsby and not Next.js 147 | # https://nextjs.org/blog/next-9-1#public-directory-support 148 | # public 149 | 150 | # vuepress build output 151 | .vuepress/dist 152 | 153 | # vuepress v2.x temp and cache directory 154 | .temp 155 | 156 | # Docusaurus cache and generated files 157 | .docusaurus 158 | 159 | # Serverless directories 160 | .serverless/ 161 | 162 | # FuseBox cache 163 | .fusebox/ 164 | 165 | # DynamoDB Local files 166 | .dynamodb/ 167 | 168 | # TernJS port file 169 | .tern-port 170 | 171 | # Stores VSCode versions used for testing VSCode extensions 172 | .vscode-test 173 | 174 | # yarn v2 175 | .yarn/cache 176 | .yarn/unplugged 177 | .yarn/build-state.yml 178 | .yarn/install-state.gz 179 | .pnp.* 180 | 181 | ### Node Patch ### 182 | # Serverless Webpack directories 183 | .webpack/ 184 | 185 | # Optional stylelint cache 186 | 187 | # SvelteKit build / generate output 188 | .svelte-kit 189 | 190 | ### VisualStudioCode ### 191 | .vscode/* 192 | !.vscode/settings.json 193 | !.vscode/tasks.json 194 | !.vscode/launch.json 195 | !.vscode/extensions.json 196 | !.vscode/*.code-snippets 197 | 198 | # Local History for Visual Studio Code 199 | .history/ 200 | 201 | # Built Visual Studio Code Extensions 202 | *.vsix 203 | 204 | ### VisualStudioCode Patch ### 205 | # Ignore all local history of files 206 | .history 207 | .ionide 208 | 209 | ### yarn ### 210 | # https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored 211 | 212 | .yarn/* 213 | !.yarn/releases 214 | !.yarn/patches 215 | !.yarn/plugins 216 | !.yarn/sdks 217 | !.yarn/versions 218 | 219 | # if you are NOT using Zero-installs, then: 220 | # comment the following lines 221 | !.yarn/cache 222 | 223 | # and uncomment the following lines 224 | # .pnp.* 225 | 226 | # End of https://www.toptal.com/developers/gitignore/api/yarn,nextjs,node,visualstudiocode,git -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 |

Nevel

4 |

5 | Minimalist boilerplate for Next.js with Tailwind CSS 6 |

7 | 8 | 9 |

10 | 11 | contributors 12 | 13 | 14 | last update 15 | 16 | 17 | forks 18 | 19 | 20 | stars 21 | 22 | 23 | open issues 24 | 25 | 26 | license 27 | 28 |

29 | 30 |

31 | View Demo 32 | · 33 | Documentation 34 | · 35 | Report Bug 36 | · 37 | Request Feature 38 |

39 |
40 | 41 |
42 | 43 |
44 | screenshot 45 |
46 | 47 |
48 | 49 | 50 | ## 📝 About the Project 51 | 52 | 53 | ### 🌟 Features 54 | 55 | This project includes the following features: 56 | 57 | - Linter with [ESLint](https://eslint.org) 58 | - Code Formatter with [Prettier](https://prettier.io/) 59 | - Integrate with [TailwindCSS](https://tailwindcss.com/) 60 | - [Next.js](https://nextjs.org) for Static Site Generator 61 | - Type checking [TypeScript](https://www.typescriptlang.org/) 62 | - Sitemap.xml and robots.txt with [next-sitemap](https://www.npmjs.com/package/next-sitemap) 63 | 64 | 65 | ### 🎨 Color Reference 66 | 67 | | Color | Hex | 68 | | ----------------- | ------------------------------------------------------------------ | 69 | | Primary Color | ![#000000](https://via.placeholder.com/10/000000?text=+) #000000 | 70 | | Secondary Color | ![#e4e4e7](https://via.placeholder.com/10/e4e4e7?text=+) #e4e4e7 | 71 | | Background Color | ![#ffffff](https://via.placeholder.com/10/ffffff?text=+) #ffffff | 72 | | Text Color | ![#000000](https://via.placeholder.com/10/000000?text=+) #000000 | 73 | 74 | 75 | ### 🔑 Environment Variables 76 | 77 | This project requires the following configuration: 78 | 79 | - `NEXT_PUBLIC_SITE_URL` : The public URL of the project's 80 | 81 | 82 | ## 🚀 Getting Started 83 | 84 | 85 | ### 🔧 Prerequisites 86 | 87 | Prerequisites for this project: 88 | 89 | - [Nodejs](https://nodejs.org) 90 | - [Yarn](https://yarnpkg.com/) 91 | 92 | 93 | ### 🏃 Run Locally 94 | 95 | Clone the project 96 | 97 | ```bash 98 | git clone https://github.com/natainditama/nevel.git 99 | ``` 100 | 101 | Go to the project directory 102 | 103 | ```bash 104 | cd nevel 105 | ``` 106 | 107 | Install dependencies 108 | 109 | ```bash 110 | yarn install 111 | ``` 112 | 113 | Start the local server 114 | 115 | ```bash 116 | yarn run dev 117 | ``` 118 | 119 | 120 | ## 👋 Contributing 121 | 122 | 123 | 124 |
125 | 126 | Contributions are always welcome! 127 | 128 | See [contributing.md](https://github.com/natainditama/nevel/blob/main/.github/CONTRIBUTING.md) for ways to get started. 129 | 130 | 131 | ### 📜 Code of Conduct 132 | 133 | Please read the [Code of Conduct](https://github.com/natainditama/nevel/blob/main/.github/CODE_OF_CONDUCT.md) 134 | 135 | 136 | ## ⚠️ License 137 | 138 | This project is licensed under the MIT License. See the [LICENSE](https://github.com/natainditama/nevel/blob/main/LICENSE) file for details 139 | 140 | 141 | ## 🤝 Contact 142 | 143 | Contact me for inquiries, suggestions, or contributions via the following channels: 144 | 145 | - [Email](mailto:natainditama.dev@gmail.com) 146 | - [LinkedIn](https://www.linkedin.com/in/natainditama) 147 | - [GitHub](https://github.com/natainditama) 148 | 149 | Thank you for your support, interest, feedback, and contributions! 150 | -------------------------------------------------------------------------------- /.github/CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | We as members, contributors, and leaders pledge to make participation in our 6 | community a harassment-free experience for everyone, regardless of age, body 7 | size, visible or invisible disability, ethnicity, sex characteristics, gender 8 | identity and expression, level of experience, education, socio-economic status, 9 | nationality, personal appearance, race, religion, or sexual identity 10 | and orientation. 11 | 12 | We pledge to act and interact in ways that contribute to an open, welcoming, 13 | diverse, inclusive, and healthy community. 14 | 15 | ## Our Standards 16 | 17 | Examples of behavior that contributes to a positive environment for our 18 | community include: 19 | 20 | * Demonstrating empathy and kindness toward other people 21 | * Being respectful of differing opinions, viewpoints, and experiences 22 | * Giving and gracefully accepting constructive feedback 23 | * Accepting responsibility and apologizing to those affected by our mistakes, 24 | and learning from the experience 25 | * Focusing on what is best not just for us as individuals, but for the 26 | overall community 27 | 28 | Examples of unacceptable behavior include: 29 | 30 | * The use of sexualized language or imagery, and sexual attention or 31 | advances of any kind 32 | * Trolling, insulting or derogatory comments, and personal or political attacks 33 | * Public or private harassment 34 | * Publishing others' private information, such as a physical or email 35 | address, without their explicit permission 36 | * Other conduct which could reasonably be considered inappropriate in a 37 | professional setting 38 | 39 | ## Enforcement Responsibilities 40 | 41 | Community leaders are responsible for clarifying and enforcing our standards of 42 | acceptable behavior and will take appropriate and fair corrective action in 43 | response to any behavior that they deem inappropriate, threatening, offensive, 44 | or harmful. 45 | 46 | Community leaders have the right and responsibility to remove, edit, or reject 47 | comments, commits, code, wiki edits, issues, and other contributions that are 48 | not aligned to this Code of Conduct, and will communicate reasons for moderation 49 | decisions when appropriate. 50 | 51 | ## Scope 52 | 53 | This Code of Conduct applies within all community spaces, and also applies when 54 | an individual is officially representing the community in public spaces. 55 | Examples of representing our community include using an official e-mail address, 56 | posting via an official social media account, or acting as an appointed 57 | representative at an online or offline event. 58 | 59 | ## Enforcement 60 | 61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 62 | reported to the community leaders responsible for enforcement at 63 | natainditama.dev@gmail.com. 64 | All complaints will be reviewed and investigated promptly and fairly. 65 | 66 | All community leaders are obligated to respect the privacy and security of the 67 | reporter of any incident. 68 | 69 | ## Enforcement Guidelines 70 | 71 | Community leaders will follow these Community Impact Guidelines in determining 72 | the consequences for any action they deem in violation of this Code of Conduct: 73 | 74 | ### 1. Correction 75 | 76 | **Community Impact**: Use of inappropriate language or other behavior deemed 77 | unprofessional or unwelcome in the community. 78 | 79 | **Consequence**: A private, written warning from community leaders, providing 80 | clarity around the nature of the violation and an explanation of why the 81 | behavior was inappropriate. A public apology may be requested. 82 | 83 | ### 2. Warning 84 | 85 | **Community Impact**: A violation through a single incident or series 86 | of actions. 87 | 88 | **Consequence**: A warning with consequences for continued behavior. No 89 | interaction with the people involved, including unsolicited interaction with 90 | those enforcing the Code of Conduct, for a specified period of time. This 91 | includes avoiding interactions in community spaces as well as external channels 92 | like social media. Violating these terms may lead to a temporary or 93 | permanent ban. 94 | 95 | ### 3. Temporary Ban 96 | 97 | **Community Impact**: A serious violation of community standards, including 98 | sustained inappropriate behavior. 99 | 100 | **Consequence**: A temporary ban from any sort of interaction or public 101 | communication with the community for a specified period of time. No public or 102 | private interaction with the people involved, including unsolicited interaction 103 | with those enforcing the Code of Conduct, is allowed during this period. 104 | Violating these terms may lead to a permanent ban. 105 | 106 | ### 4. Permanent Ban 107 | 108 | **Community Impact**: Demonstrating a pattern of violation of community 109 | standards, including sustained inappropriate behavior, harassment of an 110 | individual, or aggression toward or disparagement of classes of individuals. 111 | 112 | **Consequence**: A permanent ban from any sort of public interaction within 113 | the community. 114 | 115 | ## Attribution 116 | 117 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 118 | version 2.0, available at 119 | https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. 120 | 121 | Community Impact Guidelines were inspired by [Mozilla's code of conduct 122 | enforcement ladder](https://github.com/mozilla/diversity). 123 | 124 | [homepage]: https://www.contributor-covenant.org 125 | 126 | For answers to common questions about this code of conduct, see the FAQ at 127 | https://www.contributor-covenant.org/faq. Translations are available at 128 | https://www.contributor-covenant.org/translations. 129 | -------------------------------------------------------------------------------- /src/app/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import Image from "next/image"; 3 | import { useEffect, useRef } from "react"; 4 | 5 | export default function Home() { 6 | const mainRef = useRef(null); 7 | 8 | useEffect(() => { 9 | const updateMousePosition = (ev: MouseEvent) => { 10 | if (!mainRef.current) return; 11 | const { clientX, clientY } = ev; 12 | mainRef.current.style.setProperty("--x", `${clientX}px`); 13 | mainRef.current.style.setProperty("--y", `${clientY}px`); 14 | }; 15 | 16 | window.addEventListener("mousemove", updateMousePosition); 17 | 18 | return () => { 19 | window.removeEventListener("mousemove", updateMousePosition); 20 | }; 21 | }, []); 22 | 23 | return ( 24 |
28 |
29 |

30 | Get started by editing  31 | src/app/page.tsx 32 |

33 |
34 | 40 | By{" "} 41 | Vercel Logo 49 | 50 |
51 |
52 | 53 |
54 | Next.js Logo 62 |
63 | 64 |
65 | 71 |

72 | Docs{" "} 73 | 74 | -> 75 | 76 |

77 |

78 | Find in-depth information about Next.js features and API. 79 |

80 |
81 | 82 | 88 |

89 | Learn{" "} 90 | 91 | -> 92 | 93 |

94 |

95 | Learn about Next.js in an interactive course with quizzes! 96 |

97 |
98 | 99 | 105 |

106 | Templates{" "} 107 | 108 | -> 109 | 110 |

111 |

112 | Explore the Next.js 13 playground. 113 |

114 |
115 | 116 | 122 |

123 | Deploy{" "} 124 | 125 | -> 126 | 127 |

128 |

129 | Instantly deploy your Next.js site to a shareable URL with Vercel. 130 |

131 |
132 |
133 |
134 | ); 135 | } 136 | --------------------------------------------------------------------------------