Repository navigation
Groly 1.0.0
Groly 1.0 is here! After many ideas, redesigns, and tests.
This stable release consolidates the complete 1.0 beta cycle and the final local shopping-list improvements since 0.9.10.
Shopping lists and favorites
- Keep one grouped list surface during manual reordering. The existing background-free sort icon opens A–Z, Z–A, last-updated (newest at the bottom) and manual options. Manual editing uses drag handles, a position picker and keyboard controls; Done saves the arrangement. Automatic sorting preserves the separate manual order. Preferences remain local to the browser and available offline.
- Use shared compact rows for shopping items, completed items and favorites when List view is selected. Long names wrap, quantities align right and inset dividers separate rows. Tiles remain the default view; their favorite quantities retain left-to-right text ordering. Favorites retain the already-on-list marker and add confirmation. Long-press opens the existing item editor for favorite name, quantity and category; shopping items already created from the favorite remain unchanged. A rename is queued as one durable favorite mutation and applied in a server transaction, preserving the original creation time and allowing idempotent retries. Removal requires a separate confirmation with explicit Cancel and Remove actions.
- Improve frequent suggestions, consecutive item entry, duplicate handling and add feedback. Propagate list activity timestamps through live events, including item deletion, and update cached activity for offline item writes.
- Preserve ingredient selections while adding recipes to shopping lists. Accepted shared recipes remain usable for shopping and meal planning.
Navigation, trackers and administration
- Unify tracker, nutrition, recipe and meal-plan headers, section tabs, date navigation and measured content offsets. Integrate recipe search and tag filters into the header.
- Show the full supplement reminder week in both the header and management view, including date-specific completion and overrides. Earlier and future time groups are read-only. Add explicit loading, retry and empty states.
- Group day, week and month history, simplify secondary styling and omit empty sections. Keep the Today nutrition summary neutral while retaining exceeded-limit warnings.
- Redesign grouped settings, category ordering, shortcuts, list editing and administration. Add direct tracker/supplement logging shortcuts and retrievable active invitation/reset links.
- Default to the dark app icon, retain an optional light icon and provide platform-specific installation guidance. Refresh README screenshots and the Unraid icon reference.
Offline behavior and security
- Preserve ordered, durable item mutations and checked state across reconnects, retries and lost responses. Cache shopping favorites per account and sync offline additions, edits and removals.
- Keep previously opened recipes usable offline and provide localized recovery for uncached pages. Prevent redirected sign-in HTML from entering the document cache.
- Isolate account caches, pending writes and service-worker account state. Harden sign-in limits, password/session invalidation, push-device ownership and authenticated SSE streams.
- Harden recipe and catalog imports against private-network targets and unsafe redirects.
- Serialize foreground navigation so push destinations take precedence over stale geofence results. Handle interrupted WebKit view transitions and document iPhone location permissions.
- Keep the PDF runtime and all four fonts in the offline precache. Report data still requires a server connection; failed exports preserve the selection for retry.
Runtime and container
- Upgrade to Node.js 24.22.0, SvelteKit 3.1.0, Svelte 5.57.2, Vite 8.3.4, TypeScript 6.0.3 and better-sqlite3 13.0.3. Migrate Paraglide to 2.28.0 with request-local server language handling.
- The final local linux/amd64 candidate measures 62,316,915 bytes (62.3 MB) versus 262,521,099 bytes (262.5 MB) for 0.9.10: 76.3% smaller, using Docker image-inspect Size for both images. This includes the final favorite editor. The workflow will identify and verify its own immutable publication digest.
- Reduce the production image through a minimal pinned Alpine runtime, four direct server dependencies, target-only SQLite binaries and exclusion of package managers, SDK headers, build tools, browser packages and migration-generation snapshots. Required browser assets, barcode WASM, migration SQL and the migration journal remain included.
- Preserve the existing volume path, runtime ORIGIN, proxy configuration, ports and VAPID keys. Architecture remains linux/amd64.
- Use the reproducible metadata-only Drizzle Kit dependency patch and the supported Workbox glob override. Production builds reject warnings and verify the injected service worker and compressed assets.
Upgrade, migration and recovery
- Create and verify a database/upload snapshot before applying changes to an existing installation. SQLite backups include committed WAL data. Same-version restarts do not create duplicate snapshots; interrupted initialization can reuse its verified backup.
- Block startup and return HTTP 503 when backup or initialization fails. The health endpoint returns 200 only after successful initialization. The container healthcheck allows ten minutes for startup.
- Apply migration 0050, which adds nullable user_invites.token_value for retrieving active invitation/reset links. Existing hashed links remain valid; legacy tokens cannot be reconstructed for display and can be regenerated. No additional schema migration is required for the final list and favorite changes.
- Store new meal-plan entries using local calendar dates, fixing issue #17. Existing values are deliberately not shifted because the original timezone is unknown; affected entries may appear one day earlier and can be moved manually.
- Keep an independent backup of the complete data directory and retain the existing mount and configuration. Automatic snapshots require space for the database, uploads and additional headroom. Restore the database and uploads from the same snapshot with its matching previous image; see the upgrade and restore guide.
Release verification
The selected full verification mode uses fresh installation, direct stable/beta upgrades, populated-data and image comparisons, existing sessions, restart, backup failure handling, restore, dependency/image security checks and the existing Chromium/WebKit PWA/offline scenarios. Installed-iPhone PWA testing was completed.
The existing workflow verifies the immutable candidate before assigning :1.0.0 and :latest. The :beta channel remains unchanged. Detailed measurements and verification results are recorded separately with the tested image digest.