Settings
Configure AI models, users, company info, and vector store for your tenant.
| Provider | Model | Role | Temp |
|---|
Containers let you group documents and filter RAG queries to a specific collection.
| Name | Color |
|---|
| Name | Role |
|---|
Index the built-in user guide into your AI knowledge base so the chat assistant can answer "how do I…" questions about the platform.
Move your vector embeddings from the shared database to your own dedicated PostgreSQL server with pgvector. This gives you full control over your data and independent scaling.
Usage trends, top queries, and activity breakdown for the last 30 days.
Create widget keys to embed a chat assistant on your website. Visitors can ask questions answered by your AI knowledge base.
| Label | Key | Container | Origins | Status |
|---|
Connect external services to automatically sync knowledge into your AI.
| File | Container | Chunks | Last Synced | Status |
|---|
• Mention
@HeartbeatAI in any channel to ask a question• Send a direct message to the bot for private queries
• The bot responds in threads to keep channels clean
• Mention
@HeartbeatAI in any Teams channel to ask a question• Send a direct message to the bot for private queries
• The bot responds in threads to keep channels organized
| Entity Type | Records | Chunks | Last Synced | Status |
|---|
Manage two-factor authentication and other security settings.
MFA is not enabled. Enable it to require a 6-digit code from your authenticator app when logging in.
Scan this QR code with your authenticator app (Google Authenticator, Authy, etc.), then enter the 6-digit code to verify.
MFA is enabled. You will be prompted for a code from your authenticator app when logging in.
SOC 2 compliance policy documents. Admins can view and export to PDF. Superadmins can edit content.
Index all policies into the AI knowledge base so users can ask compliance questions in the chat, Slack, and Teams. The policies will appear in a protected "Compliance Policies" container that cannot be modified via file uploads.
📄 Interactive Pages
AI-generated interactive HTML pages saved from your chat sessions. Click Open to view in a new tab.
Superadmin — Tenant Management
Create, configure, and enable/disable company tenants on this platform.
| Company | Tier | Users | Docs | Queries/Mo | Embeddings | Storage |
|---|
Click any value to update it. Changes are applied to Cloud Run and take effect on the next instance.
| Variable | Description | Status | Value | |
|---|---|---|---|---|
| Loading... | ||||
Purge expired sessions, email logs older than 90 days, and usage events older than 1 year.
Stripe Keys
- Go to Stripe Dashboard → API Keys
- Click Roll key on your Secret key → copy the new key
- Click the edit button next to
STRIPE_SECRET_KEYabove and paste the new key - For webhooks: go to Developers → Webhooks, click your endpoint, copy the signing secret
- Update
STRIPE_WEBHOOK_SECRETabove - Test by making a test purchase on the signup page
Google OAuth Client ID
- Go to GCP Console → APIs → Credentials
- Click your OAuth 2.0 Client ID
- To rotate: create a new OAuth client, update the client ID in App Settings (database), and update authorized redirect URIs
- Note: The OAuth Client ID is stored in the
app_settingstable, not an env var. Update it via direct DB access if needed. - Add your custom domain to Authorized JavaScript origins and redirect URIs
Gmail App Password
- Go to Google Account → App Passwords
- Revoke the existing app password
- Create a new one (select "Mail" and "Other")
- Copy the 16-character password
- Update
GMAIL_APP_PASSWORDabove - Also update
GMAIL_USERif the sender email changed
Sentry DSN
- Go to sentry.io → create a free account
- Create a new project (Platform: Python, Framework: FastAPI)
- Copy the DSN from Settings → Client Keys
- Paste it into
SENTRY_DSNabove - Errors will automatically appear in your Sentry dashboard
Custom Domain Setup
- Register your domain (e.g.
app.heartbeat-ai.com) with any registrar - Go to GCP Console → Cloud Run
- Click your heartbeat-ai service
- Go to the Integrations or Custom domains tab
- Click Add mapping and enter your domain
- Add the DNS records shown (CNAME or A record) at your registrar
- Wait for SSL certificate provisioning (5-15 minutes)
- Update
ALLOWED_ORIGINSabove to include your new domain, e.g.:https://app.heartbeat-ai.com,https://heartbeat-ai-643555112985.us-central1.run.app - Update
APP_BASE_URLto your custom domain - Update Google OAuth authorized origins to include the new domain
reCAPTCHA Keys
- Go to Google reCAPTCHA Admin
- Select your site or register a new one (reCAPTCHA v2 checkbox)
- Add your custom domain to the list of authorized domains
- Copy the Site Key → update
RECAPTCHA_SITE_KEY - Copy the Secret Key → update
RECAPTCHA_SECRET_KEY
Google Drive Integration (OAuth Client Secret)
- Go to GCP Console → APIs → Credentials
- Click your existing OAuth 2.0 Client ID (same one used for Sign-In)
- Copy the Client Secret → update
GOOGLE_OAUTH_CLIENT_SECRETabove - Ensure Google Drive API is enabled in API Library
- Add your app's callback URL to Authorized redirect URIs:
https://your-domain/integrations/drive/callback
Slack Bot Setup
- Go to Slack API → Your Apps
- Click Create New App → choose From scratch
- Name it "Heartbeat AI" (or your brand) and select your workspace
- Under OAuth & Permissions, add Bot Token Scopes:
chat:write,app_mentions:read,channels:history,groups:history,im:history - Add Redirect URL:
https://your-domain/integrations/slack/callback - Under Event Subscriptions, enable events and set Request URL:
https://your-domain/integrations/slack/events - Subscribe to bot events:
app_mention,message.im - From Basic Information, copy:
- Client ID →
SLACK_CLIENT_ID - Client Secret →
SLACK_CLIENT_SECRET - Signing Secret →
SLACK_SIGNING_SECRET
Microsoft Teams Bot Setup
- Go to the Azure Portal → Create a Bot
- Create a new Azure Bot resource with a new or existing App Registration
- In the App Registration, go to Certificates & secrets and create a new Client Secret
- Under Channels, enable the Microsoft Teams channel
- Set the Messaging endpoint to:
https://your-domain/integrations/teams/messages - Under Authentication → Redirect URIs, add:
https://your-domain/integrations/teams/callback - From the App Registration Overview, copy:
- Application (client) ID →
MSTEAMS_APP_ID - Client Secret value →
MSTEAMS_APP_SECRET
This module is currently under development. Stay tuned!
Heartbeat AI — User Guide
Part 1 — Super Admin Implementation
Super Admin1.1 — Platform Overview
As a Super Admin you have full control over the entire Heartbeat AI platform. You manage companies, provision modules, configure billing, and oversee all system-level settings.
- Access the Super Admin panel from the top nav (shield icon)
- View all registered companies, their subscription tiers, and user counts
- Toggle modules on/off per company and manage global settings
1.2 — Company Management
Create and configure companies that will use the platform:
- Navigate to Super Admin → Companies
- Click + New Company and fill in company name, admin email, and tier
- The company admin receives a welcome email with login instructions
- Set the Membership Tier (Free, Pro, Lifetime) to control feature access
1.3 — Module Activation
Enable or disable modules for each company:
- Go to Super Admin → Module Manager
- Toggle individual modules (Chat, Pages, Agents, Dynamic Forms) per company
- Mark modules as "Developed" or "Coming Soon" to control visibility
- Set display order to customize the navigation menu
1.4 — AI Model Provisioning
Configure which AI models are available across the platform:
- Go to Super Admin panel or Settings → Models
- Add API keys for OpenAI, Anthropic, Google Gemini, NVIDIA, Ollama, or custom providers
- Set default chat and embedding models per company
- Models appear in the sidebar dropdown for users to select during chat
- Each company needs one embedding model (config role: "embedding") — recommended:
gemini-embedding-001(Google) ortext-embedding-3-small(OpenAI). See Part 2, Section 2.3 for full list and base URLs.
1.5 — Billing & Stripe Integration
The platform integrates with Stripe for payment processing:
- Stripe checkout sessions are created automatically during company signup
- Webhook events confirm payment and activate the company account
- View payment status and email logs in the Super Admin dashboard
1.6 — Integration Credentials Setup
The platform supports several third-party integrations. As Super Admin, you manage the platform-level credentials. Tenant-level credentials are managed by each company admin.
Google Drive (Platform-Level)
- Go to Google Cloud Console → same project as your Google Sign-In
- Enable the Google Drive API
- Go to OAuth consent screen → add the
https://www.googleapis.com/auth/drive.readonlyscope - Copy your OAuth Client Secret and set it as
GOOGLE_OAUTH_CLIENT_SECRETin the Superadmin → Platform Config panel - Add your callback URL:
{APP_BASE_URL}/integrations/drive/callbackto Authorized Redirect URIs
Slack Bot (Platform-Level)
- Go to Slack API → Your Apps and create a new app
- Under OAuth & Permissions, add scopes:
chat:write,app_mentions:read,channels:history,groups:history,im:history - Under Event Subscriptions, enable events and set the request URL to
{APP_BASE_URL}/integrations/slack/events - Subscribe to bot events:
app_mention,message.im - Copy
Client ID,Client Secret, andSigning Secret→ set as env vars in Platform Config - Add redirect URL:
{APP_BASE_URL}/integrations/slack/callback
QuickBooks Online (Platform-Level)
- Go to Intuit Developer Portal and create an app
- Under Keys & credentials, select Production (or Sandbox for testing)
- Copy
Client IDandClient Secret - Add redirect URI:
{APP_BASE_URL}/integrations/quickbooks/callback - Set
QUICKBOOKS_CLIENT_IDandQUICKBOOKS_CLIENT_SECRETin Platform Config
Customer Stripe Invoicing (Tenant-Level)
Each company admin configures their own Stripe keys — no platform-level env vars needed:
- Tenant admins go to Settings → Integrations → Customer Stripe
- They enter their own
sk_live_...secret key - Optionally add Publishable Key and Webhook Secret
- Payments flow directly to their Stripe account — the platform never handles funds
Troubleshooting Common Issues:
- "OAuth client secret not configured" — Check that the env var is set in Platform Config and the service has been redeployed
- "Token refresh failed" — The user may need to re-authorize. Disconnect and reconnect the integration
- "Invalid redirect URI" — Ensure the callback URL in the provider's console exactly matches
APP_BASE_URL + /integrations/{service}/callback - "Webhook signature invalid" — Verify the signing/webhook secret matches between the provider and your config
- "QuickBooks 401 error" — Token expired. QB tokens expire after 1 hour; the platform auto-refreshes them, but if the refresh token expires (100 days), the user must reconnect
Part 2 — Company Admin Guide
Admin2.1 — Getting Started
After your company is provisioned, sign in with your Google account:
- Visit the Heartbeat AI login page and select your company
- Click Sign in with Google — your email must match the admin email on file
- You'll land on the Chat module by default with full admin privileges
2.2 — Knowledge Base Setup
Build your AI knowledge base by uploading documents:
- Go to Settings → Containers and create categories (e.g., "HR Policies", "Product Docs")
- Click the 📂 Files icon in the sidebar to open the Knowledge Base
- Upload PDFs, Word docs, Excel files, images, or plain text
- Files are automatically chunked, embedded, and stored in the vector database
- Assign each file to a container for organized retrieval
2.3 — AI Model Configuration
Configure the AI models your team will use:
- Go to Settings → Models
- Add models with their API keys — supported providers: OpenAI, Anthropic (Claude), Google Gemini, NVIDIA NIM, Ollama (local), and custom OpenAI-compatible endpoints
- Mark one model as the default for new conversations
- Add an embedding model (config role: "embedding") — this is required for document uploads and AI search
Supported Embedding Models
You need exactly one embedding model configured. Below are the recommended options:
| Provider | Model Name | Base URL | Dimensions |
|---|---|---|---|
| Google Gemini | gemini-embedding-001 |
https://generativelanguage.googleapis.com/v1beta/openai/ | 768 |
| OpenAI | text-embedding-3-small |
(leave blank — uses OpenAI default) | 1536 |
| OpenAI | text-embedding-3-large |
(leave blank — uses OpenAI default) | 3072 |
| OpenAI | text-embedding-ada-002 |
(leave blank — uses OpenAI default) | 1536 |
| Ollama (Local) | nomic-embed-text |
http://localhost:11434/v1 | 768 |
text-embedding-004 in late 2025. If you were using it, switch to gemini-embedding-001. Re-upload your documents after changing embedding models — existing embeddings are not compatible across different models.
2.4 — Team Management
Add and manage your team members:
- Go to Settings → Users
- Invite users by email — they must use Google Sign-In with that email
- Set roles: Admin (full access) or User (module access only)
- Remove users or change roles at any time
2.5 — Dynamic Forms Module
Create custom data-collection forms that auto-vectorize into your knowledge base:
- Open the Dynamic Forms module from the navigation menu
- Click + New to create a Module Instance (e.g., "HR Onboarding")
- In the Config tab, assign a RAG container, chat model, and embedding model
- Switch to Forms tab and click + New Form
- Use the drag-and-drop form builder to add fields: Text, Textarea, Number, Email, Date, Dropdown, Multi-select, Radio, Checkbox, File
- Save the form — it's immediately available for users to fill out
2.6 — Permission Management
Control who can access each Dynamic Forms instance:
- Open a module instance and go to the Access tab
- Grant access to individual users with User or Editor level
- Admins automatically have access to all instances
- Regular users only see instances they've been explicitly granted access to
2.7 — QR Code Strategy
Every form submission generates a unique QR code:
- QR codes link to a public detail page for the entry
- Scans are logged with IP, timestamp, and user agent for audit
- Use QR codes for employee badges, event check-ins, asset tracking, or document verification
- QR images include your company logo overlay for branding
2.8 — Company Branding
Customize your company's appearance:
- Go to Settings → Company
- Update your company name, logo URL, and primary color
- The logo appears on QR codes and public-facing pages
- Branding is applied across all shared content (pages, QR scans, exports)
2.9 — Analytics Dashboard
View usage trends and insights for your company:
- Go to Settings → Analytics
- See KPI cards at the top: total queries (30 days), active users, widget queries, and top container
- Query Volume — bar chart showing daily query counts over the last 30 days
- Top Queries — most frequently asked questions this month
- Most Active Users — team members sorted by query count
- Model Usage — breakdown of which AI models are used most
2.10 — Embeddable Chat Widget
Add an AI chat assistant to your website so visitors can ask questions answered by your knowledge base:
- Go to Settings → Widget
- Click + Create Widget Key and fill in:
- Label — a name for this widget (e.g. "Main Website")
- Allowed Origins — restrict which domains can use the widget (leave blank for any)
- System Prompt — optional custom instructions for the AI
- Welcome Message — greeting shown when the chat opens
- Starter Prompts — suggested questions for visitors
- After creation, click the </> button to copy the embed snippet
- Paste the
<script>tag into your website's HTML — a floating chat button appears - Widget queries count against your monthly quota
2.11 — User Guide & Help Mode
Make the platform self-explaining by indexing the user guide into your AI:
- Go to Settings → Company
- Scroll down to User Guide Knowledge Base
- Click Index User Guide — this stores the guide content in your RAG knowledge base
- In the Chat view, click the ? button next to the input to enter Help Mode
- While in Help Mode, your questions are answered from the user guide (e.g. "How do I upload a document?")
- Click ? again to return to normal document search
2.12 — Google Drive Integration
Connect Google Drive to automatically sync documents into your RAG knowledge base:
- Go to Settings → Integrations
- Click Connect Google Drive and authorize access with your Google account
- Once connected, click Browse Drive to see your files
- Use the search bar to find specific files, or click folders to navigate
- Select files with checkboxes and click Sync Selected
- Synced files are chunked, embedded, and added to your AI knowledge base
- Use the ↻ button on synced files to pull the latest version from Drive
2.13 — Slack Integration
Install a Slack bot that answers questions using your company's RAG knowledge base:
- Go to Settings → Integrations
- Click Add to Slack and install the bot in your workspace
- Once connected, the bot is ready to use in your Slack workspace
- Mention @HeartbeatAI in any channel followed by your question
- Or send a direct message to the bot for private queries
- The bot responds in threads to keep channels clean
2.14 — Contract Signatures
Create contract forms with digital signature capture and automatic PDF generation:
- Open any Dynamic Forms module instance and click + New Form
- Set Form Type to Contract
- Write your contract body template in the text area — use
{{field_key}}placeholders (e.g.{{client_name}},{{date}}) to insert submitted values - Add your form fields: client name, date, terms, etc.
- Click + Signature to add a signature capture field (only one per form)
- Save the form — it's ready for use
How signing works:
- Users fill out the form and draw their signature on the canvas pad
- On submit, the signature is captured as an image and stored with the entry
- Admins can Download PDF from the entry detail — the PDF contains the contract body with field values filled in, a table of all submitted data, the signature image, and a signed-by footer
- Admins can Send Contract to email the signed PDF to the signer
- Contracts are auto-vectorized into RAG — ask the AI "show me contracts signed by John" or "find the latest NDA"
2.15 — Customer Stripe Invoicing
Send invoices with Stripe payment links directly from your forms:
Step 1: Connect Stripe
- Go to Settings → Integrations → Customer Stripe
- Enter your Stripe Secret Key (starts with
sk_live_orsk_test_) - Optionally enter your Publishable Key and Webhook Secret
- Click Connect Stripe
Step 2: Create an Invoice Form
- In any Dynamic Forms module, click + New Form
- Set Form Type to Invoice — default fields (client name, email, amount, description, due date) are auto-added
- Customize fields as needed and save
Step 3: Send Invoices
- Fill and submit the invoice form with client details and amount
- Open the entry detail and click Create Payment Link — a Stripe payment link is generated
- Click Send Invoice — the client receives an email with a "Pay Now" button
- Track payment status: Pending → Paid
- Use Mark Paid for manual/offline payments
2.16 — QuickBooks Integration
Sync your QuickBooks Online data into the AI knowledge base for financial Q&A:
Connecting QuickBooks:
- Go to Settings → Integrations → QuickBooks Online
- Click Connect QuickBooks — you'll be redirected to Intuit's authorization page
- Sign in to your QuickBooks account and authorize the connection
- After authorization, you'll be redirected back — status shows "Connected"
Syncing Data:
- Select which data types to sync: Customers, Invoices, Payments
- Click Sync Now — data is pulled from QuickBooks, converted to text, and embedded into your RAG knowledge base
- The synced data table shows record counts, chunk counts, and last sync time
- Re-sync anytime to pull the latest data
Querying Financial Data:
- Go to Chat and ask questions like:
- "Who are our top 5 customers by balance?"
- "Show me all unpaid invoices"
- "What payments came in last month?"
- "How much does Acme Corp owe us?"
- Optionally filter by the quickbooks container to scope queries to QB data only
Part 3 — End User Guide
User3.1 — Signing In
Access Heartbeat AI with your Google account:
- Visit the platform URL provided by your admin
- Enter your company name and click Sign in with Google
- Your email must be registered by an admin — if not, you'll see an "Unauthorized" message
- Once signed in, the navigation menu shows your available modules
3.2 — AI Chat
Ask questions and get AI-powered answers from your company's knowledge base:
- Click 💬 Chat in the navigation menu
- Select an AI model from the sidebar dropdown (e.g., GPT-4, Claude, Gemini)
- Optionally filter by Container to scope answers to specific document sets
- Type your question and press Enter or click Send
- The AI retrieves relevant passages from your documents and generates an answer with source citations
3.3 — Interactive Pages
Create and interact with AI-generated content:
- Ask the AI to create quizzes, surveys, forms, or reports in the chat
- When the AI generates HTML content, click Save as Page to store it
- Open the 📄 Pages module to view and manage saved pages
- Share pages via public links — visitors provide their name and email before accessing
- Quiz scores and form submissions are automatically captured
3.4 — Multi-Agent Pipeline
Leverage multiple AI workers for complex tasks:
- Open the 🤖 Agents module
- Add worker agents — each with its own model, system prompt, and document scope
- Submit a task and all workers process it in parallel
- A Supervisor agent synthesizes their outputs into a unified, comprehensive response
- Great for getting diverse perspectives or comparing model outputs
3.5 — Dynamic Forms & Data Entry
Fill out forms and contribute to the knowledge base:
- Open a Dynamic Forms module instance you have access to
- In the Forms tab, click a form to fill it out
- Complete all required fields and click Submit
- Your submission is auto-vectorized — the AI can now answer questions about your data
- View your entries in the Entries tab with search and filters
3.6 — QR Codes
Every form submission gets a unique QR code:
- Click the QR button on any entry to view or download the QR code
- Share or print the QR code — anyone scanning it sees the entry details
- All scans are logged for audit purposes
3.7 — AI Insights & Module Chat
Ask questions about data within a Dynamic Forms module:
- Open a module instance and switch to the AI Chat tab
- Ask questions like "How many entries were submitted this month?" or "List all employees in Engineering"
- The AI searches only within that module's vectorized data for precise answers
3.8 — Reporting & Export
Export your data for analysis or sharing:
- Excel Export: Click 📥 Excel in the Entries tab to download a spreadsheet of all entries
- PDF Export: Click 📄 PDF for a formatted report
- AI Report: Use the AI to generate narrative reports and insights from your data
- Chat responses can be exported as Excel, PDF, or sent via email
Part 4 — Best Practices & Security
Security4.1 — Data Privacy
Heartbeat AI is designed with multi-tenant data isolation:
- Each company's data is completely isolated — no cross-company data leakage
- Documents, embeddings, chat history, and form data are all company-scoped
- API keys are stored server-side and never sent to the browser
- Google Sign-In provides secure, passwordless authentication
4.2 — Optimizing AI Queries
Get the best results from your AI interactions:
- Use specific questions — "What is the return policy for electronics?" beats "Tell me about returns"
- Filter by container — narrow the scope to relevant document sets for faster, more accurate results
- Choose the right model — GPT-4/Claude for complex analysis, faster models for simple lookups
- Upload quality documents — clean, well-structured documents produce better embeddings
- Organize containers logically — separate topics into distinct containers for precision
4.3 — Access Control Best Practices
- Follow the principle of least privilege — only grant users access to the modules they need
- Use the Admin role sparingly — most team members should be Users
- Review user access lists periodically and remove inactive accounts
- Use Dynamic Forms permissions to control who can see sensitive data modules
4.4 — Document Management Tips
- Keep documents up to date — outdated docs lead to stale AI answers
- Use descriptive file names — they're included in the vector metadata
- Delete and re-upload documents when major changes occur (re-vectorizes automatically)
- Monitor your vector store size in Settings → Vector Store
4.5 — Platform Architecture
For the technically curious, Heartbeat AI is built with:
- Backend: FastAPI (Python) with SQLAlchemy ORM on PostgreSQL + pgvector
- AI: Multi-provider support (OpenAI, Anthropic, Google, NVIDIA, Ollama) with RAG pipeline
- Embeddings: pgvector for similarity search with cosine distance
- Infrastructure: Google Cloud Run with auto-scaling and Cloud SQL
- Auth: Google OAuth 2.0 with server-side session management
- Payments: Stripe Checkout with webhook verification
Contact & Support
Report an Issue
Dynamic Forms
Build forms, collect data, and query with AI