Browse documentation

🧭 Start Here

Blackcap Overview ✨ Blackcap Feature Catalog Installation First Run

🚀 Deploy Blackcap

Platform Stacks and Raspberry Pi Hardware Raspberry Pi Deployment Raspberry Pi Client Services GCP Deployment Application Updates Environment Variables and Secrets Reverse Proxy and TLS Background Jobs and Schedules

🛠️ Administer Blackcap

Organizations Users, Permissions, and Authentication Configuration Workspace Backups and Restore Database Administration Regression Testing Performance and Job Status Audit, Access Activity, and Logging GeoIP and Access Location Data Retention and Purge Support Requests API Tester and Postman Instance Reporting

🍽️ Use Recipes

Recipes and the Recipe Library Recipe Import and Discovery Recipe Editing and Cache Artifacts Recipe Sharing Social Recipe Import AI Recipe Image Generation

📅 Plan Meals

Meal Planner

🛒 Use Shopping Lists

Shopping Lists and Shop a List External and Household Shopping 🧩 Chrome Extension Shop With

🧺 Manage Kitchen Inventory

🧺 Kitchen Inventory

🖥️ Use Displays

Displays and Connections Assigning and Scheduling Display Content Remote Pi Client E-Ink Rendering Menu Refresh and Rendering Noun Project Footer Images

🧑‍🍳 Cook with Let’s Cook

🧑‍🍳 Let’s Cook 🧑‍🍳 Let’s Cook Controls and Timers

🤖 Use and Administer AI

🤖 AI in Blackcap 🤖 AI Providers and Connections 🤖 AI Seeds and Usage

🧩 Use the Chrome Extension

🧩 Blackcap Chrome Extension 🧩 Chrome Extension Recipe Capture 🧩 Chrome Extension Shop With 🧩 Chrome Extension Release and Privacy

🎮 Play Games

🎮 Games and Trivia

🔌 Integrations

Email Integration Cloud Storage Integrations Voice Assistants Shop With Integrations Authentication Providers

⚙️ Develop Blackcap

Application Architecture Database Service and Data Access SQLite and PostgreSQL Database Migrations Background Job Architecture Testing API Architecture Security and Organization Scoping UI, Icons, and Documentation Assets Blackcap-Safe Emoji Documentation Standards Terminology

⚠️ Troubleshoot Blackcap

⚠️ Troubleshooting Deployment Troubleshooting Display Troubleshooting Recipe Import Troubleshooting 🤖 AI Troubleshooting Backup Troubleshooting Database Troubleshooting Diagnostic Organization Clones Support Requests

Support Requests

Audience: User, Org Admin, System Admin, Support Related: Audit And Logging · Security And Scoping

Authenticated Admin and Mobile users can submit a Support Request when platform support is configured. The request includes the user’s description and a bounded set of safe diagnostic context, with optional resized image attachment support and organization-level rate limiting.

Support requests must not collect passwords, provider secrets, API Tokens, private keys, or unrestricted page data. Recipient and confirmation behavior depends on the requesting user and the organization’s primary administrative contact.

Blackcap includes a lightweight Support Request flow in the Admin UI and Mobile UI for customer-facing SaaS/GCP deployments and self-hosted installs that want a simple way for signed-in users to ask for help without leaving the current screen.

This is intentionally not a case-management system. Blackcap generates a case number, sends email, audits the send result, and increments the next case number. It does not track status, assignment, comments, reopen/close state, SLAs, or third-party case-system synchronization.

Configuration

Support Requests use DB-backed platform settings under Configuration → Platform → Support:

Setting Scope Default Notes
Enable Support Requests Platform false Users cannot send requests until enabled.
Support Email Address Platform none Required before enabling. There is deliberately no default address.
Case Prefix Platform BC Used with a five-digit number, such as BC00001.
Next Case Number Platform 1 Editable by a System Admin. The value is reserved atomically during submission.
Organization Requests Per Hour Platform 10 Maximum Support Requests one organization can send per rolling hour. Use 0 to disable this Support-specific limit.

Only System Admins can edit the platform Support group. Normal authenticated Admin and Mobile users can submit Support Requests when the platform Support settings are enabled and the support email address is valid.

User flow

When configured, the Admin user/account dropdown shows 🛟 Support Request directly above Logout, and the Mobile UI account dropdown shows the same action above Logout. The action opens a modal without leaving the page.

The modal captures:

  • required issue description
  • optional “what were you trying to do?” details
  • current URL and page title
  • visible screen errors/alerts on the current page
  • visible current-screen form field labels and values when they appear safe to capture
  • optional compressed image attachment, such as a screenshot or photo
  • optional page context from window.BLACKCAP_SUPPORT_CONTEXT, data-support-context, or common record data attributes
  • authenticated user and current organization context from the server
  • browser user agent, client IP/location when available, and runtime metadata

