The safest way is to leave yourself a short project checkpoint that you can paste back into a future chat. Save the following somewhere (for example, docs/saved_search_progress.txt in your project): PROJECT: chicago_dashboard_gc FEATURE: Saved Searches + Email Alerts CURRENT STATUS: - Using procedural PHP only. - Database: chicago_dashboard_gc - Collation standard: utf8mb4_unicode_ci for all new code/tables. - DB connection uses mysqli procedural style through includes/db.php. - config.php has BASE_URL. COMPLETED: 1. saved_searches table created successfully. Current saved_searches structure: saved_search_id INT AUTO_INCREMENT PRIMARY KEY user_id INT search_name VARCHAR(150) filters TEXT COLLATE utf8mb4_unicode_ci email_enabled TINYINT(1) created_at updated_at - Filters are stored as JSON text. - No saved_searches_matches table will be created. - We are NOT storing permit records in saved searches. - Saved searches only store filter criteria. USER REQUIREMENTS: - Individual users receive their own saved searches. - Users are identified by users.user_id. - Email address comes from users.email. - Postmark will be used later through API + curl. - Sender email: alert@weblafi.com (can be changed later). - No subscription restrictions yet. EMAIL LOGIC: - Cron currently runs every 5 minutes during development. - Production schedule will change later. - Saved searches run during cron. - Sundays: no emails sent. - All other days: - If matching permits exist: send email. - If no matching permits exist: still send email saying no permits matched. - Email contains only: - saved search name - count/message - login link - No permit details in email. DASHBOARD REQUIREMENT: Add button next to "Apply Filters": - View Saved Searches Modal should display: - saved search name - saved criteria - buttons: - Apply Filter - Run Now - Edit - Delete - Enable/Disable Emails Apply Filter behavior: - Load saved criteria into dashboard filter fields. - Automatically fire Apply Filters. FILES CREATED SO FAR: - none yet for saved searches API. NEXT STEP: Before writing code: Need to inspect: assets/js/app.js Need to see: - loadPermits() - current filter collection - zip tag variables - how AJAX calls are made Next files planned: api/saved_searches/ save_saved_search.php get_saved_searches.php delete_saved_search.php update_saved_search.php toggle_saved_search_email.php Follow existing project pattern: api/notes/* api/permits/get_permits.php Do not make assumptions. Always provide: - exact file path - exact location in file - complete code blocks - mobile-friendly changes. When you come back, paste that checkpoint and say: Continue saved searches feature from checkpoint. I will then pick up from the assets/js/app.js review step.