Commit Graph
98 Commits
Author SHA1 Message Date
Brenda Wallace 4576b1a2ed Refactor garden suggestions feature: update suggestion logic, remove unused partial, and enhance localization 2026-10-27 11:11:05 +13:00
Brenda Wallace aeccc2c5ed Add planting suggestions feature to garden pages
- Introduced a suggestions section on the garden show page to display what can be planted now.
- Added a new view partial for garden suggestions.
- Updated the plant picker to allow selection of a specific garden.
- Enhanced navigation menu to include a link to planting suggestions.
- Added relevant translations for the new feature.
- Implemented feature specs to ensure suggestions display correctly for the user's garden.
2026-10-27 11:11:05 +13:00
Brenda Wallace 23a0e6ea1f Implement garden-specific job notepad: add JobsNotepad service, update controllers and views to support garden context, and enhance tests for new functionality. 2026-10-23 08:38:47 +13:00
Brenda Wallace a0b24381ac Refactor activities to jobs across the application
- Renamed all instances of 'Activity' to 'Job' in views, controllers, and models.
- Updated routes to reflect the change from activities to jobs.
- Modified database schema to rename the activities table to jobs and adjusted related columns.
- Updated locale files to change activity-related translations to jobs.
- Adjusted tests to ensure they reference jobs instead of activities.
- Removed the category field from jobs as they are now a plain list.
- Updated seed data and sample data generation to create jobs instead of activities.
2026-10-22 17:16:25 +13:00
Brenda Wallace 3cfc80450d Refactor error handling and enhance seed packet selection: move errorMessages function to a dedicated file, implement SeedPacketList component for better seed selection UI, and update related components to utilize new error handling logic. 2026-10-17 22:34:15 +13:00
Brenda Wallace 12633ac9e7 Refactor nursery management: Introduce NurseryScoped concern and restructure nursery-related controllers
- Created NurseryScoped module to handle nursery authentication and setup.
- Refactored GardensController to remove nursery-related actions and utilize the new NurseryScoped.
- Added new Nurseries::DeclinesController for handling nursery decline actions.
- Introduced Nurseries::LeftoversController for managing leftover plantings in the nursery.
- Created Nurseries::PlantOutsController for handling the planting out of seedlings from the nursery.
- Added NurseriesController to manage nursery display and creation.
- Updated routes to reflect new nursery structure and actions.
- Modified views to accommodate new nursery management flow and updated links.
- Enhanced models to support nursery functionality, including plant_out and finish_leftovers methods.
- Updated tests to reflect changes in nursery handling and ensure functionality.
2026-10-17 17:38:38 +13:00
Brenda Wallace 84c4c0c6ed Implement nursery plant-out functionality: enhance styles for sowing and planting out, update GardensController with new actions for managing planted batches, and create views for planted out seedlings. 2026-10-17 13:32:24 +13:00
Brenda Wallace dc47ba6b39 Implement plant out functionality: add plant_out and create_plant_out actions in GardensController, create plant_out view, update routes, and enhance Planting model for transplanting seedlings. 2026-10-17 13:16:07 +13:00
Brenda Wallace 747efe4b4a Implement nursery feature: add nursery management actions in GardensController, create NurseryPlanter component, update views for nursery setup, and enhance member model for nursery acceptance and decline. 2026-10-16 23:38:20 +13:00
Brenda Wallace a2466f41cc Implement nursery functionality: add nursery actions in gardens controller, update routes, and enhance views; add ability to transplant seedlings and manage nursery state. 2026-10-16 23:34:38 +13:00
Brenda WallaceandClaude Sonnet 5.5 b7dbb84ebd Add a garden and plant from the home page without leaving it
The garden dialog now adds a garden as well as edits one (new.json and
create.json on GardensController), and a GardenPicker button opens it from the
home page. A plant_picker helper replaces the home page's separate plant
links and the plant_button partial. The plant dialog asks when it was
planted (Today, Yesterday, Enter date), using a WhenPicker shared with the
harvest dialog. Members with no garden still get the full-page plant link.