The current-screen error capture is best effort. Pages can make important errors more explicit by rendering them with .flash.error, .alert-danger, .error-message, .field-error, [role="alert"], [aria-live="assertive"], or data-support-error.

Current-screen field capture is also best effort. The browser captures visible input, textarea, and select values outside the Support Request modal, including their nearby label/name/placeholder when available. Passwords, hidden fields, file fields, CSRF/session/token-like fields, and fields whose label/name/id look sensitive are skipped on the client and filtered again on the server. Pages can opt out a whole panel with data-support-exclude.

The optional image picker is intended for a screenshot or photo when text context is not enough. The browser resizes/compresses the selected image before sending it to Blackcap. The backend validates the MIME type, magic bytes, filename, and final size, then attaches the image to the support-team email and the requester confirmation email without storing the image in Blackcap.

Complete captured diagnostic context

The server builds the following bounded, sanitized context. A field may be blank when the browser, request path, organization record, GeoIP provider, or runtime cannot supply it.

Group Captured fields
Submission Formatted local submission time and UTC ISO timestamp.
Organization Internal/public organization identifiers, organization name/display name, and organization time zone.
Requester User identifier, display/name/email, active role, base role, and the role label used in the email.
Primary org admin/contact Identifier, name, email, role/role label, source, and whether that person was copied on the customer confirmation.
Page and UI Source UI (admin, mobile, kiosk, api, or unknown), current URL, page title, referrer, server request path, Flask endpoint, and HTTP method.
User description Required issue description and optional additional goal/details. These are sent by email but the full description is not copied into the audit log.
Current screen Up to 10 bounded visible errors/alerts and up to 30 sanitized visible field entries captured outside the Support Request modal.
Page-specific context Sanitized window.BLACKCAP_SUPPORT_CONTEXT, data-support-context, or record-specific context supplied by the current page.
Browser/client Summarized user agent; client IP, IP version, private/public status, selection source, and whether a trusted proxy header was used.
GeoIP Country code/name, region, city, time zone, lookup provider, and lookup status when a public address and working local MMDB are available.
Application/build Blackcap version information, Git commit/build metadata where available, and application database schema version.
Server runtime Hostname, Python version, operating-system/platform summary, and runtime label.
Email transport Safe SMTP source label such as organization connection or platform configuration. Passwords, OAuth tokens, and encrypted references are never included.
Optional image Sanitized attachment metadata such as generated filename, media type, dimensions, and compressed size. Raw image bytes are attached to the emails but not embedded in diagnostic text or stored by Blackcap.
Case/email result Case number, support recipient, confirmation-recipient result, send status, warning/error summary, and UI source for the audit event.

The complete sanitized diagnostic context is size-limited. Individual strings, list lengths, nesting depth, and the overall context payload are trimmed when necessary.

Page-specific context extension

Any Admin or Mobile page can add safe context for support emails without changing the support service:

<script>
  window.BLACKCAP_SUPPORT_CONTEXT = {
    recipe_id: "recipe_abc123",
    recipe_title: "Weeknight Chili",
    source_url: "https://example.com/recipe"
  };
</script>

or:

<body data-support-context='{"display_id":"display_abc123","display_type":"hosted_receiver"}'>

The backend sanitizes client-provided context and treats it as diagnostic only. Never place secrets, raw tokens, cookies, reset links, SMTP passwords, OAuth credentials, or session identifiers in page context.

Sensitive data filtering

Before context is written into either email, Blackcap filters or trims suspicious keys such as:

  • password/passwd
  • secret/client_secret
  • token/API token/access token/refresh token
  • cookie/session/CSRF
  • MFA/TOTP
  • authorization/bearer/credential
  • SMTP password

Large values are trimmed and overly large context is compacted. Raw image bytes are never included in the text diagnostic context; only image metadata such as filename, dimensions, and compressed size are listed there. The user confirmation email gets a customer-safe context view at the bottom under Information included with your request.

Rate limiting

Support Requests have a platform-configurable organization-level rate limit. The default is 10 requests per organization per rolling hour. System Admins can adjust this in Configuration → Platform → Support → Organization Requests Per Hour. Setting the value to 0 disables this Support-specific limit. The global security rate-limit toggle still controls whether Blackcap rate limiting is active at all.

When the limit is reached, the user gets a clear message such as:

Test Org has reached the platform support request limit of 10 requests per hour. Please wait and try again.

The rate-limit check happens before a case number is reserved, so blocked requests do not consume case numbers.

Case numbering

Case numbers are generated from the platform prefix and the platform next number:

BC00001

The numeric setting is reserved and incremented through the centralized settings service using an immediate database transaction. This prevents duplicate case numbers under concurrent requests.

A failed SMTP send can consume a reserved case number. That is intentional: Blackcap audits the failed attempt but does not tell the user the request succeeded. Skipped numbers are acceptable because the feature is email/audit only, not a full case table.

SMTP sender selection

Support Request email uses this order:

  1. Active SMTP connection for the current organization.
  2. Enabled platform SMTP settings.
  3. Clear error if neither is usable.

