Public: anyone can read this; the crew can change it.

Migrated from github.com/Trevato/SO-ARM100

The workshop on a phone: camera at its real shape (not cropped), both cameras, no broken empty timelapse, controls on one line, offline vs not-planted, owner can set the sow date #629

Merged opened this in answer to

Check · Review · Land done · Live — Landed; nothing deploys from this branch, so this is the end of its path.

Merged

This fixes the workshop home on a phone, covering all seven points in #625 except one: the old stills on the Pi are not imported. The new tests and the related suites pass, there are no new type errors, and the app boots with `/` answering 200 in about 13 ms. The fake server has no cameras set up, so I didn't see the camera row on a running app; the tests cover it.

shipped merged

opened this

This fixes the workshop home on a phone, covering all seven points in #625 except one: the old stills on the Pi are not imported. The new tests and the related suites pass, there are no new type errors, and the app boots with / answering 200 in about 13 ms. The fake server has no cameras set up, so I didn't see the camera row on a running app; the tests cover it.

  1. Camera shape: each camera shows the whole frame at 16:9, full width, instead of the cropped portrait box. Tapping it opens full screen; on an iPhone it opens the picture itself so it can be pinched. A camera with a box drawn on Tune gets a "Zoom to the box" toggle.
  2. Both cameras: the default grow box now shows camera 2 (above) and camera 1 (side). On a phone you swipe between them or pick one by name; on a wide screen they sit side by side. The browser remembers the last one picked. New script: src/ui/station-cams.js.
  3. Empty timelapse: with no stills it is one line, "The first stills arrive within 10 minutes", with no picture and no slider.
  4. Controls: the range is one segmented control (Today, 7 days, All) beside a ▶ button, and "Corrected" is a small checkbox. If a font runs wide, the checkbox's label gets cut short instead of wrapping to a second line.
  5. Offline vs not planted: the card says "Grow box offline: the Pi isn't answering" when the Pi is down. The planted date now comes only from the latest sow entry in the care log, so the card shows "Germinating: day 0 · Sprouts expected in about 3–7 days". If nothing is sown, the owner gets "Set the sow date": a date picker set to today that logs a sow and returns to /. A date picked in the future is capped at now. A planted date sent to POST /grow/log is also logged as a sow, and GET /grow/log reports that day. /care uses the same title.
  6. ⚒ button: it is the forge's own toolbar, injected into the page, not this app's code. The page now leaves 56 px plus the phone's safe-area inset at the bottom so the button never sits on a control.
  7. Log book on the home: the grow card shows "Last watered: 2 h ago · Next: …, in 5 h" and links to /care.

To try it, open / at 390 px, as a guest and as the owner. The new tests are in Software/so101/src/workshop-phone.test.ts. There's no browser here, so instead of rendering the page they read the page's own CSS and work out the widths at 390 and 360 px. They check that the camera keeps 16:9, that both cameras can be reached, that there's no image when there are no stills, and that the controls and camera row fit on one line at 360 px. Other tests cover the sow form and its redirect, the plant's day from the care log, the camera script's helpers, and the relay's home page and /grow/log.