Part of #4933

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 22:21:26 +13:00
Brenda Wallace 3b06325e62 Add friends and neighbours feature with member dismissal functionality
- Implement RecentActivity service to track recent planting, harvesting, and trading events.
- Enhance TimelineService to include garden layouts in event queries.
- Update navigation menu to include a link to friends and neighbours.
- Create member card partial for displaying gardener information.
- Add follow button partial for managing follow actions.
- Refactor members index view to use the new member card partial.
- Introduce neighbours feed view with daily updates and entries.
- Implement entry partial for displaying individual neighbour activities.
- Create layout partial for visualizing garden layouts.
- Add posts section to neighbours view for displaying recent posts.
- Implement reach section to show nearby gardeners.
- Add suggestions section for recommending gardeners to follow.
- Create routes for neighbours functionality and member dismissals.
- Add migrations for member dismissals and garden layout timestamps.
- Write feature and request specs for neighbours functionality.
- Include support for creating located members in tests.
2026-10-13 17:08:18 +13:00
3dc8379238 Add a garden layout page for mapping where plants sit in a bed (#4835)
* Share the three-dots button style outside planting rows

The round three-dots toggle was scoped to .planting-row. Move it to a
generic .actions-toggle-dots so other menus can reuse it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Show the garden card actions menu as three dots

Matches the planting rows, and gives the button an aria-label naming
the garden.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Let garden cards update a planting as JSON

PATCH /plantings/:slug.json now returns the garden's refreshed card, as
create does, or the validation errors as 422. Annual plantings in the
card say whether the viewer can edit them.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Add a PATCH helper and a shared way to swap in a garden card

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Let owners edit the planted date on garden cards

The date on an annual planting row is a button with a pencil hint for
plantings the viewer can edit. It opens the browser's date picker, saves
with the tick or Enter, and swaps in the refreshed card so predictions
follow the new date.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Serve a planting's form values as JSON for the edit dialog

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Add a shared isPlainClick helper

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Edit a planting in a dialog over the garden list

Three dots > Edit opens the planting's form in a modal instead of going to
the edit page. It saves as JSON and swaps in the refreshed garden card, so
the page is never left. Ctrl/cmd-click still opens the edit page.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Drop the garden choice from the planting edit dialog

Moving a planting between gardens isn't part of quick editing. The
dialog no longer asks, or sends, which garden.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Rate a planting with stars in the edit dialog

Overall rating is five clickable stars (real radio buttons underneath, so
the keyboard works) with a Clear button, in place of a select.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Only ask for a finished date once a planting is marked finished

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Show planting menu items in lowercase

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Add an Add planting button to garden cards

The way to plant in a garden was an item in its actions menu. Put a green
button in the card header, next to the menu, that opens the same dialog.
It only shows for gardens you can plant in.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Take Plant something here out of the garden card menu

The Add planting button does that now. The card data carries its link as
plant_url, instead of it being borrowed from a menu item.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Add a gallery page of a member's past gardens

/members/:slug/gardens/past shows their inactive gardens as photo cards:
when each was in use, how many plantings, and the crops grown in it. The
owner (or a collaborator) can mark a garden active again from its card.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Replace the include in-active tickbox with a link to past gardens

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Call them inactive gardens, and explain what that page is

Rename the past gardens page to inactive gardens throughout (label, route,
action, view, styles). Move its link on the gardens page to below the
member's card, with a line saying what it holds, and add an explanation
to the page itself.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Line the breadcrumb up with the page content

The breadcrumb bar is the same colour as the page, but its side padding
pushed the text 1rem in from the edge the heading and content sit on.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Line the sidebar text up with the text in the member card

The skip link, nav links, button, blurb and inactive gardens link sat at
the card's edge while the card's own text is inset. Give them the same
inset, left-align the blurb, and add a little space between the links.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Make the sidebar nav links look like links

Link colour and underline, with the page you are on in bold and marked
aria-current.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Let garden cards record a harvest as JSON

GET /plantings/:slug/harvests/new.json gives the form's starting values
and choices; POST /harvests.json returns the garden's refreshed card, or
the validation errors as 422.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Record a harvest in a dialog over the garden list

Three dots > record harvest opens a quick entry form (how many, weight,
when, plant part, notes) in a modal, with the crop and today's date
filled in. It saves as JSON and swaps in the refreshed card, so the page
is never left. Ctrl/cmd-click still opens the full harvest page.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Pass the harvest handler to the planting row, not the perennial chip

The record harvest prop had been attached to the first matching element
in GardenCard, the perennials' CropChip, so the row's menu item fell
through to a normal link.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Share the dialog step indicator

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Record a harvest in two steps, styled like Add planting

Step 1 is what part you harvested: a big text box, with the cursor in it,
that completes from the plant parts (the crop's usual one first). Step 2
is how much: quantity, weight, when and notes, with the choice shown back
and a Change button. Same look as the Add planting dialog.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Harvest dialog: add When and Any notes steps, drop Cancel

Step 3 is when (Today, Yesterday, or Enter date), step 4 is any notes,
and that step saves. The choices so far are shown back with Change
buttons, and there is a Back button. Closing the dialog is how you cancel.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Mark the planting that has just had a harvest recorded

For a few seconds the row goes amber and gets a Harvest recorded tag, and
the notice names the garden, so it is clear which planting it was.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Only offer Yesterday when a harvest then would be after planting

The server needs a harvest to come after the planted date, so a planting
made today (or yesterday) has no Yesterday, and the date box starts the
day after it was planted.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Fix the JSON request specs, and tolerate an empty harvest param

The update helper took its hash as keywords, and the form GET sent a JSON
content type, which Rails wraps into an empty harvest param that new then
rejected. The specs are fixed, and new ignores a blank harvest param.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Put Mark as finished last in the planting menu, below a divider

It takes the planting off the list, so it goes after the everyday
actions, separated from them. The card menu and the garden page menu
match.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Show a tick on the progress bar for each harvest

Each harvest is a small tick at its date on the bar's own scale, with the
date as a tooltip and a hidden sentence for screen readers. The card data
carries the positions, worked out with the same formula as the fill.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Make the pill choice styles general, not about harvests

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Let garden cards save seeds as JSON

GET /plantings/:slug/seeds/new.json gives the form's starting values and
choices; POST /seeds.json returns a link to the new seed, or the
validation errors as 422, without queueing a flash message.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Save seeds in a dialog over the garden list

Three dots > save seeds opens a dialog in the same style as record
harvest: about how many (with quick picks), whether to offer them for
trade, and any notes. It saves as JSON and shows a notice with a link to
the seeds, so the page is never left.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Add feature specs for the save seeds and record harvest dialogs

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Let garden cards choose and add a Flickr photo as JSON

GET /photos/new.json gives a page of the member's Flickr photos (or says
to connect or reconnect Flickr), and POST /photos.json adds one to the
planting or garden and returns the garden's refreshed card, or the
validation errors as 422.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Add a small page for a Flickr connect pop-up to end on

/authentications/connected says whether Flickr got connected and closes
itself. It has no site header or footer, as it appears in a small window.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Add a photo in a dialog over the garden list, connecting Flickr there too

Three dots > add photo (on a planting or a garden) opens a dialog: choose
one of your Flickr photos by album or tag, confirm it, and it is added
without leaving the page, with the garden's card refreshed. If Flickr is
not connected, or the connection has expired, the first step connects it
in a pop-up and the dialog carries on by itself once it has worked.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Add feature specs for the add photo dialog, with Flickr stubbed

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Stop handled menu clicks reaching jquery_ujs, and close the menu

A menu item that carries a data-method (mark as finished) was still sent
as a request by jquery_ujs after a dialog had taken the click over, so the
page navigated and the change was made before the dialog could be used.
A click a dialog handles is now stopped in the menu, which also closes it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Mark a planting finished in a dialog, asking when it finished

Three dots > mark as finished opens a dialog over the list: when did it
finish, today unless you enter a date. Today is not offered for a planting
made today, as the server needs a finish after the planting. It saves as
JSON and the planting leaves the list, without leaving the page. The card
data carries the server's date for today.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Add specs for the mark as finished dialog

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Make the crop chip the planting's menu, for annuals and perennials

Clicking a chip opens the planting's menu under it (view, edit, add
photo, record harvest, save seeds, mark as finished), in place of the
three dots on annual rows, so perennials get the same menu. A caret shows
the chip opens something. Someone who can't change the planting still gets
a plain link chip. The menu items are lowercase for every planting menu.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Update the garden index spec for chip menus

