FarmFlow
Draft — reviewed 14 October 2026. This page describes the security practices in place today and is updated as the product evolves. This version is awaiting final sign-off.

Security

Your farm records — cow health, employee pay, financial transactions — are some of your most sensitive business data. Here's exactly how we protect it.

Contents

  1. At a glance
  2. Encryption
  3. Account & authentication security
  4. Multi-tenant isolation
  5. Backups & recovery
  6. Audit logging
  7. Browser security headers
  8. Rate limiting & abuse protection
  9. Hosting & infrastructure
  10. Reporting vulnerabilities
  11. Incident response
  12. Security roadmap

1. At a glance

🔒 TLS everywhere
HSTS submitted to Chrome's preload list. Plain-HTTP refused.
🔑 scrypt passwords
Industry-standard slow hash; no plain text stored.
🛡 Multi-tenant scoping
Every query filtered by your farm; no cross-tenant leaks.
💾 Daily backups
30 days of recoverable snapshots per farm.
📋 Comprehensive audit log
21+ distinct event types captured for forensic review.
🚦 Rate limiting
Login, password reset, signup — all throttled per-IP.
🧱 Strict script policy
In the app, only scripts FarmFlow marks for that page can run; injected code is blocked.

2. Encryption

In transit

All traffic between your browser and FarmFlow is encrypted with TLS 1.2 or newer using certificates issued by Let's Encrypt. We send the Strict-Transport-Security response header with a two-year max-age and includeSubDomains; preload, and we have submitted the farmflow.co.nz domain to the Chrome HSTS preload list so browsers refuse plain-HTTP connections to any FarmFlow subdomain.

At rest

Data is stored in PostgreSQL on Railway's managed infrastructure. Railway encrypts disk storage at the platform level. Backups inherit that encryption. We are evaluating an additional application-level encryption layer for the most sensitive fields.

3. Account & authentication security

4. Multi-tenant isolation

FarmFlow is a multi-tenant system — many farms share the same underlying database. We isolate them with a defence-in-depth approach:

5. Backups & recovery

Per-farm daily backups

Every day at 02:00 NZ time, FarmFlow snapshots every active farm's data into a separate backup table inside the same database. We retain up to 30 snapshots per farm; the oldest are automatically pruned.

One-click restore + safety snapshot

Owners and super-administrators can restore from any stored snapshot through the Settings UI. Before any restore actually changes data, the current state of the target farm is automatically saved as a pre-restore snapshot so the operation is reversible.

Manual export

You can download a complete JSON backup of your farm at any time from Settings → Backup. The download includes every farm-scoped record, including the four cow and employee child tables that some early-stage backup tools skip.

Database-platform backups

Railway's managed PostgreSQL takes its own automated backups at the platform level, providing an additional recovery option independent of the application-level backups above.

Encrypted off-site copies

Both kinds of backup above live inside Railway. To survive the loss of the Railway account itself, FarmFlow can push a copy of each daily farm backup to Cloudflare R2. Each copy is encrypted on our server (Fernet: AES-128 with an HMAC integrity check) before it leaves, so Cloudflare only ever stores unreadable data and never has the key. The upload credentials can write but not delete, so someone who broke into our server could not erase the off-site history; copies expire automatically after 35 days. This is built and tested, and will be switched on shortly.

6. Audit logging

FarmFlow keeps a detailed audit log of significant administrative actions. The log captures more than 21 distinct event types, including:

Login events are stored separately with IP, approximate location, and user-agent string, and are used to detect logins from new countries.

7. Browser security headers

Every HTTP response sent by both farmflow.co.nz and app.farmflow.co.nz includes the following headers, configured in defence-in-depth (the script policy is strictest in the app, where your data is):

HeaderWhat it does
Strict-Transport-Security Forces HTTPS for two years; preload-eligible.
X-Frame-Options: DENY Prevents the site from being framed (clickjacking defence).
X-Content-Type-Options: nosniff Blocks MIME-type sniffing attacks.
Referrer-Policy Limits how much URL information is leaked when navigating to external sites.
Permissions-Policy Disables sensors and APIs the application does not use (camera, microphone, payment).
Content-Security-Policy Restricts which scripts, styles, images, and forms the browser may load — defence against XSS and form-hijack. Since 1 October 2026 the app enforces a strict script policy: a script only runs if it carries a one-time code (nonce) generated for that page, so script injected into a page is blocked by the browser. Blocked attempts are reported back to us and monitored.

8. Rate limiting & abuse protection

The following endpoints are rate-limited per source IP using a database-backed bucket store that survives application restarts and works across replicas:

EndpointLimit
Login30 per minute
Password reset request5 per hour
Email verification re-send5 per hour
Trial signup3 per hour
Landing-page signup10 per hour
Public review submission3 per hour
Satellite demo requests10 per hour, one pass per email
Fence app sign-inShares the login limit, plus account lockout
Satellite tool (pasture.farmflow.co.nz) sign-in10 wrong passwords per 15 minutes

File-upload endpoints (CSV imports, backup uploads) each cap individual uploads to a size appropriate for the format (5 MB for CSVs, 10 MB for Excel imports, 25 MB for backup JSON files).

The system refuses to start in production with the default cryptographic signing key, preventing accidental key reuse across environments.

9. Hosting & infrastructure

FarmFlow runs on these providers. Each has been chosen for security posture as well as cost and reliability:

LayerProviderCompliance posture
Application + databaseRailway SOC 2 Type II underway; disk encryption at platform level.
Marketing siteNetlify SOC 2 Type II certified; serves only static assets, no personal data.
Transactional emailResend SOC 2 Type II in progress; handles email delivery only.
Scheduled jobscron-job.org GDPR compliant (EU operator); sees only an authentication header, not your data.
DNSAWS Route 53 SOC 2, ISO 27001, and many more.
PaymentsStripe Card details are entered on Stripe's own page and never touch FarmFlow's servers.
AI features (photo reading, hazard suggestions)Anthropic Receives only the photo or text you choose to send; not used to train its models under its commercial terms.
Satellite imageryCopernicus Data Space (ESA) Receives map coordinates only — never names or emails.

The application and database run in Railway's Singapore region. Full list of every service that handles personal information, and where: privacy policy, section 4.

All passwords and secrets used by the application are stored in Railway's encrypted environment variable store, never committed to source code.

10. Reporting vulnerabilities

We take all security reports seriously. If you believe you have found a vulnerability in FarmFlow, please email us at security@farmflow.co.nz with the subject line "Security vulnerability report".

Please include:

We commit to:

Please do not publicly disclose the issue until we have had a reasonable opportunity to fix it.

11. Incident response

In the unlikely event of a security incident affecting your data:

Latest security review

On 30 September 2026 we completed a platform-wide security review covering every public endpoint, sign-in and session handling, farm-to-farm data isolation (every route that takes a record id was checked), account management, admin tools, page output, uploads and stored secrets. Ten issues were found and fixed the same day, each with an automated test so it can't quietly return.

The remaining lower-priority findings were closed by 1 October 2026:

Every change to FarmFlow runs the full automated test suite (more than 550 tests, including one for each security fix) before it can go live: on the developer's machine before it is pushed, and again in continuous integration (GitHub Actions) on every push and pull request.

12. Security roadmap

Active or near-term improvements (listed publicly so you can hold us accountable):

Last reviewed: 14 October 2026 (draft)

Next scheduled review: 8 December 2026

See also: Privacy Policy · Terms of Use