At this level
app.gainforest · 1- app.gainforest.ac.audio record Generic audio resource record aligned with the TDWG Audiovisual Core standard (http://www.tdwg.org/standards/638). Represents a single audio recording (field recording, soundscape, species call) with its technical metadata. Links to a dwc.occurrence as evidence and optionally to an ac.deployment describing the recording device setup. Does not carry location, weather, habitat, or device fields — those belong on dwc.event, dwc.occurrence, or ac.deployment respectively.
- app.gainforest.ac.deployment record Bioacoustics recorder deployment record. Describes a passive acoustic monitoring (PAM) device — such as an AudioMoth, Song Meter, or Swift — placed at a fixed location for a period of time. One deployment produces many audio recordings; each ac.audio record references its deployment via deploymentRef. Captures the device configuration, placement details, and duty cycle that are constant across all recordings from that deployment.
- app.gainforest.ac.multimedia record Audubon Core multimedia resource record. Represents a single media item (image, audio, video, spectrogram) associated with a biodiversity occurrence. Based on the TDWG Audiovisual Core standard (http://www.tdwg.org/standards/638). Each media item is a separate record linked to a dwc.occurrence via occurrenceRef.
- app.gainforest.dwc.dataset record A named dataset grouping a batch of Darwin Core occurrence records uploaded together. Created during the tree upload wizard so users can manage and reference their uploads as cohesive units.
- app.gainforest.dwc.defs defs Shared type definitions for Darwin Core aligned biodiversity records
- app.gainforest.dwc.event record A sampling event record aligned with Darwin Core Event class. Enables star-schema pattern where multiple occurrences reference a shared event context (location, protocol, effort).
- app.gainforest.dwc.measurement record Measurement or fact records aligned with the Darwin Core MeasurementOrFact class. Links to an occurrence via occurrenceRef. Supports three paths: floraMeasurement (typed fields for sessile organisms like trees, plants, corals), faunaMeasurement (typed fields for mobile organisms like mammals, birds, reptiles, fish), and genericMeasurement (flexible key-value array for anything else). All three paths bundle multiple measurements into a single record per occurrence, reducing PDS storage compared t
- app.gainforest.dwc.occurrence record A single biodiversity occurrence record aligned with Simple Darwin Core (TDWG Standard 450, version 2023-09-13). Represents one organism or group of organisms at a particular place and time.
- app.gainforest.evaluator.defs defs Shared type definitions for decentralized evaluator services. Evaluators attach structured, typed evaluation data to records (a more sophisticated evolution of the labeler pattern).
- app.gainforest.evaluator.evaluation record An evaluation record published by an evaluator in their own repo. Contains structured, typed results about a target record (or batch of records). Discovered by AppViews via the atproto-accept-evaluators HTTP header pattern.
- app.gainforest.evaluator.service record Declaration record published at rkey 'self' to register an account as an evaluator service. Analogous to app.bsky.labeler.service for labelers.
- app.gainforest.evaluator.subscription record A subscription record published by a user in their own repo to request evaluations from a specific evaluator service. The evaluator detects subscriptions via Jetstream and processes matching records. Deleting this record unsubscribes.
- app.gainforest.feed.like record Record declaring a 'like' of a piece of subject content. A faithful port of app.bsky.feed.like into the app.gainforest.feed namespace. `subject` is a com.atproto.repo.strongRef (uri + cid), so a like can target any record in the GainForest commons — an observation, project, cert, organization, donation, post, or comment — and the GainForest appview decides which subject types to aggregate. Unlike = delete this record.
- app.gainforest.feed.post record Record containing a GainForest feed post. A faithful port of app.bsky.feed.post into the app.gainforest.feed namespace. A reply (i.e. a 'comment') is a post that carries a `reply` ref; because that ref uses com.atproto.repo.strongRef, the GainForest appview can honour replies whose parent/root is ANY record in the commons (an observation, project, cert, organization, or donation), not only another post. Deprecated `entities`/`textSlice` fields from the Bluesky source were omitted in favour of `f
- app.gainforest.feed.repost record Record representing a 'repost' (reshare) of existing subject content. A faithful port of app.bsky.feed.repost into the app.gainforest.feed namespace. `subject` is a com.atproto.repo.strongRef (uri + cid), so a reshare can target any record in the GainForest commons — an observation, project, cert, organization, donation, post, or comment — and the GainForest appview decides which subject types to aggregate and resurface in timelines. Undo reshare = delete this record.
- app.gainforest.organization.defaultSite record A declaration of the default site for an organization
- app.gainforest.organization.donation record A record of a donation or financial transaction for financial transparency
- app.gainforest.organization.getIndexedOrganizations query Get all organizations to view initially on map
- app.gainforest.organization.info record A declaration of an organization or project
- app.gainforest.organization.layer record A declaration of a layer for an organization
- app.gainforest.organization.member record A community or team member of an organization
- app.gainforest.organization.observations.dendogram record A declaration of a dendogram observation for an organization
- app.gainforest.organization.observations.fauna record DEPRECATED: Use app.gainforest.dwc.occurrence instead. A declaration of a fauna observation for an organization.
- app.gainforest.organization.observations.flora record DEPRECATED: Use app.gainforest.dwc.occurrence instead. A declaration of a flora observation for an organization.
- app.gainforest.organization.observations.measuredTreesCluster record A declaration of a measured trees cluster for an organization
- app.gainforest.organization.predictions.fauna record DEPRECATED: Use app.gainforest.dwc.occurrence with basisOfRecord='MachineObservation' instead. A declaration of a fauna prediction for an organization.
- app.gainforest.organization.predictions.flora record DEPRECATED: Use app.gainforest.dwc.occurrence with basisOfRecord='MachineObservation' instead. A declaration of a flora prediction for an organization.
- app.gainforest.wallet.pendingSend record A transfer from the account's donation wallet (app.gainforest.wallet.primary) that still needs more passkey approvals. Multi-approval wallets (threshold > 1) collect approvals asynchronously: the initiator stores the exact unsigned ERC-4337 UserOperation here together with their own approval, remaining passkey holders approve from their own devices, and the final approver signs the full userOp hash which submits the operation on-chain and deletes this record. Every stored approval is a WebAuthn
- app.gainforest.wallet.primary record An account's canonical donation wallet (personal profile or organization): a Splits SmartVault (ERC-4337 passkey multisig) whose address is derived deterministically with CREATE2 from the account DID and the founding signer set. Because owner, signers, threshold, and the salt scheme are all recorded here, anyone can recompute SmartVaultFactory.getAddress(...) and verify that `address` really belongs to this account — the derivation is the proof; no signature is needed. Fixed rkey `self`: one can
- app.gainforest.wallet.splitsVault record LEGACY — superseded by app.gainforest.wallet.primary; existing records are still read and are migrated to the primary collection on their next write. An organization's shared donation wallet: a Splits SmartVault (ERC-4337 passkey multisig) whose address is derived deterministically with CREATE2 from the organization DID and the founding signer set. Because owner, signers, threshold, and the salt scheme are all recorded here, anyone can recompute SmartVaultFactory.getAddress(...) and verify that