An owner's planting chip is a menu now, with a View link to the planting.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Let garden cards edit a garden as JSON

GET /gardens/:slug/edit.json gives the form's values and choices, and
PATCH /gardens/:slug.json returns the garden's refreshed card, or the
validation errors as 422, without queueing a flash message.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Edit a garden in a dialog over the garden list

Three dots on a garden card > edit opens its form in a dialog, and saves
without leaving the page. A garden saved as inactive leaves the list, with
a note saying where it went.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Add feature specs for the edit garden dialog

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Update the edit garden spec: Edit on a card opens the dialog

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Re-dump schema.rb under Rails 8.1

Rails 8.1's schema dumper sorts each table's columns alphabetically, and
schema.rb was last dumped under 8.0, so the next migration rewrites the
whole file. Doing that on its own here, with no schema changes, keeps the
garden layout commit's schema diff down to what it actually adds.

The lines are identical to before, only reordered.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* Add a garden layout page for mapping where plants sit in a bed

A new page at /members/:member_slug/gardens/:slug/layout shows the bed as
a grid, and the garden cards link to it as "Garden layout".

Each planting in the sidebar is a crop chip. Dragging it onto the bed
places one plant there, and the chip stays so it can be dragged again;
dragging a plant back to the sidebar takes it off the bed. Plants can go
anywhere on the bed, not just in a cell, and are drawn as circles with
the crop's icon. The owner can change the bed's size above it, and it
redraws as they type. There is also a "Remove all" button, and a "Plant
something" button that opens the same dialog as the garden cards.