For Support Requests, an active organization SMTP connection can send even when the platform email toggle used by normal recipe sharing/invite flows is disabled. Existing email behavior is preserved because the existing resolve_smtp_settings() behavior still gates normal sends with the platform email enabled flag.

The email From follows the selected SMTP configuration. The support-team email sets Reply-To to the requesting user and, when different, the organization's primary org admin/contact so the support inbox can reply to both people directly. If the header cannot be set safely, the requester and primary-admin emails are still included in the body.

When a non-primary-admin user submits a Support Request, the primary org admin/contact is kept in the customer-side loop by being copied on the requester confirmation email only. The primary org admin/contact is not CC'd on the support-team email because that message is for the configured support inbox. If the requester is already the primary org admin, no duplicate confirmation copy is added.

SMTP passwords and encrypted token references are never included in support emails or audit metadata. Audit/debug metadata only includes a source label such as organization_connection or platform.

Email templates

Support-team subject:

Support Request - Test Org - 6/17/26 - Case BC00001

Support-team body includes case number, organization, user, role, primary org admin/contact, whether the primary org admin/contact was copied on the customer confirmation, Blackcap app version, Git commit/build information, DB schema version, page URL/title, submitted description, visible screen errors, captured screen fields, optional image metadata, captured context, timestamp, and SMTP source.

User confirmation subject:

Blackcap Support Request Received - Case BC00001

The confirmation body thanks the user, includes the submitted message, organization, timestamp, primary org admin copy status when applicable, the optional image attachment, and the customer-safe diagnostic details at the bottom, including app version/build metadata.

Time zone and formatting

The subject date uses the Default organization time zone and the compact Blackcap date format:

m/d/yy

Email body timestamps use:

m/d/yy h:mm am/pm

Audit logging

Support Request actions audit:

  • case number
  • support recipient
  • current URL
  • send status
  • whether the confirmation email was sent
  • whether the primary org admin/contact was copied on the user confirmation
  • SMTP source label
  • UI source (admin or mobile)
  • visible screen error count
  • visible screen field count
  • whether an image was attached

The full issue description is not logged. The email remains the source of the detailed message.

Troubleshooting

Symptom Check
Support Request menu item is hidden Confirm Platform → Support is enabled and has a valid support email address. System Admins can still open the modal to see configuration warnings.
Modal says support is not configured Add a support email address and enable Support Requests in Platform → Support.
Send fails with SMTP unavailable Configure an active organization SMTP connection or enable platform SMTP settings.
Confirmation copy fails The support-team email was sent, but the requester email or SMTP recipient handling failed. Check the audit log and SMTP server logs.
Case number skipped A case number was reserved before an SMTP failure. This is expected and avoids duplicates. Rate-limited requests are blocked before case reservation.
Rate limit reached Increase or disable Organization Requests Per Hour in Platform → Support, or wait for the rolling hour window to clear.
Image attachment rejected The image could not be compressed under the allowed size or did not validate as an image. Choose a smaller screenshot/photo or remove it.
Sensitive values appear in context Remove them from page-specific support context and add the key fragment to SENSITIVE_KEY_FRAGMENTS in support_context_service.py.

Testing checklist

  • Platform Support settings have no default support email address.
  • System Admin can enable/disable Support Requests and edit prefix/next case number/rate limit.
  • Invalid support email is rejected.
  • Normal users cannot edit Platform Support configuration.
  • Authenticated users can open the modal when configured.
  • Modal opens from multiple Admin screens without navigating away.
  • Mobile account menu shows Support Request above Logout when configured.
  • Mobile modal captures URL, title, visible errors, and page-specific context.
  • Description validation works.
  • Visible .flash.error or [role="alert"] text is included in support emails.
  • Visible safe form field labels/values are included and sensitive field names are filtered.
  • Optional image is compressed client-side, validated server-side, and attached without being stored.
  • Organization hourly rate limit blocks the 11th request when the limit is 10 and does not consume a case number.
  • Blackcap version, Git commit/build, and DB schema version are included in diagnostic context.
  • Page context via window.BLACKCAP_SUPPORT_CONTEXT is included and sanitized.
  • Organization SMTP is preferred when active.
  • Platform SMTP fallback works when no org SMTP is active.
  • No usable SMTP returns a clear error.
  • Support-team email subject uses Support Request - Org Name - m/d/yy - Case BC00001.
  • Support-team email Reply-To includes requester and primary org admin/contact when different.
  • Support-team email does not CC the primary org admin/contact.
  • Primary org admin/contact is copied on the requester confirmation email only when requester is different.
  • User confirmation says a confirmation email was sent and includes safe diagnostics at the bottom.
  • Confirmation-copy failure returns a warning rather than a false success message.
  • Audit rows are created for success, partial success, and failure.
  • Existing invite, password reset, recipe share, and other email flows still work.
On this page