Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.heylua.ai/llms.txt

Use this file to discover all available pages before exploring further.

Configuration Approaches

You can configure the widget in two ways — choose what works best for your workflow:

Dashboard Settings

Configure appearance and behavior in the Lua AI admin dashboard. Call window.LuaPop.init() with no arguments — the widget pulls settings automatically.

Inline Config

Pass configuration directly to window.LuaPop.init({...}). Useful for dynamic values or overriding specific dashboard settings.
Configuration priority: Inline config passed to window.LuaPop.init({...}) always takes priority over dashboard settings. To rely entirely on dashboard settings, call window.LuaPop.init() with no arguments.

Site Whitelisting

You must whitelist your domain before the widget will load. The widget silently refuses to initialise on any domain not in the allowed list.
1

Open the dashboard

Go to the Chat Widget section in your Lua AI admin dashboard.
2

Add your domain

Under Customization, add each domain where you want the widget to appear (e.g. https://yoursite.com).
3

Save

Save your settings. The widget will only initialise on whitelisted domains — requests from unlisted origins are blocked.
Testing on localhost? localhost cannot be whitelisted. You must pass your config inline and set environment: "production" explicitly — this bypasses the domain whitelist check so the widget loads during local development:
<script src="https://lua-ai-global.github.io/lua-pop/lua-pop.umd.js"></script>
<script>
  window.LuaPop.init({
    agentId: "your-agent-id",
    environment: "production"
  });
</script>

Installation Methods

CDN Script

Quickest setup — no build process

NPM Package

For modern frameworks and build tools
Perfect for static websites, WordPress, Shopify, or any HTML page.

Step 1: Add Script Tag

Add this code right before the closing </body> tag:
<script src="https://lua-ai-global.github.io/lua-pop/lua-pop.umd.js"></script>

Step 2: Initialize

Using dashboard settings (recommended):
<script>
  window.LuaPop.init();
</script>
Using inline config (advanced / overrides):
<script>
  window.LuaPop.init({
    agentId: "your-agent-id",
    position: "bottom-right",
  });
</script>

Complete Example

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>My Website</title>
</head>
<body>
  <h1>Welcome to My Website</h1>
  <p>Your content here...</p>

  <!-- LuaPop Chat Widget — settings pulled from the Lua AI dashboard -->
  <script src="https://lua-ai-global.github.io/lua-pop/lua-pop.umd.js"></script>
  <script>
    window.LuaPop.init();
  </script>
</body>
</html>

NPM Installation

For React, Vue, Angular, or other modern frameworks.

Step 1: Install Package

npm install @lua/pop

Step 2: Import and Use

import { LuaPopWidget } from '@lua/pop';
import '@lua/pop/dist/style.css';

function App() {
  return (
    <div>
      {/* Your app content */}
      
      <LuaPopWidget 
        config={{
          agentId: "your-agent-id",
          position: "bottom-right",
          buttonText: "Chat with AI"
        }}
        apiUrl="https://api.heylua.ai"
        cdnUrl="https://cdn.heylua.ai"
        authUrl="https://auth.heylua.ai"
      />
    </div>
  );
}

Platform-Specific Installation

WordPress

1

Access Theme Editor

Go to AppearanceTheme File Editor
2

Edit footer.php

Find your theme’s footer.php file
3

Add Script

Add before </body>:
<script src="https://lua-ai-global.github.io/lua-pop/lua-pop.umd.js"></script>
<script>
  window.LuaPop.init({
    agentId: "<?php echo get_option('luapop_agent_id'); ?>",
    position: "bottom-right",
  });
</script>
Alternative: Use plugin like “Insert Headers and Footers” to add the script without editing theme files.

Shopify

1

Access Theme Editor

Go to Online StoreThemesEdit code
2

Edit theme.liquid

Find theme.liquid in Layout folder
3

Add Script

Add before </body>:
<script src="https://lua-ai-global.github.io/lua-pop/lua-pop.umd.js"></script>
<script>
  window.LuaPop.init({
    agentId: "your-agent-id",
    chatTitle: "Shop Assistant",
    buttonText: "🛍️ Shop Help",
    position: "bottom-right",
  });
</script>
4

Save and Test

Click Save and view your store

Wix

1

Add Custom Code

Go to SettingsCustom Code
2

Add to Body End

Click + Add Custom CodeBody - end
3

Paste Code

<script src="https://lua-ai-global.github.io/lua-pop/lua-pop.umd.js"></script>
<script>
  window.LuaPop.init({
    agentId: "your-agent-id",
    position: "bottom-right",
  });
</script>
4

Apply to All Pages

Select “All pages” and click Apply

Squarespace

1

Access Code Injection

Go to SettingsAdvancedCode Injection
2

Add to Footer

In the Footer section, add:
<script src="https://lua-ai-global.github.io/lua-pop/lua-pop.umd.js"></script>
<script>
  window.LuaPop.init({
    agentId: "your-agent-id",
    position: "bottom-right"
  });
</script>
3

Save

Click Save and your chat widget will appear on all pages

Webflow

1

Open Project Settings

Go to Project SettingsCustom Code
2

Add to Footer Code

Paste in Footer Code section:
<script src="https://lua-ai-global.github.io/lua-pop/lua-pop.umd.js"></script>
<script>
  window.LuaPop.init({
    agentId: "your-agent-id",
    position: "bottom-right"
  });
</script>
3

Publish

Publish your site to see the widget

Single Page Applications

React

// components/ChatWidget.tsx
import { useEffect } from 'react';

export default function ChatWidget() {
  useEffect(() => {
    // Load LuaPop script
    const script = document.createElement('script');
    script.src = 'https://lua-ai-global.github.io/lua-pop/lua-pop.umd.js';
    script.onload = () => {
      window.LuaPop?.init({
        agentId: process.env.NEXT_PUBLIC_AGENT_ID,
        position: "bottom-right",
        sessionId: `user-${Date.now()}`
      });
    };
    document.body.appendChild(script);

    // Cleanup
    return () => {
      document.body.removeChild(script);
    };
  }, []);

  return null;
}

// In your main App component
import ChatWidget from './components/ChatWidget';

function App() {
  return (
    <div>
      {/* Your app */}
      <ChatWidget />
    </div>
  );
}

Next.js

// app/layout.tsx or pages/_app.tsx
import Script from 'next/script';

export default function RootLayout({ children }) {
  return (
    <html>
      <body>
        {children}
        
        {/* LuaPop Widget */}
        <Script 
          src="https://lua-ai-global.github.io/lua-pop/lua-pop.umd.js"
          strategy="lazyOnload"
          onLoad={() => {
            window.LuaPop?.init({
              agentId: process.env.NEXT_PUBLIC_AGENT_ID,
              position: "bottom-right"
            });
          }}
        />
      </body>
    </html>
  );
}

More Framework Examples

Vue, Angular, Svelte, and more

Verification

Check Installation

Open your website and verify:
1

Chat Button Appears

Look for the chat button in your chosen position
2

Button Opens Chat

Click the button - chat window should open
3

Chat Responds

Send a test message - AI should respond
4

No Console Errors

Check browser console (F12) - no errors should appear

Browser Console Check

// Type this in browser console to verify LuaPop loaded
console.log(window.LuaPop);
// Should show the LuaPop object

// Check current configuration
console.log(window.LuaPop.config);
// Should show your configuration

Environment Variables

For different environments, use environment variables:
# .env.local
NEXT_PUBLIC_AGENT_ID=your-agent-id
NEXT_PUBLIC_LUAPOP_ENV=production
window.LuaPop.init({
  agentId: process.env.NEXT_PUBLIC_AGENT_ID,
  environment: process.env.NEXT_PUBLIC_LUAPOP_ENV
});

Security Considerations

Never expose sensitive agent credentials in client-side code!

Best Practices

  • ✅ Use environment-specific agent IDs
  • ✅ Use staging environment for development
  • ✅ Generate unique session IDs per user
  • ✅ Don’t store user PII in runtimeContext
  • ✅ Use HTTPS on your website

Example Secure Setup

window.LuaPop.init({
  agentId: process.env.LUAPOP_AGENT_ID, // From environment
  environment: process.env.NODE_ENV === 'production' ? 'production' : 'staging',
  sessionId: generateSecureSessionId(), // Your session logic
  authToken: await getAuthToken() // If using authenticated users
});

Next Steps

Configuration

Complete configuration reference

Customization

Style the widget to match your brand

Examples

See real-world implementations

Troubleshooting

Common issues and solutions