Plants are a new model, one row per individual plant in a planting, so a
planting of ten tomatoes is ten plants that are placed one at a time.
That also gives per-plant state, such as one plant failing, somewhere to
go later. A planting's quantity now follows its number of plants, and
existing plantings are backfilled with one plant each per plant they say
they have, up to 100.

The layout saves the whole arrangement in one request, in a transaction,
so a bad placement leaves the bed as it was. The owner and collaborators
can arrange plants; only the owner can resize the bed or plant into it.

The members-nested gardens routes now use :slug, like the top-level
ones. They used :id, which the controller's loader never read, so those
routes could not find a garden; nothing linked to them.

The specs are not up to date with the Plant model yet, and have not
been run: the layout request, serializer and feature specs still
describe earlier versions of the page.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* Add a compost bin to the garden layout, and make the bed look like soil

Dragging a plant into the compost bin deletes it, so its planting has
one fewer; dropping it anywhere else in the sidebar still just lifts it
off the bed. The save request carries the composted plant ids, since a
plant missing from the arrangement otherwise means lifted, not gone. The
plant arcs into the bin as it's dropped, unless the viewer prefers
reduced motion.

The bin sits under "About this garden", drawn there through a portal so
it stays part of the layout island, and is sticky so it stays in reach
on a long bed. There is no compost icon in the Icons8 set, so it uses
the earth worm.

The bed is now dark soil in a timber frame, with the grid as twine. The
frame is the border, so drops are measured against the soil inside it.

