All notable changes to Sack Stack are documented in this file.
This project follows Semantic Versioning and uses the MAJOR.MINOR.PATCH format:
- MAJOR — incompatible changes that break existing trip data, exports, share links, or public APIs.
- MINOR — new features, improvements, or additions that are backwards compatible.
- PATCH — backwards-compatible bug fixes, performance improvements, and minor UI/UX polish.
The format is loosely based on Keep a Changelog.
- Public README with project overview, shields/badges, and getting-started instructions.
- MIT LICENSE file.
- GitHub link in the site footer.
- Open-source and transparency sections on the About and Privacy pages.
- N/A
- N/A
- N/A
1.0.0 — 2026-07-13
- Initial public release of Sack Stack.
- Create and manage multiple trips with custom travel types.
- Add multiple bags per trip and assign them to carriers (people, pets, vehicles, etc.).
- Add items to bags or to an unpacked tray with weight tracking.
- Display and switch between metric and imperial weight units.
- Drag-and-drop item sorting between bags and the unpacked tray.
- Packing checklist view with per-item packed state.
- Printable packing list view.
- JSON import/export for backups and trip portability.
- Share trips via URL fragment encoding (no server involved).
- Custom travel type editor and presets for hiking, normal travel, and car camping.
- Item tags and filtering for faster organization.
- Dark/light theme toggle.
- PWA support with offline-friendly assets and a web manifest.
- Privacy-first architecture: no accounts, no tracking, all data stored in browser
localStorage.
- N/A
- N/A
- N/A
When you make a change, add an entry under the [Unreleased] section in the correct category. Do not edit released sections unless correcting a factual error.
Use the following categories:
| Category | Use when... |
|---|---|
Added |
You introduce a new feature, page, component, or capability. |
Changed |
You update existing behavior, UI, dependencies, or configuration in a non-breaking way. |
Fixed |
You fix a bug, typo, or runtime error. |
Removed |
You remove a feature, dependency, or file. |
Security |
You fix a vulnerability or improve security posture. |
Deprecated |
You mark a feature for removal in a future release. |
When releasing a new version, use the automated release script:
bun run release:patch # or release:minor / release:major / release 1.2.3
git push && git push --tagsThe script bumps package.json, syncs APP_VERSION in src/routes/__root.tsx and src/routes/about.tsx, rewrites CHANGELOG.md (promoting [Unreleased] to a dated section and updating link references), then creates a commit and annotated vX.Y.Z tag. Pushing the tag triggers .github/workflows/release.yml, which publishes a GitHub Release with notes extracted from CHANGELOG.md.
Manual fallback if you need to do it by hand:
- Decide the version bump using Semantic Versioning rules above.
- Update
versioninpackage.json. - Update
APP_VERSIONinsrc/routes/__root.tsxandsrc/routes/about.tsx. - Move the
[Unreleased]entries into a new[X.Y.Z]section with today's date. - Add a new empty
[Unreleased]section at the top. - Create a Git tag for the release:
git tag vX.Y.Z && git push origin vX.Y.Z.
Before publishing a new release, verify:
-
CHANGELOG.mdhas been updated with the new version section. -
package.jsonversion matches the new release. -
APP_VERSIONconstants insrc/routes/__root.tsxandsrc/routes/about.tsxmatch the new release. -
bun run buildpasses with no errors. -
bun run lintpasses with no errors. - The site has been smoke-tested in the preview environment.
- A Git tag has been created and pushed for the release.