AI-powered browser extension generator with multilingual tooltips and voice guidance.
- Visual Extension Builder - Create browser extensions through an intuitive dashboard
- AI-Powered Content - Generate tooltip text using OpenRouter or Google Gemini
- Multi-language Support - Built-in internationalization for multiple locales
- Voice Guidance - Text-to-speech with Web Speech API, Azure, or Google Cloud
- Production-Ready - Secure API proxy, rate limiting, and caching
- Node.js 18+
- npm or yarn
npm installCreate a .env.local file in the project root:
# Required: API authentication token (generate a secure random string, 32+ chars)
APP_API_TOKEN=your_secure_random_token_here
# AI Providers (configure at least one)
OPENROUTER_API_KEY=sk-your-openrouter-key
GEMINI_API_KEY=your-gemini-key
# TTS Providers (optional, for paid voice services)
AZURE_TTS_KEY=your-azure-key
AZURE_TTS_REGION=eastus
GCP_TTS_KEY=your-gcp-keySee SECURITY.md for detailed configuration instructions.
npm run devOpen http://localhost:3000 in your browser.
npm run build
npm startnpm test
npm run test:coverageAll AI and TTS requests are proxied through Next.js API routes:
/api/ai/generate- AI content generation/api/tts/synthesize- Text-to-speech synthesis
Benefits:
- API keys never exposed to clients
- Server-side rate limiting (60 req/min per token)
- Response caching (24h TTL)
- Centralized authentication
- Configure extension metadata and steps in the dashboard
- Define target elements (CSS selectors, test IDs, or text)
- Add localized tooltip content or generate with AI
- Build and download the extension package
- Load unpacked extension in Chrome/Edge
- Bearer token authentication for all API routes
- Strict Content Security Policy in generated extensions
- Scoped host permissions (no
<all_urls>by default) - Input validation and sanitization
- Rate limiting and caching
See SECURITY.md for complete security documentation.
src/
├── app/
│ ├── api/ # Next.js API routes
│ │ ├── ai/ # AI generation endpoints
│ │ └── tts/ # TTS synthesis endpoints
│ └── page.tsx # Main application page
├── components/ # React components
│ ├── BuilderView.tsx # Extension builder interface
│ ├── BuildsHistory.tsx # Build history view
│ └── ui/ # Reusable UI components
├── lib/
│ ├── extension-builder/ # Extension generation logic
│ │ ├── manifest-builder.ts
│ │ ├── content-script-builder.ts
│ │ ├── packager.ts
│ │ └── ...
│ ├── extension-runtime/ # Runtime components for generated extensions
│ │ ├── dom-targeting-engine.ts
│ │ ├── advanced-tooltip-manager.ts
│ │ └── ...
│ ├── services/ # AI and TTS service integrations
│ ├── middleware/ # Rate limiting utilities
│ └── cache/ # Caching utilities
└── types/ # TypeScript type definitions
curl -X POST http://localhost:3000/api/ai/generate \
-H "Authorization: Bearer ${APP_API_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"context": "Submit button",
"targetValue": ".submit-btn",
"targetKind": "css",
"locales": ["en", "es"],
"provider": "openrouter"
}'curl -X POST http://localhost:3000/api/tts/synthesize \
-H "Authorization: Bearer ${APP_API_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"text": "Click this button to submit",
"locale": "en",
"engine": "azure"
}'Extensions support the following configuration:
{
name: "My Extension",
version: "1.0.0",
description: "Extension description",
locales: ["en", "es", "fr"],
hosts: ["https://example.com/*"], // Scoped permissions
steps: [
{
targetKind: "css",
targetValue: ".button",
localizedTexts: {
en: "Click here",
es: "Haz clic aquí"
}
}
],
aiProvider: "openrouter",
ttsEngine: "webspeech"
}- Fork the repository
- Create a feature branch
- Make your changes with tests
- Run
npm testandnpm run lint - Submit a pull request
MIT
For security issues, see SECURITY.md.
For other questions, open an issue on GitHub.