The sidebar is just the crop chips now, without a status line under
each.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* Let plants on the garden layout be resized, and make dragging easier

Each plant can be drawn bigger or smaller, since a tomato takes more
room than basil: drag the handle on its edge. plants.diameter holds the
size in grid cells once a plant is resized; until then it follows its
crop's new default_diameter, or the parent crop's, or one cell. There is
no form for crop defaults yet. The next plant taken off a planting's
chip is the size last given to one of its plants, so shrinking one
chive shrinks the next.

Dragging is easier to follow. The browser's own drag picture all but
vanished on the soil, so a ringed circle at the plant's size follows the
pointer instead, centred where it will land. Only a plant's circle picks
it up, not the square around it, which overlapped neighbouring plants
and could pick up the wrong one. Clicking a plant no longer opens its
planting.

A crop chip dropped in the compost bin composts one of that planting's
unplaced plants. Drag state is now cleared on any drop, since a plant
composted from the bed is gone before its own drag end would fire,
which left the bin highlighted.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* Point people at the garden layout, and tidy its crop chips

The garden page has a card inviting people to the layout, with a small
bed drawn in the same soil and timber: "Try out the new garden layout
tool" for those who can arrange it, "Open the garden layout" for
everyone else. It isn't shown for inactive gardens, which have nothing
growing to place.

On the gardens list the layout link is now a small "Layout" button
beside "Add planting", rather than a line of text under the owner.

The sidebar's crop chips are all the width of the sidebar, with the icon
inside the chip (the shared chip style pulled it half outside) and the
counts lined up. Plantings are listed by crop name, then date, then id;
by date alone, plantings made the same day came back in no fixed order
and reshuffled whenever a save touched them. A crop in the bed more than
once shows each planting's date, so they can be told apart.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* Make a planting's plants when its garden's layout is used, not up front

Most plantings will never go on a layout, so giving every planting a
row per plant, when it was made and by backfilling the existing ones,
filled the plants table for nothing. Now a garden's growing plantings
get their plants the first time someone who can arrange the bed opens
its layout, in one insert; someone only looking makes none. The
backfill migration is gone, so there is nothing to run on deploy.

A planting's quantity only adds or removes plants once it is on a
layout. Zero now means no plants rather than one, so a planting
composted down to nothing isn't given a fresh plant next time the
layout is opened; a blank quantity still counts as one.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* Bring the garden layout specs up to date

The specs described the layout as it was several versions ago, with
positions and spans on plantings. They now cover plants: where they can
sit, their sizes and the fallback to the parent crop's, the 100-plant
cap, and being made when a layout is first used. The request specs cover
saving an arrangement, dragging off a chip, composting, resizing the
bed, and who may do each. The feature spec drives the page in a browser.

The garden page's layout card and the layout's save route have specs
too.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* Tell people about the garden layout at the top of the home page

A card at the top of the home page, with the same small drawn bed as the
garden page's, invites people to the layout. A signed-in member is sent
to the layout of their active garden with the most growing in it, so
there is something to arrange, alphabetically between ones with the
same. A member with no active garden is asked to add one, and anyone
signed out to sign up.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* Keep plants wholly on the garden layout's bed

A plant's position is its centre, so a big plant near the edge hung over
the timber frame, and ones along the bottom were cut off. Now a plant
always stays half its width from each edge: when it's dropped, resized,
or the arrangement is saved. Plants already hanging over are drawn
pulled in, and saved that way on the next change. A plant can't be made
wider than the bed, and shrinking the bed counts each plant's edge, not
just its centre.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* Make it easier to tell plants apart on the garden layout

Every plant was a circle with its crop's icon, and many crops share an
icon or have none, so a bed could be a field of identical sprouts.

- A plant big enough on screen carries its crop's name beneath it.
- Pointing at a plant, or at a planting's chip in the sidebar, picks out
  all of that planting's plants and fades the rest.
