{"id":19284569,"url":"https://github.com/schnapsterdog/nuxt-chatgpt","last_synced_at":"2026-02-01T01:18:10.238Z","repository":{"id":143177591,"uuid":"615000479","full_name":"SchnapsterDog/nuxt-chatgpt","owner":"SchnapsterDog","description":"ChatGPT integration for Nuxt 3","archived":false,"fork":false,"pushed_at":"2024-04-03T13:29:38.000Z","size":952,"stargazers_count":151,"open_issues_count":3,"forks_count":17,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-04-26T19:48:14.847Z","etag":null,"topics":["chatgpt","chatgpt-api","chatgpt-bot","chatgpt3","nuxt3","typescript","vue3"],"latest_commit_sha":null,"homepage":"https://www.buymeacoffee.com/schnapsterdog","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SchnapsterDog.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-16T18:43:04.000Z","updated_at":"2024-04-07T16:26:03.000Z","dependencies_parsed_at":"2024-01-17T06:34:23.037Z","dependency_job_id":"90bf9c97-3701-4272-8fd4-c09a15fb3102","html_url":"https://github.com/SchnapsterDog/nuxt-chatgpt","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SchnapsterDog%2Fnuxt-chatgpt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SchnapsterDog%2Fnuxt-chatgpt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SchnapsterDog%2Fnuxt-chatgpt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SchnapsterDog%2Fnuxt-chatgpt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SchnapsterDog","download_url":"https://codeload.github.com/SchnapsterDog/nuxt-chatgpt/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247509237,"owners_count":20950232,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chatgpt","chatgpt-api","chatgpt-bot","chatgpt3","nuxt3","typescript","vue3"],"created_at":"2024-11-09T21:38:34.586Z","updated_at":"2026-02-01T01:18:10.232Z","avatar_url":"https://github.com/SchnapsterDog.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- PROJECT LOGO --\u003e\n\u003cbr /\u003e\n\u003cdiv\u003e\n  \u003cdiv\u003e\n  \u003ch1\u003eHausly + Image Generator\u003ca href=\"https://hausly.io\" target=\"_blank\"\u003e🔥(Hausly)🔥\u003c/a\u003e\u003c/h1\u003e\n  \u003ch2\u003eReplyGuard + Generate Email Reply\u003ca href=\"https://replyguard.ai\" target=\"_blank\"\u003e🔥(ReplyGuard)🔥\u003c/a\u003e\u003c/h2\u003e\n  \u003ch2\u003eNuxt Chatgpt + Image Generator\u003ca href=\"https://nuxtchatgpt.com\" target=\"_blank\"\u003e🔥(Nuxt ChatGPT)🔥\u003c/a\u003e\u003c/h2\u003e\n  \n  \u003c/div\u003e\n  \u003cdiv style=\"display:flex; width:100%; justify-content:center\"\u003e\n  \u003cimg src=\"images/logo.png\" alt=\"Logo\"\u003e\n  \u003c/div\u003e\n\n  \u003e [ChatGPT](https://nuxtchatgpt.com) integration for [Nuxt 3](https://nuxt.com).\n\n  [![npm version][npm-version-src]][npm-version-href]\n  [![npm downloads][npm-downloads-src]][npm-downloads-href]\n  [![License][license-src]][license-href]\n\u003c/div\u003e\n\u003cbr /\u003e\n\n## About the project\n\n[Nuxt ChatGPT](https://nuxtchatgpt.com) is a project built to showcase the capabilities of the Nuxt3 ChatGPT module. It functions as a ChatGPT clone with enhanced features, including the ability to organize and sort created documents into folders, offering an improved user experience for managing conversations and outputs.\n\n## About the module\n\nThis user-friendly module boasts of an easy integration process that enables seamless implementation into any [Nuxt 3](https://nuxt.com) project. With type-safe integration, you can integrate [ChatGPT](https://openai.com/) into your [Nuxt 3](https://nuxt.com) project without breaking a \u003cb\u003esweat\u003c/b\u003e. Enjoy easy access to the `chat`, and `chatCompletion` methods through the `useChatgpt()` composable. Additionally, the module guarantees \u003cb\u003e\u003ci\u003esecurity\u003c/i\u003e\u003c/b\u003e as requests are routed through a [Nitro Server](https://nuxt.com/docs/guide/concepts/server-engine), thus preventing the exposure of your \u003cb\u003eAPI Key\u003c/b\u003e. The module use [openai](https://github.com/openai/openai-node) library version 4.0.0 behind the scene.\n\n## Features\n\n- 💪 \u0026nbsp; Easy implementation into any [Nuxt 3](https://nuxt.com) project.\n- 👉 \u0026nbsp; Type-safe integration of Chatgpt into your [Nuxt 3](https://nuxt.com) project.\n- 🕹️ \u0026nbsp; Provides a `useChatgpt()` composable that grants easy access to the `chat`, and `chatCompletion`, and `generateImage` methods.\n- 🕹️ \u0026nbsp; Provides `chatCompletionStream` for real-time streamed responses (SSE).\n- 🔥 \u0026nbsp; Ensures security by routing requests through a [Nitro Server](https://nuxt.com/docs/guide/concepts/server-engine), preventing the \u003cb\u003eAPI Key\u003c/b\u003e from being exposed.\n- 🧱 \u0026nbsp; It is lightweight and performs well.\n\n## Recommended Node Version\n\n### min `v18.20.5 or higher`\n### recommended `v20.19.0`\n\n## Getting Started\n\n1. Add nuxt-chatgpt dependency to your project\n  ```sh\n  npx nuxt module add nuxt-chatgpt\n  ```\n2. Add nuxt-chatgpt to the modules section of nuxt.config.ts\n\n```js\nexport default defineNuxtConfig({\n  modules: [\"nuxt-chatgpt\"],\n\n  // entirely optional\n  chatgpt: {\n    apiKey: 'Your apiKey here goes here'\n  },\n})\n```\nThat's it! You can now use Nuxt Chatgpt in your Nuxt app 🔥\n\n## Usage \u0026 Examples\n\nTo access the `chat`, `chatCompletion`, `chatCompletionStream`, and `generateImage` methods in the nuxt-chatgpt module, you can use the `useChatgpt()` composable, which provides easy access to them.\n\nThe `chat`, and `chatCompletion` methods requires three parameters:\n\n| Name         | Type     | Default                                                                                      | Description                                                                                                                                                                          |\n| ------------ | -------- | -------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| **message**  | `String` | available only for `chat()`                                                                  | A string representing the text message that you want to send to the GPT model for processing.                                                                                        |\n| **messages** | `Array`  | available only for `chatCompletion()` and `chatCompletionStream()`                           | An array of objects that contains `role` and `content`                                                                                                                               |\n| **model**    | `String` | `gpt-5-mini` for `chat()` and `gpt-5-mini` for `chatCompletion()`                            | Represent certain model for different types of natural language processing tasks.                                                                                                    |\n| **options**  | `Object` | `{ temperature: 0.5, max_tokens: 2048, top_p: 1 frequency_penalty: 0, presence_penalty: 0 }` | An optional object that specifies any additional options you want to pass to the API request, such as, the number of responses to generate, and the maximum length of each response. |\n\nThe `generateImage` method requires one parameters:\n\n| Name        | Type     | Default                                                                                      | Description                                                                                                                                                                               |\n| ----------- | -------- | -------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **message** | `String` | A text description of the desired image(s). The maximum length is 1000 characters.           |                                                                                                                                                                                           |\n| **model**   | `String` | `gpt-image-1-mini`                                                                           | The model to use for image generation.                                                                                                                                                    |\n| **options** | `Object` | `{ n: 1, quality: 'standard', response_format: 'url', size: '1024x1024', style: 'natural' }` | An optional object that specifies any additional options you want to pass to the API request, such as, the number of images to generate, quality, size and style of the generated images. |\n\nAvailable models:\n\n* text-davinci-002\n* text-davinci-003\n* gpt-3.5-turbo\n* gpt-3.5-turbo-0301\n* gpt-3.5-turbo-1106\n* gpt-4\n* gpt-4o\n* gpt-4o-mini\n* gpt-4-turbo\n* gpt-4-1106-preview\n* gpt-4-0314\n* gpt-4-0314\n* gpt-4-0613\n* gpt-4-32k\n* gpt-4-32k-0314\n* gpt-4-32k-0613\n* gpt-5-nano\n* gpt-5-mini\n* gpt-5-pro\n* gpt-5.1\n* gpt-5.2-pro\n* gpt-5.2\n* dall-e-3\n* gpt-image-1\n* gpt-image-1-mini\n* gpt-image-1.5\n\n### Simple `chat` usage\n\nIn the following example, the model is unspecified, and the gpt-4o-mini model will be used by default.\n\n```js\nconst { chat } = useChatgpt()\n\nconst data = ref('')\nconst inputData = ref('')\n\nasync function sendMessage() {\n  try {\n    const response = await chat(inputData.value)\n    data.value = response\n  } catch(error) {\n    alert(`Verify your organization if you want to use GPT-5 models: ${error}`)\n  }\n}\n\n```\n\n```html\n\u003ctemplate\u003e\n  \u003cdiv\u003e\n    \u003cinput v-model=\"inputData\"\u003e\n    \u003cbutton\n      @click=\"sendMessage\"\n      v-text=\"'Send'\"\n    /\u003e\n    \u003cdiv\u003e{{ data }}\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/template\u003e\n```\n\n### Usage of `chat` with different model\n\n```js\nconst { chat } = useChatgpt()\n\nconst data = ref('')\nconst inputData = ref('')\n\nasync function sendMessage() {\n  try {\n    const response = await chat(inputData.value, 'gpt-5-mini')\n    data.value = response\n  } catch(error) {\n    alert(`Verify your organization if you want to use GPT-5 models: ${error}`)\n  }\n}\n\n```\n\n```html\n\u003ctemplate\u003e\n  \u003cdiv\u003e\n    \u003cinput v-model=\"inputData\"\u003e\n    \u003cbutton\n      @click=\"sendMessage\"\n      v-text=\"'Send'\"\n    /\u003e\n    \u003cdiv\u003e{{ data }}\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/template\u003e\n```\n\n### Simple `chatCompletion` usage\n\nIn the following example, the model is unspecified, and the gpt-4o-mini model will be used by default.\n\n```js\nconst { chatCompletion } = useChatgpt()\n\nconst chatTree = ref([])\nconst inputData = ref('')\n\nasync function sendMessage() {\n  try {\n    const message = {\n      role: 'user',\n      content: `${inputData.value}`,\n    }\n\n    chatTree.value.push(message)\n\n    const response = await chatCompletion(chatTree.value)\n    \n    const responseMessage = {\n      role: response[0].message.role,\n      content: response[0].message.content\n    }\n    \n    chatTree.value.push(responseMessage)\n  } catch(error) {\n    alert(`Verify your organization if you want to use GPT-5 models: ${error}`)\n  }\n}\n\n```\n\n```html\n\u003ctemplate\u003e\n  \u003cdiv\u003e\n    \u003cinput v-model=\"inputData\"\u003e\n    \u003cbutton\n      @click=\"sendMessage\"\n      v-text=\"'Send'\"\n    /\u003e\n    \u003cdiv\u003e\n      \u003cdiv\n        v-for=\"chat in chatTree\"\n        :key=\"chat\"\n      \u003e\n        \u003cstrong\u003e{{ chat.role }} :\u003c/strong\u003e\n        \u003cdiv\u003e{{ chat.content }} \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/template\u003e\n```\n\n### Usage of `chatCompletion` with different model\n\n```js\nconst { chatCompletion } = useChatgpt()\n\nconst chatTree = ref([])\nconst inputData = ref('')\n\nasync function sendMessage() {\n  try {\n    const message = {\n      role: 'user',\n      content: `${inputData.value}`,\n    }\n\n    chatTree.value.push(message)\n\n    const response = await chatCompletion(chatTree.value, 'gpt-5-mini')\n    \n    const responseMessage = {\n      role: response[0].message.role,\n      content: response[0].message.content\n    }\n    \n    chatTree.value.push(responseMessage)\n  } catch(error) {\n    alert(`Verify your organization if you want to use GPT-5 models: ${error}`)\n  }\n}\n\n```\n\n```html\n\u003ctemplate\u003e\n  \u003cdiv\u003e\n    \u003cinput v-model=\"inputData\"\u003e\n    \u003cbutton\n      @click=\"sendMessage\"\n      v-text=\"'Send'\"\n    /\u003e\n    \u003cdiv\u003e\n      \u003cdiv\n        v-for=\"chat in chatTree\"\n        :key=\"chat\"\n      \u003e\n        \u003cstrong\u003e{{ chat.role }} :\u003c/strong\u003e\n        \u003cdiv\u003e{{ chat.content }} \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/template\u003e\n```\n\n### Simple `chatCompletionStream` usage (streaming)\n\nIn the following example, the model is unspecified, and the gpt-4o-mini model will be used by default.\n\n```js\nconst { chatCompletionStream } = useChatgpt()\n\nconst chatTree = ref([])\nconst inputData = ref('')\n\nasync function sendStreamedMessage() {\n  try {\n    const message = {\n      role: 'user',\n      content: `${inputData.value}`,\n    }\n\n    chatTree.value.push(message)\n\n    const assistantMessage = {\n      role: 'assistant',\n      content: ''\n    }\n\n    chatTree.value.push(assistantMessage)\n\n    // IMPORTANT: do not send the placeholder assistant message to the server\n    const payloadMessages = chatTree.value.slice(0, -1)\n\n    await chatCompletionStream(payloadMessages, undefined, undefined, {\n      onToken(token) {\n        assistantMessage.content += token\n      },\n      onDone() {\n        // streaming finished\n      },\n      onError(err) {\n        alert(`Stream error: ${typeof err === \"string\" ? err : err?.message || \"Unknown\"}`)\n      }\n    })\n  } catch(error) {\n    alert(`Verify your organization if you want to use GPT-5 models: ${error}`)\n  }\n}\n\n```\n\n```html\n\u003ctemplate\u003e\n  \u003cdiv\u003e\n    \u003cinput v-model=\"inputData\"\u003e\n    \u003cbutton\n      @click=\"sendStreamedMessage\"\n      v-text=\"'Send Streamed'\"\n    /\u003e\n    \u003cdiv\u003e\n      \u003cdiv\n        v-for=\"chat in chatTree\"\n        :key=\"chat\"\n      \u003e\n        \u003cstrong\u003e{{ chat.role }} :\u003c/strong\u003e\n        \u003cdiv\u003e{{ chat.content }} \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/template\u003e\n```\n\n### Simple `generateImage` usage\n\nIn the following example, the model is unspecified, and the `gpt-image-1-mini` model will be used by default.\n\n```js\nconst { generateImage } = useChatgpt()\n\nconst images = ref([])\nconst inputData = ref('')\nconst loading = ref(false)\n\nfunction b64ToBlobUrl(b64) {\n  const bytes = Uint8Array.from(atob(b64), (c) =\u003e c.charCodeAt(0));\n  const blob = new Blob([bytes], { type: \"image/png\" });\n  return URL.createObjectURL(blob);\n}\n\nasync function sendPrompt() {\n  loading.value = true;\n  try {\n    const result = await generateImage(inputData.value);\n    images.value = result.map((img) =\u003e ({\n      url: b64ToBlobUrl(img.b64_json),\n    }));\n  } catch (error) {\n    alert(`Error: ${error}`);\n  }\n  loading.value = false;\n}\n\n```\n\n```html\n\u003ctemplate\u003e\n  \u003cdiv\u003e\n    \u003cdiv v-if=\"!loading \u0026\u0026 !images.length\"\u003e\n      \u003cinput v-model=\"inputData\"\u003e\n      \u003cbutton\n        @click=\"sendPrompt\"\n        v-text=\"'Send Prompt'\"\n      /\u003e\n    \u003c/div\u003e\n    \u003cdiv v-else-if=\"loading\"\u003eGenerating, please wait ...\u003c/div\u003e\n    \u003cdiv v-if=\"images \u0026\u0026 !loading\" \u003e\n      \u003cimg v-for=\"image in images\" :key=\"image.url\" :src=\"image.url\" alt=\"generated-image\"/\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/template\u003e\n```\n\n### Usage of `generateImage` with different model, and options\n\n```js\nconst { generateImage } = useChatgpt()\n\nconst images = ref([])\nconst inputData = ref('')\nconst loading = ref(false)\n\nasync function sendPrompt() {\n  loading.value = true\n  try {\n    images.value = await generateImage(inputData.value, 'dall-e-3', {\n      n: 1,\n      quality: 'standard',\n      response_format: 'url',\n      size: '1024x1024',\n      style: 'natural'\n    })\n  } catch (error) {\n    alert(`Error: ${error}`)\n  }\n  loading.value = false\n}\n```\n\n```html\n\u003ctemplate\u003e\n  \u003cdiv\u003e\n    \u003cdiv v-if=\"!loading \u0026\u0026 !images.length\"\u003e\n      \u003cinput v-model=\"inputData\"\u003e\n      \u003cbutton\n        @click=\"sendPrompt\"\n        v-text=\"'Send Prompt'\"\n      /\u003e\n    \u003c/div\u003e\n    \u003cdiv v-else-if=\"loading\"\u003eGenerating, please wait ...\u003c/div\u003e\n    \u003cdiv v-if=\"images \u0026\u0026 !loading\" \u003e\n      \u003cimg v-for=\"image in images\" :key=\"image.url\" :src=\"image.url\" alt=\"generated-image\"/\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/template\u003e\n```\n\n## chat vs chatCompletion\n\nThe `chat` method allows the user to send a prompt to the OpenAI API and receive a response. You can use this endpoint to build conversational interfaces that can interact with users in a natural way. For example, you could use the chat method to build a chatbot that can answer customer service questions or provide information about a product or service.\n\nThe `chatCompletion` method is similar to the `chat` method, but it provides additional functionality for generating longer, more complex responses. Specifically, the chatCompletion method allows you to provide a conversation history as input, which the API can use to generate a response that is consistent with the context of the conversation. This makes it possible to build chatbots that can engage in longer, more natural conversations with users.\n\n## chatCompletionStream vs chatCompletion\n\nThe `chatCompletionStream` method returns the assistant response **as a stream** (token-by-token). This is useful when you want to build a ChatGPT-like UI where the answer is displayed while it's being generated, instead of waiting for the full message.\n\n## Module Options\n\n| Name          | Type      | Default  | Description                                      |\n| ------------- | --------- | -------- | ------------------------------------------------ |\n| **apiKey**    | `String`  | `xxxxxx` | Your apiKey here goes here                       |\n| **isEnabled** | `Boolean` | `true`   | Enable or disable the module. `True` by default. |\n\n\u003c!-- CONTRIBUTING --\u003e\n\n## Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.\n\nIf you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag \"enhancement\".\nDon't forget to give the project a star! Thanks again!\n\n1. Fork the Project\n2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)\n4. Push to the Branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\n\u003c!-- LICENSE --\u003e\n\n## License\n\nDistributed under the MIT License. See `LICENSE.txt` for more information.\n\n\u003c!-- CONTACT --\u003e\n\n## Contact\n\nOliver Trajceski - [LinkedIn](https://mk.linkedin.com/in/oliver-trajceski-8a28b070) - [oliver@akrinum.com](mailto:oliver@akrinum.com)\n\nProject Link: [https://nuxtchatgpt.com](https://nuxtchatgpt.com)\n\n## Development\n\n```bash\n# Install dependencies\nnpm install\n\n# Generate type stubs\nnpm run dev:prepare\n\n# Develop with the playground\nnpm run dev\n\n# Build the playground\nnpm run dev:build\n\n# Run ESLint\nnpm run lint\n\n# Run Vitest\nnpm run test\nnpm run test:watch\n\n# Release new version\nnpm run release\n```\n\n\n\u003c!-- ACKNOWLEDGMENTS --\u003e\n## Acknowledgments\n\nUse this space to list resources you find helpful and would like to give credit to. I've included a few of my favorites to kick things off!\n\n* [Choose an Open Source License](https://choosealicense.com)\n* [Img Shields](https://shields.io)\n* [GitHub Pages](https://pages.github.com)\n\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n\u003c!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --\u003e\n[contributors-shield]: https://img.shields.io/github/contributors/schnapsterdog/nuxt-chatgpt.svg?style=for-the-badge\n[contributors-url]: https://github.com/schnapsterdog/nuxt-chatgpt/graphs/contributors\n[downloads-shield]: https://img.shields.io/npm/dw/nuxt-chatgpt.svg?style=for-the-badge\n[downloads-url]: https://www.npmjs.com/package/nuxt-chatgpt\n[stars-shield]: https://img.shields.io/github/stars/nuxt-chatgpt.svg?style=for-the-badge\n[stars-url]: https://github.com/schnapsterdog/nuxt-chatgpt/stargazers\n[issues-shield]: https://img.shields.io/github/issues/schnapsterdog/nuxt-chatgpt.svg?style=for-the-badge\n[issues-url]: https://github.com/schnapsterdog/nuxt-chatgpt/issues\n[license-shield]: https://img.shields.io/github/license/schnapsterdog/nuxt-chatgpt.svg?style=for-the-badge\n[license-url]: https://github.com/schnapsterdog/nuxt-chatgpt/blob/master/LICENSE.txt\n[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge\u0026logo=linkedin\u0026colorB=555\n[linkedin-url]: https://mk.linkedin.com/in/oliver-trajceski-8a28b070\n[Vue.js]: https://img.shields.io/badge/Vue.js-35495E?style=for-the-badge\u0026logo=vuedotjs\u0026logoColor=4FC08D\n[Vue-url]: https://vuejs.org/\n\n[npm-version-src]: https://img.shields.io/npm/v/nuxt-chatgpt/latest.svg?style=flat\u0026colorA=18181B\u0026colorB=28CF8D\n[npm-version-href]: https://npmjs.com/package/nuxt-chatgpt\n[npm-downloads-src]: https://img.shields.io/npm/dm/nuxt-chatgpt.svg?style=flat\u0026colorA=18181B\u0026colorB=28CF8D\n[npm-downloads-href]: https://npmjs.com/package/nuxt-chatgpt\n[license-src]: https://img.shields.io/npm/l/nuxt-chatgpt.svg?style=flat\u0026colorA=18181B\u0026colorB=28CF8D\n[license-href]: https://npmjs.com/package/nuxt-chatgpt\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschnapsterdog%2Fnuxt-chatgpt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fschnapsterdog%2Fnuxt-chatgpt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschnapsterdog%2Fnuxt-chatgpt/lists"}