We have more than years of experience
We have a deep commitment to always delivering first-class service. Whether weβre in the office, the warehouse, or on the road, our six core values drive us.
We always provide people a complete solution focused moving goods by truck, train, ship, or plane.
We knowledge of the local terrain which enables us to provide unmatched secondary distribution service.
Parcel Delivered
Total Branch
Satisfied Clients
Delivered Packages
We are not know for delays, we provide fast transportation to all destinations
All items in our diposal are delivered in a timely and cost-effective manner.
We provide services to different part of the worlds.
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