Skip to content

Releases: gfeitel1-maker/Scheduling-Project-

Shoresh v1.0.1

Choose a tag to compare

@gfeitel1-maker gfeitel1-maker released this 13 Oct 21:56
69dbd34

Shoresh v1.0.1

v1.0.1 replaces v1.0.0. It fixes Turn off encryption and Start fresh on this computer on Windows (both refused with a permission error). Mac behaviour is unchanged. The full director audit passed on both Mac and Windows.

Shoresh is a scheduling app for summer camps. It builds and keeps the weekly schedule (which group does which
activity, where, and when) and leaves the decisions to you. It runs on your camp's own computers: there is no
account to create and no company server holding your camp's data.

Download: Shoresh v1.0.1 on GitHub Releases: Shoresh-1.0.1-macOS.zip (Mac; Intel build that also runs on Apple Silicon via Rosetta) and Shoresh Setup 1.0.1.exe (Windows 64-bit installer).

This page is for two readers: a camp director deciding whether to use Shoresh, and a camp's own developer who
forks it. The step-by-step guide is the director guide.


What v1 does

Set up your camp. Age divisions, groups, days, time blocks, activities, locations, fixed events (meals, flag,
rest hour), recurring events, and special days such as trips. Each setup screen adds a row in place, and you can
download a worksheet, edit it in Excel and import it back.

Bring last year's schedule in. Import the spreadsheet or text file you already use, and Shoresh builds the camp
from it: groups, days, blocks, activities, events, and how often each activity ran. It asks only what it cannot tell
on its own, remembers your answers for next time, and saves the imported week as a version you can open. An import
can be undone. A trip or a whole day that only some groups have is recognised as an event for those groups, not an
ordinary activity.

Two ways to build the week, side by side.

  • Generated Schedule: Shoresh proposes a full week that follows your rules (how often each activity runs,
    which groups can do it, how many groups a place holds at once, activities that take two blocks), and you adjust
    it by dragging. Lock what must not move, and it stays put when you generate again. When the file you imported
    shows that the week fits, Generate fills it again.
  • Manual Build: you place every cell yourself, the way a spreadsheet works.

Switching between them never loses work. Problems are flagged where they happen: a cell nothing can fill, an
activity a group doesn't get often enough, a group booked in two places at once. Every regeneration saves a version
first, and you can name and restore versions yourself.

Special days and a rainy day. Build a special day (a trip day, a games day) with its own blocks and place it
on a week and day. Rainy day… switches one day's outdoor activities to their rain plans, after saving a
version, as a single step you can undo.

Electives. Define elective sets and their choices, including a choice that runs across two periods. Import
campers' ranked preferences from a sheet and let Shoresh assign campers fairly. At the end of the season you can
clear elective choices.

Excel. Export either schedule to Excel, one sheet per day plus an All Groups sheet.

Backups and Save whole camp.

  • Backup now saves a copy of the camp on this computer (the newest 10 are kept), and Restore from backup…
    brings one back.
  • Save whole camp writes one file of the whole camp (setup, both schedules with their versions, special days,
    and what Shoresh has learned from your imports). Open a saved camp on any computer's start screen opens that
    file as a new camp with its own sign-in. This is how you move a camp to a new computer or recover from a lost one.

Several devices, one camp. Add a computer by typing the camp code shown on the host computer under
Devices → Add a device. After that, every computer syncs directly with the others, on the same network or
across networks, and keeps syncing whether or not the host computer is on. Edits made on different computers
merge; when two people change the same thing, Shoresh shows both and asks you to choose. Remove a lost or stolen
device from Devices and the rest of the camp stops syncing with it.

Sign-in and encryption. Each person signs in with their own PIN, as an admin or as staff. Each computer's copy
of the camp is encrypted on disk by default, with a key held by that computer's operating system.


Installing and first run

