A model and its bill
Pick a model, handle rate limits and watch token costs grow with traffic.

<!-- AiChatbot.vue -->
<script setup lang="ts">
import { onMounted } from "vue";
const props = defineProps<{ id: string }>();
const SRC = "https://elfsightcdn.com/platform.js";
onMounted(() => {
if (document.querySelector(`script[src="${SRC}"]`)) return;
const s = document.createElement("script");
s.src = SRC;
s.async = true;
document.body.appendChild(s);
});
</script>
<template>
<div :class="`elfsight-app-${props.id}`" data-elfsight-app-lazy />
</template><AiChatbot id="YOUR-ID" />Learns from your website automatically
Lead forms and human handoff built in
Chat history, transcripts and analytics
Floating or embedded, styled in the editor
Free plan, no credit card
Loads the script once. The component adds platform.js on first mount and never twice.
Vue 3 and Nuxt. The same component works in Nuxt — render it on the client.
Floating or embedded. Put a floating chat in App.vue once; an embedded one where it should show.
<!-- AiChatbot.vue -->
<script setup lang="ts">
import { onMounted } from "vue";
const props = defineProps<{ id: string }>();
const SRC = "https://elfsightcdn.com/platform.js";
onMounted(() => {
if (document.querySelector(`script[src="${SRC}"]`)) return;
const s = document.createElement("script");
s.src = SRC;
s.async = true;
document.body.appendChild(s);
});
</script>
<template>
<div :class="`elfsight-app-${props.id}`" data-elfsight-app-lazy />
</template>Time to launch
AI Chatbot
Your own build
Knowledge
AI Chatbot
Your own build
Chat UI
AI Chatbot
Your own build
Leads and handoff
AI Chatbot
Your own build
Transcripts and analytics
AI Chatbot
Your own build
Costs
AI Chatbot
Your own build
Upkeep
AI Chatbot
Your own build