Add Aedan Rose to Your Website in 3 Minutes
No coding experience required. Just copy, paste, and go live.
Quick Start
Follow these simple steps to add Aedan Rose to your restaurant website:
1 Get Your Widget Code
Log into your Aedan Rose admin dashboard and navigate to:
Dev Tab → Widget Code Section
Your unique widget code will be displayed there, automatically generated for your restaurant.
2 Copy the Code
Click the "Copy Code" button or manually select and copy your widget code.
3 Paste on Your Website
Add the code to your website before the closing </body> tag.
See platform-specific guides below for detailed instructions.
Widget Installation (Recommended)
The widget appears as a floating chat bubble on your website. This is the most popular integration method.
Step 1: Get Your Widget Code from Admin Dashboard
Your widget code is automatically generated in the Dev Tab of your admin dashboard with your unique restaurant ID already embedded. Here's what it looks like:
<!-- Aedan Rose AI Restaurant Agent -->
<script>
(function() {
var s = document.createElement('script');
s.src = 'https://aedanrose.ai/widget.js';
s.defer = true;
s.setAttribute('data-restaurant-id', 'YOUR_RESTAURANT_ID');
s.setAttribute('data-api-url', '/api/v1');
s.setAttribute('data-primary-color', '#667eea');
document.head.appendChild(s);
})();
</script>
<!-- End Aedan Rose Widget -->
Step 2: Add Code to Your Website
Paste the code in the <head> section of your website on every page where you want Aedan Rose to appear.
Iframe Embedding (Alternative)
Use this method to embed Aedan Rose as a full chat window on a dedicated page or section.
When to Use Iframe:
- Dedicated "Chat with Us" or "Order Online" page
- Contact page embedded chat
- Sidebar chat on your homepage
Iframe Code Example:
Get your personalized iframe code from the Dev Tab. It will look like this:
<!-- Aedan Rose Iframe Embed -->
<iframe
src="https://aedanrose.ai/widget.html?id=YOUR_RESTAURANT_ID&color=%23667eea&mode=iframe"
width="420"
height="640"
frameborder="0"
style="border:0; border-radius: 16px; box-shadow:0 10px 30px rgba(0,0,0,.12);"
title="AI Chat Assistant"
></iframe>
id- Your restaurant ID (required)color- Primary color in URL-encoded hex format (optional, default: #667eea)mode- Set to "iframe" for embedded mode (required)
Custom Sizing:
You can customize the iframe dimensions directly in the Dev Tab using the "Resize iFrame" feature. Simply enter your desired width and height, and the code will be updated automatically.
<!-- Custom Size Example -->
<iframe
src="https://aedanrose.ai/widget.html?id=YOUR_RESTAURANT_ID&color=%23667eea&mode=iframe"
width="500"
height="700"
frameborder="0"
style="border:0; border-radius: 16px; box-shadow:0 10px 30px rgba(0,0,0,.12);"
title="AI Chat Assistant"
></iframe>
Platform-Specific Installation
Choose your website platform for step-by-step instructions:
WordPress Installation
- Install the "Insert Headers and Footers" plugin (or use your theme's custom code feature)
- Go to Settings → Insert Headers and Footers
- Paste your widget code in the "Scripts in Footer" section
- Click "Save"
- Visit your website to confirm Aedan Rose appears
Shopify Installation
- Go to Online Store → Themes
- Click "Actions" → "Edit Code"
- Find the theme.liquid file in the Layout folder
- Scroll to the bottom and paste your widget code before </body>
- Click "Save"
- Preview your store to confirm
Wix Installation
- Go to Settings → Custom Code
- Click "+ Add Custom Code"
- Paste your widget code
- Set placement to "Body - End"
- Choose "All Pages" (or select specific pages)
- Click "Apply"
Squarespace Installation
- Go to Settings → Advanced → Code Injection
- Paste your widget code in the "Footer" section
- Click "Save"
- Visit your site to confirm
Custom HTML Installation
- Open your website's HTML file in a text editor
- Find the closing </body> tag (usually near the bottom)
- Paste your widget code right before it
- Save the file
- Upload to your server (via FTP or hosting control panel)
<!-- Your existing HTML -->
<footer>
<!-- Footer content -->
</footer>
<!-- Aedan Rose Widget Code - PASTE HERE -->
<script>
window.aedanConfig = { ... };
</script>
<script src="https://cdn.aedan.ai/widget.js" async></script>
</body>
</html>
Customization Options
Change Colors to Match Your Brand
Customize the widget color directly in your widget code by changing the data-primary-color attribute:
<script>
(function() {
var s = document.createElement('script');
s.src = 'https://aedanrose.ai/widget.js';
s.defer = true;
s.setAttribute('data-restaurant-id', 'YOUR_RESTAURANT_ID');
s.setAttribute('data-api-url', '/api/v1');
s.setAttribute('data-primary-color', '#ff6b00'); // 👈 Change this to your brand color
document.head.appendChild(s);
})();
</script>
Customize Widget Behavior
For advanced customization like welcome messages and positioning, visit the Settings Tab in your admin dashboard where you can configure:
- Primary widget color
- Restaurant-specific greetings and welcome messages
- Business hours and operating schedule
- Special instructions for AI responses
API Keys (Advanced)
The Dev Tab provides API keys for advanced integrations and programmatic access:
Public API Key
Your public API key is displayed in the Dev Tab and is safe to use in client-side code. It's automatically included in your widget code.
Testing and Validation
The Dev Tab includes powerful testing tools:
- Test Live AI: Opens a test window to chat with your AI in real-time
- Validate Setup: Checks if your widget code is correctly configured
- Run Full Diagnostic: Comprehensive system check including API connectivity and AI training status
- Test API Connection: Verifies your backend connection is working
- Verify AI Training: Confirms your AI has been trained with your documents
Downloadable Test Files
The Dev Tab lets you download complete HTML test files with your widget embedded for local testing.
Testing Your Installation
How to Verify Aedan Rose is Working:
- Visit your website in incognito/private browsing mode
- Look for Aedan Rose's chat bubble (bottom right by default)
- Click the bubble to open the chat
- Send a test message: "I'd like to make a reservation"
- Aedan Rose should respond within 1-2 seconds
Account Management & Deletion
You can manage or permanently delete your Aedan Rose account at any time.
Delete from the mobile app (fastest)
The Aedan Rose mobile app is available for both iOS and Android:
- Open the Aedan Rose app → More → Profile.
- Scroll to the bottom and tap Delete Account Permanently.
- Confirm. Deletion is instant and wipes all restaurants, employees, schedules, orders, reservations, menus, and analytics.
Delete from the web (no sign-in required)
- Go to aedanrose.ai/delete-account.
- Submit the form with your account email. We'll email a verification link.
- Click the verification link. Our team reviews the request within 3–5 business days (this review step is a security measure).
- You'll receive a final confirmation email when the account is deleted.
Account deletion is permanent and irreversible. Certain records may be retained in anonymized form in our financial or security logs as required by law.
Troubleshooting
Widget Doesn't Appear
- Check if code is pasted before </body> tag (not </head>)
- Clear your browser cache (Ctrl+F5 or Cmd+Shift+R)
- Verify your restaurant ID is correct in the code
- Check browser console for JavaScript errors (F12 → Console tab)
Widget Appears but Doesn't Respond
- Verify your Aedan Rose account is active (check admin dashboard)
- Ensure you've uploaded your menu in the admin dashboard
- Check your plan's conversation limits aren't exceeded
- Contact support if issue persists
Widget Looks Different Than Expected
- Verify customization code syntax is correct
- Check if your website's CSS is overriding widget styles
- Try using !important in custom CSS if needed
Next Steps: Training Your AI
After installing the widget, you need to train Aedan Rose on your restaurant's specific information. Here's how:
1. Prepare Your Training Documents
You'll need 2 PDF files:
- Menu PDF: Your complete menu with items, prices, and descriptions
- About/Overview PDF: Information about your restaurant (history, specialties, policies, hours, location, etc.)
2. Upload Training Documents
Go to Admin Dashboard → Settings Tab → Training Section
- Click "Choose Files" and select your 2 PDFs
- Click "Upload Documents" - files will be securely stored and versioned
- Wait for upload confirmation (green checkmark)
3. Run AI Training
After uploading documents:
- Click the "Train Aedan Rose" button
- Training takes 2-5 minutes (watch the progress indicator)
- AI will extract menu items, prices, policies, and restaurant information
- You'll see "Training completed" when finished
4. Test Your Trained AI
Use the Dev Tab → "Test Live AI" button to verify training worked:
- Ask: "What are your hours?" (should answer from your About PDF)
- Ask: "What's on the menu?" (should list items from your Menu PDF)
- Ask: "How much is [specific menu item]?" (should provide exact price)
5. Connect Stripe to Accept Online Orders 💳
Want customers to pay for orders directly through Aedan Rose? Connect your Stripe account to start accepting online payments.
- ✅ Secure: Industry-leading payment security (PCI-DSS Level 1)
- ✅ Aedan Rose takes 0% of your food revenue: Customers pay the 3% AI Service Fee separately on top of their order — Aedan Rose never deducts from your sales
- ✅ Direct deposits: Money goes straight to YOUR bank account from your Stripe balance
- ✅ Aedan Rose never touches your money: Stripe holds and disburses everything
- ✅ Fast setup: 5-10 minutes to connect
How It Works:
- Customer orders through Aedan Rose chat: "I want 2 pizzas for delivery"
- Aedan Rose calculates total and adds 3% AI service fee
- Aedan Rose generates secure payment link and sends to customer
- Customer clicks link → Redirected to Stripe checkout page
- Customer pays with credit card (hosted by Stripe, not us)
- Money split automatically by Stripe:
- The full order amount (food, drinks, etc.) goes to YOUR Stripe account → YOUR bank account, less Stripe's industry-standard 2.9% + $0.30 payment processing fee
- 3% AI Service Fee is split to Aedan Rose by Stripe automatically — this is added on top of the customer's order, not deducted from your food revenue
- Aedan Rose takes 0% of your food revenue; the only fee deducted from your Stripe balance is Stripe's own processing fee, which is set by Stripe and outside our control
- Order confirmed in your admin dashboard
Customer orders $30.00 worth of food
+ $0.90 (3% AI Service Fee — customer pays this on top, not deducted from your food revenue)
= $30.90 total customer pays
Stripe processes the $30.90 and:
🏦 Splits $0.90 to Aedan Rose (AI Service Fee)
💰 Splits $30.00 to YOUR Stripe balance, then deducts Stripe's own industry-standard 2.9% + $0.30 payment processing fee (~$1.17 on a $30 split). You net ~$28.83 in your bank in 2–7 business days.
Stripe's processing fee is set by Stripe and is the industry standard for every payment processor (PayPal, Square, etc.). Aedan Rose has no control over and receives no portion of it.
Step-by-Step Setup:
Option 1: I Already Have a Stripe Account (Recommended)
- Log into Aedan Rose Admin Dashboard
- Go to Settings Tab
- Scroll to "Payment Processing" section
- Click "Connect Existing Stripe Account"
- Button will be orange/blue - can't miss it!
- Authorize Connection
- You'll be redirected to Stripe.com
- Log into your existing Stripe account
- Stripe will ask: "Allow Aedan Rose by Aedan Rose to access your account?"
- Click "Connect"
- Verify Connection
- You'll be redirected back to Aedan Rose dashboard
- Status should show: ✅ Connected
- Your Stripe account ID will be displayed
- Test It!
- Open your AI chat widget
- Place a test order: "I want to order a burger for pickup"
- Aedan Rose should generate a payment link
- Click link to see Stripe checkout page
Option 2: I Don't Have a Stripe Account Yet (New to Stripe)
- Log into Aedan Rose Admin Dashboard
- Go to Settings Tab
- Scroll to "Payment Processing" section
- Click "Create New Stripe Account"
- Alternative button below "Connect Existing Account"
- Complete Stripe Onboarding Form
- You'll be redirected to Stripe's onboarding page
- Fill out business information (5-10 minutes)
- What Information You'll Need:
- Business Details: Restaurant name, address, phone, website
- Tax Information: EIN or SSN (for tax reporting)
- Bank Account: Routing number and account number (where you'll receive payouts)
- Identity Verification: Upload driver's license or passport
- Business Owner Info: Name, DOB, address
- Submit and Wait for Verification
- Stripe reviews your application (usually instant, sometimes 1-2 business days)
- You'll receive email confirmation when approved
- Return to Aedan Rose Dashboard
- Once approved, connection status shows: ✅ Connected
- You're ready to accept payments!
- ✅ Aedan Rose can now generate secure Stripe checkout links for customer orders
- ✅ Aedan Rose takes 0% of your food revenue — the 3% AI Service Fee is paid by the customer on top of their order, separately
- ✅ Payments automatically split by Stripe: order total to your Stripe balance, AI Service Fee to Aedan Rose
- ✅ Stripe's industry-standard 2.9% + $0.30 payment processing fee is deducted from your Stripe balance (this is the same rate every payment processor charges and is outside Aedan Rose's control)
- ✅ Net amount deposited to your bank account in 2-7 business days (Stripe standard)
- ✅ View all payment activity in your Stripe dashboard; full order history in Aedan Rose admin dashboard
Security & Privacy:
- 🔒 No credit card data stored by us: All payment info stays with Stripe
- 🔒 PCI-DSS Level 1 Certified: Highest security standard for payment processing
- 🔒 Your money, your control: We can't access your Stripe balance or bank account
- 🔒 Disconnect anytime: Revoke access in Settings tab with one click
Common Questions:
Q: Does Aedan Rose take a percentage of my food revenue?
A: No. Aedan Rose takes 0% of your food revenue. The 3% AI Service Fee is added on top of the customer's order and paid by the customer (not deducted from your sales). Example: $30 order = customer pays $30.90, Aedan Rose receives $0.90, your $30.00 food revenue goes to your Stripe balance.
Q: What does Stripe charge?
A: Stripe charges its industry-standard rate of 2.9% + $0.30 per successful card transaction on US domestic cards — the same rate charged by PayPal, Square, Adyen, Shopify Payments, and every other major payment processor. This fee is set entirely by Stripe and is deducted from your Stripe balance before payout. Aedan Rose has no control over this fee and receives no portion of it. International cards, Amex, and currency conversion carry additional Stripe surcharges. Full pricing: stripe.com/pricing.
Q: When do I get paid?
A: Stripe deposits to your bank account in 2-7 business days (varies by bank). First payout may take 7-14 days for new accounts.
Q: Can I use Stripe if I'm outside the US?
A: Yes! Stripe supports 40+ countries. During onboarding, select your country and provide local bank details.
Q: What if a customer disputes a charge?
A: Handle disputes directly in your Stripe dashboard. Stripe provides tools to respond and resolve disputes.
Q: Can I disconnect Stripe later?
A: Yes! Go to Settings Tab → Payment Processing → Click "Disconnect Stripe". Takes effect immediately.
Q: Who pays the 3% AI service fee?
A: The customer pays it. It's added to their order total automatically. The 3% fee covers AI processing, secure infrastructure, and 24/7 support. Enterprise plans (20,000+ orders/month) may qualify for reduced fees - contact us!
Stuck during setup? We're here to help:
📧 Email: help@aedanrose.ai
💬 Chat: Click the Aedan Rose widget on any page
📚 Help Center: Detailed guides and FAQs
6. Monitor Performance
Track your AI's performance in the Analytics tab:
- Revenue Analytics: Track order values and trends
- Customer Intelligence: See customer behavior patterns
- AI Performance: Monitor confidence scores and response accuracy
- Email Analytics: Track email notification delivery
Training Best Practices
What Makes Good Training Data?
- Menu PDF: Organized by categories (Appetizers, Entrees, Desserts, Drinks), clear pricing, ingredient details, dietary info
- About PDF: Business hours, location/address, phone number, restaurant history, specialty dishes, dietary accommodations, reservation policies, delivery/takeout info
- Quality over quantity: 2 well-organized PDFs train better than 10 messy ones
- Keep it updated: Re-train when you update your menu or change policies (uses 1 training credit per run)
Common Training Mistakes to Avoid
- ❌ Uploading image-only PDFs (scanned menus without text layer)
- ❌ Including outdated menu items or incorrect prices
- ❌ Forgetting to include essential info like hours and location
- ❌ Not testing the AI after training
- ❌ Using Word docs or images instead of PDFs
Embed Attribute Reference
The widget script supports exactly four data-* attributes. Anything else is ignored.
data-z-index, data-delay-ms, or other custom attrs, they are not supported by this widget. Use CSS targeting #gaazzeebo-widget for additional customization.
Position Examples
<!-- Bottom-right (default) -->
<script src="https://aedanrose.ai/widget.js" data-restaurant-id="..." defer></script>
<!-- Bottom-left -->
<script src="https://aedanrose.ai/widget.js" data-restaurant-id="..." data-position="bottom-left" defer></script>
<!-- Top-right with custom brand color -->
<script src="https://aedanrose.ai/widget.js" data-restaurant-id="..."
data-position="top-right" data-primary-color="#ff6b00" defer></script>
REST API Reference
The Aedan Rose REST API is organized around resources and uses standard HTTP verbs. All requests must include a Bearer token obtained via the auth flow. Production base URL: https://aedanrose.ai
Authorization: Bearer <your-token> on every request. Tokens are issued by POST /auth/login and refreshed transparently by the admin dashboard. For server-to-server use, contact help@aedanrose.ai for an enterprise API key.
Authentication
| Method | Path | Purpose |
|---|---|---|
POST | /auth/signup | Create a new restaurant account |
POST | /auth/login | Exchange credentials for an access token |
GET | /auth/me | Get current user + restaurant context |
Conversations & Chat
| Method | Path | Purpose |
|---|---|---|
GET | /restaurants/:id/chat/messages | Fetch group-chat messages |
POST | /restaurants/:id/chat/messages | Send a group-chat message |
POST | /restaurants/:id/chat/dm/* | Direct-message endpoints |
POST | /agent/* | Customer-facing AI agent endpoints (used by the widget) |
Scheduling
| Method | Path | Purpose |
|---|---|---|
GET/POST/PATCH/DELETE | /restaurants/:id/shifts | Shift CRUD |
GET/POST | /restaurants/:id/employees | Employee management |
GET/POST | /restaurants/:id/time-off | Time-off requests & approvals |
GET/POST | /restaurants/:id/shift-trades | Shift trade requests, approvals, claims |
GET/POST | /restaurants/:id/blackout-dates | Blackout date management |
Tasks & Operations
| Method | Path | Purpose |
|---|---|---|
GET/POST | /restaurants/:id/tasks | Task templates + instances |
GET/POST | /restaurants/:id/tasks/categories | Task category management |
POST | /restaurants/:id/tasks/generate | Bulk-generate tasks from templates |
Billing & Plans
| Method | Path | Purpose |
|---|---|---|
POST | /stripe/create-checkout-session | Start a Stripe-hosted checkout |
GET/PUT | /restaurants/:id/plan | Read or change plan tier |
Analytics, Status & Marketing
| Method | Path | Purpose |
|---|---|---|
GET | /analytics/* | Conversation, performance, revenue analytics |
GET | /status | Platform health status (also rendered at /status.html) |
POST | /marketing/* | Email campaigns, broadcasts, segments |
POST | /contact | Public contact form submissions |
POST | /public/deletion-requests | End-user account deletion requests |
All /restaurants/:id/* routes enforce row-level security — you can only read or write your own restaurant's data. Cross-tenant requests return 403.
Webhooks
Aedan Rose receives webhooks from Stripe (billing events) and SendGrid (email delivery events). If you're integrating your own payment provider or email service, contact help@aedanrose.ai.
Stripe Webhook
- Endpoint:
POST /webhooks/stripe - Signature header:
Stripe-Signature - Verification: HMAC-SHA256 using your Stripe webhook signing secret. Requests with invalid signatures return
400. - Events consumed:
checkout.session.completed,customer.subscription.updated,customer.subscription.deleted,invoice.payment_succeeded,invoice.payment_failed
SendGrid Webhook
- Endpoint:
POST /webhooks/sendgrid - Signature header:
X-Twilio-Email-Event-Webhook-Signature - Verification: ECDSA signature using your SendGrid public key.
- Events consumed:
delivered,bounce,blocked,spam_report,unsubscribe,open,click
Error Codes
All API errors return JSON with shape { "statusCode": <n>, "message": "<string>", "error": "<string>" }.
| Status | When you see it | What to do |
|---|---|---|
400 | Invalid request body, missing required field, malformed JSON | Inspect message for the specific field; fix and retry |
401 | Missing or expired token | Refresh credentials; re-login |
403 | Cross-tenant access attempt or insufficient role | Confirm restaurant ID matches your account; check role requirements |
404 | Resource not found, or RLS-hidden from your tenant | Verify the resource ID; if accessing another tenant's data, you'll see 404 not 403 |
409 | Conflict — duplicate email, shift overlap, etc. | Read message for the conflicting field |
422 | Validation failed (e.g., invalid date range) | Check field constraints; retry with valid values |
429 | Rate limit exceeded | Back off; see Rate Limits |
500 | Server error — usually transient | Retry with exponential backoff. If persistent, check status page |
503 | Service unavailable — maintenance or incident | Check status page for current incident |
Rate Limits
The widget endpoints are sized for normal customer traffic; admin API endpoints are sized for dashboard use. If you need higher throughput for an integration, contact help@aedanrose.ai.
- Conversation limit: Hard-capped per plan tier (see Plan Feature Matrix). Excess conversations return
429withmessage: "Monthly conversation limit reached". - Auth endpoints: Bursty signin/signup is throttled to protect against credential stuffing.
- Public deletion form: 5 requests per IP per hour.
Retry-After header indicating seconds to wait before retrying.
Plan Feature Matrix
Every plan includes the full 5-agent AI system, analytics dashboard, team management, and 100+ language support. Differences are about volume and model tier.
| Plan | Price/mo | Conversations | Employees | Emails/mo | AI Model |
|---|---|---|---|---|---|
| Free | $0 | 25 | 3 | 280 | Gemini 2.5 Flash Lite |
| Starter | $28 | 500 | 5 | 440 | Gemini 2.5 Flash |
| Professional | $79 | 1,500 | 10 | 1,000 | Gemini 2.5 Pro |
| Growth | $139 | 5,000 | 15 | 2,500 | Gemini 2.5 Pro + API |
| Business | $229 | 10,000 | 25 | 5,000 | Gemini 2.5 Pro |
| Enterprise | $379 | 20,000 | 50 | 8,000 | Gemini 3 Flash (Exclusive) |
Add-ons (any plan)
- Extra conversations: $8 per 100
- Extra emails: $5 per 100
- Extra employees: $5 / employee / month
Full pricing details: /pricing.html
Role Permissions
Aedan Rose has four roles. Each has progressively more capability:
| Capability | Server | Manager | Admin | Owner |
|---|---|---|---|---|
| View own shifts & tasks | ✅ | ✅ | ✅ | ✅ |
| Request time off / shift trades | ✅ | ✅ | ✅ | ✅ |
| Send group-chat / DMs | ✅ | ✅ | ✅ | ✅ |
| Approve time off / trades | — | ✅ | ✅ | ✅ |
| Create / edit shifts & schedules | — | ✅ | ✅ | ✅ |
| Manage tasks & assignments | — | ✅ | ✅ | ✅ |
| Add / remove employees | — | — | ✅ | ✅ |
| View full analytics & revenue | — | — | ✅ | ✅ |
| Configure AI training & brand | — | — | ✅ | ✅ |
| Billing, plan & account settings | — | — | — | ✅ |
| Delete restaurant account | — | — | — | ✅ |
The 5-Agent AI System
Every Aedan Rose plan includes five specialized AI agents that coordinate behind the scenes. Customers interact primarily with Aedan Rose; the others are background specialists that handle domain-specific reasoning.
- Aedan Rose — Primary customer-facing agent. Handles greetings, menu Q&A, reservations, takeout/delivery routing, and general inquiries.
- Raguel — Reservations & booking specialist. Validates party size, time slots, and availability.
- Remiel — Menu & dietary specialist. Answers ingredient and allergen questions with high precision.
- Michael — Operations & logistics. Handles takeout routing, delivery quoting, and hours-based decisioning.
- Raphael — Sentiment & escalation. Detects unhappy customers and triggers staff handoff workflows.
Security Overview
- Row-Level Security (RLS). Every database table containing tenant data has RLS policies enforced at the PostgreSQL layer. Cross-tenant access is impossible even with a compromised application-layer auth token.
- Non-superuser application role. The application connects as
aedan_app, a non-superuser role withNOBYPASSRLS. Administrative operations require a separate, audited role. - Firebase authentication. User identity is managed by Firebase Auth — passwords are never stored in our database.
- TLS-only. All traffic uses TLS 1.2+ (HTTP requests are redirected). The widget refuses to load over plain HTTP.
- Stripe-hosted payments. Card data never touches Aedan Rose servers — checkout occurs on Stripe's PCI-DSS-certified hosted page.
- Audit logging. Auth, billing, and destructive actions are logged with actor, timestamp, and target.
Data & Privacy
- Tenant isolation. Your restaurant's conversations, customers, and analytics are isolated at the database level. Not visible to other restaurants on the platform.
- Customer PII. The widget collects only what customers volunteer in conversation. No browser fingerprinting, no cross-site cookies, no marketing pixels.
- End-user deletion. Customers can request deletion of their conversation history via /delete-account.html. Requests honored within 30 days.
- Retention. Conversation transcripts are retained for analytics. Configurable retention windows are available on Business and Enterprise plans.
- DPA / SCCs. Enterprise customers can request a signed Data Processing Addendum and Standard Contractual Clauses — email help@aedanrose.ai.
- Full policy: /privacy-policy.html
CORS & Content Security Policy
If your site uses strict CSP or non-default CORS, ensure the following:
Minimum CSP Directives
script-src 'self' https://aedanrose.ai;
connect-src 'self' https://aedanrose.ai wss://aedanrose.ai;
frame-src 'self' https://aedanrose.ai;
img-src 'self' https://aedanrose.ai data:;
style-src 'self' 'unsafe-inline' https://aedanrose.ai;
Allowed Origins
Add every origin where the widget will load (scheme + host + port). https://www.yourdomain.com and https://yourdomain.com count as separate origins. Local development origins (http://localhost:3000) must be added explicitly — file:// origins are not supported.
Reverse Proxies & CDNs
If you front your site with Cloudflare, Fastly, or Vercel, ensure Authorization, Origin, and X-Restaurant-Id headers are forwarded to origin.
For deep troubleshooting, see the Troubleshooting Guide in your admin dashboard's Dev tab.