Security
The access model and protections behind the public read-only Crop Picker catalog, including access layers, Row-Level Security, data provenance, platform security, and how to report issues.
Crop Picker is a public read-only catalog. This page describes the access model and the protections in place.
#Public vs. private data
The platform is designed so that the crop catalog — every piece of agronomic, economic, scoring, and buyer information visible on crops.every.farm — is intentionally public. Anything not meant to be public is simply not part of the catalog.
- Public, read-only: crop facts, regional snowflake scores, economics, buyers who have opted in to being listed, the full audit log of data changes.
- Not public: internal operational configuration, administrative credentials, and (when we add them) user-owned farm records.
#Access layers
Requests to the platform flow through two access tiers:
- Browser / anon role. Public clients read catalog data via a scoped read-only credential. Row-Level Security policies permit SELECT on catalog tables and nothing else. No write operations are available to unauthenticated clients.
- Server / service role. Data ingestion and maintenance happen server-side with a privileged role that is never exposed to browsers. That role's credentials are held in environment secrets on the hosting platform and never checked into source control.
#Row-Level Security
Every table in the public schema has Row-Level Security enabled. Policies are written with a principle of least privilege:
- Catalog tables allow SELECT to anon and authenticated users.
- The buyers table hides deactivated entries from public queries.
- User-owned tables (scaffolded for a future authenticated experience) grant no access at all to anon or unauthenticated requests — they return zero rows and reject every write.
Row-Level Security is verified at deploy time against the production database.
#Data provenance
Every data point in the catalog carries a citation. Every write to the database appends a record to an append-only audit log with the source, the source's publication date, and a diff of what changed. This means:
- Users can trace any number they see on the site back to its origin.
- Drift between scheduled ingestion runs is detectable.
- The audit log itself is public, so third parties can verify the chain of provenance end-to-end.
#Platform security
- Transport: all traffic is served over HTTPS.
- Secrets: credentials live in server-only environment variables and are rotated on any suspected exposure.
- Dependencies: automated vulnerability scans on the JavaScript dependency tree.
- Queries: all database queries use parameterized client libraries — no raw SQL from user input.
- Error handling: production errors are wrapped before leaving the server boundary so internal details don't reach clients.
#Reporting issues
If you discover a security issue, please email security@every.farm with a description and reproduction steps. We aim to acknowledge within one business day.
Updated
Something missing or out of date? Tell us — the docs are updated with every release.