Skip to content

Releases: Ecohackerfarm/power2plant

v0.17.0

06 Jun 09:11
95eecfb

Choose a tag to compare

What's new

Infrastructure security

  • DB service no longer binds to host network interfaces (0.0.0.0:5432) — reachable only via internal compose network. Prevents cross-stack access on shared VPS.
  • Prod deploy webhook now triggers on GitHub release published, not on every push to main.

Enrichment improvements

  • Translation script (enrich:translate-names) now accepts comma-separated locales: --locale de,es,fr
  • Wikidata lookup uses 3-stage fallback per crop: botanicalNamecanonicalName → each BotanicalSynonym — significantly improves hit rate for genus-level and synonym-mapped crops

Dev / ops

  • fill-runner / scripts service moved to scripts profile in dev compose — no longer auto-starts and crash-loops on docker compose up
  • Release automation: scripts/release.sh + Claude skill for one-command releases

v0.16.0

04 Jun 17:59
6b291e3

Choose a tag to compare

What's new

Botanical synonym table & canonical names

  • New BotanicalSynonym table replaces the empty synonyms[] array on Crop
  • New Crop.canonicalName field stores the author-stripped botanical name (e.g. Allium L.Allium) for accurate Wikidata/Wikipedia SPARQL lookups
  • Fixes genus-level crops (e.g. Onion / Allium L.) not getting German translations due to author suffix mismatch

Enrichment versioning

  • CropEnrichmentAttempt now tracks version — bumping SCRIPT_VERSION in translate-names.ts automatically retargets stale attempts without --force

Search improvements

  • Crop and relationship search now queries canonicalName and BotanicalSynonym table

Post-deploy steps

pnpm enrich:populate-canonical-names
pnpm enrich:populate-botanical-synonyms
pnpm enrich:translate-names --locale de --source wikipedia

v0.15.2

03 Jun 15:49

Choose a tag to compare

Fixed

  • UX: collapse language switcher into dropdown — all locales were shown as inline buttons cluttering the header

v0.15.1

03 Jun 14:37

Choose a tag to compare

Fixed

  • Docker: set explicit target: runner on app service build — scripts stage added after runner caused compose to pick scripts (last stage) as default, starting a Node REPL instead of the server

v0.15.0

03 Jun 11:32
865fad2

Choose a tag to compare

What's Changed

