Privacy Policy
LAST UPDATED: AUGUST 2026
1. What OpenedMic Is
OpenedMic is a browser-based live audio and video broadcasting service. A broadcaster opens a room; listeners join by room code, QR scan, or direct link. No installation or registration is required to use the service.
The service consists of a public landing page at https://www.openedmic.com/ and a separate operational application at https://www.openedmic.com/app. The application is designed for browser-first use and is installable on supported devices as a home-screen web application, without requiring distribution through a native app store.
2. No Registration Required
OpenedMic does not require you to create an account, provide an email address, or submit any personal information to use the service. You can create and join live rooms without registration.
3. Data Excluded from Self-Hosted Analytics and Error Telemetry
OpenedMic's self-hosted SQLite analytics database, analytics exports, and structured client-error telemetry are designed not to contain the data listed below. This does not mean those data are never processed. Some are used temporarily to operate a live room, stored locally in your browser, handled by infrastructure providers, or submitted through the contact form, as described in Sections 4, 7, 10, and 12.
- Names, email addresses, live-room display names, or avatars
- Room codes, room identifiers, or hashed room identifiers
- Raw or hashed IP addresses. Raw IP addresses are still processed temporarily in server memory for request rate limiting and by infrastructure and third-party services, as described in Sections 4 and 12.
- OpenedMic account, user, or session identifiers. OpenedMic does not issue user accounts or persistent user identifiers for the live service.
- Device fingerprints or browser fingerprints
- Chat message content
- Reaction content
- Room passwords
- Copied link text
- Audio, video, or media content of any kind
- Free-text client error messages, raw stack traces, or request bodies
- Persistent or session identifiers generated by OpenedMic for its self-hosted analytics records
4. Session Data
When you use OpenedMic, the following data may be processed temporarily to operate and protect the service. Each item is discarded according to the lifetime described below and is not written to the self-hosted analytics database unless Section 5 explicitly says otherwise.
- Room codes - randomly generated 6-character codes, held in server memory only for the duration of the room's lifecycle
- Display names and avatars: chosen voluntarily, sent as live-room data, held in server memory during the active session, and visible to other room participants. The display name may also be remembered on your device as described in Section 10.
- WebRTC signaling data: SDP offers, answers, and ICE candidates are processed in real time to establish audio or video connections and are not retained by OpenedMic's application server. Peers and connection providers may process network-address metadata as described in Section 12.
- Chat messages - relayed in real time within the room; not stored server-side
- Reactions - relayed in real time; content is not stored or counted in analytics
- HTTP request rate limiting: the server temporarily uses the request's network IP address as an in-memory key for four protections: TURN credentials, up to 10 requests per 60 seconds; client-error telemetry, up to 10 per 60 seconds; contact submissions, up to 5 per hour; and self-hosted analytics events, up to 60 per 60 seconds. The address is normalized before use, and these keys are never written to the SQLite analytics database or analytics exports. All four in-memory maps are swept every five minutes. Expired timestamps are also removed when the same address sends another request. The client-error and contact maps have a finite configured capacity. If either map is full, a request from a new address is rejected until an expired entry is removed.
- Broadcaster reconnect token - a short-lived random string stored in
localStorageunder a per-room key (om_btoken_[room]) during an active broadcast, used to reattach to the same room after a brief page refresh or transient disconnect. The token carries a client-side expiry of approximately 60 seconds and the server honors a 15-second reconnect grace window. The token is not linked to any account or profile - it is a random value scoped to one room - Approved Guest Mic state - a per-room state machine (idle / pending / approved / live) and an opaque request token are held in server memory only for the duration of the room. The token is randomly generated, never logged, and discarded as soon as the request is approved, denied, canceled, or times out. No guest identifier is persisted
4a. Approved Guest Mic - Privacy Specifics
When a listener uses the Approved Guest Mic feature, the following privacy properties apply:
- Microphone permission is required and explicit. After the broadcaster approves a request, the listener's browser asks for microphone access. If the listener denies the prompt, the guest mic ends cleanly and no audio is captured.
- Guest audio is transported via WebRTC. It uses a direct path from the guest to the broadcaster when available or an encrypted TURN relay when required by the network. The broadcaster mixes it into the outgoing room audio. OpenedMic does not record, transcribe, or store guest audio on its servers.
- The broadcaster's device receives a local-only monitor signal so the broadcaster can hear the approved guest through the selected audio output. This monitor is not transmitted as an additional stream and is not recorded.
- No guest identifier is stored. The broadcaster sees the guest's display name and avatar in the request prompt - these are the same per-session strings already covered in the Session Data list above. They are not persisted server-side and are not written to logs or analytics.
- Guest mic analytics are enum-only. The server records counter events (e.g. guest_mic_requested, guest_mic_started, guest_mic_ended) along with the broadcast mode and an end-reason category. No socket identifiers, no room codes, no usernames, no tokens, no SDP, no ICE candidates, no IP addresses, and no device identifiers are written.
5. Self-Hosted Operational Analytics
OpenedMic operates a self-hosted, server-side analytics system backed by a local SQLite database. It stores fixed technical and operational fields to understand product usage, service health, and feature adoption. It is designed to exclude direct identifiers, pseudonymous client or session IDs, raw IP addresses, raw User-Agent strings, room codes and URLs, names, contact content, and free text. Technical event records can still qualify as personal data under some laws when they can be related to an identifiable person, so this policy does not describe them as legally anonymous.
What the analytics system stores:
- Timestamps (UTC)
- Event type, including room creation; broadcast start or end; inbound room-link page load; join attempt; listener join or departure; listener connection milestones at 10 and 60 seconds; first-listener arrival; join failure; and feature use
- Broadcast mode or category selected
- Whether a room was private or public
- Listener count and peak listener count
- Operational durations in whole seconds, including broadcast duration and elapsed time from room creation until the first listener joins
- Language/locale setting
- Coarse device class derived from the request (mobile / tablet / desktop / unknown)
- Coarse browser family derived from the request (chrome / safari / firefox / edge / unknown)
- Coarse operating system family derived from the request (ios / android / windows / macos / linux / unknown)
- Join source category (QR code / direct link / manual code / unknown). The direct-link category also includes copied-link and native-share arrivals because those URLs are not separately tagged. The room URL and room code are not stored.
- Feature usage indicators (e.g. screen share used, recording started)
- Structured error category codes from a fixed whitelist (e.g. room_not_found, wrong_password, room_full, mic_permission_denied)
- PWA interaction signals (e.g. install prompt shown, install accepted, standalone launch detected)
- Server version at time of event
For listener-funnel measurement, OpenedMic stores technical event rows when an inbound room-link page with a six-character room parameter is loaded; a join is attempted; a listener joins or leaves; a listener connection remains active for at least 10 or 60 seconds; a room receives its first listener; or a join fails for an allowlisted reason such as room_full. Reports aggregate those rows into counts and timing summaries. Depending on the event, a row may include a UTC timestamp, event type, coarse join-source category, language setting, broadcast mode, private/public status, listener count, elapsed time in whole seconds, coarse device, browser, and operating-system families, and server version. It does not include the room code or URL, password, display name, socket or listener ID, IP address, raw User-Agent string, media content, or any persistent or session identifier.
Self-hosted operational analytics are stored in the configured SQLite database. At application startup, if a positive retention period is configured, records older than that number of days are deleted. If the retention setting is zero or unset, no age-based deletion is performed, and records remain until they are manually deleted or the underlying database or storage is removed.
Raw User-Agent strings are never stored. Browser, OS, and device class are derived from the User-Agent at request time; the raw string is discarded immediately after derivation.
All analytics read and reporting endpoints - including the aggregate summary page /stats, the analytics API under /analytics/*, and the operations endpoints /logs, /ops, and /ops/snapshot - are access-controlled behind a bearer token and, in the production deployment, are additionally restricted to a separate operations hostname. None of these endpoints are publicly accessible.
6. Structured Client-Error Telemetry
The application includes a lightweight client-side error reporting mechanism. When a technical error occurs in the browser, the application may transmit telemetry limited to these fixed technical fields:
- Error type category (from a fixed whitelist, e.g. JS_ERROR, UNHANDLED_REJECTION)
- Error family, stage, and surface from fixed whitelists (e.g. "permissions", "browser_api", "app")
- Line and column number of the error
- Coarse browser, OS, and device class (derived from User-Agent; raw UA discarded)
- Language/locale setting
Free-text error messages, raw stack traces, request bodies, source file paths, and any content that could contain user-generated or identifying information are not transmitted and not stored. The client application strips all such fields before sending.
7. Contact Form
When you submit the contact form at openedmic.com/contact.html, your submission is sent to the OpenedMic server for validation. The server validates the format of your submission, records only a minimal anonymous operational signal (a count of successful submissions, with no content), and returns a response to your browser.
The submission content - including your name, email address, subject, and message - is forwarded once to a configured outbound delivery webhook so the service operator can receive and respond to your message, and is then discarded. It is not retained in any OpenedMic database, log file, or analytics system after that forward. The outbound webhook provider's own privacy policy applies to what they store at their end.
If the outbound delivery webhook is temporarily unavailable or has not been configured, the server still does not retain your message: the user interface offers a direct email fallback to hello@openedmic.com so you can reach the operator from your own mail client.
8. Third-Party Analytics
The public website and live application do not load third-party analytics tags or send product-usage events from your browser to an external analytics provider. The self-hosted operational analytics described in Section 5 remain in use.
9. Installable Web Application
OpenedMic supports installation as a home-screen web application on supported devices and browsers. When you install the application:
- The application shell is served from the same origin - no app store is involved
- A service worker is registered in your browser to enable reliable loading of static assets (fonts and scripts) and to provide a basic offline message page if connectivity is unavailable
- The service worker does not cache HTML pages or dynamic content. Live session functionality - room creation, joining, audio/video streaming, signaling - requires an active internet connection and is not available offline
- If you dismiss the install prompt, a flag is stored in
localStorageon your device to avoid showing the prompt again - If you launch the application in standalone mode after installation, a technical install-engagement event may be recorded in the self-hosted operational analytics system
10. Cookies and Browser Storage
The public website and live application do not set analytics or advertising cookies. They use functional browser storage on your device:
- Display name (
localStoragekey:openedmic-username): remembers the display name entered in the application across visits on the same device. When you enter a live room, the selected name is sent as per-session room data and can be shown to room participants. It remains locally until you replace it or clear site data. - Language preference - app (
localStoragekey:openedmic-app-lang) - remembers your selected UI language in the application across visits - Language preference - landing page (
localStoragekey:openedmic-lang) - remembers your selected UI language on the landing page - Accessibility settings - landing page (
localStoragekey:openedmic-a11y) - remembers contrast, motion, and font preferences if you change them on the landing page - Install prompt dismiss flag (
localStoragekey:pwa-dismissed) - set if you dismiss the application install prompt, to prevent it from appearing again - iOS install hint dismiss flag (
localStoragekey:pwa-ios-dismissed) - set if you dismiss the iOS add-to-home-screen guidance, to prevent it from appearing again - Broadcaster reconnect token (
localStoragekey:om_btoken_[room]) - stored during an active broadcast only to support brief reconnection after a page refresh or transient disconnect. The stored record carries a client-side time-to-live of approximately 60 seconds; after that it is treated as stale and removed, and the server only honors reconnect attempts within a 15-second grace window
The functional localStorage values restore preferences, suppress repeated install prompts, reuse the display name, or support continuity during an active session. Clearing site data in your browser removes these values. The access-controlled operations dashboard at ops.openedmic.com sets one strictly necessary, HttpOnly session cookie named openedmic_dash_sid only after an authorized operator signs in. The cookie uses Secure and SameSite=Strict, has a 30-minute sliding expiry, and is not used for public visitors, analytics, or advertising.
11. Local Recording
If you use the local recording feature during a broadcast, audio and/or video is captured directly in your browser using the MediaRecorder API and saved to your own device as a WebM file. Nothing is uploaded to any server. OpenedMic has no access to your recordings. You retain full control of any recording you create.
12. Infrastructure and Third-Party Services
- Render.com: origin hosting for the Node.js server. The hosting platform may process IP addresses and generate standard access logs under its own policies.
- Cloudflare: DNS and network protection where configured. Cloudflare can receive standard connection metadata, including IP address, when your browser connects to a proxied OpenedMic domain.
- Google Fonts: public information pages request font stylesheets and font files from Google-hosted domains. Google receives standard connection metadata, including IP address and browser request headers. The live-room app at
/appuses locally hosted fonts and does not request Google Fonts. - Metered.live: TURN relay service used when a direct WebRTC connection is unavailable. The service processes connection metadata and may relay encrypted media in real time.
- Google STUN:
stun.l.google.commay be used to help establish WebRTC connectivity, including as a fallback when TURN credentials are unavailable. - Contact delivery provider: when configured, the contact form forwards the name, email address, subject, message, submission time, and source page to an outbound webhook provider as described in Section 7.
Any browser connection to a hosting, font, CDN, STUN, or TURN provider necessarily exposes network metadata such as the request IP address to that provider. WebRTC peers and relay or discovery services may also process network-address metadata needed to establish the connection. Each provider's own terms, privacy policy, and retention practices apply.
13. No Advertising
OpenedMic does not display paid advertisements and does not use its self-hosted operational analytics to build advertising profiles.
14. Children
OpenedMic is intended only for users aged 18 and over, as stated in the Terms of Service. OpenedMic does not knowingly solicit personal information from children. The automatic technical, network, and self-hosted operational processing described in this policy may occur when someone visits the site or uses the service. If you believe a child has submitted personal information through the contact form or a live session, please contact OpenedMic so the issue can be reviewed.
15. Changes to This Policy
This policy may be updated when the service changes. The date at the top of this page reflects the most recent revision. Continued use of the service after updates constitutes acceptance of the revised policy.
16. Contact
If you have questions about this privacy policy, please use the contact page.