See the README for installing or building Shoresh. On first run, choose Start a new camp on
the first computer (you can create the camp by importing last year's schedule), Join with a camp code on each
computer after that, or Open a saved camp to start from a file made with Save whole camp.

Both downloads are on the release page. Unzip the Mac download and drag Shoresh to Applications; run the Windows installer. Either can also be built from source (see the README).

The app is not code-signed, so confirm the first time you open it:

  • macOS: Control-click (right-click) Shoresh, choose Open, then Open again. If that is blocked, open
    System Settings → Privacy & Security and choose Open Anyway.
  • Windows: at Windows protected your PC, choose More info, then Run anyway.

Known limitations

  • Backups restore on the same computer only. A backup is locked with that computer's own key. To protect
    against losing the laptop, pair a second device (every paired computer holds a full copy of the camp) or use
    Save whole camp and keep the file somewhere private. If a computer's key is lost (its keychain reset, or the
    computer lost) and no other device has the camp, the encrypted data on it cannot be recovered.
  • The Save whole camp file is not protected. It is deliberately not encrypted, so it opens on another computer.
    Anyone with the file can read the camp's setup and schedules. Keep it somewhere private. It does not include
    sign-ins, PINs, devices, camper lists or elective choices: after opening it, import the camper list again and
    re-run elective assignment.
  • Save whole camp has limits. A file opens only into a brand-new, empty camp, never merged into one that already
    has data. A very large camp with many saved versions can be refused as too large to save as one file (the largest
    camp the app can schedule fits with room to spare). A failed open offers Start over and never leaves a
    half-loaded camp.
  • Encryption protects a computer that is off or stolen, not one in use. Someone already signed in to the
    computer's own user account, or software running as that user, can read the camp. On a shared computer, give each
    person their own operating-system account.
  • A removed admin who keeps their keys can cause a nuisance. A computer that has not yet heard that an admin
    was removed can be made to sign itself out by that admin. Signing back in recovers it, and every such action
    stays visible in the camp's history. This was accepted for v1 because a camp's devices are a small,
    in-person group.
  • Some networks cannot connect across the internet. Shoresh uses no relay. Two computers that are both behind
    very restrictive routers (symmetric NAT, or carrier-grade NAT on both ends, as on some mobile and apartment
    networks) cannot reach each other from different networks; they sync when they are on the same network. Adding a
    new device always happens on the same network.
  • When computers are out of touch, they catch up later. A computer that was off when something changed (a
    removal, an edit) acts on what it knew until it reconnects and hears about it.

No updates after v1

Shoresh v1 is the release. There is no update service and no central version to keep up with: each camp runs its
own copy, and a camp that wants changes forks the project (Apache License 2.0) and makes them. See
CONTRIBUTING for working on the code and SECURITY for exactly what the
network setup and encryption do and do not protect.


Built by a camp director working with Claude (Anthropic) in Claude Code: design, implementation, testing, and review across the v1 build.

SHA-256

  • Shoresh-1.0.1-macOS.zip: 4777e20ce77cfe53891d7b7a15a31474a3981ef6c4139a798d116b01112d8f6a
  • Shoresh Setup 1.0.1.exe: 76c44f408be46401bd220e88065bb901a50dccb113e14ed5e442f3cffccdd29e

Shoresh v1.0.0 (superseded by v1.0.1)

Choose a tag to compare

@gfeitel1-maker gfeitel1-maker released this 13 Oct 19:24
f59c071

Shoresh v1

Shoresh is a scheduling app for summer camps. It builds and keeps the weekly schedule (which group does which
activity, where, and when) and leaves the decisions to you. It runs on your camp's own computers: there is no
account to create and no company server holding your camp's data.

Download: attached below — Shoresh-1.0.0-macOS.zip (Mac; Intel build that also runs on Apple Silicon Macs via Rosetta) and Shoresh Setup 1.0.0.exe (Windows 64-bit installer).

This page is for two readers: a camp director deciding whether to use Shoresh, and a camp's own developer who
forks it. The step-by-step guide is the director guide.


What v1 does

Set up your camp. Age divisions, groups, days, time blocks, activities, locations, fixed events (meals, flag,
rest hour), recurring events, and special days such as trips. Each setup screen adds a row in place, and you can
download a worksheet, edit it in Excel and import it back.

Bring last year's schedule in. Import the spreadsheet or text file you already use, and Shoresh builds the camp
from it: groups, days, blocks, activities, events, and how often each activity ran. It asks only what it cannot tell
on its own, remembers your answers for next time, and saves the imported week as a version you can open. An import
can be undone. A trip or a whole day that only some groups have is recognised as an event for those groups, not an
ordinary activity.