Features

  • Genus-wide inference — dual-write species + derived genus relationship (#223)
  • Research tracking — track AI research attempts with no result (#221)
  • Enrichment — Wikipedia sitelink fallback + botanical name guard in translate-names (#220)
  • i18n — es, fr, pt, zh-Hans, ar, hi, ru, ja locale support (#206)

Fixes

  • Remove duplicate prisma block in sonar-research.ts causing TS build failure (#225)

Chores

  • Compress enrichment-attempts seed (114M → 37M gz) to stay under GitHub 100MB limit (#224)

v0.14.0

29 May 11:37
50d3754

Choose a tag to compare

What's Changed

  • feat(card): empty-state on bed-plant card with fund/request link by @brain-nrds in #191
  • feat(research-requests): page + API — Phase 2 of #117 (#192) by @JustTB in #197
  • feat(donation-trigger): scaffold Phase 3 — funded flag + admin view (#193) by @JustTB in #198
  • fix(e2e): update smoke test — lookup renamed to "Find companion plant" by @JustTB in #199
  • feat(infra): staging environment on prod machine by @JustTB in #200
  • feat(schema): add SourceCheck model for per-source verification tracking by @JustTB in #201
  • feat(schema): add reason and sourceDirection fields to RelationshipSource by @JustTB in #202
  • feat(research): extract reason and direction from paper abstracts by @JustTB in #203
  • feat(research): store reason and sourceDirection on RelationshipSource in import.ts by @JustTB in #204
  • Release v0.14.0 by @JustTB in #196

New Contributors

Full Changelog: v0.13.0...v0.14.0

v0.13.0

22 May 00:24
f1721ce

Choose a tag to compare

What's Changed

  • fix(docker): copy public/ to runner — fixes missing images in prod (v0.12.1) by @JustTB in #160
  • feat: add extractGenusWord helper to crop-rank.ts by @JustTB in #161
  • feat(api): plant route returns genus context and inherited companions by @JustTB in #162
  • feat(api): companion detail falls back to genus relationship for species by @JustTB in #163
  • feat(ui): plant search accepts initialQuery prop + plan page reads ?q= URL param by @JustTB in #164
  • feat(ui): plant detail page genus callout, inherited labels, species section by @JustTB in #165
  • feat(ui): relationship detail page genus-level banner and species scope note by @JustTB in #166
  • fix: zone detection uses dynamic date range and accurate average label by @JustTB in #167
  • fix: two-crop search in relationships page finds results by @JustTB in #168
  • feat: plant search SQL-based ranking and more info link per result by @JustTB in #169
  • feat(#130): Wikipedia enrichment on plant detail page by @JustTB in #170
  • feat(#136): Feedback and AppConfig tables — Prisma migration by @JustTB in #171
  • feat(#137): POST /api/feedback — honeypot, rate limit, IP hashing by @JustTB in #172
  • feat(#138): admin feedback API — list, resolve, dismiss by @JustTB in #173
  • feat(#126): use case A — separated companions/antagonists + contribute links by @JustTB in #174
  • feat(#128): use case C — per-bed relationship valuation in My Garden by @JustTB in #175
  • feat(#139,#140,#141): FeedbackButton — flag icon, DATA mode, OTHER mode by @JustTB in #176
  • feat(#142,#143): data-feedback-target attributes on crop detail and relationships pages by @JustTB in #177
  • feat(nav): show Admin link in header for admin users (#148) by @JustTB in #179
  • feat(synonyms): add synonyms field to Crop, include in search (#135) by @JustTB in #181
  • feat(admin): admin feedback viewer + settings page (#144, #145) by @JustTB in #178
  • fix(data): correct corrupted botanical author abbreviations (#151) by @JustTB in #182
  • feat(digest): feedback digest endpoint + cron service (#146, #147) by @JustTB in #180
  • fix: research import confidence + ambiguous crop + source position badges by @JustTB in #183
  • Release v0.13.0 by @JustTB in #190

Full Changelog: v0.12.0...v0.13.0

v0.12.0

20 May 14:19
e230671

Choose a tag to compare

What's Changed

Added

  • Landing hub with global site header and navigation (#124, #125)
  • i18n infrastructure with German (de) as first locale (#118)
  • i18n phase 2: CropTranslation table, enrichment script, locale-aware crop search
  • i18n phase 3: useTranslations wired into remaining components
  • pnpm translate --fetch / --import two-step plant name translation script
  • dev.sh with up/down/build/rebuild commands

Fixed

  • GBIF enrichment: retry logic added, delay reduced to 200ms
  • E2E smoke tests updated for new landing hub and i18n routing

Full Changelog: v0.11.0...v0.12.0

v0.11.0

14 May 13:17
c1a6364

Choose a tag to compare

What's changed

Fixes

  • "Accept this plan" no longer errors (empty beds filtered before POST)
  • Observations list shows common names ("Bean") instead of botanical names, with italic scientific suffix

New

  • Per-bed "Add to garden…" button with inline name input on recommendation results

Data

  • Companion DB expanded: 556+ relationships, 92+ crops
  • Permaculture staples added (Comfrey, Yarrow, Tansy, Calendula, Rosemary, Squash, Alfalfa, Watermelon, and more)
  • Paper-backed academic sources added via Semantic Scholar extraction

v0.10.0

14 May 10:27
e571018

Choose a tag to compare

Features

  • #68 Genus vs species visual differentiation in plant search dropdowns
  • #74 User trust scoring — down-weight over-confident contributors
  • #39 Expanded E2E smoke tests — recommendation flow + relationships 401
  • #38 Share garden plan via public link (30-day expiry, clipboard copy)

Security & Bug Fixes

  • #91 Share token entropy raised from 48 to 128 bits
  • #92 Garden share invalidated when plantings are saved
  • #93 Notes server-side limit raised 500→2000 to match client UI
  • #94 Sources array server-side limit of 20 enforced
  • #95 /api/recommend rejects NaN/Infinity and caps bedCount/bedCapacity at 100
  • #97 Toast error shown when planting status update fails
  • #98 /share/* rate-limited at 60 req/min per IP via host nginx

Performance

  • #96 Trust score computation: N+1 DB queries → single batched query

Migrations

  • 20260514000000_add_trust_score_to_user
  • 20260514000001_add_garden_share