- Plantings drawn with the same icon get a coloured ring, with a
  matching dot on their chip. There are five colours, which are the ones
  that stay distinguishable from each other against the soil for every
  pair, colour blind or not. They go to the plantings that share an icon
  in the order those were made, so a planting keeps its colour. Past
  five in one group, plantings go by their names.

The layout's data now says which icon each planting is drawn with, so
the page can group them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* Put stepping stones, labels and rows on the garden layout

A "Garden features" group in the layout's sidebar has three things to
drag onto the bed besides plants:

- A stepping stone: a grey pebble, moved by dragging.
- A label, such as "path" or "N": asks what it should say, sits over
  the plants like a marker, and is renamed by double-clicking it.
- A row: a furrow two cells long, whose ends can be dragged to set where
  it runs, moved by the handle at its middle, and optionally named.

Any of them goes in the compost bin to be removed. They're kept as a
list on the garden, gardens.layout_features, and saved in the same
request as the plants, so a bad one rolls back the whole save. They're
checked and written directly rather than by saving the garden, which
would geocode it on every drag. A save that doesn't send them leaves
them alone, and the bed can't be shrunk out from under one.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* Put the garden layout's sidebar on the left, next to the bed

The bed sits at the start of its column, sized to fit the window, so a
tall, narrow bed left the sidebar stranded far off to its right. With the
plantings and garden features on the left, the bed is always right next
to them. On a phone they still stack, with the list under the bed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* Call the garden layout's planting button "Add a planting"

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* Add sprinklers, taps, stakes, paths, drip lines, fences, trellises and netting

More garden features to put on the layout besides plants:

- Points: an irrigation sprinkler and a tap (their Icons8 icons on a
  white disc ringed in blue), and a stake (the round top of a post).
- Lines, drawn and reshaped like rows: a path (a wide gravel strip), a
  drip line (a thin blue pipe with emitters), a fence (a rail with posts)
  and a trellis (a strip of timber lattice).
- An area: netting, a see-through mesh over the plants it covers,
  between two corners that can be dragged to resize it.

Lines and netting share their handles: the middle to move and name it,
the ends or corners to reshape it. The types are now one table in the
layout, each with a name and a shape (point, label, line or area), and
the sidebar offers them from it. The server knows them by the same
split, checks both points of every line and area, and sends the icons as
one set, feature_icon_urls.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* Call the garden layout's "Remove all" button "Clear bed"

It still lifts only the plants back to their chips; the confirmation now
says that stones, lines, netting and the rest stay where they are.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* Put garden features in a toolbar above the bed, and keep the sidebar in view

With eleven garden features under the plantings, the sidebar no longer
fit on the screen. The features are now a row of small tiles above the
bed, in groups (ground, water, supports, markers), each named when
pointed at, and the sidebar is just the plantings.

The sidebar also stays in view as a tall bed is scrolled, scrolling
itself if the list of plantings is long. On a phone it still sits under
the bed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* Implement bed resizing functionality with drag support

* Style the garden layout bed's edges, so they can be dragged

The bed's right edge, bottom edge and corner had their drag handling but
no styles, so they had no size or position and couldn't be grabbed. Now
they sit over the timber frame, with a pale grip showing while the bed
is pointed at, and a dashed outline shows the size the bed is being
dragged to. The bed's column no longer clips, so that outline can show
past it when the bed is dragged bigger.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* Bring two garden layout feature specs up to date

A chip dropped in the middle of the bed lands within a fraction of a
pixel of the middle, not exactly on it. And shrinking the bed past
something on it now says "things", as stones and fences count too, not
"plants".

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* Wait for a garden to be reactivated before checking it