Two ways to build the week, side by side.

  • Generated Schedule: Shoresh proposes a full week that follows your rules (how often each activity runs,
    which groups can do it, how many groups a place holds at once, activities that take two blocks), and you adjust
    it by dragging. Lock what must not move, and it stays put when you generate again. When the file you imported
    shows that the week fits, Generate fills it again.
  • Manual Build: you place every cell yourself, the way a spreadsheet works.

Switching between them never loses work. Problems are flagged where they happen: a cell nothing can fill, an
activity a group doesn't get often enough, a group booked in two places at once. Every regeneration saves a version
first, and you can name and restore versions yourself.

Special days and a rainy day. Build a special day (a trip day, a games day) with its own blocks and place it
on a week and day. Rainy day… switches one day's outdoor activities to their rain plans, after saving a
version, as a single step you can undo.

Electives. Define elective sets and their choices, including a choice that runs across two periods. Import
campers' ranked preferences from a sheet and let Shoresh assign campers fairly. At the end of the season you can
clear elective choices.

Excel. Export either schedule to Excel, one sheet per day plus an All Groups sheet.

Backups and Save whole camp.

  • Backup now saves a copy of the camp on this computer (the newest 10 are kept), and Restore from backup…
    brings one back.
  • Save whole camp writes one file of the whole camp (setup, both schedules with their versions, special days,
    and what Shoresh has learned from your imports). Open a saved camp on any computer's start screen opens that
    file as a new camp with its own sign-in. This is how you move a camp to a new computer or recover from a lost one.

Several devices, one camp. Add a computer by typing the camp code shown on the host computer under
Devices → Add a device. After that, every computer syncs directly with the others, on the same network or
across networks, and keeps syncing whether or not the host computer is on. Edits made on different computers
merge; when two people change the same thing, Shoresh shows both and asks you to choose. Remove a lost or stolen
device from Devices and the rest of the camp stops syncing with it.

Sign-in and encryption. Each person signs in with their own PIN, as an admin or as staff. Each computer's copy
of the camp is encrypted on disk by default, with a key held by that computer's operating system.


Installing and first run

See the README for installing or building Shoresh. On first run, choose Start a new camp on
the first computer (you can create the camp by importing last year's schedule), Join with a camp code on each
computer after that, or Open a saved camp to start from a file made with Save whole camp.

Both downloads are attached to this release. Unzip the Mac download and drag Shoresh to Applications; run the Windows installer. Either can also be built from source (see the README).

The app is not code-signed, so confirm the first time you open it:

  • macOS: Control-click (right-click) Shoresh, choose Open, then Open again. If that is blocked, open
    System Settings → Privacy & Security and choose Open Anyway.
  • Windows: at Windows protected your PC, choose More info, then Run anyway.

Known limitations

  • Backups restore on the same computer only. A backup is locked with that computer's own key. To protect
    against losing the laptop, pair a second device (every paired computer holds a full copy of the camp) or use
    Save whole camp and keep the file somewhere private. If a computer's key is lost (its keychain reset, or the
    computer lost) and no other device has the camp, the encrypted data on it cannot be recovered.
  • The Save whole camp file is not protected. It is deliberately not encrypted, so it opens on another computer.
    Anyone with the file can read the camp's setup and schedules. Keep it somewhere private. It does not include
    sign-ins, PINs, devices, camper lists or elective choices: after opening it, import the camper list again and
    re-run elective assignment.
  • Save whole camp has limits. A file opens only into a brand-new, empty camp, never merged into one that already
    has data. A very large camp with many saved versions can be refused as too large to save as one file (the largest
    camp the app can schedule fits with room to spare). A failed open offers Start over and never leaves a
    half-loaded camp.
  • Encryption protects a computer that is off or stolen, not one in use. Someone already signed in to the
    computer's own user account, or software running as that user, can read the camp. On a shared computer, give each
    person their own operating-system account.
  • A removed admin who keeps their keys can cause a nuisance. A computer that has not yet heard that an admin
    was removed can be made to sign itself out by that admin. Signing back in recovers it, and every such action
    stays visible in the camp's history. This was accepted for v1 because a camp's devices are a small,
    in-person group.
  • Some networks cannot connect across the internet. Shoresh uses no relay. Two computers that are both behind
    very restrictive routers (symmetric NAT, or carrier-grade NAT on both ends, as on some mobile and apartment
    networks) cannot reach each other from different networks; they sync when they are on the same network. Adding a
    new device always happens on the same network.
  • When computers are out of touch, they catch up later. A computer that was off when something changed (a
    removal, an edit) acts on what it knew until it reconnects and hears about it.

