Security

Last updated April 27, 2026

The Bird Bath Terminal is operated by First 100 Consulting LLC and is built around a small set of explicit security controls. This page documents how we protect customer data and the dataset itself. If you need a deeper review for vendor onboarding or a Data Processing Agreement, email ryan@first100.io.

Data protection

Encryption in transit

All traffic to the Terminal is TLS 1.2+ via Cloudflare. HTTP requests redirect to HTTPS at the edge.

Encryption at rest

The Postgres database (account data, sessions, audit logs) and the SQLite practice database both reside on Render-managed disks with full-disk encryption. Database backups are encrypted.

Password handling

Passwords are stored as bcrypt hashes with per-user salts. Plain-text passwords never touch our database or logs. Failed login attempts are rate-limited (5 failures in 15 minutes triggers a 30-minute lockout per email and per IP).

Session management

Session cookies are HttpOnly, Secure, SameSite=Lax, and expire after 7 days. Sessions inactive for 60+ days are invalidated server-side. Logout immediately revokes the session token.

Access & abuse controls

Authenticated access only

The Terminal is invite-gated. Every API endpoint (except login, password reset, and the Stripe webhook) requires an authenticated session.

Workspace isolation

Multi-seat Pro and Enterprise workspaces have isolated data: watchlists, chat history, and exports are scoped to the workspace. Cross-workspace access is not possible from any user role.

Rate limiting + bulk-scrape detection

API endpoints enforce per-session request rate limits. A separate detector watches for bulk-extraction patterns (high request volume in a short window) and automatically pauses suspicious sessions pending review.

Per-day record budget

Each session has a daily ceiling on the number of unique practice records returned. The cap scales with subscription tier and is designed to support normal workflows while preventing systematic mirroring of the dataset.

CSRF protection

All state-changing requests (POST/PUT/DELETE) require a CSRF token bound to the session cookie.

Field-tier access controls

Practice fields are classified by sensitivity. Map list endpoints expose only metadata needed to render pins; contact and personal fields are returned only on per-record detail requests, gated by subscription tier, and counted against the daily record budget.

Forensics & audit

Audit logging

Every authenticated API call is recorded with session token, endpoint, IP address, user agent, status code, and timestamp. Logs are retained for 90 days in the live database and longer in encrypted backups.

Watermarked exports

Every CSV export includes a footer identifying the user, timestamp, and license terms. Exports are traceable to the originating session.

Anomaly alerting

Bulk-extraction triggers an immediate email to the operations team and pauses the offending session. Suspicious activity is reviewed within one business day.

Infrastructure

The Terminal is hosted on Render (US-Oregon region) behind Cloudflare. Subscription billing is handled by Stripe; we never receive or store payment-card data. AI features use the Anthropic API with no model training on customer data. The complete subprocessor list is at /subprocessors.

Vulnerability reports

Found a security issue? Email ryan@first100.io with details. We aim to acknowledge reports within one business day. Please do not publicly disclose vulnerabilities before we've had a chance to address them.

Compliance posture