Safari extension that displays CDN cache status (HIT/MISS) for the current page.
| File | Purpose |
|---|---|
CHANGELOG.md |
Technical changelog for developers |
RELEASE_NOTES.md |
User-facing release notes (App Store "What's New") |
RELEASE.md |
Full release documentation and workflow |
PRIVACY.md |
Privacy policy |
scripts/config.sh |
Shared config (APP_NAME, PROJECT, SCHEME) |
just test # Run CDN detection tests (27 test cases)Tests are in tests/cdn-detection.test.js and validate all CDN detection rules in constants.js.
Before starting a release, confirm with the user:
- Version number — What tag? (e.g., v0.0.9)
- Uncommitted changes — Should they be committed first?
- CHANGELOG.md — Is it updated with technical changes?
- RELEASE_NOTES.md — Is it updated with user-facing changes?
- Target — GitHub only, App Store only, or both?
- Tests pass — Run
just testbefore proceeding
# 1. Update docs
# - CHANGELOG.md (technical changes)
# - RELEASE_NOTES.md (user-facing changes)
# 2. Tag and release
git tag v0.0.X
git push origin v0.0.X
just release v0.0.X # Archive and submit for notarization
just status # Check notarization status
just staple # After approval: staple ticket
just dmg # Create DMG installer
gh release create v0.0.X # Create GitHub release with assetsOne paragraph summary of the release.
## Added
- New features
## Changed
- Changes to existing functionality
## Fixed
- Bug fixes
- Summary paragraph first (no header)
- Sections use
##(h2) headers - Section order: Added → Changed → Fixed
- Omit empty sections
just release-appstore v0.0.X # Archive and upload to App Store ConnectThen submit for review in App Store Connect.
- Git tag is the single source of truth
MARKETING_VERSIONauto-derived from tag (v0.0.8 → 0.0.8)CURRENT_PROJECT_VERSION(build number) = git commit count- No manual Xcode version updates needed
CF Cache Status/
├── CF Cache Status/ # macOS container app (SwiftUI)
└── CF Cache Status Extension/ # Safari Web Extension
└── Resources/
├── manifest.json # Extension config
├── constants.js # CDN detection rules
├── background.js # Header capture
└── popup.js/html/css # Popup UI
scripts/
├── config.sh # Shared variables
├── archive.sh # Build for direct distribution
├── archive-appstore.sh # Build for App Store
├── submit.sh # Submit for notarization
├── staple.sh # Staple and create zip
└── create-dmg.sh # Create DMG installer
Justfile # Build commands
Cloudflare, CloudFront, Fastly, Akamai, Bunny CDN, Varnish, and any CDN using x-cache headers.
Detection rules are in constants.js.