Our mission is to be the preferred delivery service.
Our vision is to redefine logistics by offering our innovative solutions.
Project Completed
Active Members
Award Winning
Satisfaction Rate
We are trusted by our partners, clients and customers
24/7 customer support. All agents are readily available.
We delivered all items in time
tag in your index.html:
html
Features:
✅ Simple copy-paste solution
✅ Loads automatically with your page
✅ No JavaScript required
✅ Includes defer attribute for optimal loading
⚡ Option B — Programmatic TypeScript/JavaScript
1. Create the Helper File
Create readdyWidget.ts (or readdyWidget.js for JavaScript):
typescript
/**
* Readdy AI Widget Programmatic Injection Helper
* Use this in frameworks like React, Vue, Angular, or vanilla JS projects
*/
export interface ReaddyWidgetConfig {
/** Your Readdy project ID (default: your new ID) */
projectId?: string;
/** Widget mode: 'chat' | 'voice' | 'hybrid' */
mode?: 'chat' | 'voice' | 'hybrid';
/** Show voice transcript */
voiceShowTranscript?: boolean;
/** Theme: 'light' | 'dark' | 'auto' */
theme?: 'light' | 'dark' | 'auto';
/** Size: 'compact' | 'large' */
size?: 'compact' | 'large';
/** Accent color (hex) */
accentColor?: string;
/** Button base color (hex) */
buttonBaseColor?: string;
/** Button accent color (hex) */
buttonAccentColor?: string;
/** Main label text */
mainLabel?: string;
/** Start button text */
startButtonText?: string;
/** End button text */
endButtonText?: string;
}
/**
* Initialize Readdy AI widget programmatically
* @param config - Optional configuration overrides
*/
export function initReaddyWidget(config: ReaddyWidgetConfig = {}): void {
// Prevent duplicate injection
if (document.querySelector('script[src*="readdy.ai/api/public/assistant/widget"]')) {
console.warn('Readdy widget already initialized');
return;
}
// Use provided config or defaults
const {
projectId = '8e3a6d05-8f7c-4cfb-980f-c9250fd75e10',
mode = 'hybrid',
voiceShowTranscript = true,
theme = 'light',
size = 'compact',
accentColor = '#14B8A6',
buttonBaseColor = '#1F2937',
buttonAccentColor = '#FFFFFF',
mainLabel = 'Luca Homes Assistant',
startButtonText = 'Start Chat',
endButtonText = 'End Chat',
} = config;
// Create script element
const script = document.createElement('script');
// Build URL with query parameters
const url = new URL('https://readdy.ai/api/public/assistant/widget');
url.searchParams.set('projectId', projectId);
// Set attributes
script.src = url.toString();
script.setAttribute('mode', mode);
script.setAttribute('voice-show-transcript', voiceShowTranscript.toString());
script.setAttribute('theme', theme);
script.setAttribute('size', size);
script.setAttribute('accent-color', accentColor);
script.setAttribute('button-base-color', buttonBaseColor);
script.setAttribute('button-accent-color', buttonAccentColor);
script.setAttribute('main-label', mainLabel);
script.setAttribute('start-button-text', startButtonText);
script.setAttribute('end-button-text', endButtonText);
script.defer = true;
script.id = 'readdy-ai-widget';
// Append to body
document.body.appendChild(script);
console.log('Readdy widget initialized with project ID:', projectId);
}
/**
* Remove Readdy widget from DOM
*/
export function removeReaddyWidget(): void {
const widgetScript = document.getElementById('readdy-ai-widget');
if (widgetScript) {
widgetScript.remove();
console.log('Readdy widget removed');
}
}
/**
* Check if widget is already loaded
*/
export function isReaddyWidgetLoaded(): boolean {
return !!document.querySelector('script[src*="readdy.ai/api/public/assistant/widget"]');
}
2. Usage Examples
React/Next.js:
tsx
import { useEffect } from 'react';
import { initReaddyWidget } from './lib/readdyWidget';
function App() {
useEffect(() => {
initReaddyWidget({
// Optional overrides
theme: 'auto', // Dark/light based on system
size: 'large',
});
}, []);
return