diff --git a/.github/workflows/cd-prod-nextjs.yml b/.github/workflows/cd-prod-nextjs.yml index 5f9c819..145c23f 100644 --- a/.github/workflows/cd-prod-nextjs.yml +++ b/.github/workflows/cd-prod-nextjs.yml @@ -31,8 +31,5 @@ jobs: npm run build - name: Start Next.js - env: - TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} - TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }} run: | pm2 reload all --update-env diff --git a/.gitignore b/.gitignore index 41f3898..ac942ee 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,3 @@ -/node_modules - -/.next/ - -certificates \ No newline at end of file +.next +node_modules +certificates diff --git a/.prettierignore b/.prettierignore index 81ad161..7929804 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,17 +1,9 @@ -node_modules/ - -.next/ - -**/images/**/* - -**/*.{jpg,jpeg,png,gif,svg,webp,mp4,avi,mov,wmv,mkv,flv,webm,ogg} - -src/blog_posts/ - -public/ - +.next +certificates +node_modules +**/images/** +src/blog_posts +public .prettierignore - .gitignore - .env* diff --git a/package-lock.json b/package-lock.json index ee782d4..7e3754b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,18 @@ { "name": "bakir-dev", - "version": "1.2.0", + "version": "1.2.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bakir-dev", - "version": "1.2.0", + "version": "1.2.1", "dependencies": { "@heroicons/react": "^2.2.0", - "@next/third-parties": "~15.1.6", - "@tailwindcss/postcss": "^4.0.1", - "marked": "~15.0.6", - "next": "~15.1.6", + "@next/third-parties": "~15.1.7", + "@tailwindcss/postcss": "^4.0.6", + "marked": "~15.0.7", + "next": "~15.1.7", "react": "^19.0.0", "react-dom": "^19.0.0" }, @@ -20,11 +20,11 @@ "@eslint/eslintrc": "^3", "@tailwindcss/typography": "^0.5.16", "eslint": "^9", - "eslint-config-next": "~15.1.6", - "postcss": "^8.5.1", - "prettier": "^3.4.2", + "eslint-config-next": "~15.1.7", + "postcss": "^8.5.2", + "prettier": "^3.5.0", "prettier-plugin-tailwindcss": "^0.6.11", - "tailwindcss": "^4.0.1" + "tailwindcss": "^4.0.6" } }, "node_modules/@alloc/quick-lru": { @@ -614,15 +614,15 @@ } }, "node_modules/@next/env": { - "version": "15.1.6", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.1.6.tgz", - "integrity": "sha512-d9AFQVPEYNr+aqokIiPLNK/MTyt3DWa/dpKveiAaVccUadFbhFEvY6FXYX2LJO2Hv7PHnLBu2oWwB4uBuHjr/w==", + "version": "15.1.7", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.1.7.tgz", + "integrity": "sha512-d9jnRrkuOH7Mhi+LHav2XW91HOgTAWHxjMPkXMGBc9B2b7614P7kjt8tAplRvJpbSt4nbO1lugcT/kAaWzjlLQ==", "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { - "version": "15.1.6", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.6.tgz", - "integrity": "sha512-+slMxhTgILUntZDGNgsKEYHUvpn72WP1YTlkmEhS51vnVd7S9jEEy0n9YAMcI21vUG4akTw9voWH02lrClt/yw==", + "version": "15.1.7", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.7.tgz", + "integrity": "sha512-kRP7RjSxfTO13NE317ek3mSGzoZlI33nc/i5hs1KaWpK+egs85xg0DJ4p32QEiHnR0mVjuUfhRIun7awqfL7pQ==", "dev": true, "license": "MIT", "dependencies": { @@ -630,9 +630,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.1.6.tgz", - "integrity": "sha512-u7lg4Mpl9qWpKgy6NzEkz/w0/keEHtOybmIl0ykgItBxEM5mYotS5PmqTpo+Rhg8FiOiWgwr8USxmKQkqLBCrw==", + "version": "15.1.7", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.1.7.tgz", + "integrity": "sha512-hPFwzPJDpA8FGj7IKV3Yf1web3oz2YsR8du4amKw8d+jAOHfYHYFpMkoF6vgSY4W6vB29RtZEklK9ayinGiCmQ==", "cpu": [ "arm64" ], @@ -646,9 +646,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.1.6.tgz", - "integrity": "sha512-x1jGpbHbZoZ69nRuogGL2MYPLqohlhnT9OCU6E6QFewwup+z+M6r8oU47BTeJcWsF2sdBahp5cKiAcDbwwK/lg==", + "version": "15.1.7", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.1.7.tgz", + "integrity": "sha512-2qoas+fO3OQKkU0PBUfwTiw/EYpN+kdAx62cePRyY1LqKtP09Vp5UcUntfZYajop5fDFTjSxCHfZVRxzi+9FYQ==", "cpu": [ "x64" ], @@ -662,9 +662,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.1.6.tgz", - "integrity": "sha512-jar9sFw0XewXsBzPf9runGzoivajeWJUc/JkfbLTC4it9EhU8v7tCRLH7l5Y1ReTMN6zKJO0kKAGqDk8YSO2bg==", + "version": "15.1.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.1.7.tgz", + "integrity": "sha512-sKLLwDX709mPdzxMnRIXLIT9zaX2w0GUlkLYQnKGoXeWUhcvpCrK+yevcwCJPdTdxZEUA0mOXGLdPsGkudGdnA==", "cpu": [ "arm64" ], @@ -678,9 +678,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.1.6.tgz", - "integrity": "sha512-+n3u//bfsrIaZch4cgOJ3tXCTbSxz0s6brJtU3SzLOvkJlPQMJ+eHVRi6qM2kKKKLuMY+tcau8XD9CJ1OjeSQQ==", + "version": "15.1.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.1.7.tgz", + "integrity": "sha512-zblK1OQbQWdC8fxdX4fpsHDw+VSpBPGEUX4PhSE9hkaWPrWoeIJn+baX53vbsbDRaDKd7bBNcXRovY1hEhFd7w==", "cpu": [ "arm64" ], @@ -694,9 +694,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.1.6.tgz", - "integrity": "sha512-SpuDEXixM3PycniL4iVCLyUyvcl6Lt0mtv3am08sucskpG0tYkW1KlRhTgj4LI5ehyxriVVcfdoxuuP8csi3kQ==", + "version": "15.1.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.1.7.tgz", + "integrity": "sha512-GOzXutxuLvLHFDAPsMP2zDBMl1vfUHHpdNpFGhxu90jEzH6nNIgmtw/s1MDwpTOiM+MT5V8+I1hmVFeAUhkbgQ==", "cpu": [ "x64" ], @@ -710,9 +710,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "15.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.1.6.tgz", - "integrity": "sha512-L4druWmdFSZIIRhF+G60API5sFB7suTbDRhYWSjiw0RbE+15igQvE2g2+S973pMGvwN3guw7cJUjA/TmbPWTHQ==", + "version": "15.1.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.1.7.tgz", + "integrity": "sha512-WrZ7jBhR7ATW1z5iEQ0ZJfE2twCNSXbpCSaAunF3BKcVeHFADSI/AW1y5Xt3DzTqPF1FzQlwQTewqetAABhZRQ==", "cpu": [ "x64" ], @@ -726,9 +726,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.1.6.tgz", - "integrity": "sha512-s8w6EeqNmi6gdvM19tqKKWbCyOBvXFbndkGHl+c9YrzsLARRdCHsD9S1fMj8gsXm9v8vhC8s3N8rjuC/XrtkEg==", + "version": "15.1.7", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.1.7.tgz", + "integrity": "sha512-LDnj1f3OVbou1BqvvXVqouJZKcwq++mV2F+oFHptToZtScIEnhNRJAhJzqAtTE2dB31qDYL45xJwrc+bLeKM2Q==", "cpu": [ "arm64" ], @@ -742,9 +742,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.1.6.tgz", - "integrity": "sha512-6xomMuu54FAFxttYr5PJbEfu96godcxBTRk1OhAvJq0/EnmFU/Ybiax30Snis4vdWZ9LGpf7Roy5fSs7v/5ROQ==", + "version": "15.1.7", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.1.7.tgz", + "integrity": "sha512-dC01f1quuf97viOfW05/K8XYv2iuBgAxJZl7mbCKEjMgdQl5JjAKJ0D2qMKZCgPWDeFbFT0Q0nYWwytEW0DWTQ==", "cpu": [ "x64" ], @@ -758,9 +758,9 @@ } }, "node_modules/@next/third-parties": { - "version": "15.1.6", - "resolved": "https://registry.npmjs.org/@next/third-parties/-/third-parties-15.1.6.tgz", - "integrity": "sha512-F0uemUqFwD3lLx5SrWXYRe9dZvMVkO0rFuMnvLiPBcagxNc23Ufl5cNXEm4Yuo8O1Mu8dgh+VjExMz1Td4vBew==", + "version": "15.1.7", + "resolved": "https://registry.npmjs.org/@next/third-parties/-/third-parties-15.1.7.tgz", + "integrity": "sha512-wDAh/gW+WFT7jPYmGEGtNeLC74D8+hu3S6YJOpcfC/6uBMSC7yjh0QW1/RPYKziVnjqe6O4jR0AhbN0uuS8CZw==", "license": "MIT", "dependencies": { "third-party-capital": "1.0.20" @@ -848,42 +848,42 @@ } }, "node_modules/@tailwindcss/node": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.1.tgz", - "integrity": "sha512-lc+ly6PKHqgCVl7eO8D2JlV96Lks5bmL6pdtM6UasyUHLU2zmrOqU6jfgln120IVnCh3VC8GG/ca24xVTtSokw==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.6.tgz", + "integrity": "sha512-jb6E0WeSq7OQbVYcIJ6LxnZTeC4HjMvbzFBMCrQff4R50HBlo/obmYNk6V2GCUXDeqiXtvtrQgcIbT+/boB03Q==", "license": "MIT", "dependencies": { "enhanced-resolve": "^5.18.0", "jiti": "^2.4.2", - "tailwindcss": "4.0.1" + "tailwindcss": "4.0.6" } }, "node_modules/@tailwindcss/oxide": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.1.tgz", - "integrity": "sha512-3z1SpWoDeaA6K6jd92CRrGyDghOcRILEgyWVHRhaUm/tcpiazwJpU9BSG0xB7GGGnl9capojaC+zme/nKsZd/w==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.6.tgz", + "integrity": "sha512-lVyKV2y58UE9CeKVcYykULe9QaE1dtKdxDEdrTPIdbzRgBk6bdxHNAoDqvcqXbIGXubn3VOl1O/CFF77v/EqSA==", "license": "MIT", "engines": { "node": ">= 10" }, "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.0.1", - "@tailwindcss/oxide-darwin-arm64": "4.0.1", - "@tailwindcss/oxide-darwin-x64": "4.0.1", - "@tailwindcss/oxide-freebsd-x64": "4.0.1", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.1", - "@tailwindcss/oxide-linux-arm64-gnu": "4.0.1", - "@tailwindcss/oxide-linux-arm64-musl": "4.0.1", - "@tailwindcss/oxide-linux-x64-gnu": "4.0.1", - "@tailwindcss/oxide-linux-x64-musl": "4.0.1", - "@tailwindcss/oxide-win32-arm64-msvc": "4.0.1", - "@tailwindcss/oxide-win32-x64-msvc": "4.0.1" + "@tailwindcss/oxide-android-arm64": "4.0.6", + "@tailwindcss/oxide-darwin-arm64": "4.0.6", + "@tailwindcss/oxide-darwin-x64": "4.0.6", + "@tailwindcss/oxide-freebsd-x64": "4.0.6", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.6", + "@tailwindcss/oxide-linux-arm64-gnu": "4.0.6", + "@tailwindcss/oxide-linux-arm64-musl": "4.0.6", + "@tailwindcss/oxide-linux-x64-gnu": "4.0.6", + "@tailwindcss/oxide-linux-x64-musl": "4.0.6", + "@tailwindcss/oxide-win32-arm64-msvc": "4.0.6", + "@tailwindcss/oxide-win32-x64-msvc": "4.0.6" } }, "node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.1.tgz", - "integrity": "sha512-eP/rI9WaAElpeiiHDqGtDqga9iDsOClXxIqdHayHsw93F24F03b60CwgGhrGF9Io/EuWIpz3TMRhPVOLhoXivw==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.6.tgz", + "integrity": "sha512-xDbym6bDPW3D2XqQqX3PjqW3CKGe1KXH7Fdkc60sX5ZLVUbzPkFeunQaoP+BuYlLc2cC1FoClrIRYnRzof9Sow==", "cpu": [ "arm64" ], @@ -897,9 +897,9 @@ } }, "node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.1.tgz", - "integrity": "sha512-jZVUo0kNd1IjxdCYwg4dwegDNsq7PoUx4LM814RmgY3gfJ63Y6GlpJXHOpd5FLv1igpeZox5LzRk2oz8MQoJwQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.6.tgz", + "integrity": "sha512-1f71/ju/tvyGl5c2bDkchZHy8p8EK/tDHCxlpYJ1hGNvsYihZNurxVpZ0DefpN7cNc9RTT8DjrRoV8xXZKKRjg==", "cpu": [ "arm64" ], @@ -913,9 +913,9 @@ } }, "node_modules/@tailwindcss/oxide-darwin-x64": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.1.tgz", - "integrity": "sha512-E31wHiIf4LB0aKRohrS4U6XfFSACCL9ifUFfPQ16FhcBIL4wU5rcBidvWvT9TQFGPkpE69n5dyXUcqiMrnF/Ig==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.6.tgz", + "integrity": "sha512-s/hg/ZPgxFIrGMb0kqyeaqZt505P891buUkSezmrDY6lxv2ixIELAlOcUVTkVh245SeaeEiUVUPiUN37cwoL2g==", "cpu": [ "x64" ], @@ -929,9 +929,9 @@ } }, "node_modules/@tailwindcss/oxide-freebsd-x64": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.1.tgz", - "integrity": "sha512-8/3ZKLMYqgAsBzTeczOKWtT4geF02g9S7cntY5gvqQZ4E0ImX724cHcZJi9k6fkE6aLbvwxxHxaShFvRxblwKQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.6.tgz", + "integrity": "sha512-Z3Wo8FWZnmio8+xlcbb7JUo/hqRMSmhQw8IGIRoRJ7GmLR0C+25Wq+bEX/135xe/yEle2lFkhu9JBHd4wZYiig==", "cpu": [ "x64" ], @@ -945,9 +945,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.1.tgz", - "integrity": "sha512-EYjbh225klQfWzy6LeIAfdjHCK+p71yLV/GjdPNW47Bfkkq05fTzIhHhCgshUvNp78EIA33iQU+ktWpW06NgHw==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.6.tgz", + "integrity": "sha512-SNSwkkim1myAgmnbHs4EjXsPL7rQbVGtjcok5EaIzkHkCAVK9QBQsWeP2Jm2/JJhq4wdx8tZB9Y7psMzHYWCkA==", "cpu": [ "arm" ], @@ -961,9 +961,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.1.tgz", - "integrity": "sha512-PrX2SwIqWNP5cYeSyQfrhbk4ffOM338T6CrEwIAGvLPoUZiklt19yknlsBme6bReSw7TSAMy+8KFdLLi5fcWNQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.6.tgz", + "integrity": "sha512-tJ+mevtSDMQhKlwCCuhsFEFg058kBiSy4TkoeBG921EfrHKmexOaCyFKYhVXy4JtkaeeOcjJnCLasEeqml4i+Q==", "cpu": [ "arm64" ], @@ -977,9 +977,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-arm64-musl": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.1.tgz", - "integrity": "sha512-iuoFGhKDojtfloi5uj6MIk4kxEOGcsAk/kPbZItF9Dp7TnzVhxo2U/718tXhxGrg6jSL3ST3cQHIjA6yw3OeXw==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.6.tgz", + "integrity": "sha512-IoArz1vfuTR4rALXMUXI/GWWfx2EaO4gFNtBNkDNOYhlTD4NVEwE45nbBoojYiTulajI4c2XH8UmVEVJTOJKxA==", "cpu": [ "arm64" ], @@ -993,9 +993,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-x64-gnu": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.1.tgz", - "integrity": "sha512-pNUrGQYyE8RK+N9yvkPmHnlKDfFbni9A3lsi37u4RoA/6Yn+zWVoegvAQMZu3w+jqnpb2A/bYJ+LumcclUZ3yg==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.6.tgz", + "integrity": "sha512-QtsUfLkEAeWAC3Owx9Kg+7JdzE+k9drPhwTAXbXugYB9RZUnEWWx5x3q/au6TvUYcL+n0RBqDEO2gucZRvRFgQ==", "cpu": [ "x64" ], @@ -1009,9 +1009,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-x64-musl": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.1.tgz", - "integrity": "sha512-xSGWaDcT6SJ75su9zWXj8GYb2jM/przXwZGH96RTS7HGDIoI1tvgpls88YajG5Sx7hXaqAWCufjw5L/dlu+lzg==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.6.tgz", + "integrity": "sha512-QthvJqIji2KlGNwLcK/PPYo7w1Wsi/8NK0wAtRGbv4eOPdZHkQ9KUk+oCoP20oPO7i2a6X1aBAFQEL7i08nNMA==", "cpu": [ "x64" ], @@ -1025,9 +1025,9 @@ } }, "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.1.tgz", - "integrity": "sha512-BUNL2isUZ2yWnbplPddggJpZxsqGHPZ1RJAYpu63W4znUnKCzI4m/jiy0WpyYqqOKL9jDM5q0QdsQ9mc3aw5YQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.6.tgz", + "integrity": "sha512-+oka+dYX8jy9iP00DJ9Y100XsqvbqR5s0yfMZJuPR1H/lDVtDfsZiSix1UFBQ3X1HWxoEEl6iXNJHWd56TocVw==", "cpu": [ "arm64" ], @@ -1041,9 +1041,9 @@ } }, "node_modules/@tailwindcss/oxide-win32-x64-msvc": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.1.tgz", - "integrity": "sha512-ZtcVu+XXOddGsPlvO5nh2fnbKmwly2C07ZB1lcYCf/b8qIWF04QY9o6vy6/+6ioLRfbp3E7H/ipFio38DZX4oQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.6.tgz", + "integrity": "sha512-+o+juAkik4p8Ue/0LiflQXPmVatl6Av3LEZXpBTfg4qkMIbZdhCGWFzHdt2NjoMiLOJCFDddoV6GYaimvK1Olw==", "cpu": [ "x64" ], @@ -1057,17 +1057,17 @@ } }, "node_modules/@tailwindcss/postcss": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.0.1.tgz", - "integrity": "sha512-fZHL49vCDauQymdm2U1jehuUeX8msYVDKB/2v+jWhTQleH3QE8J1dJ2dnL5tqRvB0udjBP4kwUC1ZIVIdv66YA==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.0.6.tgz", + "integrity": "sha512-noTaGPHjGCXTCc487TWnfAEN0VMjqDAecssWDOsfxV2hFrcZR0AHthX7IdY/0xHTg/EtpmIPdssddlZ5/B7JnQ==", "license": "MIT", "dependencies": { "@alloc/quick-lru": "^5.2.0", - "@tailwindcss/node": "^4.0.1", - "@tailwindcss/oxide": "^4.0.1", + "@tailwindcss/node": "^4.0.6", + "@tailwindcss/oxide": "^4.0.6", "lightningcss": "^1.29.1", "postcss": "^8.4.41", - "tailwindcss": "4.0.1" + "tailwindcss": "4.0.6" } }, "node_modules/@tailwindcss/typography": { @@ -2278,13 +2278,13 @@ } }, "node_modules/eslint-config-next": { - "version": "15.1.6", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.6.tgz", - "integrity": "sha512-Wd1uy6y7nBbXUSg9QAuQ+xYEKli5CgUhLjz1QHW11jLDis5vK5XB3PemL6jEmy7HrdhaRFDz+GTZ/3FoH+EUjg==", + "version": "15.1.7", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.7.tgz", + "integrity": "sha512-zXoMnYUIy3XHaAoOhrcYkT9UQWvXqWju2K7NNsmb5wd/7XESDwof61eUdW4QhERr3eJ9Ko/vnXqIrj8kk/drYw==", "dev": true, "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "15.1.6", + "@next/eslint-plugin-next": "15.1.7", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", @@ -3969,9 +3969,9 @@ } }, "node_modules/marked": { - "version": "15.0.6", - "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.6.tgz", - "integrity": "sha512-Y07CUOE+HQXbVDCGl3LXggqJDbXDP2pArc2C1N1RRMN0ONiShoSsIInMd5Gsxupe7fKLpgimTV+HOJ9r7bA+pg==", + "version": "15.0.7", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.7.tgz", + "integrity": "sha512-dgLIeKGLx5FwziAnsk4ONoGwHwGPJzselimvlVskE9XLN4Orv9u2VA3GWw/lYUqjfA0rUT/6fqKwfZJapP9BEg==", "license": "MIT", "bin": { "marked": "bin/marked.js" @@ -4070,12 +4070,12 @@ "license": "MIT" }, "node_modules/next": { - "version": "15.1.6", - "resolved": "https://registry.npmjs.org/next/-/next-15.1.6.tgz", - "integrity": "sha512-Hch4wzbaX0vKQtalpXvUiw5sYivBy4cm5rzUKrBnUB/y436LGrvOUqYvlSeNVCWFO/770gDlltR9gqZH62ct4Q==", + "version": "15.1.7", + "resolved": "https://registry.npmjs.org/next/-/next-15.1.7.tgz", + "integrity": "sha512-GNeINPGS9c6OZKCvKypbL8GTsT5GhWPp4DM0fzkXJuXMilOO2EeFxuAY6JZbtk6XIl6Ws10ag3xRINDjSO5+wg==", "license": "MIT", "dependencies": { - "@next/env": "15.1.6", + "@next/env": "15.1.7", "@swc/counter": "0.1.3", "@swc/helpers": "0.5.15", "busboy": "1.6.0", @@ -4090,14 +4090,14 @@ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.1.6", - "@next/swc-darwin-x64": "15.1.6", - "@next/swc-linux-arm64-gnu": "15.1.6", - "@next/swc-linux-arm64-musl": "15.1.6", - "@next/swc-linux-x64-gnu": "15.1.6", - "@next/swc-linux-x64-musl": "15.1.6", - "@next/swc-win32-arm64-msvc": "15.1.6", - "@next/swc-win32-x64-msvc": "15.1.6", + "@next/swc-darwin-arm64": "15.1.7", + "@next/swc-darwin-x64": "15.1.7", + "@next/swc-linux-arm64-gnu": "15.1.7", + "@next/swc-linux-arm64-musl": "15.1.7", + "@next/swc-linux-x64-gnu": "15.1.7", + "@next/swc-linux-x64-musl": "15.1.7", + "@next/swc-win32-arm64-msvc": "15.1.7", + "@next/swc-win32-x64-msvc": "15.1.7", "sharp": "^0.33.5" }, "peerDependencies": { @@ -4411,9 +4411,9 @@ } }, "node_modules/postcss": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", - "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.2.tgz", + "integrity": "sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==", "funding": [ { "type": "opencollective", @@ -4463,9 +4463,9 @@ } }, "node_modules/prettier": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", - "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.0.tgz", + "integrity": "sha512-quyMrVt6svPS7CjQ9gKb3GLEX/rl3BCL2oa/QkNcXv4YNVBC9olt3s+H7ukto06q7B1Qz46PbrKLO34PR6vXcA==", "dev": true, "license": "MIT", "bin": { @@ -5240,9 +5240,9 @@ } }, "node_modules/tailwindcss": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.1.tgz", - "integrity": "sha512-UK5Biiit/e+r3i0O223bisoS5+y7ZT1PM8Ojn0MxRHzXN1VPZ2KY6Lo6fhu1dOfCfyUAlK7Lt6wSxowRabATBw==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.6.tgz", + "integrity": "sha512-mysewHYJKaXgNOW6pp5xon/emCsfAMnO8WMaGKZZ35fomnR/T5gYnRg2/yRTTrtXiEl1tiVkeRt0eMO6HxEZqw==", "license": "MIT" }, "node_modules/tapable": { diff --git a/package.json b/package.json index 5a10b9b..7a96133 100644 --- a/package.json +++ b/package.json @@ -1,20 +1,21 @@ { "name": "bakir-dev", - "version": "1.2.0", + "version": "1.2.1", "private": true, "scripts": { "dev": "rm -rf .next && next dev --turbopack --experimental-https", - "build": "rm -rf .next && next lint && next build", + "build": "next build", "start": "next start", "lint": "next lint", - "prettier": "prettier --write '**/*.*'" + "prettier": "prettier --write '**/*.*'", + "update": "npx npm-check-updates -u && npm i" }, "dependencies": { "@heroicons/react": "^2.2.0", - "@next/third-parties": "~15.1.6", - "@tailwindcss/postcss": "^4.0.1", - "marked": "~15.0.6", - "next": "~15.1.6", + "@next/third-parties": "~15.1.7", + "@tailwindcss/postcss": "^4.0.6", + "marked": "~15.0.7", + "next": "~15.1.7", "react": "^19.0.0", "react-dom": "^19.0.0" }, @@ -22,10 +23,10 @@ "@eslint/eslintrc": "^3", "@tailwindcss/typography": "^0.5.16", "eslint": "^9", - "eslint-config-next": "~15.1.6", - "postcss": "^8.5.1", - "prettier": "^3.4.2", + "eslint-config-next": "~15.1.7", + "postcss": "^8.5.2", + "prettier": "^3.5.0", "prettier-plugin-tailwindcss": "^0.6.11", - "tailwindcss": "^4.0.1" + "tailwindcss": "^4.0.6" } } diff --git a/src/app/links/page.jsx b/src/app/links/page.jsx index 94ef146..d6fde88 100644 --- a/src/app/links/page.jsx +++ b/src/app/links/page.jsx @@ -1,6 +1,5 @@ import Script from 'next/script'; import Button from '@/features/ui/components/Button'; -import Form from '@/features/contact_form/components/Form'; import GitHub from '@/features/icons/components/GitHub'; import LinkedIn from '@/features/icons/components/LinkedIn'; import Twitter from '@/features/icons/components/Twitter'; @@ -196,13 +195,12 @@ export default function Links() { id='contact' className='heading2' > - Contact Form + Contact
-

Send me an email directly using the form below! If you prefer to send it yourself, send it to:   

+

If you prefer emails, you can send me one to:   

me (at) bakir (dot) dev
-
); diff --git a/src/app/page.jsx b/src/app/page.jsx index 7cafef4..e8bcb2e 100755 --- a/src/app/page.jsx +++ b/src/app/page.jsx @@ -103,7 +103,7 @@ export default function Homepage() { Let's connect! If you have any questions or you just want to chat, feel free to reach out. I'm always curious about new opportunities and collaborations

diff --git a/src/blog_posts/ai-crawling-websites-data-used-train-models-meaning-for-the-web.mdx b/src/blog_posts/ai-crawling-websites-data-used-train-models-meaning-for-the-web.mdx index 4a689ef..511b048 100644 --- a/src/blog_posts/ai-crawling-websites-data-used-train-models-meaning-for-the-web.mdx +++ b/src/blog_posts/ai-crawling-websites-data-used-train-models-meaning-for-the-web.mdx @@ -1,7 +1,7 @@ --- -title: 'AI Bots Crawling Websites: How Data is Used to Train Models and What It Means for the Web' -published: '2024-10-01' -summary: 'Discover how AI bots crawl websites to collect data for training machine learning models, the benefits and risks involved, and how CloudFlare is helping to regulate AI bot activity. Learn how to protect your site from unwanted bot traffic' +title: "AI Bots Crawling Websites: How Data is Used to Train Models and What It Means for the Web" +published: "2024-10-01" +summary: "Discover how AI bots crawl websites to collect data for training machine learning models, the benefits and risks involved, and how CloudFlare is helping to regulate AI bot activity. Learn how to protect your site from unwanted bot traffic" --- ## Introduction diff --git a/src/blog_posts/bridging-gap-essential-tech-skills-cs-degree-missed.mdx b/src/blog_posts/bridging-gap-essential-tech-skills-cs-degree-missed.mdx index 22830ed..a855a7f 100644 --- a/src/blog_posts/bridging-gap-essential-tech-skills-cs-degree-missed.mdx +++ b/src/blog_posts/bridging-gap-essential-tech-skills-cs-degree-missed.mdx @@ -1,7 +1,7 @@ --- -title: 'Bridging the Gap: Essential Tech Skills Your CS Degree Missed' -published: '2024-07-19' -summary: 'Discover the crucial tools and techniques overlooked by most computer science programs. Learn how mastering these skills can supercharge your development career' +title: "Bridging the Gap: Essential Tech Skills Your CS Degree Missed" +published: "2024-07-19" +summary: "Discover the crucial tools and techniques overlooked by most computer science programs. Learn how mastering these skills can supercharge your development career" --- In today's rapidly evolving tech landscape, a formal Computer Science (CS) degree provides a solid foundation but often misses critical practical skills needed in the real world. Resources like [The Missing Semester](https://missing.csail.mit.edu/) from MIT aim to fill these gaps, offering invaluable knowledge for budding full stack developers. @@ -33,7 +33,7 @@ Data wrangling involves cleaning and transforming data into a more usable and re ssh myserver journalctl | grep sshd | grep "Disconnected from" - | sed -E 's/.*Disconnected from (invalid |authenticating )?user (.*) [^ ]+ port [0-9]+( \[preauth\])?$/\2/' + | sed -E 's/.*Disconnected from (invalid |authenticating )?user (.*) [^ ]+ port [0-9]+( \[preauth\])?$/\2/" | sort | uniq -c | sort -nk1,1 | tail -n10 | awk '{print $2}' | paste -sd, diff --git a/src/blog_posts/cs2-dedicated-server-in-2024.mdx b/src/blog_posts/cs2-dedicated-server-in-2024.mdx index f5bcd8b..6b2e1fe 100644 --- a/src/blog_posts/cs2-dedicated-server-in-2024.mdx +++ b/src/blog_posts/cs2-dedicated-server-in-2024.mdx @@ -1,7 +1,7 @@ --- -title: 'Counter-Strike 2 Dedicated Server in 2024' -published: '2024-11-07' -summary: 'Learn how to host your own Counter-Strike 2 dedicated server with Hetzner using a straightforward and simple approach to enjoy the game with your friends!' +title: "Counter-Strike 2 Dedicated Server in 2024" +published: "2024-11-07" +summary: "Learn how to host your own Counter-Strike 2 dedicated server with Hetzner using a straightforward and simple approach to enjoy the game with your friends!" --- If you are a fan of Counter-Strike and computers, a thought of playing on custom server with unique configurations probably crossed your mind! Well, this community guide is just for that. Here you will explore how to create and host a custom CS2 server from scratch leveraging Hetzner products. diff --git a/src/blog_posts/embracing-privacy-digital-age-my-thoughts-actions.mdx b/src/blog_posts/embracing-privacy-digital-age-my-thoughts-actions.mdx index 2b2daf8..2d85895 100644 --- a/src/blog_posts/embracing-privacy-digital-age-my-thoughts-actions.mdx +++ b/src/blog_posts/embracing-privacy-digital-age-my-thoughts-actions.mdx @@ -1,7 +1,7 @@ --- -title: 'Embracing Privacy in the Digital Age: My Thoughts & Actions' -published: '2024-12-01' -summary: 'Tap in to the importance of privacy in the digital age. Learn how I transitioned to Linux, self-hosted services, and embraced open-source tools to reclaim my digital freedom.' +title: "Embracing Privacy in the Digital Age: My Thoughts & Actions" +published: "2024-12-01" +summary: "Tap in to the importance of privacy in the digital age. Learn how I transitioned to Linux, self-hosted services, and embraced open-source tools to reclaim my digital freedom." --- In today’s interconnected world, privacy is a hot topic—and for a good reason. As a somebody deeply involved in technology, I continuously research how companies collect, process, and sometimes exploit user data. While some may dismiss privacy concerns as paranoia, I believe it’s a moral and practical responsibility to be aware of what’s happening under the hood of the software we use. Here’s how I’ve approached this challenge and why you might want to consider doing the same. diff --git a/src/blog_posts/exploring-bosnian-car-registration-plates-structure-variations-unique-cpp-project.mdx b/src/blog_posts/exploring-bosnian-car-registration-plates-structure-variations-unique-cpp-project.mdx index c1d5fc8..78bdcca 100644 --- a/src/blog_posts/exploring-bosnian-car-registration-plates-structure-variations-unique-cpp-project.mdx +++ b/src/blog_posts/exploring-bosnian-car-registration-plates-structure-variations-unique-cpp-project.mdx @@ -1,7 +1,7 @@ --- -title: 'Exploring Bosnian Car Registration Plates: Structure, Variations, and a Unique C++ Project' -published: '2024-07-12' -summary: 'Explore the structure and variations of Bosnian car registration plates, learn cool facts, and discover a unique C++ project that lists all possible plate variations. Check out our GitHub repository for more details.' +title: "Exploring Bosnian Car Registration Plates: Structure, Variations, and a Unique C++ Project" +published: "2024-07-12" +summary: "Explore the structure and variations of Bosnian car registration plates, learn cool facts, and discover a unique C++ project that lists all possible plate variations. Check out our GitHub repository for more details." --- ## Introduction @@ -28,4 +28,4 @@ The plates are wide rectangular shapes with a white background and black letters ## C++ Project -I have developed a C++ program that lists all variations of Bosnian car registration plates for personal, taxi, and diplomatic cars. This project aims to help users understand the different types and structures of these plates. It can serve as a database of some sort and provides general insight into a simple C++ program. The project is available [here](https://bakir.dev/blog/exploring-bosnian-car-registration-plates-structure-variations-unique-cpp-project). You can explore the project in-depth and learn more details about the topic. +I have developed a [C++ program](https://github.com/BakirGracic/bih-registration-plates) that lists all variations of Bosnian car registration plates for personal, taxi, and diplomatic cars. This project aims to help users understand the different types and structures of these plates. It can serve as a database of some sort and provides general insight into a simple C++ program. You can explore the project in-depth and learn more details about the topic. diff --git a/src/blog_posts/exposing-life-gurus-self-improvement-hype-hoax.mdx b/src/blog_posts/exposing-life-gurus-self-improvement-hype-hoax.mdx index a6305bb..47400e1 100644 --- a/src/blog_posts/exposing-life-gurus-self-improvement-hype-hoax.mdx +++ b/src/blog_posts/exposing-life-gurus-self-improvement-hype-hoax.mdx @@ -1,7 +1,7 @@ --- -title: 'Exposing Life Gurus: Why the Self-Improvement Hype is a Hoax' -published: '2024-06-14' -summary: 'Uncover the truth behind self-improvement gurus as we expose the scams and misleading promises in the pursuit of personal growth' +title: "Exposing Life Gurus: Why the Self-Improvement Hype is a Hoax" +published: "2024-06-14" +summary: "Uncover the truth behind self-improvement gurus as we expose the scams and misleading promises in the pursuit of personal growth" --- In today’s fast-paced, ever-evolving world, the quest for self-improvement has become more than a personal journey—it's a lucrative industry. Life gurus and self-improvement personas have capitalized on the universal desire for a better life, leveraging sophisticated marketing strategies and tapping into the pain points of today's generation to accumulate wealth and gain popularity. But is the self-improvement hype all it’s cracked up to be? diff --git a/src/blog_posts/hackathon-adventures-key-experiences-takeaways.mdx b/src/blog_posts/hackathon-adventures-key-experiences-takeaways.mdx index dee35b1..790b763 100644 --- a/src/blog_posts/hackathon-adventures-key-experiences-takeaways.mdx +++ b/src/blog_posts/hackathon-adventures-key-experiences-takeaways.mdx @@ -1,7 +1,7 @@ --- -title: 'Hackathon Adventures: Key Experiences and Takeaways from Competitions' -published: '2024-06-21' -summary: 'Dive into the world of hackathons and explore key experiences and takeaways from competitive coding events' +title: "Hackathon Adventures: Key Experiences and Takeaways from Competitions" +published: "2024-06-21" +summary: "Dive into the world of hackathons and explore key experiences and takeaways from competitive coding events" --- Hackathons are a thrilling and intense environment where creativity, innovation, and teamwork come together under tight deadlines. Recently, I had the privilege to participate in a hackathon held in the beautiful city of Mostar, organized by BEST Mostar. This 36-hour competition was an unforgettable experience, pushing the boundaries of what I thought was possible. In this blog, I'll dive into my personal experiences, the highs and lows of the event, and the key takeaways from this competitive coding adventure. diff --git a/src/blog_posts/how-gdgs-bring-tech-communities-together.mdx b/src/blog_posts/how-gdgs-bring-tech-communities-together.mdx index 483fa3b..807576e 100644 --- a/src/blog_posts/how-gdgs-bring-tech-communities-together.mdx +++ b/src/blog_posts/how-gdgs-bring-tech-communities-together.mdx @@ -1,7 +1,7 @@ --- -title: 'How are GDGs Bringing Tech Communities Together' -published: '2024-11-01' -summary: 'Discover the impact of Google Developer Groups and the thriving GDG community in Sarajevo. Learn about the benefits, networking, and career opportunities they offer to tech enthusiasts in local communities.' +title: "How are GDGs Bringing Tech Communities Together" +published: "2024-11-01" +summary: "Discover the impact of Google Developer Groups and the thriving GDG community in Sarajevo. Learn about the benefits, networking, and career opportunities they offer to tech enthusiasts in local communities." --- If you're a tech enthusiast, you’ve probably heard of Google Developer Groups, or GDGs. These are globally recognized communities organized by Google that gather tech lovers, developers, designers, and everyone with an interest in the ever-expanding world of technology. They serve as a bridge, connecting like-minded individuals, sharing knowledge, and fostering innovation in local communities worldwide. With chapters in almost every major city, GDGs are truly a global force in technology. diff --git a/src/blog_posts/how-time-flies-reality-lifes-countdown.mdx b/src/blog_posts/how-time-flies-reality-lifes-countdown.mdx index f7b3a07..9676cf1 100644 --- a/src/blog_posts/how-time-flies-reality-lifes-countdown.mdx +++ b/src/blog_posts/how-time-flies-reality-lifes-countdown.mdx @@ -1,7 +1,7 @@ --- -title: 'How Time Flies: Reality of Life's Countdown' -published: '2024-06-28' -summary: 'Discover more on the swift passage of time and uncover strategies to make the most of every moment. Dive into scientific insights and motivational tips that highlight the importance of valuing each second in your life's countdown.' +title: "How Time Flies: Reality of Life's Countdown" +published: "2024-06-28" +summary: "Discover more on the swift passage of time and uncover strategies to make the most of every moment. Dive into scientific insights and motivational tips that highlight the importance of valuing each second in your life's countdown." --- Time is an elusive force, slipping through our fingers faster than we often realize. In the blink of an eye, days turn into weeks, weeks into months, and before we know it, another year has passed. This phenomenon is more than just a poetic observation; it's a reality that scientists have studied extensively. As we navigate the fast-paced currents of life, understanding how time flies can inspire us to make the most of every precious second. diff --git a/src/blog_posts/insights-from-corporate-it-jobs-pros-cons-key-takeaways.mdx b/src/blog_posts/insights-from-corporate-it-jobs-pros-cons-key-takeaways.mdx index a7521a6..3f032b3 100644 --- a/src/blog_posts/insights-from-corporate-it-jobs-pros-cons-key-takeaways.mdx +++ b/src/blog_posts/insights-from-corporate-it-jobs-pros-cons-key-takeaways.mdx @@ -1,7 +1,7 @@ --- -title: 'Insights from Corporate IT Jobs: Pros, Cons, and Key Takeaways' -published: '2024-05-17' -summary: 'Gain valuable insights into corporate IT jobs, including pros, cons, and key takeaways for navigating the industry effectively' +title: "Insights from Corporate IT Jobs: Pros, Cons, and Key Takeaways" +published: "2024-05-17" +summary: "Gain valuable insights into corporate IT jobs, including pros, cons, and key takeaways for navigating the industry effectively" --- Working for a company is no easy feat and may not be suitable for everyone! However, it is a great starting point and a vast field to hone skills and gather more experience in your niche. diff --git a/src/blog_posts/luck-vs-fate-why-i-dont-believe-in-luck.mdx b/src/blog_posts/luck-vs-fate-why-i-dont-believe-in-luck.mdx new file mode 100644 index 0000000..1ebd4d3 --- /dev/null +++ b/src/blog_posts/luck-vs-fate-why-i-dont-believe-in-luck.mdx @@ -0,0 +1,29 @@ +--- +title: "Luck vs Fate: Why I don't Believe in Luck" +published: "2025-02-01" +summary: "Exploring the philosophical distinctions between luck and fate, and why embracing fate offers a more meaningful perspective on life's events." +--- + +I've often pondered the forces that shape our lives. Is it luck, fate, or a bit of both? Let's dive into this philosophical debate and see why I lean towards fate over luck. + +## The Misinterpretation of Luck + +Over time, the concept of "luck" has been misinterpreted. People often attribute success or failure to luck, overlooking the myriad factors at play. This oversimplification diminishes the complexity of life's events. + +## The Dice Roll: More Than Just Chance + +Consider rolling a dice. At first glance, it seems purely random. However, factors like angle, speed, material, height, and force all influence the outcome. It's not about being "lucky" but about the precise conditions leading to a specific result. + +## Randomness in Computers: Controlled Chaos + +In computing, what we call "randomness" is often the result of complex algorithms. These processes, while appearing random, are deterministic. They follow predefined rules, suggesting that what we perceive as luck is actually a series of determined events. + +## Luck vs. Fate in Religion + +In many religious contexts, especially in Islam, the concept of luck is often replaced with fate or destiny. Everything is believed to happen by the will of the higher power, with no room for random chance. This perspective emphasizes that events occur according to a divine plan rather than by luck. + +## Embracing Fate Over Luck + +By attributing occurrences to fate, we acknowledge the multitude of factors influencing outcomes. This perspective encourages us to understand and appreciate the complexities of life, rather than attributing them to mere chance. + +In conclusion, while the idea of luck is appealing, recognizing the role of fate provides a deeper understanding of the world. So, next time something happens, consider the intricate web of factors at play, rather than chalking it up to luck. It will change your life! diff --git a/src/blog_posts/monthly-blog-posts-new-dynamic-projects.mdx b/src/blog_posts/monthly-blog-posts-new-dynamic-projects.mdx index 8cf8c19..5535a02 100644 --- a/src/blog_posts/monthly-blog-posts-new-dynamic-projects.mdx +++ b/src/blog_posts/monthly-blog-posts-new-dynamic-projects.mdx @@ -1,7 +1,7 @@ --- -title: 'Monthly Blog Posts due to New Dynamic and Projects' -published: '2024-09-05' -summary: 'I’m shifting from weekly to monthly blog posts to focus on exciting self-improvement and entrepreneurial projects. Stay tuned for insightful updates on my journey, shared every month!' +title: "Monthly Blog Posts due to New Dynamic and Projects" +published: "2024-09-05" +summary: "I’m shifting from weekly to monthly blog posts to focus on exciting self-improvement and entrepreneurial projects. Stay tuned for insightful updates on my journey, shared every month!" --- Since starting my blog on [_May 3, 2024_](https://bakir.dev/blog/why-im-starting-this-blog-journey-into-purpose), I’ve committed to sharing insights and experiences weekly, every Friday. However, life has taken an exciting turn recently, and I’ve decided to shift my publishing schedule to monthly instead of weekly. Why the change? Let me explain... diff --git a/src/blog_posts/navigating-the-sea-of-llms.mdx b/src/blog_posts/navigating-the-sea-of-llms.mdx index 783f4f8..33fb21a 100644 --- a/src/blog_posts/navigating-the-sea-of-llms.mdx +++ b/src/blog_posts/navigating-the-sea-of-llms.mdx @@ -1,7 +1,7 @@ --- -title: 'Navigating the Sea of LLMs' -published: '2025-01-01' -summary: 'It is essential for tinkerers interested in technology to explore the topic of AI and large language models (LLMs). Let's delve into the current state of AI providers and share valuable insights.' +title: "Navigating the Sea of LLMs" +published: "2025-01-01" +summary: "It is essential for tinkerers interested in technology to explore the topic of AI and large language models (LLMs). Let's delve into the current state of AI providers and share valuable insights." --- I saw a post from someone asking their followers to help them choose between ChatGPT and Gemini. Of course, they were likely doing it for engagement and the algorithm. But seeing other comments, I felt confident enough to leave mine. It wouldn’t hurt, as I’m actively building my personal brand. diff --git a/src/blog_posts/pocketbase-future-lightweight-backends-modern-web-development.mdx b/src/blog_posts/pocketbase-future-lightweight-backends-modern-web-development.mdx index acef39b..5c7d817 100644 --- a/src/blog_posts/pocketbase-future-lightweight-backends-modern-web-development.mdx +++ b/src/blog_posts/pocketbase-future-lightweight-backends-modern-web-development.mdx @@ -1,7 +1,7 @@ --- -title: 'PocketBase: The Future of Lightweight Backends for Modern Web Development' -published: '2024-08-09' -summary: 'Discover PocketBase, the open-source, lightweight backend solution transforming web development. Learn about its features, ease of use, and potential to revolutionize the backend niche' +title: "PocketBase: The Future of Lightweight Backends for Modern Web Development" +published: "2024-08-09" +summary: "Discover PocketBase, the open-source, lightweight backend solution transforming web development. Learn about its features, ease of use, and potential to revolutionize the backend niche" --- In today's fast-paced web development environment, having a backend that's both reliable and flexible is essential. This is where **PocketBase** steps in. An open-source, all-in-one backend solution, PocketBase is quickly gaining popularity among developers. Whether you're working on a complex application or a simple prototype, PocketBase offers a streamlined and straightforward alternative to more intricate backend services like Firebase. diff --git a/src/blog_posts/stack-overflow-survey-2024-future-tech.mdx b/src/blog_posts/stack-overflow-survey-2024-future-tech.mdx index f49e639..9ae19cd 100644 --- a/src/blog_posts/stack-overflow-survey-2024-future-tech.mdx +++ b/src/blog_posts/stack-overflow-survey-2024-future-tech.mdx @@ -1,7 +1,7 @@ --- -title: 'Stack Overflow Developer Survey 2024: Future of Tech' -published: '2024-08-23' -summary: 'Discover the key insights from the 2024 Stack Overflow Developer Survey. Explore trends in AI adoption, programming languages, and technical debt management, and learn how hybrid work models and job satisfaction are shaping the future of the tech industry' +title: "Stack Overflow Developer Survey 2024: Future of Tech" +published: "2024-08-23" +summary: "Discover the key insights from the 2024 Stack Overflow Developer Survey. Explore trends in AI adoption, programming languages, and technical debt management, and learn how hybrid work models and job satisfaction are shaping the future of the tech industry" --- The tech world is evolving at an unprecedented pace, and the 2024 [Stack Overflow Developer Survey](https://survey.stackoverflow.co/2024/) offers a comprehensive snapshot of where the industry stands today. With over 65,000 developers participating from 185 countries, this year's survey uncovers key insights into the tools, trends, and challenges shaping the developer community. If not yet, I encourage you to leave your review, you won't regret it. diff --git a/src/blog_posts/staying-fit-developer-health-tips.mdx b/src/blog_posts/staying-fit-developer-health-tips.mdx index 92e1ab8..95c83a9 100644 --- a/src/blog_posts/staying-fit-developer-health-tips.mdx +++ b/src/blog_posts/staying-fit-developer-health-tips.mdx @@ -1,7 +1,7 @@ --- -title: 'Staying Fit as a Developer: Health Tips for Desk Workers' -published: '2024-07-26' -summary: 'Discover essential tips for staying healthy and fit as a desk-bound developer. Learn how to set up an ergonomic workspace, incorporate regular breaks and exercise, maintain a nutritious diet, and manage stress effectively to enhance your well-being and productivity' +title: "Staying Fit as a Developer: Health Tips for Desk Workers" +published: "2024-07-26" +summary: "Discover essential tips for staying healthy and fit as a desk-bound developer. Learn how to set up an ergonomic workspace, incorporate regular breaks and exercise, maintain a nutritious diet, and manage stress effectively to enhance your well-being and productivity" --- ## Intro diff --git a/src/blog_posts/tailwind-and-component-libraries-write-frontends-fast.mdx b/src/blog_posts/tailwind-and-component-libraries-write-frontends-fast.mdx index ec93831..5941aed 100644 --- a/src/blog_posts/tailwind-and-component-libraries-write-frontends-fast.mdx +++ b/src/blog_posts/tailwind-and-component-libraries-write-frontends-fast.mdx @@ -1,7 +1,7 @@ --- -title: 'TailwindCSS and Component Libraries: How to Write Frontends Faster!?' -published: '2024-11-20' -summary: 'Streamline your frontend development with TailwindCSS and DaisyUI! Learn how these tools and the new DaisyUI Theme Preview help you build fast, beautiful designs with ease. Explore customization and efficiency like never before' +title: "TailwindCSS and Component Libraries: How to Write Frontends Faster!?" +published: "2024-11-20" +summary: "Streamline your frontend development with TailwindCSS and DaisyUI! Learn how these tools and the new DaisyUI Theme Preview help you build fast, beautiful designs with ease. Explore customization and efficiency like never before" --- In the fast-paced world of web development, speed and customization are critical. That’s where **TailwindCSS** and component libraries like **DaisyUI** shine. If you’re tired of juggling CSS files or struggling with rigid design frameworks, you’re in for a treat. diff --git a/src/blog_posts/the-odin-project-journey-beyond-conventional-learning.mdx b/src/blog_posts/the-odin-project-journey-beyond-conventional-learning.mdx index dfb3726..97d4fef 100644 --- a/src/blog_posts/the-odin-project-journey-beyond-conventional-learning.mdx +++ b/src/blog_posts/the-odin-project-journey-beyond-conventional-learning.mdx @@ -1,7 +1,7 @@ --- -title: 'The Odin Project: A Journey Beyond Conventional Learning' -published: '2024-08-16' -summary: 'Discover how The Odin Project offers a comprehensive, free, and open-source path to mastering web development. Learn critical skills beyond coding, including problem-solving, version control, and real-world project experience' +title: "The Odin Project: A Journey Beyond Conventional Learning" +published: "2024-08-16" +summary: "Discover how The Odin Project offers a comprehensive, free, and open-source path to mastering web development. Learn critical skills beyond coding, including problem-solving, version control, and real-world project experience" --- When it comes to learning web development, few resources match the comprehensive, open-source nature of [The Odin Project](https://www.theodinproject.com/). Unlike traditional coding courses that often dive directly into coding languages without context, The Odin Project sets itself apart by teaching you the foundational skills and thought processes required for a successful career in software development. diff --git a/src/blog_posts/top-diy-it-projects-custom-dns-vpn-ai-storage-solutions.mdx b/src/blog_posts/top-diy-it-projects-custom-dns-vpn-ai-storage-solutions.mdx index 08374d5..b00ff9d 100644 --- a/src/blog_posts/top-diy-it-projects-custom-dns-vpn-ai-storage-solutions.mdx +++ b/src/blog_posts/top-diy-it-projects-custom-dns-vpn-ai-storage-solutions.mdx @@ -1,7 +1,7 @@ --- -title: 'Top DIY IT Projects: Custom DNS, VPN, AI and Storage Solutions' -published: '2024-05-31' -summary: 'Explore interesting IT projects like custom DNS, VPN, AI, and file storage solutions for enhanced efficiency and security' +title: "Top DIY IT Projects: Custom DNS, VPN, AI and Storage Solutions" +published: "2024-05-31" +summary: "Explore interesting IT projects like custom DNS, VPN, AI, and file storage solutions for enhanced efficiency and security" --- An essential trait for any developer or IT enthusiast is a constant interest in new technologies and a curiosity about how things work. diff --git a/src/blog_posts/truth-about-php-debunking-myths-misconceptions.mdx b/src/blog_posts/truth-about-php-debunking-myths-misconceptions.mdx index 2b62b2d..2c230e4 100644 --- a/src/blog_posts/truth-about-php-debunking-myths-misconceptions.mdx +++ b/src/blog_posts/truth-about-php-debunking-myths-misconceptions.mdx @@ -1,7 +1,7 @@ --- -title: 'The Truth About PHP: Debunking the Myths and Misconceptions' -published: '2024-05-24' -summary: 'Discover the truth about PHP and debunk common myths and misconceptions surrounding this powerful programming language' +title: "The Truth About PHP: Debunking the Myths and Misconceptions" +published: "2024-05-24" +summary: "Discover the truth about PHP and debunk common myths and misconceptions surrounding this powerful programming language" --- PHP. The mere mention of it can conjure eye rolls and sighs from developers. Jokes about its quirks and inconsistencies are commonplace. But here's the surprising truth: despite the widespread grumbling, PHP remains a dominant force in web development! Here's why. diff --git a/src/blog_posts/ultimate-collection-useful-websites-developers.mdx b/src/blog_posts/ultimate-collection-useful-websites-developers.mdx index 9766b9a..bd7ba2b 100644 --- a/src/blog_posts/ultimate-collection-useful-websites-developers.mdx +++ b/src/blog_posts/ultimate-collection-useful-websites-developers.mdx @@ -1,7 +1,7 @@ --- -title: 'My Ultimate Collection of Useful Websites for Developers' -published: '2024-07-05' -summary: 'Explore a curated collection of indispensable websites for developers, handpicked to enhance productivity and skill development' +title: "My Ultimate Collection of Useful Websites for Developers" +published: "2024-07-05" +summary: "Explore a curated collection of indispensable websites for developers, handpicked to enhance productivity and skill development" --- In the ever-evolving world of software development, having the right resources at your fingertips can significantly boost your productivity and enhance your skill set. Whether you're a beginner looking to learn the basics or an experienced developer seeking advanced tools, this ultimate collection of useful websites for developers is designed to meet all your needs. Dive in and discover the best platforms, tools, and communities that will take your development journey to the next level. diff --git a/src/blog_posts/understanding-pornography-problem-cause-evolution.mdx b/src/blog_posts/understanding-pornography-problem-cause-evolution.mdx index 401a9d1..9586439 100644 --- a/src/blog_posts/understanding-pornography-problem-cause-evolution.mdx +++ b/src/blog_posts/understanding-pornography-problem-cause-evolution.mdx @@ -1,7 +1,7 @@ --- -title: 'Understanding the Pornography Problem: Cause and Evolution' -published: '2024-06-07' -summary: 'Get to know valuable insights and research findings on the complex issue of dopamine, pornography consumption and its societal impact' +title: "Understanding the Pornography Problem: Cause and Evolution" +published: "2024-06-07" +summary: "Get to know valuable insights and research findings on the complex issue of dopamine, pornography consumption and its societal impact" --- ## Introduction diff --git a/src/blog_posts/unlocking-power-open-source-complete-guide-everyone.mdx b/src/blog_posts/unlocking-power-open-source-complete-guide-everyone.mdx index e79643f..cbd11bb 100644 --- a/src/blog_posts/unlocking-power-open-source-complete-guide-everyone.mdx +++ b/src/blog_posts/unlocking-power-open-source-complete-guide-everyone.mdx @@ -1,7 +1,7 @@ --- -title: 'Unlocking the Power of Open Source: A Complete Guide for Everyone' -published: '2024-08-02' -summary: 'Unlock the power of open source with this comprehensive guide, discover what open source is, why it matters, and how you can contribute. Learn about influential open-source rojects and understand their significant impact on technology and innovation.' +title: "Unlocking the Power of Open Source: A Complete Guide for Everyone" +published: "2024-08-02" +summary: "Unlock the power of open source with this comprehensive guide, discover what open source is, why it matters, and how you can contribute. Learn about influential open-source rojects and understand their significant impact on technology and innovation." --- ## Introduction diff --git a/src/blog_posts/vim-the-ultimate-editor.mdx b/src/blog_posts/vim-the-ultimate-editor.mdx index cb1a7aa..115a74a 100644 --- a/src/blog_posts/vim-the-ultimate-editor.mdx +++ b/src/blog_posts/vim-the-ultimate-editor.mdx @@ -1,7 +1,7 @@ --- -title: 'Why Vim is the Ultimate CLI Text Editor' -published: '2024-08-30' -summary: 'Discover why Vim is considered the best CLI text editor for developers. Learn about its efficiency, customization options, and the powerful ecosystem that makes Vim the top choice for coders. Dive into the world of Vim and enhance your coding productivit' +title: "Why Vim is the Ultimate CLI Text Editor" +published: "2024-08-30" +summary: "Discover why Vim is considered the best CLI text editor for developers. Learn about its efficiency, customization options, and the powerful ecosystem that makes Vim the top choice for coders. Dive into the world of Vim and enhance your coding productivit" --- As a developer deeply embedded in the command-line interface (CLI), finding the right text editor can significantly impact your productivity. For many, Vim isn't just a choice—it's a philosophy. Its efficiency, customization, and the sheer power it offers make it, in my opinion, the best CLI editor available. Here's why Vim deserves the top spot and why you should consider diving deeper into its ecosystem diff --git a/src/blog_posts/why-i-chose-developer-career-motivational-reasons-journey.mdx b/src/blog_posts/why-i-chose-developer-career-motivational-reasons-journey.mdx index f668dbe..40c5a54 100644 --- a/src/blog_posts/why-i-chose-developer-career-motivational-reasons-journey.mdx +++ b/src/blog_posts/why-i-chose-developer-career-motivational-reasons-journey.mdx @@ -1,7 +1,7 @@ --- -title: 'Why I Chose a Developer Career: Motivational Reasons and Personal Journey' -published: '2024-05-10' -summary: 'Embark on a motivational journey as I share personal reasons for choosing a career in development and uncovering the path to success' +title: "Why I Chose a Developer Career: Motivational Reasons and Personal Journey" +published: "2024-05-10" +summary: "Embark on a motivational journey as I share personal reasons for choosing a career in development and uncovering the path to success" --- ## Introduction diff --git a/src/blog_posts/why-im-starting-this-blog-journey-into-purpose.mdx b/src/blog_posts/why-im-starting-this-blog-journey-into-purpose.mdx index a6209c6..9230398 100644 --- a/src/blog_posts/why-im-starting-this-blog-journey-into-purpose.mdx +++ b/src/blog_posts/why-im-starting-this-blog-journey-into-purpose.mdx @@ -1,7 +1,7 @@ --- -title: 'Why I'm Starting This Blog: A Journey into Purpose' -published: '2024-05-03' -summary: 'Discover why I'm starting this blog, what are the reasons behind it and what will me and my audience learn. Join me on this exciting journey of finding purpose and achievement!' +title: "Why I'm Starting This Blog: A Journey into Purpose" +published: "2024-05-03" +summary: "Discover why I'm starting this blog, what are the reasons behind it and what will me and my audience learn. Join me on this exciting journey of finding purpose and achievement!" --- Welcome to my blog! I'm thrilled to have you here as I embark on this exciting journey into the world of blogging. You might be wondering why I've decided to start a blog, so let me share my motivations and aspirations with you. Whether you're a seasoned blogger, someone curious about the blogging world, or just happened to stumble upon this page, I hope you'll find my reasons relatable and inspiring! diff --git a/src/css/utils.css b/src/css/utils.css index 8129ac1..de1d9df 100644 --- a/src/css/utils.css +++ b/src/css/utils.css @@ -61,20 +61,3 @@ .prose * { @apply break-words; } - -/* contact form */ -.contactInput { - @apply w-full rounded-lg border-2 border-black bg-white px-3 py-2 transition-all md:border-black/50 dark:border-white dark:bg-black md:dark:border-white/50; -} -.contactInput:hover { - @apply border-black dark:border-white; -} -.contactInput:focus { - @apply border-black !outline-none dark:border-white; -} -.contactInput:disabled { - @apply cursor-not-allowed border-black/25 text-black/25 dark:border-white/25 dark:text-white/25; -} -.contactInput:disabled::placeholder { - @apply text-black/25 dark:text-white/25; -} diff --git a/src/features/contact_form/actions/send.js b/src/features/contact_form/actions/send.js deleted file mode 100644 index e3efe13..0000000 --- a/src/features/contact_form/actions/send.js +++ /dev/null @@ -1,45 +0,0 @@ -'use server'; - -import { sanitize } from '@/lib/misc'; - -export async function send(state, formData) { - const formFields = { - name: sanitize(formData.get('fName')), - contact: sanitize(formData.get('fContact')), - subject: sanitize(formData.get('fSubject')), - message: sanitize(formData.get('fMessage')), - honeyPotEmail: sanitize(formData.get('fmmEmail')), - honeyPotName: sanitize(formData.get('fmmName')), - }; - - const botToken = process.env.TELEGRAM_BOT_TOKEN; - const botChatId = process.env.TELEGRAM_CHAT_ID; - const botApiUrl = `https://api.telegram.org/bot${botToken}/sendMessage`; - const botMessage = ` - 📩 *[bakir.dev] New Contact Form Submission*: - - *Name*: ${formFields.name} - - *Contact*: ${formFields.contact} - - *Subject*: ${formFields.subject} - - *Message*: ${formFields.message} - `; - - try { - const response = await fetch(botApiUrl, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - chat_id: botChatId, - text: botMessage, - parse_mode: 'Markdown', - }), - }); - - if (!response.ok) { - throw new Error(); - } - - return { msg: 'Message sent!', status: 'OK' }; - } catch { - return { msg: 'Something went wrong!', status: 'ERR' }; - } -} diff --git a/src/features/contact_form/components/Form.jsx b/src/features/contact_form/components/Form.jsx deleted file mode 100644 index 8b8c4dd..0000000 --- a/src/features/contact_form/components/Form.jsx +++ /dev/null @@ -1,120 +0,0 @@ -'use client'; - -import { useActionState } from 'react'; -import { send } from '@/features/contact_form/actions/send'; -import { CheckCircleIcon, ExclamationTriangleIcon, PaperAirplaneIcon } from '@heroicons/react/24/solid'; - -const defaultFormState = { - msg: '', - status: '', -}; - -export default function Form() { - const [state, formAction, isPending] = useActionState(send, defaultFormState); - - return ( - <> - -
- - -
- -
- - -
- -
- - -
- -
- -