No updates after v1

Shoresh v1 is the release. There is no update service and no central version to keep up with: each camp runs its
own copy, and a camp that wants changes forks the project (Apache License 2.0) and makes them. See
CONTRIBUTING for working on the code and SECURITY for exactly what the
network setup and encryption do and do not protect.


Built by a camp director working with Claude (Anthropic) in Claude Code: design, implementation, testing, and review across the v1 build.

SHA-256

  • Shoresh-1.0.0-macOS.zip: 551c57dffb859148cd930336b7e35ef95a7b0b81640f322a341da6996712531a
  • Shoresh Setup 1.0.0.exe: 1d8abbfb3c718fb0fed5513b7728077ea6f0ca7372461592f1542b0da628ce02

v0.8.0 — Schedule canvas, atomic ingest, engine purity, test stability

Choose a tag to compare

@gfeitel1-maker gfeitel1-maker released this 08 Aug 18:11

What's in this release

Schedule canvas rebuild (T50–T60)

The schedule grid migrated from a hand-rolled CSS table to a true CSS Grid canvas. grid-row: span N handles merged cells; scheduleGrid.css covers cell pseudo-states and data-attribute states (one scoped exception, bounded to src/components/schedule/).

Atomic replace-ingest (T61 + T68)

Replace-mode ingest now runs inside a single main-process transaction — either fully succeeds or leaves the camp untouched. Normative deletion order (8 steps), PRAGMA foreign_key_check after deletes, rollback proven by test. Host-only guard on both Add and Replace modes. Activity min_per_week floored to 1 on import for eligible activities.

Replace confirmation now names every category of director-authored content it destroys: schedule slots, Fixed Events (with live count, recoverable from Trash), saved versions (irreversible, visually distinguished), Day Override templates.

appendOp performance (T66)

Statements are now prepared once per db handle via WeakMap<db, Map<sql, Statement>>. A 2400-op Replace ingest dropped from ~37s of blocked main thread to non-blocking. Op-log semantics unchanged.

Engine purity (T62 / T63 / T65 / T69 / T71)

  • Anchor double-scheduling fixed — engine excludes anchor-referenced activities from the placement pass
  • JSON-string id-list tolerance removed from buildSchedule.js and weekCatalog.js — array-only contract enforced at the IPC boundary
  • Stats bar Placed denominator fixed — 'unavailable' slots excluded; dead engine stats object removed
  • DEV-only assertIdListShape makes a boundary violation loud rather than a silent spinner

Design polish (design/polish-20260807)

Global motion tokens (--motion-quick/base/slow, --ease-out/in-out) in src/index.css. useEnterTransition hook. Error banner entry motion. Activity palette token reconciliation. Cross-screen polish (Waves 0–4).

Dev environment (T64)

npm run electron:dev:fresh kills a stale Electron process before relaunching. Window title shows Shoresh [DEV] when running from source.

Test suite stability (T44 / T70)

  • scripts/ensure-abi.js now probes the compiled binary before trusting the .abi-target marker — eliminates phantom 47-failure cascades from concurrent session binary churn
  • Arrival-wait sleepBecauseTimeIsUnderTest calls in syncClient.test.js converted to waitFor; wall-clock upper-bound assertions removed; noBareSleeps guard tightened
  • Five consecutive clean full-suite runs: 113 files, 1784 tests

Open tickets

  • T51 — MCP CLI ingestion
  • T52 — Activity color tokenization
  • T36 — Ingest unlabeled path residuals
  • T49 — Finish ingestion