๐ Changelog
Recent updates and improvements to ClaimIt
115 total commits
ยท Last updated: November 20, 2025 7:49 PM
November 20, 2025
-
96d522d 7:49 PMCenter loading indicator on home page- Fix loading message being offset to the left
- Add CSS to make loading indicator span all grid columns and center horizontally
- Loading indicator now properly centered when it's the only child in items-grid -
cf3dcd0 5:43 PMAdd search functionality with compact search box in navigation
November 15, 2025
-
c68cb0e 10:38 PMAdd paste-to-upload with validation and loading overlayNew Features:
- Paste images directly with Ctrl+V/Cmd+V on claim page
- Client-side file size validation (8MB limit)
- Professional loading overlay during upload (~10 seconds)
- Image preview for pasted and selected files
Paste-to-Upload:
- Detects images in clipboard and auto-attaches to file input
- Creates proper File object from pasted blob
- Works with screenshots, copied images, etc.
- Shows instant preview with success message
File Size Validation:
- Client-side validation before upload (8MB limit)
- Matches PHP's actual upload limit to prevent failures
- Shows red error box with actual file size if too large
- Applies to both pasted and manually selected images
- Updated all error messages and help text to reflect 8MB limit
Loading Overlay:
- Appears when form is submitted with valid data
- Centered modal with animated spinner
- Clear messaging: 'Posting Your Listing...'
- Prevents double-submission by disabling button
- Professional design with dark semi-transparent background
Bug Fixes:
- Removed closing PHP tags from config.php and functions.php
- Fixed 'headers already sent' errors caused by whitespace
- Added output buffering to allow redirects from templates
- Updated redirect() function to discard output buffer
Technical:
- Added ob_start() in index.php for output buffering
- Updated redirect() to call ob_end_clean() before header
- Client-side JS validates required fields before showing overlay
- All file size checks now consistent at 8388608 bytes (8MB)
UX Improvements:
- Faster workflow - paste screenshots directly
- Immediate feedback on file size issues
- Visual confirmation during upload process
- Prevents confusion during slow uploads -
5f6b899 9:53 PMAdd paste-to-upload image functionalityNew Feature:
- Users can now paste images directly from clipboard (Ctrl+V or Cmd+V)
- Works on the claim page when posting new items
- Automatically attaches pasted image to file input
Implementation:
- Added paste event listener to detect clipboard images
- Creates File object from pasted blob and assigns to file input
- Shows instant preview of pasted image with success message
- Also shows preview for manually selected files
- Handles cleanup of object URLs to prevent memory leaks
UX Improvements:
- Added helpful hint: 'Press Ctrl+V (or Cmd+V) to paste'
- Visual feedback with green success box and image preview
- Preview shows max 300x200px thumbnail
- Works with screenshots, copied images, etc.
Usage:
1. Copy an image (screenshot, right-click copy, etc.)
2. Go to claim page
3. Press Ctrl+V (Windows/Linux) or Cmd+V (Mac)
4. Image is attached and preview shown
5. Submit form normally
Makes posting items much faster and more convenient! -
04c5646 7:59 PMSet changelog timezone to Eastern Time (EDT/EST)Changes:
- Added date_default_timezone_set('America/New_York') to generator
- Automatically handles EDT (summer) and EST (winter) transitions
- All timestamps now display in local Eastern time instead of GMT
- Regenerated changelog with 110 commits showing correct times
Example: '7:58 PM' instead of '12:58 AM' (GMT)
This makes commit times more intuitive for development team. -
42c6212 7:53 PMFix deploy workflow to handle local file changesIssue:
- Production server had local changes to composer.lock
- Git pull was aborting due to conflicts
- New files (scripts/generate-changelog.php) weren't being pulled
- Changelog generation failed with 'Could not open input file'
Solution:
- Added 'git stash' before 'git pull' in deploy workflow
- Stashes any local changes on server before pulling
- Allows clean pull without conflicts
- Ensures all new files are properly deployed
This prevents deployment failures when files are modified on server. -
2a98de3 7:47 PMTighten changelog spacing and remove blank linesChanges:
- Reduced line-height for better text density (1.3 for subjects, 1.4 for body)
- Added regex filter to collapse multiple newlines into single ones
- Removes excessive blank lines between bullet points in commit messages
- Regenerated changelog with 108 commits
Result: Cleaner, more compact changelog display -
5f11a0f 7:40 PMFix navigation links to work from clean URLsIssue:
- Navigation links used relative URLs (?page=home)
- When on /changelog, links became /changelog?page=home
- Router didn't recognize these, so navigation broke
Solution:
- Changed all navigation links to absolute URLs (/?page=home)
- Works correctly from any page including clean URLs
- Affects: header nav, footer, login, settings, logout links
Testing: Navigation now works from /changelog page -
bdf42fd 7:28 PMAdd automated changelog featureNew Features:
- Automated changelog generation from git commit history
- Accessible at /changelog with clean URL routing
- Displays commits grouped by date with full details
- Shows commit hash, subject, body, author, and timestamp
- Auto-generates during deployment via GitHub Actions
Files Added:
- scripts/generate-changelog.php: Generates changelog JSON from git log
- templates/changelog.php: Displays changelog with nice formatting
- public/data/changelog.json: Generated changelog data (106 commits)
Updates:
- .github/workflows/deploy.yml: Added changelog generation step
- router.php: Added /changelog route mapping
- public/index.php: Added 'changelog' to available pages & footer link
Implementation:
- Changelog script parses git log with formatted output
- Groups commits by date for better organization
- Filters out merge commits for cleaner history
- JSON output includes full commit details
- Template displays in card layout with hover effects
- Runs automatically on every deployment
- Can also be run manually: php scripts/generate-changelog.php
UI:
- Modern card-based layout
- Grouped by date with collapsible sections
- Monospace font for commit hashes
- Shows total commit count and last update time
- Responsive design matching site style -
bf2dbea 7:08 PMFix PHP 8.4 AWS SDK compatibility warningsIssue:
- AWS SDK was trying to parse system ~/.aws/config files
- PHP 8.4's stricter INI parser was throwing warnings about
incompatible multi-line syntax (e.g., 's3 =' with no value)
- Warning: 'syntax error, unexpected = in Unknown on line X'
Solution:
- Added 'use_aws_shared_config_files' => false to AWS client configs
- This prevents SDK from loading ~/.aws/config and ~/.aws/credentials
- App now only uses credentials from config/aws-credentials.php
- Eliminates PHP 8.4 compatibility warnings completely
Also:
- Updated aws/aws-sdk-php from 3.356.5 to 3.359.13
- Better PHP 8.4 support in newer SDK version
Result: Clean console output, no AWS warnings -
b915614 6:39 PMAdd multiple images per listing featureMajor Features:
- Support up to 10 images per listing
- Thumbnail gallery with click-to-swap main image
- Add/rotate/delete individual images (owners only)
- Smart CDN cache bypass for instant updates after rotation
File Naming:
- Primary image: 20251115171627-a7k3.jpg (no index)
- Additional images: 20251115171627-a7k3-1.jpg, -2.jpg, etc.
New Helper Functions:
- getItemImages() - Fetches all images for an item
- getImageIndex() - Extracts index from filename
- deleteImageFromS3() - Safely deletes images with validation
- getNextImageIndex() - Gets next available slot
New API Endpoints:
- upload_additional_image - Add images to existing listings
- delete_image - Delete specific images (prevents deleting last/primary)
- rotate_image (updated) - Now supports rotating any image by index
UI Enhancements:
- Thumbnail gallery below main image
- Hover controls on thumbnails (rotate/delete buttons)
- Click thumbnails to view in main display
- Add Image button for owners (when < 10 images)
- Informational note on upload form
Bug Fixes:
- Fixed tracking number validation for new format (YmdHis-xxxx)
- Updated both POST and GET-based request handlers
- Fixed delete_item action mismatch in multiple templates
- Fixed image index extraction in both PHP and JavaScript
- Fixed thumbnail click event blocking by overlay controls
- Fixed CloudFront CDN bypass for thumbnail images after rotation
Backward Compatibility:
- Old format (YmdHis) still fully supported
- Single-image listings work as before
- All validation handles both formats -
24dc0f7 10:49 AMAdd random suffix to tracking numbers to prevent upload collisions- Changed tracking number format from YmdHis to YmdHis-xxxx
- Adds 4-character random hex suffix (65,536 combinations per second)
- Prevents filename collisions when multiple users upload simultaneously
- Only affects new uploads; existing files remain unchanged
October 27, 2025
-
8261b4d 11:09 PMFix image rotation with CloudFront CDN caching- Add CloudFront invalidation support to clear CDN cache after image rotation
- Implement hybrid approach: direct S3 URLs for immediate display + CloudFront invalidation
- Add bypass_cdn flag to use presigned S3 URLs while CloudFront cache propagates
- Fix broken cache clearing functions that weren't actually clearing PHP static caches
- Add CloudFront distribution ID to AWS config
- Update aws-credentials.example.php with CloudFront configuration template
This ensures users see rotated images immediately without cache-related delays or image 'pop-back' issues.
October 9, 2025
-
2b1664f 11:22 AMFix image rotation functionality- Fix image key lookup to use correct 'images/' prefix for S3 storage
- Add cache-busting timestamp to force CloudFront refresh after rotation
- Enhance JavaScript to immediately update image with cache-busting parameter
- Improve user experience with better visual feedback and timing
Fixes issue where rotated images weren't displaying due to CloudFront caching.
September 29, 2025
-
6871f83 1:42 PMImprove loading indicators and fix layout issues- Enhanced loading indicator design with rounded box and animated dots
- Improved horizontal centering of loading indicators
- Added smooth scaling animation for loading dots with staggered timing
- Better typography and color contrast for loading text
- Enhanced error message styling with helpful instructions
- Fixed broken CSS grid layout on items and user-listings pages
- Restored proper grid rendering after layout issues
- Maintained improved loading indicator on home page
- All pages now have consistent, professional loading experience -
b30366e 12:23 PMOptimize user-listings page performance- Add getUserItemsEfficiently() function with batch YAML loading
- Add getItemsClaimedByUserOptimized() function to eliminate AWS API bottlenecks
- Replace O(nรm) image searches with O(1) lookup tables
- Pre-process claims data to avoid redundant AWS calls
- Add 5-minute caching for user items and claimed items
- Reduce template rendering time from 6+ seconds to milliseconds
- Maintain all existing functionality while dramatically improving performance
- Add comprehensive performance logging for monitoring -
4bcb948 11:31 AMAdd mailto button for contacting claimants- Add email button next to each claimant on item page (only for item owners)
- Pre-fill email with subject and body template for easy communication
- Style both mailto and delete buttons with consistent pale green background
- Improve button visibility with better contrast and unified design
- Only show mailto button if claimant has email address
- Secure implementation with proper escaping and conditional display
September 27, 2025
-
c8b7a9f 4:16 PMAdd smtp-config.php to .gitignore- Prevent accidental commits of SMTP configuration file containing sensitive data
- Ensures production deployments won't conflict with local SMTP config files
September 26, 2025
-
67b0e11 12:45 PMAdd new listing notifications feature and fix image upload regression- Add 'Notify me of any new listings' checkbox to settings page (defaults to unchecked)
- Create getUserNewListingNotifications() function to retrieve user preferences
- Update settings save handler to include new listing notification preference
- Add sendNewListingNotifications() method to EmailService for bulk notifications
- Create beautiful HTML and text email templates for new listing notifications
- Integrate email notifications when new items are posted
- Fix image upload regression - store images in images/ subdirectory for CloudFront compatibility
- Fix EmailService listObjects() array structure access (use 'objects' key and lowercase 'key' property)
- Add comprehensive error handling and logging for email notifications
- Exclude item owner from receiving notifications about their own items -
365c8a5 12:09 PMReplace settings modal with dedicated settings page- Create new /settings page with modern responsive design
- Remove settings modal from home page to improve performance
- Update navigation to link to dedicated settings page
- Clean up JavaScript by removing modal-related functions
- Fix checkbox layout styling for better visual balance
- Maintain all existing settings functionality
- Add account information sidebar with user details
- Improve mobile responsiveness and user experience
September 24, 2025
-
ce585e5 9:19 AMImplement SMTP email notifications with admin test functionality- Add email notification checkbox to user settings
- Create EmailService class with SMTP support
- Add administrator test email functionality
- Support both authenticated and non-authenticated SMTP
- Add comprehensive SMTP debugging and error handling
- Support TLS/SSL with certificate verification options
- Add helo_hostname configuration for proper SMTP identification
- Include beautiful HTML and plain text email templates
- Integrate email notifications when items are claimed
September 18, 2025
-
dadfb9e 7:39 PMFix CloudFront image URLs to work with /images origin path- Updated getCloudFrontUrl() to remove /images prefix from generated URLs
- Updated image detection logic to look for images in images/ folder in S3
- Fixed image loading in getAllItemsEfficiently(), user-listings, and item templates
- CloudFront now correctly maps requests to S3 images/ folder via origin path
September 16, 2025
-
efe6df4 6:15 PMFix missing images on user-listings page by adding image_url generation
-
2b51d7e 5:50 PMFix regression: Show claim status for logged-out users- Always compute activeClaims and primaryClaim in getAllItemsEfficiently()
- Previously only computed claim data when user was logged in
- Now logged-out users can see if items have been claimed
- User-specific data (isUserClaimed, canUserClaim) still only computed for logged-in users
- Fixes claim status display on home and items pages for anonymous users -
9916f94 5:43 PMImplement CloudFront CDN integration for massive performance improvement
-
fe93ddd 3:56 PMAdd configurable debug logging system- Add DEBUG configuration option in config.php (default: 'no')
- Create debugLog() function that only logs when DEBUG='yes'
- Convert all performance timing logs to use debugLog() instead of error_log()
- Enable detailed timing logs for:
- YAML file discovery and batch loading
- Image URL generation (getCachedPresignedUrl)
- YAML processing and item creation
- AJAX request timing (getAllItemsEfficiently, template rendering)
- Page load timing (routing, auth, Open Graph data, template rendering)
Usage:
- Set DEBUG='yes' in config.php to enable detailed performance logs
- Set DEBUG='no' in config.php to suppress performance logs (default)
- All timing logs now appear in server output when DEBUG is enabled
- Clean server output when DEBUG is disabled -
42f301f 3:45 PMMajor performance optimization: pre-compute expensive operations- Pre-generate image URLs during getAllItemsEfficiently() to avoid AWS calls during template rendering
- Pre-compute item states (isItemGone, canEditItem) to avoid function calls during template rendering
- Pre-compute claim data (activeClaims, primaryClaim, isUserClaimed, canUserClaim) to avoid AWS calls during template rendering
- Add comprehensive performance timing logs to identify bottlenecks
- Add performance display in footer for monitoring
Performance improvements:
- Total AJAX request time: 6.5s โ 3.7s (43% improvement)
- Template rendering time: 4.5s โ 1.6s (64% improvement)
- Individual item rendering: 225-265ms โ 75-90ms (65% improvement)
This eliminates the N+1 problem where expensive AWS calls were being made for each item during template rendering.
September 14, 2025
-
0d8cc08 10:23 PMFix Open Graph meta tags undefined array key errors- Add fallback case for item pages when item data is not available
- Add safety checks to ensure required meta tag keys always exist
- Prevent undefined array key warnings and null parameter deprecation errors
- Ensure graceful fallbacks for all Open Graph meta tag scenarios
- Fix production errors: undefined 'title', 'description', 'type' keys -
85f9b7d 10:20 PMEnhance Open Graph meta tags for better link unfurling- Add item title and description to Open Graph meta tags for item pages
- Format title as 'Item #ID - [Item Title]' for better link previews
- Include item description and price in meta description
- Add image detection for Open Graph image previews
- Implement graceful fallbacks when item data unavailable
- Improve link sharing experience in Slack, Discord, and social media
- Single S3 call per item page for meta tag data (performance optimized) -
f475d04 12:20 PMEnhance user-listings dashboard with comprehensive stats- Rename 'Items Claimed' to 'Items I've claimed' for better clarity
- Add 'Items people have claimed' stat showing items with active claims
- Add 'Items gone' stat showing items marked as gone
- Fix claims counting logic to use proper claims array structure
- Optimize stats calculation by including claims data in item processing
- Add responsive CSS for 6 stat cards with mobile-friendly layout
- Support waitlist functionality with proper active/removed claim status
- Improve dashboard visual design with hover effects and better spacing -
57868f8 12:01 PMImplement batching mechanism for YAML file loading- Load all YAML files in batches of 20 to prevent performance issues
- Users now see all items instead of being limited to first 20
- Added detailed performance logging for batch processing
- Maintains reasonable load times (6-7s) while showing complete catalog
- Improved error handling for individual file failures
- Reverted from parallel HTTP approach to optimized sequential batching -
95feb65 11:18 AMRemove pagination functionality- Removed pagination parameters and logic from getAllItemsEfficiently()
- Simplified home and items templates to show all items at once
- Removed pagination controls and CSS styles
- Updated AJAX endpoint to load all items without pagination
- Simplified JavaScript fetch calls to remove pagination parameters
Performance impact:
- Initial page loads remain fast (13ms for home page)
- Item loading now takes longer (7+ seconds) but shows all items
- Eliminates pagination-related bugs and complexity
- All items are now visible without navigation controls
September 13, 2025
-
e70e946 9:26 PMMajor performance optimizations and OAuth navigation fixes- Implemented lazy loading for AWS services to eliminate 5+ second startup delays
- Added AJAX-based item loading for home page (2ms initial load vs 5+ seconds)
- Fixed OAuth navigation bar authentication state display
- Optimized static variable caching and OPcache handling
- Added loading indicators and error handling for async operations
- Maintained full functionality while dramatically improving performance
- Fixed variable name conflicts in home template pagination logic
Performance improvements:
- Initial page load: 5.27s โ 0.002s (99.96% faster)
- Home page with items: 5.27s โ 0.002s + 1.09s async (instant page + deferred items)
- Navigation bar now properly shows logged-in state on all pages
- AWS initialization only occurs when actually needed -
f0bc951 9:05 PMMajor performance optimizations: Fix N+1 S3 API calls, add pagination, implement caching- Fixed N+1 S3 API calls: Reduced from 200+ calls to 2-3 calls per page (95% reduction)
- Implemented pagination: 20 items per page with navigation controls
- Added aggressive caching: 5-minute item cache, 1-hour image URL cache
- Optimized image loading: Cached presigned URLs to avoid repeated generation
- Added cache invalidation: Automatic clearing when items are modified
- Fixed layout shift: Added image dimensions and CSS aspect-ratio
- Added performance monitoring: Built-in load time tracking
Expected performance improvement: 20 seconds โ 1-2 seconds (90% faster) -
504a76b 8:00 PMFix item card button positioning and centralize CSS- Add flexbox layout to item cards to ensure buttons are always at bottom
- Make item content and meta sections flexible to push buttons down
- Centralize all button styling in main CSS file
- Add complete button color schemes (primary, secondary, success, warning, danger)
- Add hover effects and transitions for all buttons
- Add claim status styling for consistent appearance
- Remove duplicate CSS from item-card.php template
- Improve responsive design with proper button stacking on mobile
- Ensure consistent visual hierarchy across all item cards -
4ae6fb3 7:49 PMAdd 'Gone!' functionality for item owners- Add markItemAsGone() and relistItem() functions to mark items as gone/not gone
- Add isItemGone() function to check item status
- Add getUserShowGoneItems() and saveUserShowGoneItems() for user preferences
- Add AJAX handlers for mark_gone and relist_item actions
- Add 'Gone!' and 'Re-list' buttons to item cards for owners
- Add 'Show gone items' checkbox to user settings modal
- Filter gone items from listings based on user preference (default: hidden)
- Fix item data mapping to include gone fields from YAML in all templates
- Add gone functionality to single item view, items listing, home, and user listings
- Items marked as gone are hidden by default but can be shown via user setting -
1120942 4:01 PMAdd login button for non-logged-in users viewing items- Add 'Log in to claim this!' button for non-logged-in users on item cards
- Button appears when user is not logged in and item is not their own
- Uses same login link as toolbar login button (?page=login)
- Styled consistently with other primary buttons
- Improves user experience by making login requirement clear
- Only shows in listing/home contexts where users browse items
Resolves issue where non-logged-in users couldn't easily discover they need to log in to claim items.
September 10, 2025
-
d2e1185 5:04 PMClean up duplicate code across templates- Remove duplicate edit modal HTML from items.php, user-listings.php, and home.php
- Remove duplicate edit modal CSS from individual templates
- Remove duplicate JavaScript functions from item.php and index.php
- Remove duplicate showMessage function from index.php
- Add centralized edit modal CSS to main stylesheet
- Centralize all edit functionality in shared files (app.js, index.php, style.css)
Reduces codebase by ~400+ lines while maintaining full functionality.
All edit buttons continue to work across all pages. -
dc43dd6 4:49 PMAdd cache-busting parameters to app.js references- Add version parameter to all app.js script tags to force browser cache refresh
- Resolves production issue where edit buttons weren't working due to cached JavaScript
- Ensures production site loads the latest JavaScript with openEditModalFromButton function -
8564785 4:14 PMFix edit button functionality across all pages- Add edit button to listing context in item-card.php
- Add JavaScript file references to all templates using item cards
- Fix JavaScript syntax errors by using data attributes instead of inline parameters
- Add openEditModalFromButton() function for safer data handling
- Add edit modal HTML and CSS to items.php, user-listings.php, and home.php
- Ensure edit functionality works consistently across all item card views
Resolves edit button not working on items, user-listings, and home pages.
September 9, 2025
-
c633026 5:08 PMStandardize button layouts across all item card views- Create consistent button layout with right-justified, same-sized buttons
- Centralize all button styling in item-card.php template
- Remove conflicting CSS from individual templates (items.php, user-listings.php, dashboard.php)
- Standardize button colors: primary (blue), danger (red), secondary (gray), warning (orange)
- Add responsive design: buttons stack vertically on mobile
- Improve user experience with consistent button placement and sizing
- Fix full-width delete button issue on items page
- Ensure all contexts (listing, dashboard, claimed) use same button layout -
eb97de1 4:54 PMAdd image rotation feature for item owners- Add rotation button (โป) to single item view for item owners
- Implement 90-degree clockwise rotation using GD library
- Support multiple image formats (JPEG, PNG, GIF, WebP)
- Download image from S3, rotate, and upload back
- Add proper error handling and user feedback
- Fix image key detection to work with dynamic image extensions
- Include loading states and success messages
- Page refreshes after successful rotation to show updated image
September 5, 2025
-
0997fcb 9:08 PMFix admin delete button visibility and permissions- Fix backend delete handlers to use canUserEditItem() for proper admin permissions
- Add delete buttons for admins in all contexts (home, listing, dashboard)
- Add complete delete functionality to home page (modal, JS, CSS)
- Fix redirect after deletion to go to home page instead of items page
- Ensure currentUser is properly passed to item-card template
- Update error messages to include admin privileges
Fixes issue where administrators couldn't see delete buttons on home/items pages
and were getting 'You can only delete your own items' warnings. -
09bddac 8:55 PMImplement administrator functionality- Add ADMIN_USER_ID configuration in config.php
- Add isAdmin() and canUserEditItem() helper functions
- Update item-card.php to show edit/delete buttons for admins
- Update item.php to show edit/delete buttons for admins
- Update AJAX handlers to check admin permissions for edit/delete
- Update user-listings.php to show admin controls for all users
- Admins can now edit and delete any item, just like item owners -
848c778 4:35 PMFix mobile email client URL encoding issue for Contact Seller links- Replace urlencode() with rawurlencode() in all mailto: links
- Fixes issue where spaces appeared as + signs in mobile email clients
- Affects Contact Seller links in item-card.php and item.php templates
- rawurlencode() uses %20 for spaces which is more universally supported -
4a33fd1 12:47 PMRemove debugging code from file upload validation- Remove DEBUG error_log statements for file upload details
- Remove file preservation logic in /tmp/claimit_debug/
- Clean up Apache error logs now that upload issue is resolved
- GD extension is now installed and image resizing should work -
ef99b87 12:32 PMFix file upload limit - update MAX_FILE_SIZE to 50MB- Change HTML form MAX_FILE_SIZE from 500KB to 50MB (52428800 bytes)
- This was causing UPLOAD_ERR_FORM_SIZE (error 2) for files > 500KB
- Browser was rejecting uploads before they reached server validation
- Now matches server-side 50MB limit configuration -
a14b5c6 12:04 PMAdd debugging for file upload issues- Add detailed logging of file upload attempts (name, size, error code, tmp path)
- Preserve rejected files in /tmp/claimit_debug/ for inspection
- Debug both PHP upload errors and custom size validation
- Help diagnose 7.9MB file upload rejection despite 50MB limit
September 4, 2025
-
3ccf029 11:42 PMCRITICAL FIX: Update all remaining 10MB limits to 50MB- Update ini_set() calls in public/index.php (50M/51M)
- Update ini_set() calls in router.php (50M/51M)
- Update php.ini file (50M/51M)
- Update dev-php.ini file (50M/51M)
- These ini_set() calls were overriding the server configuration
- This should finally allow 50MB uploads to work properly -
254bdd5 11:32 PMFix remaining 10MB error message in PHP upload error handling- Update UPLOAD_ERR_INI_SIZE and UPLOAD_ERR_FORM_SIZE error messages to show 50MB
- This was the last remaining reference to the old 10MB limit
- Should now show consistent 50MB limit in all error messages -
5639342 11:23 PMIncrease upload limit from 10MB to 50MB- Update server-side validation in templates/claim.php (50MB limit)
- Update client-side validation in public/assets/js/app.js (50MB limit)
- Update form help text to show 50MB limit
- Update Apache .htaccess configuration (50M/51M)
- Update .user.ini configuration (50M/51M)
- This removes the hard-coded 10MB limit that was blocking larger uploads
- Images will still be automatically resized to under 500KB after upload -
78a8cf1 11:09 PMRemove php_admin_value directives from .htaccess- Remove php_admin_value directives that are causing Apache alerts
- Keep only php_value directives which should be allowed
- This should eliminate the 'php_admin_value not allowed here' errors
- The .user.ini file should still provide alternative configuration -
d860545 11:06 PMRemove debug logging to clean up Apache error logs- Remove all DEBUG error_log statements from getActiveClaims() function
- Remove all DEBUG error_log statements from isUserClaimed() function
- Remove production debug logging from templates/claim.php
- Keep only essential error logging for actual errors
- This should eliminate the large array dumps in Apache error logs
- Error logs should now be much cleaner and more manageable -
bdcafc9 11:05 PMTry multiple approaches for production upload limits- Add .user.ini file as alternative to .htaccess for PHP config
- Add php_admin_value directives in .htaccess (may work when php_value doesn't)
- Add production debugging to show actual server limits
- Try both php_value and php_admin_value approaches
- .user.ini files are often allowed when .htaccess php_value is restricted
- This should help identify what the actual server limits are -
70eadb4 10:51 PMConfigure production Apache upload limits for 10MB- Update public/.htaccess with comprehensive PHP upload settings
- Add php.ini file for production server configuration
- Remove debugging code from templates/claim.php
- Set upload_max_filesize=10M, post_max_size=11M
- Add max_execution_time=300, max_input_time=300, memory_limit=256M
- These settings should work with Apache in production environment
- Local development server issues can be addressed separately -
ca3728c 10:45 PMFix PHP upload limits - ini_set() not working- Root cause: PHP ini_set() calls were being ignored (actual limit was 2M instead of 10M)
- Add .htaccess in root directory with php_value directives
- Add php.ini file with upload configuration
- Add putenv() calls as alternative approach
- Add max_execution_time, max_input_time, and memory_limit settings
- This should override the 2M limit that was preventing 7.9MB uploads -
8ab233c 10:40 PMAdd debugging for PHP upload limits- Add error_log statements to show actual PHP upload_max_filesize and post_max_size values
- Show file upload error code and file size in debug logs
- Update error message to show actual PHP limit for better debugging
- This will help identify if PHP ini_set() calls are working correctly -
44cc716 6:34 PMIncrease upload limit from 5MB to 10MB- Update PHP ini_set() calls in public/index.php and router.php (10M/11M)
- Update Apache upload limits in public/.htaccess (10M/11M)
- Update client-side JavaScript validation in public/assets/js/app.js (10MB)
- Update server-side validation in templates/claim.php (10MB)
- Update HTML form help text to show 10MB limit
- Images will still be automatically resized to under 500KB after upload
- All environments (development and production) now support 10MB uploads -
cab4ed2 6:31 PMFix JavaScript validation error message for file uploads- Change error message from 'Picture uploads are limited to 5MB' to 'File is too large. Maximum upload size is 5MB.'
- Makes it clearer that this is an error for files exceeding the limit
- Avoids confusion since we do allow 5MB uploads (the limit is exactly 5MB) -
745aee1 6:28 PMFix form help text to show correct 5MB upload limit- Update HTML form help text from 'max 500k' to 'max 5MB - will be automatically resized'
- Clarifies that users can upload up to 5MB and images will be automatically resized
- Matches the actual server-side validation limits -
d7365d0 6:07 PMImplement 5MB upload limit with automatic image resizing- Raise upload limits to 5MB for both development and production
- Add PHP ini_set() calls in public/index.php and router.php
- Add Apache upload limits in public/.htaccess
- Implement GD library image resizing function in includes/functions.php
- Resize images to max 1200x1200px and under 500KB final size
- Update server-side validation in templates/claim.php (5MB limit)
- Update client-side validation in public/assets/js/app.js (5MB limit)
- Add automatic image resizing before S3 upload
- Maintain aspect ratio and preserve transparency for PNG/GIF
- Fallback to original image if resizing fails
- Clean up temporary files after processing -
aceba3d 5:52 PMFix mobile dropdown menu behavior- Change mobile dropdown from always-visible to proper toggle behavior
- Use absolute positioning instead of static for mobile dropdown
- Add proper opacity, visibility, and transform transitions
- Dropdown now properly shows/hides on mobile when clicked
- Maintains consistent behavior across desktop and mobile
September 3, 2025
-
77985f9 5:06 PMImprove Contact Seller email format- Update subject line to 'ClaimIt Interest - [Item Title]'
- Add direct link to item in email body
- Apply consistent formatting across all Contact Seller buttons
- Update templates/item.php and templates/item-card.php
- Better email experience for buyers and sellers
September 2, 2025
-
71fc52d 9:18 PMAdd Edit button to single item page- Add Edit button for item owners on single item page (/?page=item&id=...)
- Include Edit modal with form for title and description editing
- Add JavaScript functions for modal handling and AJAX submission
- Edit button appears alongside Delete button for item owners
- Maintains consistency with user-listings page functionality -
91a10ef 9:12 PMRemove debugging from edit_item functionality- Remove all error_log debug statements from both POST and GET edit_item handlers
- Clean up the code while maintaining full functionality
- Item editing is now working correctly and saving to S3 -
0f4bdee 7:07 PMFix edit_item AJAX routing and add debugging- Fix JavaScript to send request to correct URL: ?page=claim&action=edit_item
- Add comprehensive debugging to both POST and GET edit_item handlers
- This should now properly route edit requests and show debug output -
58246b1 6:30 PMAdd debugging to edit_item functionality- Add error_log statements to track YAML conversion and S3 upload
- This will help identify why item edits are not being saved -
4275b0b 5:52 PMFix AJAX request for item editing- Change JavaScript to send action as POST data instead of GET parameter
- This ensures the edit_item action reaches the correct backend handler
- Item editing should now properly save changes to S3 YAML files -
7fa912a 5:49 PMFix JavaScript syntax error in Edit button onclick- Replace json_encode() with htmlspecialchars() and addslashes() for proper escaping
- Remove debugging alert from openEditModal function
- Fix JavaScript syntax error that was preventing modal from opening -
8ea3c60 5:45 PMAdd debugging to edit modal functionality- Add console.log and alert debugging to openEditModal function
- Verify if function is being called and modal element is found -
d1ab536 5:40 PMAdd item editing functionality for item owners- Add 'Edit...' button to dashboard context for own listings
- Create edit modal dialog with title and description fields
- Add backend AJAX handler for edit_item action in both POST and GET routes
- Implement JavaScript functions for modal management and form submission
- Add CSS styling for textarea elements in modal forms
- Use JSON encoding for JavaScript parameters to handle quotes properly
- Validate ownership before allowing edits and update S3 YAML files -
62e1480 5:07 PMFix AJAX routing for claim management functions- Add GET-based AJAX handler for ?page=claim&action=* endpoints
- Fix mismatch between JavaScript URL parameters and PHP POST data handling
- Ensure both POST and GET-based claim requests work properly
- Add delete_item action to supported actions list -
c7798d1 5:04 PMAdd debugging to removeMyClaim functionality- Add console.log statements to JavaScript removeMyClaim function
- Add error_log statements to PHP remove_claim action handler
- Improve error handling and debugging for claim removal process -
dc54cee 4:59 PMFix 'Remove my claim' functionality and add missing JavaScript functions- Add missing JavaScript functions (addClaimToItem, removeMyClaim, deleteItem) to main index.php
- Add delete_item action handler for item deletion
- Add getItem() function to functions.php for retrieving individual items
- Fix JavaScript function availability across all templates
- Add showMessage() function for user feedback
- Ensure all claim management functions work with unified item card system -
4e7fac4 4:29 PMFix remaining include path in user-listings.php- Fix the last include statement on line 290 that was still using relative path
- This resolves the production error: 'Failed opening templates/item-card.php' -
ec90700 4:19 PMFix include paths for production environment- Change relative include paths to absolute paths using __DIR__
- Fixes 'Failed opening templates/item-card.php' error in production
- Affects home.php, user-listings.php, and items.php templates -
d3576fe 4:15 PMAdd user settings functionality with custom display names- Implement settings modal dialog accessible from user dropdown
- Add display name field allowing users to customize their displayed name
- Store user settings in S3 under users/{userId}.yaml
- Integrate custom display names throughout the application
- Update unified item card template to use custom names
- Add comprehensive CSS styling for modal and form elements
- Include JavaScript functions for modal handling and AJAX submission -
02979a0 3:53 PMAdd ClaimIt logo to header and favicon - Add claimit-logo.jpg to public/assets/images/ - Set logo as favicon in HTML head section - Display logo image next to ClaimIt text in navigation header - Add CSS styling for logo display (40x40px with rounded corners) - Logo appears in browser tabs and navigation bar for better branding
-
8d39044 3:34 PMFix image display in unified item card template - Change image_file to image_key to match actual data structure - Images now display correctly across all pages using unified template - Fixes 'No Image' placeholder issue that was showing instead of actual images
-
d290c17 3:08 PMImplement unified item card system - Create templates/item-card.php for consistent item display across all pages - Add comprehensive CSS styles for unified item cards in style.css - Update templates/items.php to use unified template with 'listing' context - Update templates/home.php to use unified template with 'home' context - Update templates/user-listings.php to use unified template with 'dashboard' and 'claimed' contexts - Add truncateText() helper function to functions.php - Maintains all existing functionality while providing consistent UI - Supports different display contexts (listing, home, dashboard, claimed) - Includes proper action buttons based on user permissions and context
-
5c223a2 2:32 PMAdd action buttons to posted items in user-listings template - Added Contact Seller and Delete buttons for items posted by the user - Buttons only appear when viewing own listings (isOwnListings = true) - Added CSS styling for .item-actions class with proper button layout and hover effects - Improves user experience by providing quick access to item management actions
September 1, 2025
-
6127526 11:51 AMFix hardcoded localhost base URL in redirect() function - Added dynamic environment detection for base URL - Uses localhost:8000 for development and claimit.stonekeep.com for production - Fixes OAuth redirect loop when accessing production site
August 31, 2025
-
cba2a6d 9:02 PMFix OAuth redirect URI for production environment - Added dynamic redirect URI detection based on HTTP_HOST - Uses localhost:8000 for development and claimit.stonekeep.com for production - Updated example configuration with proper documentation - Fixes OAuth redirect loop when accessing production site
-
efc4f37 8:52 PMAdd claimed items section to user listings page - Added getItemsClaimedByUser function to find items claimed by a user - Enhanced user-listings page to show claimed items when viewing own listings - Added dashboard stat showing 'Items Claimed' count - Fixed image URL generation using correct getPresignedUrl method - Improved UI to show claim status and position for claimed items - Added proper handling for users with claimed items but no posted items
August 30, 2025
-
b66d83d 11:02 PMFix YAML parser and claim system - Fixed parseSimpleYaml to handle malformed claim entries with proper indentation detection - Added multi-line value support for claimed_at fields - Improved claim status filtering (active vs removed) - Enhanced UI to show 'You! (User Name)' for current user's claims - Moved About link to footer - Added comprehensive waitlist section styling - Fixed claim button logic and AJAX handlers - All claim system functionality now working correctly
-
4f8f67c 7:09 PMAdd Open Graph meta tags for social media previews - Implement generateOpenGraphTags function for Slack/Facebook/Twitter previews - Add dynamic meta tags for individual items with thumbnails and descriptions - Add user listings previews showing item counts - Support both development and production URLs - Include Twitter Card meta tags for enhanced Twitter previews
-
c7c1dba 7:01 PMMake My Listings link shareable and fix dashboard styling - Update My Listings to use user-listings format with user ID for sharing - Add dashboard-style interface to user-listings when viewing own items - Move dashboard styles to main CSS file for consistency - Make stat cards more compact with tighter design
-
d82f459 8:04 AMFix OAuth redirect loop by using absolute URLs in redirect function
August 29, 2025
-
1fc30df 5:21 PMUpdate deploy.yml
-
afb1538 4:56 PMTest deployment workflow - remove sudo commands
-
4be6930 4:34 PMMove contact link from navigation to footer- Remove contact link from main navigation menu
- Add contact link to footer with separator pipe
- Add CSS styling for footer link with hover effects
- Cleaner navigation with contact accessible in footer
- Footer link styled with gray color and blue hover state -
33010f3 4:25 PMAdd GitHub Actions deployment workflow- Create automated deployment workflow for production server
- Triggers on push to main branch
- Uses SSH to connect to production server
- Pulls latest code and updates dependencies
- Sets proper file permissions
- Ready for GitHub Secrets configuration -
4245b8a 12:24 PMTransform home page to show available items directly- Replace hero section with items grid display
- Remove phone, hours, and address from contact page
- Home page now shows all available items immediately
- Add 'Post a New Item' button in header
- Include empty state when no items exist
- Maintain AWS credentials check for development
- Users can now browse items without extra navigation steps
August 28, 2025
-
39e3cfe 5:57 PMFix OAuth redirect URI and localhost asset serving- Update Google OAuth config to use production redirect URI
- Add auth route rewrite rules to .htaccess for clean URLs
- Update router.php to find assets in public/ directory for localhost dev
- Fixes OAuth redirecting to localhost instead of production domain
- Maintains CSS/JS functionality in both localhost and production -
a88c473 5:29 PMMove assets directory into public/ and remove rewrite rule- Move assets/ from project root to public/assets/
- Remove assets rewrite rule from .htaccess (no longer needed)
- Fixes Apache security error with directory traversal (/../assets/)
- Assets now served directly from DocumentRoot/assets/ -
8d83245 5:23 PMFix assets loading by removing file existence check in .htaccess- Remove RewriteCond %{REQUEST_FILENAME} -f from assets rule
- This was preventing assets from loading when DocumentRoot is set to /public
- Assets requests now properly redirect to ../assets/ directory -
e180b7d 2:59 PMUpdate claim button text and fix user-listings image scaling- Changed 'Never mind' button to 'You have claimed this!' with checkmark emoji
- Kept mouseover tooltip as 'Unclaim this item' for clarity
- Fixed image scaling on user-listings page to match main items display
- Added proper CSS for item cards and grid layout consistency
- Updated both individual item view and items grid view templates -
6e8bf4e 2:21 PMImprove image upload error messages and reduce size limit to 500KB- Replace generic 'An error occurred' with specific 'Picture uploads are limited to under 500k'
- Add detailed server-side error handling for different PHP upload error codes
- Implement client-side file validation with immediate feedback
- Reduce upload limit from 5MB to 500KB
- Add MAX_FILE_SIZE form field for browser-level enforcement
- Show file size and name on successful selection
- Add success/danger color variables to CSS
August 27, 2025
-
ef4c5e6 5:47 PMUpdate about page and navigation improvements- Added company image to about page replacing placeholder
- Reformatted about page content with proper paragraph breaks
- Changed 'My Posts' to 'My Listings' in navigation menu
- Added responsive image styling with hover effects
- Updated documentation references to reflect 'My Listings' terminology -
d7104bb 5:23 PMFix navigation toolbar alignment and implement Google avatar fallback system- Fixed vertical alignment issues in navigation bar caused by user avatars
- Added consistent min-height values for nav elements to prevent height changes
- Implemented comprehensive Google profile picture fallback system
- Added automatic fallback to user initials when avatar image fails to load
- Improved Google OAuth picture URLs with proper sizing parameters
- Added CORS handling with referrerpolicy for cross-origin images
- Enhanced responsive design for navigation on mobile devices
- Includes proper error handling and graceful degradation for avatars
August 26, 2025
-
db3bc0b 10:17 PMAdd title field and improve UI consistency- Add required title field to item posting form with validation
- Update YAML data structure to include title field for all new items
- Display item titles prominently on both listing and detail pages
- Ensure backward compatibility: items without titles use description
- Change Claim button color from green to blue to match Contact Seller button
- Improve responsive design for item headers on mobile devices
- Fix image sizing on individual item pages (max-width: 500px, max-height: 70vh)
This enhances the user experience by providing clearer item identification
and consistent button styling throughout the application. -
791b8f9 9:26 PMImplement individual item URLs and detailed view pages- Add 'item' route to available pages for individual item viewing
- Create templates/item.php with detailed item view including:
* Large image display with sticky positioning
* Prominent price display with FREE badge for /bin/zsh items
* Full description with proper line breaks
* Item details grid (ID, posted date, contact)
* Action buttons (Contact Seller, Claim, Delete)
* Back navigation to items listing
* Mobile responsive design
- Make item listings clickable by wrapping cards in links to individual pages
- Add hover effects and smooth animations for better UX
- Move parseSimpleYaml function to includes/functions.php for reuse
- Maintain all existing functionality (delete, claim, contact) on individual pages
- URLs: ?page=item&id=TRACKING_NUMBER (clean URLs via .htaccess on Apache)
- Proper z-index handling to keep action buttons clickable within linked cards -
59defc7 8:56 PMChange 'View items' URL from '/s3' to '/items'- Rename templates/s3.php to templates/items.php
- Update routing in index.php to handle 'items' instead of 's3'
- Update all navigation links from ?page=s3 to ?page=items
- Update home page button to link to items page
- Update redirect after posting item to go to items page
- Update all error redirects in items template
- Update deployment guide with new URL structure
- Provides more user-friendly URLs hiding implementation details -
37fa6c2 8:52 PMAdd Apache deployment configuration and guide- Add .htaccess for clean URLs, static asset handling, and security headers
- Create comprehensive DEPLOYMENT.md guide for Apache hosting
- Include virtual host configuration examples
- Add SSL, permissions, and troubleshooting sections
- Enable clean URLs like /claim and /s3 instead of ?page=claim -
6160afc 8:38 PMReplace 'Share image' button with 'Claim this!' button- Remove conditional Share Image button that linked to presigned URLs
- Add new 'Claim this!' button with success styling (green)
- Implement claimItem() JavaScript function with placeholder functionality
- Add CSS styling for .claim-btn with hover effects and smooth transitions
- Button shows 'Not implemented yet' alert dialog with tracking number
- Prepares foundation for future claiming functionality -
1d60715 8:35 PMUpdate text to include giveaway option alongside sales- Change 'for sale' to 'for sale or for giveaway' across templates
- Updated posting page subtitle to be more inclusive
- Updated items listing page descriptions to reflect both sale and giveaway options
- Updated 'no items available' message to include giveaway option
- Makes the platform more welcoming for free item sharing -
01a08a3 8:33 PMReplace 'Learn More' button with 'View available items' link on home page- Remove the 'Learn More' button that linked to About page
- Add 'View available items' button that links to marketplace (s3 page)
- Maintains consistent navigation experience across site
- Users can now directly access available items from the home page -
8ffbc36 8:26 PMReplace JavaScript confirm dialog with styled HTML modal- Replace browser confirm() popup with custom modal dialog
- Add proper HTML modal with header, body, and action buttons
- Style modal to match site design with rounded corners and shadows
- Include smooth animations for modal show/hide transitions
- Add keyboard support (ESC key to close) for accessibility
- Add click-outside-to-close functionality
- Responsive design for mobile devices
- Maintain all existing delete functionality and error handling -
f1795bf 8:13 PMRedirect to View Available Items page after posting- Change redirect destination from 'claim' to 's3' after successful item posting
- Users now see their posted item immediately after submission
- Improves user experience and confirms item was posted successfully -
1784c9f 8:03 PMFix delete functionality AJAX response- Move delete handler from s3.php template to index.php before HTML output
- Prevents HTML headers from being sent with JSON response
- JavaScript can now properly parse the clean JSON response
- Resolves 'There was an error' message during item deletion -
4756c6f 7:58 PMSimplify page title to just 'ClaimIt'- Remove dynamic page names from browser title
- Change from '[Page] - ClaimIt' format to simply 'ClaimIt'
- Provides consistent branding across all pages -
4f79e56 7:54 PMAdd delete functionality with trash can icon for marketplace items- Add deleteObject method to AwsService.php for S3 object deletion
- Implement AJAX-based delete functionality in s3.php template
- Add trash can icon (๐๏ธ) button to each item card with confirmation dialog
- Include smooth fade-out animation when items are deleted
- Add proper error handling and user feedback with floating notifications
- Style delete button with red danger styling and hover effects
- Handle both YAML metadata and image file deletion
- Update item count and show 'no items' message when all items deleted
- Add responsive styling for mobile devices -
7476063 7:50 PMImplement comprehensive error handling and logging system- Add custom error handler to suppress AWS SDK PHP 8.4 compatibility warnings from browser display while preserving them in environment logs
- Update router.php and public/index.php with environment-appropriate error logging
- Configure clean user experience with professional error suppression
- Maintain developer debugging capabilities through proper log routing
- Ensure compatibility with both development server and production deployment (Apache/nginx)
- Error logs now automatically route to appropriate environment logs (console for dev, web server logs for production) -
4094897 5:29 PMImplement complete marketplace functionality with modern UIMajor Features Added:
- ๐จ Modern UI with Inter fonts, gradients, and glass-morphism effects
- ๐ฑ Fully responsive design with hover animations and card layouts
- ๐๏ธ Complete marketplace functionality for posting and browsing items
- ๐ธ Photo upload support with S3 storage integration
- ๐ฐ Support for /bin/zsh (free) item pricing
- ๐ง Direct email contact integration with pre-filled subjects
AWS S3 Integration:
- Automatic tracking number generation (reverse datestamp)
- Image upload to S3 bucket with tracking number naming
- YAML metadata files for item details (description, price, email)
- Presigned URL generation for secure image access
- Complete S3 bucket scanning and YAML parsing
UI/UX Improvements:
- ClaimIt logo now serves as home navigation link
- Removed redundant Home link from navigation
- Beautiful item cards with image placeholders when no photo available
- Modern gradient hero sections and smooth transitions
- Professional marketplace layout with grid display
Technical Enhancements:
- Custom router.php for proper static file serving
- PHP 8.4 compatibility with deprecation warning suppression
- Form validation improvements (allows /bin/zsh values)
- CSRF protection and secure file handling
- Comprehensive error handling and user feedback
The application now functions as a complete online marketplace where users can post items for sale (including free items) and browse available listings with modern, professional UI. -
512113a 3:59 PMInitial commit: ClaimIt web application- Complete PHP web application for claims management
- Modern responsive design with professional UI/UX
- Form validation and CSRF protection
- Multiple pages: Home, About, Claims, Contact
- Built with PHP 8.4, HTML5, CSS3, JavaScript
- Composer dependency management
- Security features and error handling