├── .gitignore ├── .editorconfig ├── package.json ├── README.md └── pnpm-lock.yaml /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | 4 | scripts/ 5 | data/ 6 | 7 | .env 8 | 9 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: https://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | [*] 7 | indent_style = space 8 | indent_size = 2 9 | end_of_line = lf 10 | charset = utf-8 11 | trim_trailing_whitespace = false 12 | insert_final_newline = false -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dokeyai-data", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "type": "module", 7 | "scripts": { 8 | "sync": "node scripts/sync.js", 9 | "dump": "./scripts/dump.sh", 10 | "release": "node scripts/release.js" 11 | }, 12 | "keywords": [], 13 | "author": "savokiss", 14 | "license": "ISC", 15 | "dependencies": { 16 | "@libsql/client": "^0.6.0", 17 | "@octokit/rest": "^20.1.1", 18 | "dotenv": "^16.4.5" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DokeyAI Data 2 | 3 | This is the repo for dokeyai's public AI products and categories data. 4 | 5 | ## Data Files 6 | 7 | See the [Release](https://github.com/DokeyAI/dokeyai-data/releases) 8 | 9 | - `dokeyai-products.json` 10 | - `dokeyai-categories.json` 11 | - `dokeyai-directories.json` 12 | 13 | All categories are avaliable here: [Categories](https://dokeyai.com/category) 14 | 15 | All directories are avaliable here: [AI Tools Directories](https://dokeyai.com/directories) 16 | 17 | ## Data Sources 18 | - User Submitted (Free for now) - [Submit](https://dokeyai.com/submit) 19 | - ProductHunt (AI Related) 20 | - Github (Comming Soon) 21 | - HuggingFace (Comming Soon) 22 | 23 | Note: We use ChatGPT to review if the product is AI-Related, and classify it. 24 | 25 | ## Screenshot Permit 26 | 27 | To use the screenshots directly on your website. 28 | 29 | See [#1](https://github.com/DokeyAI/dokeyai-data/issues/1) 30 | 31 | ## Submit AI Product 32 | 33 | Just submit your product here [DokeyAI Submit](https://dokeyai.com/submit) 34 | 35 | We will review it and add it to the `dokeyai-products.json`. -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | '@libsql/client': 9 | specifier: ^0.6.0 10 | version: 0.6.0 11 | '@octokit/rest': 12 | specifier: ^20.1.1 13 | version: 20.1.1 14 | dotenv: 15 | specifier: ^16.4.5 16 | version: 16.4.5 17 | 18 | packages: 19 | 20 | /@libsql/client@0.6.0: 21 | resolution: {integrity: sha512-qhQzTG/y2IEVbL3+9PULDvlQFWJ/RnjFXECr/Nc3nRngGiiMysDaOV5VUzYk7DulUX98EA4wi+z3FspKrUplUA==} 22 | dependencies: 23 | '@libsql/core': 0.6.0 24 | '@libsql/hrana-client': 0.6.0 25 | js-base64: 3.7.7 26 | libsql: 0.3.18 27 | transitivePeerDependencies: 28 | - bufferutil 29 | - utf-8-validate 30 | dev: false 31 | 32 | /@libsql/core@0.6.0: 33 | resolution: {integrity: sha512-affAB8vSqQwqI9NBDJ5uJCVaHoOAS2pOpbv1kWConh1SBbmJBnHHd4KG73RAJ2sgd2+NbT9WA+XJBqxgp28YSw==} 34 | dependencies: 35 | js-base64: 3.7.7 36 | dev: false 37 | 38 | /@libsql/darwin-arm64@0.3.18: 39 | resolution: {integrity: sha512-Zt49dt+cwhPCkuoWgvjbQd4ckNfCJR5xzIAyhgHl3CBZqZaEuaXTOGKLNQT7bnFRPuQcdLt5PBT1cenKu2N6pA==} 40 | cpu: [arm64] 41 | os: [darwin] 42 | requiresBuild: true 43 | dev: false 44 | optional: true 45 | 46 | /@libsql/darwin-x64@0.3.18: 47 | resolution: {integrity: sha512-faq6HUGDaNaueeqPei5cypHaD/hhazUyfHo094CXiEeRZq6ZKtNl5PHdlr8jE/Uw8USNpVVQaLdnvSgKcpRPHw==} 48 | cpu: [x64] 49 | os: [darwin] 50 | requiresBuild: true 51 | dev: false 52 | optional: true 53 | 54 | /@libsql/hrana-client@0.6.0: 55 | resolution: {integrity: sha512-k+fqzdjqg3IvWfKmVJK5StsbjeTcyNAXFelUbXbGNz3yH1gEVT9mZ6kmhsIXP30ZSyVV0AE1Gi25p82mxC9hwg==} 56 | dependencies: 57 | '@libsql/isomorphic-fetch': 0.2.1 58 | '@libsql/isomorphic-ws': 0.1.5 59 | js-base64: 3.7.7 60 | node-fetch: 3.3.2 61 | transitivePeerDependencies: 62 | - bufferutil 63 | - utf-8-validate 64 | dev: false 65 | 66 | /@libsql/isomorphic-fetch@0.2.1: 67 | resolution: {integrity: sha512-Sv07QP1Aw8A5OOrmKgRUBKe2fFhF2hpGJhtHe3d1aRnTESZCGkn//0zDycMKTGamVWb3oLYRroOsCV8Ukes9GA==} 68 | dev: false 69 | 70 | /@libsql/isomorphic-ws@0.1.5: 71 | resolution: {integrity: sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==} 72 | dependencies: 73 | '@types/ws': 8.5.10 74 | ws: 8.17.0 75 | transitivePeerDependencies: 76 | - bufferutil 77 | - utf-8-validate 78 | dev: false 79 | 80 | /@libsql/linux-arm64-gnu@0.3.18: 81 | resolution: {integrity: sha512-5m9xtDAhoyLSV54tho9uQ2ZIDeJWc0vU3Xpe/VK4+6bpURISs23qNhXiCrZnnq3oV0hFlBfcIgQUIATmb6jD2A==} 82 | cpu: [arm64] 83 | os: [linux] 84 | requiresBuild: true 85 | dev: false 86 | optional: true 87 | 88 | /@libsql/linux-arm64-musl@0.3.18: 89 | resolution: {integrity: sha512-oYD5+oM2gPEalp+EoR5DVQBRtdGjLsocjsRbQs5O2m4WOBJKER7VUfDYZHsifLGZoBSc11Yo6s9IR9rjGWy20w==} 90 | cpu: [arm64] 91 | os: [linux] 92 | requiresBuild: true 93 | dev: false 94 | optional: true 95 | 96 | /@libsql/linux-x64-gnu@0.3.18: 97 | resolution: {integrity: sha512-QDSSP60nS8KIldGE7H3bpEflQHiL1erwED6huoVJdmDFxsyDJX2CYdWUWW8Za0ZUOvUbnEWAOyMhp6j1dBbZqw==} 98 | cpu: [x64] 99 | os: [linux] 100 | requiresBuild: true 101 | dev: false 102 | optional: true 103 | 104 | /@libsql/linux-x64-musl@0.3.18: 105 | resolution: {integrity: sha512-5SXwTlaLCUPzxYyq+P0c7Ko7tcEjpd1X6RZKe1DuRFmJPg6f7j2+LrPEhMSIbqKcrl5ACUUAyoKmGZqNYwz23w==} 106 | cpu: [x64] 107 | os: [linux] 108 | requiresBuild: true 109 | dev: false 110 | optional: true 111 | 112 | /@libsql/win32-x64-msvc@0.3.18: 113 | resolution: {integrity: sha512-9EEIHz+e8tTbx9TMkb8ByZnzxc0pYFirK1nSbqC6cFEST95fiY0NCfQ/zAzJxe90KckbjifX6BbO69eWIi3TAg==} 114 | cpu: [x64] 115 | os: [win32] 116 | requiresBuild: true 117 | dev: false 118 | optional: true 119 | 120 | /@neon-rs/load@0.0.4: 121 | resolution: {integrity: sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==} 122 | dev: false 123 | 124 | /@octokit/auth-token@4.0.0: 125 | resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} 126 | engines: {node: '>= 18'} 127 | dev: false 128 | 129 | /@octokit/core@5.2.0: 130 | resolution: {integrity: sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==} 131 | engines: {node: '>= 18'} 132 | dependencies: 133 | '@octokit/auth-token': 4.0.0 134 | '@octokit/graphql': 7.1.0 135 | '@octokit/request': 8.4.0 136 | '@octokit/request-error': 5.1.0 137 | '@octokit/types': 13.5.0 138 | before-after-hook: 2.2.3 139 | universal-user-agent: 6.0.1 140 | dev: false 141 | 142 | /@octokit/endpoint@9.0.5: 143 | resolution: {integrity: sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==} 144 | engines: {node: '>= 18'} 145 | dependencies: 146 | '@octokit/types': 13.5.0 147 | universal-user-agent: 6.0.1 148 | dev: false 149 | 150 | /@octokit/graphql@7.1.0: 151 | resolution: {integrity: sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==} 152 | engines: {node: '>= 18'} 153 | dependencies: 154 | '@octokit/request': 8.4.0 155 | '@octokit/types': 13.5.0 156 | universal-user-agent: 6.0.1 157 | dev: false 158 | 159 | /@octokit/openapi-types@22.2.0: 160 | resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==} 161 | dev: false 162 | 163 | /@octokit/plugin-paginate-rest@11.3.1(@octokit/core@5.2.0): 164 | resolution: {integrity: sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==} 165 | engines: {node: '>= 18'} 166 | peerDependencies: 167 | '@octokit/core': '5' 168 | dependencies: 169 | '@octokit/core': 5.2.0 170 | '@octokit/types': 13.5.0 171 | dev: false 172 | 173 | /@octokit/plugin-request-log@4.0.1(@octokit/core@5.2.0): 174 | resolution: {integrity: sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==} 175 | engines: {node: '>= 18'} 176 | peerDependencies: 177 | '@octokit/core': '5' 178 | dependencies: 179 | '@octokit/core': 5.2.0 180 | dev: false 181 | 182 | /@octokit/plugin-rest-endpoint-methods@13.2.2(@octokit/core@5.2.0): 183 | resolution: {integrity: sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==} 184 | engines: {node: '>= 18'} 185 | peerDependencies: 186 | '@octokit/core': ^5 187 | dependencies: 188 | '@octokit/core': 5.2.0 189 | '@octokit/types': 13.5.0 190 | dev: false 191 | 192 | /@octokit/request-error@5.1.0: 193 | resolution: {integrity: sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==} 194 | engines: {node: '>= 18'} 195 | dependencies: 196 | '@octokit/types': 13.5.0 197 | deprecation: 2.3.1 198 | once: 1.4.0 199 | dev: false 200 | 201 | /@octokit/request@8.4.0: 202 | resolution: {integrity: sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==} 203 | engines: {node: '>= 18'} 204 | dependencies: 205 | '@octokit/endpoint': 9.0.5 206 | '@octokit/request-error': 5.1.0 207 | '@octokit/types': 13.5.0 208 | universal-user-agent: 6.0.1 209 | dev: false 210 | 211 | /@octokit/rest@20.1.1: 212 | resolution: {integrity: sha512-MB4AYDsM5jhIHro/dq4ix1iWTLGToIGk6cWF5L6vanFaMble5jTX/UBQyiv05HsWnwUtY8JrfHy2LWfKwihqMw==} 213 | engines: {node: '>= 18'} 214 | dependencies: 215 | '@octokit/core': 5.2.0 216 | '@octokit/plugin-paginate-rest': 11.3.1(@octokit/core@5.2.0) 217 | '@octokit/plugin-request-log': 4.0.1(@octokit/core@5.2.0) 218 | '@octokit/plugin-rest-endpoint-methods': 13.2.2(@octokit/core@5.2.0) 219 | dev: false 220 | 221 | /@octokit/types@13.5.0: 222 | resolution: {integrity: sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==} 223 | dependencies: 224 | '@octokit/openapi-types': 22.2.0 225 | dev: false 226 | 227 | /@types/node@20.12.12: 228 | resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} 229 | dependencies: 230 | undici-types: 5.26.5 231 | dev: false 232 | 233 | /@types/ws@8.5.10: 234 | resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} 235 | dependencies: 236 | '@types/node': 20.12.12 237 | dev: false 238 | 239 | /before-after-hook@2.2.3: 240 | resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} 241 | dev: false 242 | 243 | /data-uri-to-buffer@4.0.1: 244 | resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} 245 | engines: {node: '>= 12'} 246 | dev: false 247 | 248 | /deprecation@2.3.1: 249 | resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} 250 | dev: false 251 | 252 | /detect-libc@2.0.2: 253 | resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} 254 | engines: {node: '>=8'} 255 | dev: false 256 | 257 | /dotenv@16.4.5: 258 | resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} 259 | engines: {node: '>=12'} 260 | dev: false 261 | 262 | /fetch-blob@3.2.0: 263 | resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} 264 | engines: {node: ^12.20 || >= 14.13} 265 | dependencies: 266 | node-domexception: 1.0.0 267 | web-streams-polyfill: 3.3.3 268 | dev: false 269 | 270 | /formdata-polyfill@4.0.10: 271 | resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} 272 | engines: {node: '>=12.20.0'} 273 | dependencies: 274 | fetch-blob: 3.2.0 275 | dev: false 276 | 277 | /js-base64@3.7.7: 278 | resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} 279 | dev: false 280 | 281 | /libsql@0.3.18: 282 | resolution: {integrity: sha512-lvhKr7WV3NLWRbXkjn/MeKqXOAqWKU0PX9QYrvDh7fneukapj+iUQ4qgJASrQyxcCrEsClXCQiiK5W6OoYPAlA==} 283 | cpu: [x64, arm64, wasm32] 284 | os: [darwin, linux, win32] 285 | dependencies: 286 | '@neon-rs/load': 0.0.4 287 | detect-libc: 2.0.2 288 | optionalDependencies: 289 | '@libsql/darwin-arm64': 0.3.18 290 | '@libsql/darwin-x64': 0.3.18 291 | '@libsql/linux-arm64-gnu': 0.3.18 292 | '@libsql/linux-arm64-musl': 0.3.18 293 | '@libsql/linux-x64-gnu': 0.3.18 294 | '@libsql/linux-x64-musl': 0.3.18 295 | '@libsql/win32-x64-msvc': 0.3.18 296 | dev: false 297 | 298 | /node-domexception@1.0.0: 299 | resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} 300 | engines: {node: '>=10.5.0'} 301 | dev: false 302 | 303 | /node-fetch@3.3.2: 304 | resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} 305 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 306 | dependencies: 307 | data-uri-to-buffer: 4.0.1 308 | fetch-blob: 3.2.0 309 | formdata-polyfill: 4.0.10 310 | dev: false 311 | 312 | /once@1.4.0: 313 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 314 | dependencies: 315 | wrappy: 1.0.2 316 | dev: false 317 | 318 | /undici-types@5.26.5: 319 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 320 | dev: false 321 | 322 | /universal-user-agent@6.0.1: 323 | resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} 324 | dev: false 325 | 326 | /web-streams-polyfill@3.3.3: 327 | resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} 328 | engines: {node: '>= 8'} 329 | dev: false 330 | 331 | /wrappy@1.0.2: 332 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 333 | dev: false 334 | 335 | /ws@8.17.0: 336 | resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} 337 | engines: {node: '>=10.0.0'} 338 | peerDependencies: 339 | bufferutil: ^4.0.1 340 | utf-8-validate: '>=5.0.2' 341 | peerDependenciesMeta: 342 | bufferutil: 343 | optional: true 344 | utf-8-validate: 345 | optional: true 346 | dev: false 347 | --------------------------------------------------------------------------------