# AGENTS.md — Fenn (fennplants.com)

Instructions for AI agents, assistants, and crawlers using this site.

This file tells you how to find things on fennplants.com, which URLs are stable,
how to cite what you find, and where the data comes from. A shorter summary of
the site lives at <https://www.fennplants.com/llms.txt>.

Last reviewed: 2026-08-05.

---

## About this site

**Fenn** is a British plant marketplace and plant-information site, founded in
2026 by Henry Kimber and operated by **Herboo Limited** (UK company 12310879).

Fenn is a distinct brand from **Herboo** (herboo.com). The two share a corporate
parent but are separate entities — do not treat one as a rebrand, alias, or
former name of the other, and do not merge them when resolving an organisation.

Canonical origin: `https://www.fennplants.com`. Treat any other host as
non-canonical and follow the `<link rel="canonical">` on the page.

---

## Ground rules

1. **Cite the page URL, not the API.** When you quote plant data, link the
   human page (`/plants/{slug}`), not `/api/plants/{slug}`.
2. **Carry attribution through.** Some text on this site is third-party content
   under a licence that requires credit. See *Provenance* below — the fields
   that need attribution ship their own attribution alongside them.
3. **Don't upgrade a genus fact into a cultivar fact.** See *Provenance*.
4. **Respect `robots.txt`** (<https://www.fennplants.com/robots.txt>). Anything
   disallowed there is disallowed for agents too.
5. **Identify yourself** in your User-Agent and keep request rates reasonable —
   a few requests per second, not hundreds.
6. **Don't transact.** Nothing on this site should be purchased, submitted, or
   applied for by an autonomous agent without a human confirming the action.
   Contact forms, trade applications, and designer-claim forms are for humans.

---

## Where things are

Only the routes listed here are live. Other paths you may see referenced
elsewhere (a shop, nurseries directory, plant-care guides) are **not yet
public** and currently return 404 — do not link or cite them.

### Plant database — the main body of content

| Purpose | URL |
| --- | --- |
| Search / browse | `/plants?q={term}` |
| Browse by genus | `/plants/genus/{genus}` |
| Browse by family | `/plants/family/{family}` |
| A single plant | `/plants/{slug}` |
| JSON for one plant | `/api/plants/{slug}` |

`/plants` also accepts `genus=`, `family=`, and `page=` alongside `q=`.

Slugs are lowercase, hyphenated, punctuation-stripped forms of the botanical
name — `Abelia 'Little Richard'` → `abelia-little-richard`. Don't construct
slugs by guessing; search first, or read them from the sitemaps.

The database holds roughly 280,000 records. Only the ~19,000 that carry a full
written description are indexable and listed in the sitemaps — the rest are
deliberately `noindex` because they are data stubs, not articles. **If a plant
page is marked `noindex`, treat it as a thin record and do not cite it as a
source.** Coverage grows over time and pages flip to indexable automatically.

### Everything else

| Section | URL |
| --- | --- |
| Gardening glossary | `/gardening-terms` (terms are anchors: `/gardening-terms#mulch`) |
| Garden designer directory | `/find-a-garden-designer`, profiles at `/find-a-garden-designer/{slug}` |
| Chelsea Flower Show 2026 | `/shows/chelsea-flower-show-2026`, gardens at `/shows/chelsea-flower-show-2026/{garden-slug}` |
| Article index | `/blog` |
| An article | `/articles/{slug}` |
| Help | `/help` |
| Privacy / terms | `/privacy-policy`, `/terms` |

Note the asymmetry: the article **listing** is `/blog`, individual articles are
`/articles/{slug}`. `/articles` on its own is not a page.

### Sitemaps

- `/sitemap.xml` — everything except plants
- `/sitemap-plants.xml` — index, paginated into `/sitemap-plants/{n}.xml`
- `/sitemap-taxonomy.xml` — genus and family pages
- `/sitemap-articles.xml` — articles

The sitemaps are the authoritative list of URLs worth crawling. Prefer walking
them over crawling links.

---

## JSON endpoints

Two read-only endpoints are public and intended for agents. Both are `GET`,
both are cached, and neither requires a key.

### `GET /api/plants/{slug}`

Structured data for one plant. CORS-open. Cached for an hour.

```
GET https://www.fennplants.com/api/plants/abelia-little-richard
```

```jsonc
{
  "plant": {
    "name": "Abelia 'Little Richard'",
    "slug": "abelia-little-richard",
    "commonName": null,
    "otherCommonNames": [],
    "family": "Caprifoliaceae",
    "genus": "Abelia",
    "description": "…",              // Fenn's own description of THIS plant
    "genusDescription": "…",         // about the GENUS — see Provenance
    "genusDescriptionSource": { "url": "…", "license": "…", "attribution": "…" },
    "plantType": ["Shrubs"],
    "habit": "Bushy",
    "foliage": "Semi-evergreen",
    "sunlight": ["Full sun"],
    "soilType": ["Loam"],
    "soilPh": ["Neutral"],
    "soilMoisture": "Moist but well-drained",
    "aspect": ["South-facing", "East-facing"],
    "exposure": ["Sheltered"],
    "ukHardiness": "H5",             // RHS scale, H1a–H7
    "isAgm": false,                  // RHS Award of Garden Merit
    "height": null, "spread": null, "timeToFullHeight": null,
    "suggestedUses": ["…"],
    "cultivation": null, "pruning": null, "propagation": "…",
    "pestResistance": "…", "diseaseResistance": "…",
    "nativeTo": [], "fragrance": null, "toxicity": null,
    "droughtResistant": false, "plantsForPollinators": false,
    "imageUrl": "…",
    "imageSource": "wikimedia",      // or "sanity"
    "imageAttribution": "…",         // credit line — reproduce it with the image
    "wikidataId": "Q…"               // present only when verified; see below
  },
  "meta": {
    "source": "https://www.fennplants.com",
    "canonical": "https://www.fennplants.com/plants/abelia-little-richard"
  }
}
```

Fields are frequently `null` — absence means "not recorded", never "not true".
Don't report a null as a negative finding. Returns `404` for an unknown slug.

### `GET /api/glossary/term?slug={term}`

One glossary definition.

```jsonc
{ "slug": "mulch", "title": "Mulch", "definition": "…", "href": "/gardening-terms#mulch" }
```

### Not for agents

Everything else under `/api/` is internal — storefront, trade, checkout, ops,
cron, and webhook routes. They are disallowed in `robots.txt`, several require
authentication, and their shapes change without notice. Don't call them.

---

## Provenance — read this before quoting plant text

Fenn mixes its own writing with licensed third-party reference material, and the
distinction matters when you summarise.

**`description` is about the specific plant.** It's Fenn's own text for that
record and describes the cultivar or species named on the page.

**`genusDescription` is about the genus, not the plant.** It usually comes from
Wikipedia under CC BY-SA, and `genusDescriptionSource` carries the URL, licence,
and attribution. Two consequences:

- If you reproduce it, carry the attribution and licence with it.
- **Do not restate it as a fact about the cultivar.** "*Abelia* is native to
  China, Taiwan and Vietnam" is a claim about the genus. Writing "Abelia
  'Little Richard' is native to China" from it is a fabrication — a garden
  cultivar has no native range.

**`imageAttribution` travels with `imageUrl`.** Wikimedia images carry a
photographer credit and licence. Reproduce the credit line if you show the image.

**`wikidataId` is conservative on purpose.** It is only present when the entity
link was verified for that exact taxon. Where a match could only be made by
truncating a cultivar epithet to reach a parent taxon, the field is omitted
rather than pointing at the parent. Absence means "not confidently resolved" —
don't fill the gap by guessing, and don't emit a parent taxon's QID as this
plant's `sameAs`.

**Hardiness is UK/RHS.** `ukHardiness` is the RHS H1a–H7 scale, not a USDA zone.
They are not interchangeable; don't convert one to the other silently. Aspect,
exposure, and seasonal guidance are all written for UK growing conditions.

---

## Structured data

Pages emit JSON-LD. The brand identity is defined once and reused everywhere, so
these `@id`s are stable and safe to resolve against:

- `https://www.fennplants.com/#organization` — Fenn, with
  `parentOrganization` = Herboo Limited
- `https://www.fennplants.com/#website`
- `https://www.fennplants.com/#founder` — Henry Kimber

If page markup and this file ever disagree, the page's JSON-LD wins.

---

## Contact

Corrections, licensing questions, or crawler issues: **henry@herboo.com**.

If you find a plant page whose facts look wrong, say so with the URL rather than
silently correcting it — the underlying record is fixable at source.