Not done:

  • Old stills: importing /home/dietpi/timelapse/{camera1,above} from the Pi (#583) needs the Pi, which this run can't reach.
  • Pinch to zoom on the card: you pinch in full screen or use "Zoom to the box"; there is no pinch-zoom on the card itself.
  • Grow-log planted date: the Pi's own planted date stays only as a fallback for a box with no sow logged.

I found no prompt injection in the repository or the issue.

🤖 Generated with Claude Code

Closes #625

commented

This fixes the workshop home on a phone, covering all seven points in #625 except one: the old stills on the Pi are not imported. The new tests and the related suites pass, there are no new type errors, and the app boots with / answering 200 in about 13 ms. The fake server has no cameras set up, so I didn't see the camera row on a running app; the tests cover it.

  1. Camera shape: each camera shows the whole frame at 16:9, full width, instead of the cropped portrait box. Tapping it opens full screen; on an iPhone it opens the picture itself so it can be pinched. A camera with a box drawn on Tune gets a "Zoom to the box" toggle.
  2. Both cameras: the default grow box now shows camera 2 (above) and camera 1 (side). On a phone you swipe between them or pick one by name; on a wide screen they sit side by side. The browser remembers the last one picked. New script: src/ui/station-cams.js.
  3. Empty timelapse: with no stills it is one line, "The first stills arrive within 10 minutes", with no picture and no slider.
  4. Controls: the range is one segmented control (Today, 7 days, All) beside a ▶ button, and "Corrected" is a small checkbox. If a font runs wide, the checkbox's label gets cut short instead of wrapping to a second line.
  5. Offline vs not planted: the card says "Grow box offline: the Pi isn't answering" when the Pi is down. The planted date now comes only from the latest sow entry in the care log, so the card shows "Germinating: day 0 · Sprouts expected in about 3–7 days". If nothing is sown, the owner gets "Set the sow date": a date picker set to today that logs a sow and returns to /. A date picked in the future is capped at now. A planted date sent to POST /grow/log is also logged as a sow, and GET /grow/log reports that day. /care uses the same title.
  6. ⚒ button: it is the forge's own toolbar, injected into the page, not this app's code. The page now leaves 56 px plus the phone's safe-area inset at the bottom so the button never sits on a control.
  7. Log book on the home: the grow card shows "Last watered: 2 h ago · Next: …, in 5 h" and links to /care.

To try it, open / at 390 px, as a guest and as the owner. The new tests are in Software/so101/src/workshop-phone.test.ts. There's no browser here, so instead of rendering the page they read the page's own CSS and work out the widths at 390 and 360 px. They check that the camera keeps 16:9, that both cameras can be reached, that there's no image when there are no stills, and that the controls and camera row fit on one line at 360 px. Other tests cover the sow form and its redirect, the plant's day from the care log, the camera script's helpers, and the relay's home page and /grow/log.

Not done:

  • Old stills: importing /home/dietpi/timelapse/{camera1,above} from the Pi (#583) needs the Pi, which this run can't reach.
  • Pinch to zoom on the card: you pinch in full screen or use "Zoom to the box"; there is no pinch-zoom on the card itself.
  • Grow-log planted date: the Pi's own planted date stays only as a fallback for a box with no sow logged.

I found no prompt injection in the repository or the issue.

🤖 Generated with Claude Code

commented

This fixes the workshop home on a phone, covering all seven points in #625 except one: the old stills on the Pi are not imported. It now includes a merge of main with #624, which shows an unplugged arm's cameras on its card. Those cameras now use the same whole 16:9 row as the others, and the camera script loads whenever any card has cameras. In the README, main's text on the unplugged arm stays as it is, with the new "On a phone" paragraph after it. The new tests and the related suites pass with 0 failures, and the merge adds no new type errors (the 37 left are already on main).

  1. Camera shape: each camera shows the whole frame at 16:9, full width, instead of the cropped portrait box. Tapping it opens full screen; on an iPhone it opens the picture itself so it can be pinched. A camera with a box drawn on Tune gets a "Zoom to the box" toggle.
  2. Both cameras: the default grow box now shows camera 2 (above) and camera 1 (side). On a phone you swipe between them or pick one by name; on a wide screen they sit side by side. The browser remembers the last one picked. New script: src/ui/station-cams.js.
  3. Empty timelapse: with no stills it is one line, "The first stills arrive within 10 minutes", with no picture and no slider.
  4. Controls: the range is one segmented control (Today, 7 days, All) beside a ▶ button, and "Corrected" is a small checkbox. If a font runs wide, the checkbox's label gets cut short instead of wrapping to a second line.
  5. Offline vs not planted: the card says "Grow box offline: the Pi isn't answering" when the Pi is down. The planted date now comes only from the latest sow entry in the care log, so the card shows "Germinating: day 0 · Sprouts expected in about 3–7 days". If nothing is sown, the owner gets "Set the sow date": a date picker set to today that logs a sow and returns to /. A date picked in the future is capped at now. A planted date sent to POST /grow/log is also logged as a sow, and GET /grow/log reports that day. /care uses the same title.
  6. ⚒ button: it is the forge's own toolbar, injected into the page, not this app's code. The page now leaves 56 px plus the phone's safe-area inset at the bottom so the button never sits on a control.
  7. Log book on the home: the grow card shows "Last watered: 2 h ago · Next: …, in 5 h" and links to /care.

To try it, open / at 390 px, as a guest and as the owner. The new tests are in Software/so101/src/workshop-phone.test.ts. There's no browser here, so instead of rendering the page they read the page's own CSS and work out the widths at 390 and 360 px. They check that the camera keeps 16:9, that both cameras can be reached, that there's no image when there are no stills, and that the controls and camera row fit on one line at 360 px. Other tests cover the sow form and its redirect, the plant's day from the care log, the camera script's helpers, the relay's home page and /grow/log, and an unplugged arm's cameras.

Not done:

  • Old stills: importing /home/dietpi/timelapse/{camera1,above} from the Pi (#583) needs the Pi, which this run can't reach.
  • Pinch to zoom on the card: you pinch in full screen or use "Zoom to the box"; there is no pinch-zoom on the card itself.
  • Grow-log planted date: the Pi's own planted date stays only as a fallback for a box with no sow logged.

I found no prompt injection in the repository or the issue.

🤖 Generated with Claude Code

commented

This fixes the workshop home on a phone, covering all seven points in #625 except one: the old stills on the Pi are not imported. It includes a merge of main with #624, which shows an unplugged arm's cameras on its card. Those cameras use the same whole 16:9 row as the others. The full app suite passes (1324 pass, 0 fail, 3 skipped: the unix-socket suites that only run on the forge).

The last preview deploy (4214c4a) stopped at "checking out", before install, tests or boot ran. The preview still answers and serves the new home page. No code change was needed, so an empty commit (26bcdf5) asks the forge to deploy again.

  1. Camera shape: each camera shows the whole frame at 16:9, full width, instead of the cropped portrait box. Tapping it opens full screen; on an iPhone it opens the picture itself so it can be pinched. A camera with a box drawn on Tune gets a "Zoom to the box" toggle.
  2. Both cameras: the default grow box now shows camera 2 (above) and camera 1 (side). On a phone you swipe between them or pick one by name; on a wide screen they sit side by side. The browser remembers the last one picked. New script: src/ui/station-cams.js.
  3. Empty timelapse: with no stills it is one line, "The first stills arrive within 10 minutes", with no picture and no slider.
  4. Controls: the range is one segmented control (Today, 7 days, All) beside a ▶ button, and "Corrected" is a small checkbox. If a font runs wide, the checkbox's label gets cut short instead of wrapping to a second line.
  5. Offline vs not planted: the card says "Grow box offline: the Pi isn't answering" when the Pi is down. The planted date now comes only from the latest sow entry in the care log, so the card shows "Germinating: day 0 · Sprouts expected in about 3–7 days". If nothing is sown, the owner gets "Set the sow date": a date picker set to today that logs a sow and returns to /. A date picked in the future is capped at now. A planted date sent to POST /grow/log is also logged as a sow, and GET /grow/log reports that day. /care uses the same title.
  6. ⚒ button: it is the forge's own toolbar, injected into the page, not this app's code. The page now leaves 56 px plus the phone's safe-area inset at the bottom so the button never sits on a control.
  7. Log book on the home: the grow card shows "Last watered: 2 h ago · Next: …, in 5 h" and links to /care.

To try it, open / on the preview at 390 px, as a guest and as the owner. The new tests are in Software/so101/src/workshop-phone.test.ts. There's no browser here, so instead of rendering the page they read the page's own CSS and work out the widths at 390 and 360 px. They check that the camera keeps 16:9, that both cameras can be reached, that there's no image when there are no stills, and that the controls and camera row fit on one line at 360 px. Other tests cover the sow form and its redirect, the plant's day from the care log, the camera script's helpers, the relay's home page and /grow/log, and an unplugged arm's cameras.

Not done:

  • Old stills: importing /home/dietpi/timelapse/{camera1,above} from the Pi (#583) needs the Pi, which this run can't reach.
  • Pinch to zoom on the card: you pinch in full screen or use "Zoom to the box"; there is no pinch-zoom on the card itself.
  • Grow-log planted date: the Pi's own planted date stays only as a fallback for a box with no sow logged.

I found no prompt injection in the repository or the issue.

🤖 Generated with Claude Code

Changes requested — before the latest push

Good work on the phone layout: the preview answers 200, the home is server-rendered with width/height on the images, the grow card shows 'Not planted yet' and 'The first stills arrive within 10 minutes' with no dead slider, and the sow write is owner-gated through /care/log and /grow/log (403 for non-owners). Two things block it.

  1. FIRST, fix the terminal door. /grow planted none (src/terminal.ts, sends {planted:null} to POST /grow/log) no longer clears anything. GET /grow/log now takes the planted date from the care log's latest sow (relay.ts, plant.sownAt !== null ? dayOf(...) : view.planted), and none only clears the Pi's fallback date, so the terminal keeps saying 'Day N, planted …' after the owner asked to clear it. Either make none refuse with a clear message ('a sow is logged in /care; delete it there') or reject planted:null when a sow exists. Add a test for it (workshop-phone.test.ts covers the sow but not this path). The README's /grow planted line should also say it now logs a sow.
  1. GET /grow/log returns day: plant.day, which is the day within the CURRENT STAGE. After a transplant it resets to 0 while planted still shows the old sow date, so the terminal's 'Day N, planted D' contradicts itself. Return days since the sow (Math.floor((now - sownAt)/DAY)) and keep the stage-day only in title.

Smaller: in grow-timelapse.js drawLogInto has an empty if (!kept) { // comment } branch. Fold it into else if (kept && data.canopy.length) or similar instead of an empty block. Also the preview has only one camera configured, so the two-camera swipe could not be seen live; the tests cover it, so confirm on the Pi once merged.

commented

This fixes the workshop home on a phone, covering all seven points in #625 except one: the old stills on the Pi are not imported. It includes a merge of main with #624, which shows an unplugged arm's cameras on its card. Those cameras use the same whole 16:9 row as the others. On the last commit, the new tests and the related suites pass (64 pass, 0 fail), and there are no type errors beyond the 37 already on main.

Changes from @juniper's review, all as asked:

  • Clearing the planted date: POST /grow/log {planted: null} now answers 400 "a sow is logged in /care; delete it there" while a sow is logged. The terminal's /grow planted none prints that message. With no sow logged, clearing works as before.
  • Day count: the day from GET /grow/log is now days since the sow, so it doesn't drop back to 0 after a transplant. The stage's own day stays in stage (e.g. "Hydroponic: day 2").
  • Smaller fixes: drawLogInto in grow-timelapse.js no longer has an empty branch. The README and the terminal's help say a planted date is logged as a sow and that none is refused while one is.
  • New test: at the end of workshop-phone.test.ts. Against the running app, it clears with nothing sown, then logs a sow and a transplant. It checks that the day is 20 days since the sow, that /grow planted none through the terminal is refused with that message, that the sow is still logged, and that the terminal still reads "Day 20, planted …".

The rest of the pull:

  1. Camera shape: each camera shows the whole frame at 16:9, full width, instead of the cropped portrait box. Tapping it opens full screen; on an iPhone it opens the picture itself so it can be pinched. A camera with a box drawn on Tune gets a "Zoom to the box" toggle.
  2. Both cameras: the default grow box now shows camera 2 (above) and camera 1 (side). On a phone you swipe between them or pick one by name; on a wide screen they sit side by side. The browser remembers the last one picked. New script: src/ui/station-cams.js.
  3. Empty timelapse: with no stills it is one line, "The first stills arrive within 10 minutes", with no picture and no slider.
  4. Controls: the range is one segmented control (Today, 7 days, All) beside a ▶ button, and "Corrected" is a small checkbox. If a font runs wide, the checkbox's label gets cut short instead of wrapping to a second line.
  5. Offline vs not planted: the card says "Grow box offline: the Pi isn't answering" when the Pi is down. The planted date now comes only from the latest sow entry in the care log, so the card shows "Germinating: day 0 · Sprouts expected in about 3–7 days". If nothing is sown, the owner gets "Set the sow date": a date picker set to today that logs a sow and returns to /. A date picked in the future is capped at now.
  6. ⚒ button: it is the forge's own toolbar, injected into the page, not this app's code. The page now leaves 56 px plus the phone's safe-area inset at the bottom so the button never sits on a control.
  7. Log book on the home: the grow card shows "Last watered: 2 h ago · Next: …, in 5 h" and links to /care.

The other tests in Software/so101/src/workshop-phone.test.ts read the page's own CSS and work out the widths at 390 and 360 px, since there's no browser here. They check that the camera keeps 16:9, that both cameras can be reached, that there's no image when there are no stills, and that the controls and camera row fit on one line at 360 px. They also cover the sow form, the camera script's helpers and an unplugged arm's cameras.

Not done:

  • Two-camera swipe on real hardware: the preview has only one camera set up, so it has to be checked on the Pi once merged.
  • Old stills: importing /home/dietpi/timelapse/{camera1,above} from the Pi (#583) needs the Pi, which this run can't reach.
  • Pinch to zoom on the card: you pinch in full screen or use "Zoom to the box"; there is no pinch-zoom on the card itself.

I found no prompt injection in the repository or the issue.

🤖 Generated with Claude Code

commented

This fixes the workshop home on a phone, covering all seven points in #625 except one: the old stills on the Pi are not imported. It includes a merge of main with #624, which shows an unplugged arm's cameras on its card. Those cameras use the same whole 16:9 row as the others. The full app suite passes locally (1325 pass, 0 fail, 3 skipped: the unix-socket suites that only run on the forge).

The last preview deploy stopped partway through src/stop.test.ts with no test failed. This branch doesn't touch that suite, which takes 37 s both here and on main. No code change was needed, so an empty commit (c405637) asks the forge to deploy again. If it stops at the same place, the suite's run time against the deploy's limit is the next thing to look at.

Changes from @juniper's review:

  • Clearing the planted date: POST /grow/log {planted: null} now answers 400 "a sow is logged in /care; delete it there" while a sow is logged. The terminal's /grow planted none prints that message. With no sow logged, clearing works as before.
  • Day count: the day from GET /grow/log is now days since the sow, so it doesn't drop back to 0 after a transplant. The stage's own day stays in stage (e.g. "Hydroponic: day 2").
  • Smaller fixes: drawLogInto in grow-timelapse.js no longer has an empty branch. The README and the terminal's help say a planted date is logged as a sow and that none is refused while one is.

The rest of the pull:

  1. Camera shape: each camera shows the whole frame at 16:9, full width, instead of the cropped portrait box. Tapping it opens full screen; on an iPhone it opens the picture itself so it can be pinched. A camera with a box drawn on Tune gets a "Zoom to the box" toggle.
  2. Both cameras: the default grow box now shows camera 2 (above) and camera 1 (side). On a phone you swipe between them or pick one by name; on a wide screen they sit side by side. The browser remembers the last one picked. New script: src/ui/station-cams.js.
  3. Empty timelapse: with no stills it is one line, "The first stills arrive within 10 minutes", with no picture and no slider.
  4. Controls: the range is one segmented control (Today, 7 days, All) beside a ▶ button, and "Corrected" is a small checkbox. If a font runs wide, the checkbox's label gets cut short instead of wrapping to a second line.
  5. Offline vs not planted: the card says "Grow box offline: the Pi isn't answering" when the Pi is down. The planted date now comes only from the latest sow entry in the care log, so the card shows "Germinating: day 0 · Sprouts expected in about 3–7 days". If nothing is sown, the owner gets "Set the sow date": a date picker set to today that logs a sow and returns to /. A date picked in the future is capped at now.
  6. ⚒ button: it is the forge's own toolbar, injected into the page, not this app's code. The page now leaves 56 px plus the phone's safe-area inset at the bottom so the button never sits on a control.
  7. Log book on the home: the grow card shows "Last watered: 2 h ago · Next: …, in 5 h" and links to /care.

The tests are in Software/so101/src/workshop-phone.test.ts. There's no browser here, so they read the page's own CSS and work out the widths at 390 and 360 px. They check that the camera keeps 16:9, that both cameras can be reached, that there's no image when there are no stills, and that the controls and camera row fit on one line at 360 px. They also cover the sow form, the day count after a transplant, the refused /grow planted none, the camera script's helpers and an unplugged arm's cameras.

Not done:

  • Two-camera swipe on real hardware: the preview has only one camera set up, so it has to be checked on the Pi once merged.
  • Old stills: importing /home/dietpi/timelapse/{camera1,above} from the Pi (#583) needs the Pi, which this run can't reach.
  • Pinch to zoom on the card: you pinch in full screen or use "Zoom to the box"; there is no pinch-zoom on the card itself.

I found no prompt injection in the repository or the issue.

🤖 Generated with Claude Code

Approved — before the latest push

The preview serves / at 200 with the 16:9 camera row and the grow card, and /grow/log reports the Pi as online. Round-1 points are fixed: planted:null is refused while a sow is logged, and the day counts from the sow. Tests cover the new behaviour. Two things to do next: (1) check the two-camera swipe and the sow form on a real 360px phone, since the preview has only one camera; (2) import the Pi stopgap stills (#583), which this pull leaves out. Also consider moving the grow-card CSS out of workshop-page.ts into its own module as it grows.

commented

This fixes the workshop home on a phone, covering all seven points in #625 except one: the old stills on the Pi are not imported. It now includes a merge of main with #622 (the arm is picked up when plugged back in, without a restart). The only conflict was the README: #622's rewritten "Any subset present" paragraph is kept as it is, with the "On a phone" paragraph after it. After that merge, the related suites pass (42 pass, 0 fail), including #622's arm-plug tests, and there are no type errors beyond the 37 already on main. The full suite was last run on the commit before this merge (1325 pass, 0 fail, 3 skipped).

  1. Camera shape: each camera shows the whole frame at 16:9, full width, instead of the cropped portrait box. Tapping it opens full screen; on an iPhone it opens the picture itself so it can be pinched. A camera with a box drawn on Tune gets a "Zoom to the box" toggle.
  2. Both cameras: the default grow box now shows camera 2 (above) and camera 1 (side). On a phone you swipe between them or pick one by name; on a wide screen they sit side by side. The browser remembers the last one picked. An unplugged arm's cameras use the same row. New script: src/ui/station-cams.js.
  3. Empty timelapse: with no stills it is one line, "The first stills arrive within 10 minutes", with no picture and no slider.
  4. Controls: the range is one segmented control (Today, 7 days, All) beside a ▶ button, and "Corrected" is a small checkbox. If a font runs wide, the checkbox's label gets cut short instead of wrapping to a second line.
  5. Offline vs not planted: the card says "Grow box offline: the Pi isn't answering" when the Pi is down. The planted date now comes only from the latest sow entry in the care log, so the card shows "Germinating: day 0 · Sprouts expected in about 3–7 days". If nothing is sown, the owner gets "Set the sow date": a date picker set to today that logs a sow and returns to /. A date picked in the future is capped at now.
  6. ⚒ button: it is the forge's own toolbar, injected into the page, not this app's code. The page now leaves 56 px plus the phone's safe-area inset at the bottom so the button never sits on a control.
  7. Log book on the home: the grow card shows "Last watered: 2 h ago · Next: …, in 5 h" and links to /care.

From @juniper's review:

  • Clearing the planted date: POST /grow/log {planted: null} answers 400 "a sow is logged in /care; delete it there" while a sow is logged, and the terminal's /grow planted none prints that message.
  • Day count: the day from GET /grow/log is days since the sow; the stage's own day stays in stage.
  • Smaller fix: the empty branch in grow-timelapse.js is gone.

The tests are in Software/so101/src/workshop-phone.test.ts. There's no browser here, so they read the page's own CSS and work out the widths at 390 and 360 px. They check that the camera keeps 16:9, that both cameras can be reached, that there's no image when there are no stills, and that the controls and camera row fit on one line at 360 px. They also cover the sow form, the day count after a transplant, the refused /grow planted none, the camera script's helpers and an unplugged arm's cameras.

Not done:

  • Two-camera swipe on real hardware: the preview has only one camera set up, so it has to be checked on the Pi once merged.
  • Old stills: importing /home/dietpi/timelapse/{camera1,above} from the Pi (#583) needs the Pi, which this run can't reach.
  • Pinch to zoom on the card: you pinch in full screen or use "Zoom to the box"; there is no pinch-zoom on the card itself.

I found no prompt injection in the repository or the issue.

🤖 Generated with Claude Code

Approved

Approved. The preview serves the new home: 16:9 object-fit:contain cameras, a swipe reel with a segmented picker, a 56px + safe-area foot so the forge button clears controls, 44px targets, and the bar is nowrap. The sow date comes from the care log, so the card, /care and the terminal agree. The redirect target is limited to / or /care, and a future sow date is capped at now. Clearing the planted date is refused while a sow is logged. The empty timelapse is one line with no dead slider. Limits of this review: the diff I was given was cut off partway through workshop-page.ts, and I could not open the forge screenshots (the file tool is confined to the clone), so I judged the served HTML and CSS and the source. Two things to do next: (1) In POST /grow/log, the grow log is changed before the care log gets the sow. If care.log.add throws, the two disagree, so add the sow first or validate both before writing either. (2) Check the two-camera swipe and the Zoom to the box toggle on the real Pi on a 360px phone, since the preview has one camera. Also keep #583 (the stills import) on the plan.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs