Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 86 additions & 19 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,33 +1,100 @@
# Changelog

All notable changes to GFPriceChecker will be documented in this file.
Release history for the **GF PriceChecker website** ([gfpricechecker.com](https://gfpricechecker.com)).

Changes to the iOS app are tracked separately in the [app repository](https://github.com/CuWilliams/GFPriceChecker).

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## Versioning

The site is a continuously deployed static site: every merge to `main` is live within a minute or two. Tags mark meaningful states rather than deployments.

- **Minor** (`1.1.0` → `1.2.0`) — a content release: new pages, a substantive rewrite, or a new site feature.
- **Patch** (`1.2.0` → `1.2.1`) — corrections, copy fixes, dependency-free housekeeping.
- **Major** — a redesign or a change in what the site is for.

Routine blog posts and announcements are content edits, not releases, and don't get tags.

To cut a release: move the `[Unreleased]` entries below into a new version heading, then tag `main`.

```
git tag -a v1.2.0 -m "Short description of the release"
git push origin v1.2.0
```

---

## [Unreleased]

### Changed
- Rewrote site copy to describe the app as it works today: unit price differential adjusted for
package size as the headline metric, the three-step capture review (name, price, size), optional
size entry, and the receipt verification flow.
- Removed claims that the app's reports are CRA-compliant or accepted by the Canada Revenue Agency.
The Medical Expense Tax Credit is now presented as context for why the app exists, with the
~3%-of-net-income threshold stated plainly. This matches the app, which removed agency branding
from its own interface in April 2026.
- Updated the advocacy section on the home page: petition e-6853 was declined by the government in
March 2026.
- Replaced the "Coming Soon" / waitlist calls to action with links to the TestFlight beta, live
since January 2026.
- Corrected the privacy claim on the features page — backup files are not encrypted.
- Rewrote `README.md` to document this website repository rather than the iOS app.
- Repurposed this changelog for the website; it previously tracked app development.
- Archived the original build plans to `Documents/archive/`.

### Added
- Manual product entry with price comparison
- Camera scanning with OCR for shelf price tags
- Receipt verification and fuzzy product matching
- PDF and CSV export for CRA tax filing
- Data backup/restore functionality
- Onboarding tutorial
- VoiceOver accessibility support
- MIT License and project documentation
- Announcement covering build 8 and the move to unit pricing.
- FAQ entries on unit pricing, optional size capture, receipt verification, and data storage.
- Notes above the screenshot carousel and walkthrough videos flagging that they show an earlier
build.

### Fixed
- OCR price detection with spatial analysis (Session 25)
- Multi-line receipt format support (Session 16)
- Data import security-scoped resource access (Session 26)
- PDF page layout overlapping (Session 26)
- Image viewer first-tap loading (Session 26)
- The pre-JavaScript status banner fallback still read "Coming Soon! GF PriceChecker is currently in
development" on five of six pages, contradicting the beta call to action alongside it whenever
JavaScript was slow, blocked, or disabled.
- Announcements rendered as a single unbroken block with Markdown links shown as literal text.
Paragraph handling now uses the same `preserveLineBreaks` helper as the blog, promoted from
`blog-loader.js` into the shared `utils.js`.
- The home page printed the entire text of the latest announcement instead of a preview.
- Every blog post and announcement date displayed one day early for readers west of UTC — including
everyone in Canada. `YYYY-MM-DD` strings were parsed as UTC midnight and then rendered in local
time; they're now built as local dates.
- Stale `lastmod` dates in `sitemap.xml`; `blog.html` claimed January while carrying posts through
August.

---

## [1.1.0] - 2026-08-12

Pre-overhaul snapshot: the site as it stood before the content rewrite above.

### Known Issues
- OCR accuracy varies with lighting conditions
- Fuzzy matching may need tuning for non-Sobeys receipts
### Added
- Beta page with TestFlight instructions, testing focus areas, and the public join link.
- Developer blog rendered from `data/blog.json`, with a GitHub Actions workflow that emails a
reminder to write one whenever a pull request merges.
- Three walkthrough videos with poster images, and a fourteen-slide screenshot carousel.
- "Why GF PriceChecker Exists" section on the home page covering the Medical Expense Tax Credit and
Celiac Canada's advocacy.
- Cloudflare Web Analytics across all pages.
- Custom domain via `CNAME`.

### Changed
- Extracted the navigation and footer into runtime-injected components under `components/`.
- Extracted shared helpers into `assets/js/utils.js` (`fetchJSON`, `escapeHtml`, `formatDate`,
`renderEmptyState`, `renderCard`).
- Site-wide status moved from "coming soon" to public beta.

## Release Notes
## [1.0.0] - 2026-01-03

No releases yet. App currently in field testing phase.
Initial public site.

### Added
- Home, features, announcements, FAQ, privacy, and terms pages.
- JSON-driven content system for announcements, FAQ entries, and the status banner.
- Design system with shared tokens (`DESIGN-SYSTEM.md`), base and component stylesheets.
- SEO metadata, Open Graph tags, JSON-LD structured data, `sitemap.xml`, and `robots.txt`.
- Accessibility pass: skip links, ARIA labelling, keyboard-navigable carousel.
- MIT license.
203 changes: 96 additions & 107 deletions Claude.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ This project follows **DESIGN-SYSTEM.md** guidelines:
/
├── index.html # Home page
├── features.html # Features page with carousel
├── beta.html # TestFlight beta instructions
├── blog.html # Developer blog posts
├── announcements.html # News and updates page
├── faq.html # Frequently asked questions
Expand All @@ -50,17 +51,20 @@ This project follows **DESIGN-SYSTEM.md** guidelines:
├── sitemap.xml # XML sitemap for SEO
├── robots.txt # Search engine crawl rules
├── CNAME # GitHub Pages custom domain
├── README.md # GitHub repository description
├── README.md # How the site is built, run, and added to
├── CHANGELOG.md # Site release history and versioning approach
├── Claude.md # This file - project documentation
├── DESIGN-SYSTEM.md # Design guidelines and tokens
├── Documents/
│ ├── EXECUTION_PLAN.md # Phased implementation plan
│ └── TECHNICAL_REQUIREMENTS.md # Technical specifications
│ └── archive/ # Original build plans (historical)
│ ├── EXECUTION_PLAN.md
│ └── TECHNICAL_REQUIREMENTS.md
├── assets/
│ ├── css/
│ │ ├── base.css # Design tokens, reset, utilities
│ │ └── components.css # Component library styles
│ ├── js/
│ │ ├── utils.js # Shared helpers (window.GFUtils) - load first
│ │ ├── main.js # Mobile nav, component initialization
│ │ ├── components.js # Component loader for navbar/footer
│ │ ├── content-loader.js # Dynamic content from JSON
Expand Down Expand Up @@ -309,27 +313,81 @@ Dynamic content will be managed via JSON files in `/data/`:

---

## Placeholders and Future Work
## Content Conventions

### Current Placeholders
- ❌ Logo files (need SVG and PNG)
- ❌ App screenshots (12+ images for carousel)
- ❌ Instructional videos (MP4, <50MB, 720p)
- ❌ Cloudflare Analytics token (in index.html)
- ❌ Open Graph image
- ❌ Favicon
### Don't claim tax compliance

### Future Pages (Phase 3)
- features.html
- announcements.html
- faq.html
- privacy.html
- terms.html
The app deliberately carries no Canada Revenue Agency branding in its interface. Agency references
and specific tax line numbers were stripped out in April 2026 — tracking price differences is what
the app does, and what a user does with those records at tax time is between them and their
accountant. **The site follows the same rule.**

### Future Features (Phase 4)
- Horizontal screenshot carousel with stacked effect
- HTML5 video player for instructional content
- Lazy loading for images
- Explain the Medical Expense Tax Credit as context for why the app exists. That's fair and useful.
- Never describe the app's exports as CRA-compliant, approved, accepted, or endorsed.
- Never promise anyone a deduction. Where it's relevant, mention that the credit only applies to
medical expenses above roughly 3% of net income — a modest year may not reach it.

Before merging copy changes, sweep for regressions:

```
grep -rn "CRA\|Tax Compliant\|tax compliance\|Line 33099" --include=*.html --include=*.json .
```

Every surviving hit should be explanatory context, never a claim about the app's output.

### Describe the app as it currently works

The headline metric is the **unit price differential** — cost per unit, scaled back to the size
actually purchased — not the package-to-package difference, which is kept beside it for reference.
Copy that leads with package price is out of date. Likewise, capturing a product is a single review
screen with three steps (name, price, size), and **size is optional**. Don't describe it as
mandatory or as a separate screen.

When the app changes, the blog gets updated first (there's a GitHub Actions reminder on every merged
PR). The static pages have no such prompt and are the ones that quietly rot — check them against
`data/blog.json` and the app's release notes whenever a feature lands.

### Don't overclaim on privacy either

Local-only storage, on-device text recognition, no accounts, no sync: all true, all worth saying.
But backup files are **not** encrypted. Don't say they are.

---

## Outstanding Work

The original launch placeholders — logo, favicon, Open Graph image, Cloudflare Analytics token,
screenshots, and videos — were all resolved during January 2026, and every page planned in the
original build now exists (plus `beta.html` and `blog.html`, which came later). What follows is
what's actually outstanding.

### Media is out of date
The three walkthrough videos were recorded January 17–24 2026 and the majority of the carousel
screenshots on January 3. Both predate the move to unit pricing as the headline figure (April 2026)
and the rebuilt three-step capture review (July 2026), so they show screens that no longer exist.
Both sections carry a `.media-note` saying so. Replacing them needs a device or simulator session:

- Re-record the three walkthroughs against the current build.
- Re-capture screenshots 08–14 (capture flow, receipt views, product detail, list, export,
dashboard).
- Keep video files under 50MB — `receipt-management.mp4` is already at 49MB.

### Videos have no captions
No VTT track exists for any video. This was deferred at launch and is still open; it's the site's
most significant remaining accessibility gap.

### Canonical domain is inconsistent
`CNAME` holds `www.gfpricechecker.com`, but every canonical link, Open Graph URL, JSON-LD entry,
sitemap URL, and `robots.txt` reference uses the bare `gfpricechecker.com`. One of the two is wrong.
Pick the canonical host, then sweep all of them to match.

### Legal review
`privacy.html` and `terms.html` were revised on January 25 2026 and no longer carry placeholder
banners, but they have never had professional legal review.

### Not built
A community product database was once advertised on the features page as "Planned". It was never
built and the card has been removed rather than left promising something that isn't coming.

---

Expand Down Expand Up @@ -586,80 +644,12 @@ This project strictly follows DESIGN-SYSTEM.md:

### Placeholder Content Status

**Assets Requiring Replacement Before Launch**:

1. **Logo Files** (Priority: HIGH):
- Location: `/assets/images/logos/`
- Required formats: SVG (primary), PNG (fallback)
- Currently: Placeholder references in HTML
- Used on: All 6 pages in navbar

2. **App Screenshots** (Priority: MEDIUM):
- Location: `/assets/images/screenshots/`
- Required: 12+ screenshots (9:16 aspect ratio, iPhone format)
- Current state: Placeholder via.placeholder.com images
- Used on: features.html carousel
- Replacement instructions: Update `data-src` attributes in features.html:103-161

3. **Instructional Videos** (Priority: LOW):
- Location: `/assets/video/`
- Required files:
- `getting-started.mp4`
- `price-tracking.mp4`
- `receipt-management.mp4`
- `tax-reports.mp4`
- Requirements: MP4 format, H.264 codec, 720p max, <50MB each
- Current state: Placeholder poster images, video files referenced but not present
- Used on: features.html video grid

4. **Open Graph Image** (Priority: MEDIUM):
- Location: `/assets/images/og-image.png`
- Recommended size: 1200x630px
- Current state: Referenced in meta tags but file doesn't exist
- Used on: All pages for social media sharing

5. **Favicon** (Priority: LOW):
- Location: `/assets/images/favicon.png`
- Current state: Referenced but file doesn't exist
- Used on: All pages

6. **Cloudflare Analytics Token** (Priority: HIGH):
- Location: HTML `<head>` section of all pages
- Current state: Commented out with "TODO" note
- Action required: Replace "YOUR_TOKEN_HERE" with actual Cloudflare site tag
- Affects: All 6 pages

### JSON Data Files Status

**✅ status.json**:
- Current state: "coming-soon"
- Message: "Coming Soon! GF PriceChecker is currently in development."
- Status: Ready for launch
- No changes needed

**✅ announcements.json**:
- Contains launch announcement dated 2026-01-02
- Status: Ready for launch
- Future updates: Add new announcements to array as needed

**✅ faq.json**:
- Contains 3 comprehensive FAQ items
- Covers: What is GF PriceChecker, tax deductions, availability
- Status: Ready for launch

### Legal Content Status

**⚠️ privacy.html**:
- Status: **PLACEHOLDER - REQUIRES LEGAL REVIEW**
- Prominent note displayed: "This is placeholder content. Final privacy policy will be prepared with legal review before app launch."
- Last updated: January 2, 2026
- Action required: Professional legal review and finalization before app launch

**⚠️ terms.html**:
- Status: **PLACEHOLDER - REQUIRES LEGAL REVIEW**
- Prominent note displayed: "This is placeholder content. Final terms of use will be prepared with legal review before app launch."
- Last updated: January 2, 2026
- Action required: Professional legal review and finalization before app launch
> **Historical.** This section recorded the state of the site at the end of the January 2026 build,
> when the logo, screenshots, videos, Open Graph image, favicon, and Cloudflare Analytics token were
> all still outstanding, and `privacy.html` and `terms.html` carried placeholder banners. All of
> those were resolved during January 2026 — the analytics token is live on every page and the legal
> placeholder banners are gone. For what is genuinely still open, see
> [Outstanding Work](#outstanding-work) above.

### Final Validation Checks

Expand Down Expand Up @@ -715,15 +705,8 @@ This project strictly follows DESIGN-SYSTEM.md:
- [x] All links tested and functional
- [x] Legal content flagged for review

**Pending Tasks (Before Production Launch)**:
- [ ] Replace logo placeholder with actual logo files
- [ ] Add Cloudflare Web Analytics token to all pages
- [ ] Add Open Graph image for social sharing
- [ ] Add favicon
- [ ] Privacy policy: Professional legal review and finalization
- [ ] Terms of use: Professional legal review and finalization
- [ ] Optional: Add app screenshots (can use placeholders initially)
- [ ] Optional: Add instructional videos (can use placeholders initially)
**Pending Tasks**: every item on this list except legal review was completed during January 2026.
See [Outstanding Work](#outstanding-work) above for what remains.

**Deployment Notes**:
- GitHub Pages will serve from `main` branch root directory
Expand Down Expand Up @@ -763,11 +746,17 @@ This project strictly follows DESIGN-SYSTEM.md:
## Contact & Support

**Repository**: https://github.com/CuWilliams/GFPriceChecker.github.io
**Documentation**: See `Documents/` folder for detailed requirements and execution plan
**Getting started**: See `README.md` for how the site is built, run locally, and added to
**Design Guidelines**: See `DESIGN-SYSTEM.md` for design tokens and patterns
**Release history**: See `CHANGELOG.md` for the versioning approach and past releases
**Original build plans**: See `Documents/archive/` — historical, kept for reference only

---

*Last Updated: January 2, 2026 - All Phases Complete (1-6)*
*Last Updated: August 12, 2026*

**Project Status**: Ready for deployment with noted placeholders. Legal content requires professional review before app launch.
**Project Status**: Live at [gfpricechecker.com](https://gfpricechecker.com), serving an app in
public TestFlight beta. The Phase 1–6 sections below the design and conventions material are a
historical record of the January 2026 build, not a description of the site today. Outstanding items
are listed under [Outstanding Work](#outstanding-work): media showing an older build, missing video
captions, the `www` vs. bare-domain inconsistency, and legal review.
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
> **Archived — historical record.** This is the phase-by-phase plan used to build the site in
> January 2026. All six phases were completed and the site has changed considerably since. It is
> kept as a record of how the site was originally constructed; it does not describe the site as it
> stands today. For current documentation see [README.md](../../README.md) and
> [Claude.md](../../Claude.md).

# GF PriceChecker Website - Execution Plan

**Version:** 1.0
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
> **Archived — historical record.** These are the requirements the site was originally built
> against in January 2026. They were met, and the site has changed considerably since. Kept as a
> record of the original brief; it does not describe the site as it stands today. For current
> documentation see [README.md](../../README.md) and [Claude.md](../../Claude.md).

# GF PriceChecker Website - Technical Requirements Document

**Version:** 1.0
Expand Down
Loading
Loading