"Mark as active" sends the change in the background, and the spec looked
at the garden straight after clicking, so it failed whenever the request
hadn't finished yet. It now waits for the page to come back first.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-authored-by: Daniel O'Connor <daniel.oconnor@gmail.com>
2026-09-27 11:43:40 +09:30
f78dc1712c Paginate garden photos and limit plantings in garden views (#4830)
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: Brenda Wallace <brenda@wallace.net.nz>
2026-09-22 19:19:15 +09:30
Brenda WallaceandClaude Sonnet 5 86deb55d53 Let garden cards edit a garden as JSON
GET /gardens/:slug/edit.json gives the form's values and choices, and
PATCH /gardens/:slug.json returns the garden's refreshed card, or the
validation errors as 422, without queueing a flash message.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 17:42:26 +12:00
Brenda WallaceandClaude Sonnet 5 ee79428271 Call them inactive gardens, and explain what that page is
Rename the past gardens page to inactive gardens throughout (label, route,
action, view, styles). Move its link on the gardens page to below the
member's card, with a line saying what it holds, and add an explanation
to the page itself.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 17:42:26 +12:00
Brenda WallaceandClaude Sonnet 5 e68ef96292 Replace the include in-active tickbox with a link to past gardens
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 17:42:26 +12:00
Brenda WallaceandClaude Sonnet 5 dcf59ff4e7 Add a gallery page of a member's past gardens
/members/:slug/gardens/past shows their inactive gardens as photo cards:
when each was in use, how many plantings, and the crops grown in it. The
owner (or a collaborator) can mark a garden active again from its card.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 17:42:26 +12:00
1467ec9364 Add Wikidata climate attributes and integration to gardens (#4627)
* Add Wikidata integration for garden climate data

- Add location_wikidata_id, lowest_temp_c, and highest_temp_c to gardens.
- Implement WikidataService for fetching IDs and temperature properties.
- Map P6591 to highest_temp_c and P7422 to lowest_temp_c with unit conversion.
- Automatically populate Wikidata info on garden location change.
- Add manual "Fetch Wikidata info" button and opt-in prompt to garden show page.
- Update gardens_controller to permit new attributes and handle manual fetch.
- Update db/schema.rb manually to include new columns and migration version.

Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>

* Fix migration

* Improve display

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-05-12 18:07:35 +09:30
Daniel O'Connorandgoogle-labs-jules[bot] 37e9860fdf Update member_slug lookup to 404 when not found (#4584)
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-04-27 14:19:50 +09:30
Daniel O'Connor ce7ce70d5f Merge pull request #4222 from Growstuff/feature/add-activity-prompts
feat: Add prompts for new activities
2025-09-20 17:49:47 +09:30
Daniel O'Connor 2bc164bd2e Render history 2025-09-07 07:59:51 +00:00
Daniel O'Connor 93de9b35bc Fix current plantings not to show failed 2025-08-29 11:51:46 +00:00
Daniel O'Connor 1c97ba1495 Garden collaboration (small part of community gardens) (#3862)
* Add collaboration model

* Permissions and garden show

* List by owner, or where I am a collaborator

* Add index

* Add permissions

* Typo

* Typo

* Add route

* Update schema

* Update schema

* Add CRUD

* Add CRUD

* Add CRUD

* Factory

* Add validations

* Rubocop

* Rubocop

* Rubocop

* Unique index

* Fix

* Make CI more fine grained for faster feedback

* Swap order

* Fix path, fail-fast

* Fix spec

* Remove 'significant drop in coverage' as not everything runs in one giant run

* Fix tests?
2024-09-29 18:28:52 +09:30
Daniel O'Connor 5be0153c74 Activities (#3646)
* Implement activities

* Add activities to timeline

* Add factory

* Add coverage

* Fix misc issues

* Activities display

* Add activities to garden and plantings

* Add activities to garden and plantings

* Add planting

* Add to planting, harvest show

* More CRUD

* More CRUD

* index

* index

* Extract card view

* Permissions

* Add edit

* Remove workaround fro vs code

* Fix title

* CSV

* CSV

* Add RSS, ical

* Extend ical slightly

* Cleanup

* Rubocop

* Remove doubled form

* Change icon

* Fix short description

* Add menus

* Put homepage widget in

* Add activity icon - MIT licenced - https://www.svgrepo.com/svg/336823/plan

* Naming

* Missing files

* Revert VS Code lag induced change

* Update app/views/home/_harvests.html.haml

* Update activities_controller.rb

* Update activities_controller.rb

* Update app/controllers/activities_controller.rb

* Update index.html.haml

* Apply suggestions from code review

* Apply suggestions from code review

* Typo

* Translation

* Apply suggestions from code review

* Update app/views/plantings/index.ics.erb

* Update app/models/activity.rb

* Update plantings_spec.rb

* Update plantings_spec.rb

* We are now rendering an extra event, so check the next one for the old behaviour
2024-03-10 11:36:24 +10:30
Brenda Wallace cdff37b2eb style fix ups 2020-01-11 22:57:09 +13:00
Martina Simicic 3143f0c5ee Name variable to somthing more descriptive 2020-01-09 20:00:03 +13:00
Martina Simicic 58c7576360 Jump to is only shown when viewing own gardens 2020-01-09 20:00:03 +13:00
Martina Simicic e07bb1bdb4 Add eager loading for garden owner 2020-01-09 20:00:03 +13:00
Brenda 42e225469a Routes using slugs (instead of ids)
this seems to be intended by the models having slugs (added about 7 years ago) but the routes weren't using them
2019-12-26 23:30:23 +00:00
Brenda Wallace 04fd1a343a Rubocop update (#2334)
* Update rubocop config

* Rubocop update - for rubocop 0.77

* [CodeFactor] Apply fixes

* rubocop fixes

* [CodeFactor] Apply fixes to commit 2826c2e
2019-12-16 22:35:33 +13:00
Brenda Wallace 8c694b3dca Only show companions of active plantings 2019-10-21 14:19:47 +13:00
Brenda Wallace 0965168750 Group previous plantings by year 2019-10-19 11:25:19 +13:00
Brenda Wallace b0c8b11246 📝 Inline editing and display tidy ups (#2200)
* Inline editing and display tidy ups
2019-10-08 11:06:53 +13:00
Brenda Wallace c29f0c15ee don't join to owners when fetching gardens
discard isn't the same
2019-08-10 10:39:40 +12:00
Brenda Wallace 7b87f8e4db Add flash messages to controllers 2019-07-09 09:19:27 +12:00
Brenda Wallace 789cffeca1 Eager loading 2019-04-08 21:39:20 +12:00
Brenda Wallace 5395aefa66 Rename containers to garden types 2019-03-26 20:56:11 +13:00
Brenda Wallace 8c03e3f4ab Merge branch 'dev' into bb-track-types-of-gardens 2019-01-30 16:45:14 +13:00
Brandon Baker a00ed5a176 Merge branch 'dev' into bb-track-types-of-gardens 2019-01-08 12:03:39 -05:00
Brenda Wallace 1e6c204df2 Rubcop fix up 2019-01-06 08:45:42 +13:00
Brenda Wallace 1e266a92f6 Members slug used in rotes 2019-01-06 08:45:42 +13:00
Brenda Wallace 387200abf7 Moving garden data under members 2019-01-06 08:45:42 +13:00
Brenda Wallace 68953188f8 Update to new path names 2019-01-06 08:45:42 +13:00
Brenda Wallace 24b58c5ac2 FIXED wrong method name 2018-12-30 15:04:50 +13:00
Brandon Baker f5abc592f1 cleans up rubocop violations 2018-11-29 14:30:02 -07:00
Brandon Baker c898a958a5 adds container to garden form 2018-11-29 12:51:15 -07:00
Brenda Wallace 4d21e132b9 Timeline is in a different controller now 2018-04-02 11:18:56 +12:00
Brenda Wallace 700073e893 Removed duplicate gardens/timeline code 2018-04-02 11:02:22 +12:00
Brenda Wallace 16ad5384d1 Moved gardens chart to dedicated controller 2018-01-23 09:00:34 +13:00