commits
- Revised title and meta description to better reflect the app's purpose and target audience.
- Enhanced layout and styling of ad preview components for improved user experience.
- Adjusted padding, margins, and background colors for better visual consistency.
- Updated section headers and text to clarify ad placement and audience targeting.
- Added new section header styles for ad previews to improve layout and visual hierarchy.
- Refactored HTML structure for sponsor and copy sections to align with updated design specifications.
- Adjusted padding and margins for better spacing and consistency across ad components.
- Introduced new CSS variables for ad colors and styles to improve visual consistency.
- Refactored ad preview components to align with in-app AdView design, enhancing layout and responsiveness.
- Updated HTML structure for sponsor and copy sections to improve clarity and accessibility.
- Adjusted button styles for better user interaction and visual appeal.
Revert renderAdCards to pre-regression imperative append flow that previously
rendered cards reliably in production browsers. Keep safe stats formatting and
null guard so malformed PostHog rows cannot crash card rendering.
Serve calendar UI assets from /vendor/flatpickr on gymtracker; Safari/WebKit
'permission' failures often trace to blocked jsDelivr or overly broad
Access paths. Document narrowing Access or bypass for /favicon and /vendor.
Note: flatpickr.min.Js is force-added (repo .gitignore ignores *.min.js).
- Normalize pathnames (trailing slashes) so /api/admin/ads/ hits the Worker
- adsArrayFromKvJson: accept one ad object stored under KV key ads
- renderAdCards: clear #adCards then appendChild(fragment); avoid replaceChildren
quirks on some WebKit builds; guard missing #adCards
- Strong HTML response Cache-Control plus CDN-Cache-Control: no-store
- Meta no-cache tags and build comment for source verification
- Build ad list in a DocumentFragment; replaceChildren only on success
so a failed PostHog re-render cannot wipe cards (stale JS / errors)
- Remove height:100% on card wrappers that could collapse grid sizing
PostHog stats or partial rows could leave ctr_percent undefined, which
threw during renderAdCards and hid all cards after group headers.
- Treat Cloudflare Access as authenticated when either Cf-Access-Jwt-Assertion
or Cf-Access-Authenticated-User-Email is present (email OTP flows).
- Normalize KV ads payload as array or { ads: [...] }; safer legacy migration.
- Parse /api/admin/ads response as text and surface non-JSON responses.
- Document prod KV vs preview and API troubleshooting in ACCESS_SETUP.md.
- Prefer /api/* first in run_worker_first ordering (same coverage as before).
- Removed unused @cloudflare/workers-types from package-lock.json.
- Updated miniflare and wrangler versions in package-lock.json for improved compatibility.
- Refactored ad item handling in admin-html.ts to normalize data and provide default values for missing fields.
- Added new CSS styles and specifications for ad formats in ads-landing-html.ts to improve layout and clarity.
- Updated wrangler.jsonc to include new route patterns for the privacy page.
- Modified index.ts to improve asset fetching and error handling for privacy-related requests.
- Ensured consistency in asset URLs and enhanced overall routing structure.
- Added "/privacy*" to the run_worker_first routes in wrangler.jsonc for improved asset fetching.
- Updated the asset request URL in index.ts to remove the file extension, aligning with the new privacy policy structure.
- Clarified the instructions for adding the first ad via Admin UI or `curl`, specifying to run from the `gymtracker/` directory.
- Added a note to replace the admin API key in the `curl` command.
- Included instructions for using a local development URL when running `npx wrangler dev`.
- Changed destination URLs in seed-ad-active.json and seed-ad.json to point to the new privacy page.
- Updated footer links in ads-landing-html.ts and main-landing-html.ts to reflect the new privacy URL.
- Enhanced index.ts to handle requests for the privacy page, ensuring proper asset fetching and error handling.
- Deleted the gymtracker-ads-api directory, including all related files such as API documentation, configuration, and HTML templates.
- Updated README.md to reflect the removal of the ads API and its structure.
- Streamlined project by eliminating unused assets and dependencies.
- Modified wrangler.jsonc to include additional route patterns for improved API access.
- Updated index.ts to fetch assets and return them if available, enhancing error handling for non-existent routes.
- Improved CSS in main-landing-html.ts to enhance user interaction with store links and prevent image dragging.
- Revised ACCESS_SETUP.md to clarify that the Gym Tracker app fetches ads without authentication.
- Updated README.md to reflect the correct repository name and added a new section for the ads landing page.
- Modified worker-configuration.d.ts to include a new ASSETS binding for improved asset management.
- Enhanced wrangler.jsonc with asset configuration and additional route patterns for better API handling.
- Integrated new landing page functionality in index.ts to serve main and ads landing HTML content.
- Added a disableMobile option to improve mobile usability.
- Introduced new CSS variables for consistent text sizing across elements.
- Updated various font sizes in the layout to utilize the new variables for better scalability and readability.
- Improved button and input styles for enhanced user interaction and accessibility.
- Updated the topbar to include a home link and improved layout structure for better usability.
- Adjusted CSS styles for various elements, including increased padding and gap adjustments for a more polished appearance.
- Removed redundant footer elements and optimized calendar and cell dimensions for improved responsiveness.
- Added a new save status display element to provide feedback on save actions.
- Introduced a suppressDirty flag to prevent unnecessary unsaved changes warnings during form resets and population.
- Refactored form clearing and population logic to ensure proper handling of unsaved changes.
- Updated CSS for the save status element to improve positioning and visibility.
- Restructured the admin HTML layout for improved usability, including a new button for creating ads and updated status display.
- Removed sidebar status elements and integrated a new ad creation button directly into the main view.
- Updated ad card rendering logic to improve interaction and accessibility, including keyboard navigation support.
- Added @cloudflare/workers-types as a dev dependency in package.json and package-lock.json.
- Updated admin HTML to include Flatpickr styles and restructured the layout for better organization and usability, including a new schedule page and calendar integration.
- Cloudflare Worker at gymtracker.jackhannon.net/api/ads
- Admin UI at gymtracker-ads-admin.html
- KV storage with seed config
- CORS for jackhannon.net and jackhannon.me
- Link to admin from portfolio index
- Revised title and meta description to better reflect the app's purpose and target audience.
- Enhanced layout and styling of ad preview components for improved user experience.
- Adjusted padding, margins, and background colors for better visual consistency.
- Updated section headers and text to clarify ad placement and audience targeting.
- Introduced new CSS variables for ad colors and styles to improve visual consistency.
- Refactored ad preview components to align with in-app AdView design, enhancing layout and responsiveness.
- Updated HTML structure for sponsor and copy sections to improve clarity and accessibility.
- Adjusted button styles for better user interaction and visual appeal.
- Strong HTML response Cache-Control plus CDN-Cache-Control: no-store
- Meta no-cache tags and build comment for source verification
- Build ad list in a DocumentFragment; replaceChildren only on success
so a failed PostHog re-render cannot wipe cards (stale JS / errors)
- Remove height:100% on card wrappers that could collapse grid sizing
- Treat Cloudflare Access as authenticated when either Cf-Access-Jwt-Assertion
or Cf-Access-Authenticated-User-Email is present (email OTP flows).
- Normalize KV ads payload as array or { ads: [...] }; safer legacy migration.
- Parse /api/admin/ads response as text and surface non-JSON responses.
- Document prod KV vs preview and API troubleshooting in ACCESS_SETUP.md.
- Prefer /api/* first in run_worker_first ordering (same coverage as before).
- Removed unused @cloudflare/workers-types from package-lock.json.
- Updated miniflare and wrangler versions in package-lock.json for improved compatibility.
- Refactored ad item handling in admin-html.ts to normalize data and provide default values for missing fields.
- Added new CSS styles and specifications for ad formats in ads-landing-html.ts to improve layout and clarity.
- Changed destination URLs in seed-ad-active.json and seed-ad.json to point to the new privacy page.
- Updated footer links in ads-landing-html.ts and main-landing-html.ts to reflect the new privacy URL.
- Enhanced index.ts to handle requests for the privacy page, ensuring proper asset fetching and error handling.
- Modified wrangler.jsonc to include additional route patterns for improved API access.
- Updated index.ts to fetch assets and return them if available, enhancing error handling for non-existent routes.
- Improved CSS in main-landing-html.ts to enhance user interaction with store links and prevent image dragging.
- Revised ACCESS_SETUP.md to clarify that the Gym Tracker app fetches ads without authentication.
- Updated README.md to reflect the correct repository name and added a new section for the ads landing page.
- Modified worker-configuration.d.ts to include a new ASSETS binding for improved asset management.
- Enhanced wrangler.jsonc with asset configuration and additional route patterns for better API handling.
- Integrated new landing page functionality in index.ts to serve main and ads landing HTML content.
- Added a disableMobile option to improve mobile usability.
- Introduced new CSS variables for consistent text sizing across elements.
- Updated various font sizes in the layout to utilize the new variables for better scalability and readability.
- Improved button and input styles for enhanced user interaction and accessibility.
- Updated the topbar to include a home link and improved layout structure for better usability.
- Adjusted CSS styles for various elements, including increased padding and gap adjustments for a more polished appearance.
- Removed redundant footer elements and optimized calendar and cell dimensions for improved responsiveness.
- Added a new save status display element to provide feedback on save actions.
- Introduced a suppressDirty flag to prevent unnecessary unsaved changes warnings during form resets and population.
- Refactored form clearing and population logic to ensure proper handling of unsaved changes.
- Updated CSS for the save status element to improve positioning and visibility.
- Restructured the admin HTML layout for improved usability, including a new button for creating ads and updated status display.
- Removed sidebar status elements and integrated a new ad creation button directly into the main view.
- Updated ad card rendering logic to improve interaction and accessibility, including keyboard navigation support.