Skip to content

Ecohackerfarm/power2plant

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

387 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

power2plant

Companion planting recommendations for your garden beds.

Tell power2plant your growing zone and which plants you want to grow — it assigns them to beds to maximize companion planting benefits and flags incompatible pairs.

Anonymous: works immediately, state saved in localStorage.
Signed in: zone and bed config synced to your account across devices.

Features

  • Hardiness zone detection via geolocation or map picker (Open-Meteo)
  • Plant search across 66,000+ crops (Trefle, USDA, OpenFarm, PFAF, PlantBuddies)
  • Companion planting relationship database (343+ relationships with confidence scores)
  • Greedy affinity bed assignment algorithm
  • Email/password auth via better-auth
  • Offline-first: localStorage fallback when not signed in

Tech Stack

Getting Started

Prerequisites

  • Docker (with Compose v2)

The host doesn't need Node, pnpm, or psql — everything lives in the dev container.

Setup

# Clone
git clone https://github.com/your-org/power2plant.git
cd power2plant

# Configure environment
cp .env.example .env
# Edit .env — set BETTER_AUTH_SECRET (dev defaults handle the rest)

# Start the stack (Postgres + app with hot reload)
docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d

The dev compose command runs prisma generate, prisma migrate deploy, and next dev on startup. Open http://localhost:3000.

For any project commands (tests, Prisma, db dump/restore, etc.) open a shell inside the dev container and run them there:

docker compose -f docker-compose.yml -f docker-compose.dev.yml exec app sh

# from inside the container:
pnpm test:run                # run tests
pnpm db:migrate              # create a new migration (dev workflow)
pnpm db:restore              # load the committed seed.sql
pnpm db:import               # import fresh plant data (needs TREFLE_TOKEN)
pnpm db:dump                 # snapshot the DB to db/seed.sql
pnpm db:studio               # Prisma Studio at http://localhost:5555

Environment Variables

Variable Required Description
DATABASE_URL Yes PostgreSQL connection string
BETTER_AUTH_SECRET Yes (prod) Secret for session signing (≥32 chars)
BETTER_AUTH_URL Yes (prod) Public URL of the app (e.g. https://example.com)
NEXT_PUBLIC_APP_URL Yes (prod) Same as BETTER_AUTH_URL, exposed to client
TREFLE_TOKEN For import API token for Trefle plant database

In development, BETTER_AUTH_SECRET and BETTER_AUTH_URL fall back to safe defaults if unset.

Scripts

Run all of these from a shell inside the dev container (docker compose -f docker-compose.yml -f docker-compose.dev.yml exec app sh):

Command Description
pnpm dev Start dev server (already running via compose)
pnpm build Production build
pnpm test:run Run test suite (65 tests)
pnpm db:migrate Create / apply Prisma migrations
pnpm db:import Import plant data from all sources
pnpm db:import <source> Import from a specific source (trefle, usda, openfarm, plantbuddies, pfaf)
pnpm db:restore Restore pre-seeded plant database
pnpm db:dump Dump current database to file
pnpm db:studio Open Prisma Studio

Data Sources

Plant data is seeded from multiple open sources:

Source Data License
Trefle Taxonomy, plant info API (token required)
USDA PLANTS Taxonomy supplement Public domain
OpenFarm Companion relationships CC BY 4.0
PFAF Companion + growing data CC BY-NC-SA 4.0
PlantBuddies 1,717 relationships License TBD — contact Serlo

Note: PlantBuddies data is used as non-commercial fair use pending license clarification with Serlo. Do not use in a commercial deployment until resolved.

Docker

Development is covered in Getting Started — edit files in src/ and Next.js hot reloads automatically.

Production

export BETTER_AUTH_SECRET="your-secret-here"
export BETTER_AUTH_URL="https://your-domain.com"
export NEXT_PUBLIC_APP_URL="https://your-domain.com"

docker compose up --build

Migrations run automatically on container start.

Staging

A staging environment can run on the same machine as production, isolated in separate containers. It deploys automatically on every push to a release/* branch via a GitHub webhook.

Set APP_PORT=3001 and DB_PORT=5433 in the staging .env to avoid port collisions with prod. Control the initial dataset with STAGING_DATA_SOURCE=prod (non-user prod data) or STAGING_DATA_SOURCE=seed (committed db/seed.sql).

See docs/server-setup.md for the full setup walkthrough.

Contributing

See CONTRIBUTING.md.

License

MIT

About

Companion planting planner — pick your crops, get smart bed assignments based on plant compatibility data

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors