=== badges === id | bigint unsigned | NOT NULL name_ar | varchar(255) | NOT NULL name_en | varchar(255) | NOT NULL description_ar | text | NULL description_en | text | NULL emoji | varchar(10) | NOT NULL DEFAULT '?' image_path | varchar(255) | NULL category | varchar(30) | NOT NULL DEFAULT 'milestone' rarity | varchar(15) | NOT NULL DEFAULT 'common' unlock_condition | json | NULL tier_required | varchar(30) | NULL xp_reward | smallint unsigned | NOT NULL DEFAULT '25' is_active | tinyint(1) | NOT NULL DEFAULT '1' created_at | timestamp | NULL updated_at | timestamp | NULL === boss_mission_completions === id | bigint unsigned | NOT NULL boss_mission_id | bigint unsigned | NOT NULL user_id | bigint unsigned | NOT NULL xp_awarded | int unsigned | NOT NULL coin_awarded | int unsigned | NOT NULL claimed_at | timestamp | NOT NULL created_at | timestamp | NULL updated_at | timestamp | NULL === boss_missions === id | bigint unsigned | NOT NULL title_en | varchar(255) | NOT NULL title_ar | varchar(255) | NOT NULL description_en | text | NOT NULL description_ar | text | NOT NULL icon | varchar(255) | NOT NULL DEFAULT '?' type | enum('save_amount','complete_chores','finish_lessons','streak_days') | NOT NULL target_value | int unsigned | NOT NULL xp_reward | int unsigned | NOT NULL DEFAULT '500' coin_reward | int unsigned | NOT NULL DEFAULT '0' tier | enum('little_saver','money_explorer','money_builder','all') | NOT NULL DEFAULT 'all' starts_at | date | NOT NULL ends_at | date | NOT NULL is_active | tinyint(1) | NOT NULL DEFAULT '1' created_at | timestamp | NULL updated_at | timestamp | NULL === cache === key | varchar(255) | NOT NULL value | mediumtext | NOT NULL expiration | int | NOT NULL === cache_locks === key | varchar(255) | NOT NULL owner | varchar(255) | NOT NULL expiration | int | NOT NULL === chores === id | bigint unsigned | NOT NULL parent_id | bigint unsigned | NOT NULL child_id | bigint unsigned | NOT NULL title_ar | varchar(255) | NOT NULL title_en | varchar(255) | NOT NULL description_ar | text | NULL description_en | text | NULL emoji | varchar(10) | NOT NULL DEFAULT '✅' reward_amount | bigint unsigned | NOT NULL reward_jar | varchar(10) | NOT NULL DEFAULT 'spend' xp_reward | smallint unsigned | NOT NULL DEFAULT '10' recurrence | varchar(10) | NOT NULL DEFAULT 'once' recurrence_days | json | NULL due_date | date | NULL status | varchar(20) | NOT NULL DEFAULT 'pending' proof_image_path | varchar(255) | NULL child_note | text | NULL parent_note | text | NULL submitted_at | timestamp | NULL reviewed_at | timestamp | NULL reviewed_by | bigint unsigned | NULL created_at | timestamp | NULL updated_at | timestamp | NULL === failed_jobs === id | bigint unsigned | NOT NULL uuid | varchar(255) | NOT NULL connection | text | NOT NULL queue | text | NOT NULL payload | longtext | NOT NULL exception | longtext | NOT NULL failed_at | timestamp | NOT NULL DEFAULT 'CURRENT_TIMESTAMP' === goals === id | bigint unsigned | NOT NULL user_id | bigint unsigned | NOT NULL name_ar | varchar(255) | NOT NULL name_en | varchar(255) | NOT NULL description_ar | text | NULL description_en | text | NULL target_amount | bigint unsigned | NOT NULL saved_amount | bigint unsigned | NOT NULL DEFAULT '0' jar | varchar(10) | NOT NULL DEFAULT 'save' emoji | varchar(10) | NOT NULL DEFAULT '?' image_path | varchar(255) | NULL status | varchar(20) | NOT NULL DEFAULT 'active' target_date | date | NULL completed_at | timestamp | NULL auto_save_percent | tinyint unsigned | NOT NULL DEFAULT '0' parent_approved | tinyint(1) | NOT NULL DEFAULT '0' approved_by | bigint unsigned | NULL xp_reward | smallint unsigned | NOT NULL DEFAULT '50' created_at | timestamp | NULL updated_at | timestamp | NULL === job_batches === id | varchar(255) | NOT NULL name | varchar(255) | NOT NULL total_jobs | int | NOT NULL pending_jobs | int | NOT NULL failed_jobs | int | NOT NULL failed_job_ids | longtext | NOT NULL options | mediumtext | NULL cancelled_at | int | NULL created_at | int | NOT NULL finished_at | int | NULL === jobs === id | bigint unsigned | NOT NULL queue | varchar(255) | NOT NULL payload | longtext | NOT NULL attempts | tinyint unsigned | NOT NULL reserved_at | int unsigned | NULL available_at | int unsigned | NOT NULL created_at | int unsigned | NOT NULL === lesson_completions === id | bigint unsigned | NOT NULL user_id | bigint unsigned | NOT NULL lesson_id | bigint unsigned | NOT NULL quiz_score | tinyint unsigned | NULL passed | tinyint(1) | NOT NULL DEFAULT '0' xp_earned | smallint unsigned | NOT NULL DEFAULT '0' time_spent_seconds | smallint unsigned | NULL completed_at | timestamp | NOT NULL DEFAULT 'CURRENT_TIMESTAMP' created_at | timestamp | NULL updated_at | timestamp | NULL === lessons === id | bigint unsigned | NOT NULL tier | varchar(30) | NOT NULL order | tinyint unsigned | NOT NULL DEFAULT '1' title_ar | varchar(255) | NOT NULL title_en | varchar(255) | NOT NULL description_ar | text | NULL description_en | text | NULL content_ar | json | NULL content_en | json | NULL emoji | varchar(10) | NOT NULL DEFAULT '?' thumbnail_path | varchar(255) | NULL category | varchar(30) | NOT NULL DEFAULT 'earning' duration_minutes | tinyint unsigned | NOT NULL DEFAULT '5' xp_reward | smallint unsigned | NOT NULL DEFAULT '20' status | varchar(15) | NOT NULL DEFAULT 'published' requires_lesson_id | bigint unsigned | NULL created_at | timestamp | NULL updated_at | timestamp | NULL === migrations === id | int unsigned | NOT NULL migration | varchar(255) | NOT NULL batch | int | NOT NULL === notifications === id | bigint unsigned | NOT NULL user_id | bigint unsigned | NOT NULL type | varchar(40) | NOT NULL title_ar | varchar(255) | NOT NULL title_en | varchar(255) | NOT NULL body_ar | text | NULL body_en | text | NULL emoji | varchar(10) | NOT NULL DEFAULT '?' action_data | json | NULL related_type | varchar(255) | NULL related_id | bigint unsigned | NULL is_read | tinyint(1) | NOT NULL DEFAULT '0' read_at | timestamp | NULL channel | varchar(10) | NOT NULL DEFAULT 'in_app' created_at | timestamp | NULL updated_at | timestamp | NULL === password_reset_tokens === email | varchar(255) | NOT NULL token | varchar(255) | NOT NULL created_at | timestamp | NULL === scheduled_allowances === id | bigint unsigned | NOT NULL parent_id | bigint unsigned | NOT NULL child_id | bigint unsigned | NOT NULL amount | int unsigned | NOT NULL spend_percent | tinyint unsigned | NOT NULL save_percent | tinyint unsigned | NOT NULL give_percent | tinyint unsigned | NOT NULL frequency | enum('weekly','monthly') | NOT NULL DEFAULT 'weekly' day_of_week | tinyint unsigned | NULL day_of_month | tinyint unsigned | NULL is_active | tinyint(1) | NOT NULL DEFAULT '1' next_run_at | timestamp | NULL last_run_at | timestamp | NULL run_count | int unsigned | NOT NULL DEFAULT '0' note | varchar(255) | NULL created_at | timestamp | NULL updated_at | timestamp | NULL === sessions === id | varchar(255) | NOT NULL user_id | bigint unsigned | NULL ip_address | varchar(45) | NULL user_agent | text | NULL payload | longtext | NOT NULL last_activity | int | NOT NULL === spend_requests === id | bigint unsigned | NOT NULL child_id | bigint unsigned | NOT NULL parent_id | bigint unsigned | NOT NULL jar | enum('spend','save','give') | NOT NULL DEFAULT 'spend' amount | int unsigned | NOT NULL reason_en | varchar(255) | NULL reason_ar | varchar(255) | NULL status | enum('pending','approved','rejected') | NOT NULL DEFAULT 'pending' parent_note | varchar(255) | NULL reviewed_at | timestamp | NULL created_at | timestamp | NULL updated_at | timestamp | NULL === subscriptions === id | bigint unsigned | NOT NULL user_id | bigint unsigned | NOT NULL plan | varchar(20) | NOT NULL DEFAULT 'free' status | varchar(20) | NOT NULL DEFAULT 'active' currency | varchar(3) | NOT NULL DEFAULT 'EGP' amount | int unsigned | NOT NULL DEFAULT '0' billing_cycle | varchar(10) | NOT NULL DEFAULT 'monthly' max_children | tinyint unsigned | NOT NULL DEFAULT '1' provider | varchar(255) | NULL provider_subscription_id | varchar(255) | NULL provider_customer_id | varchar(255) | NULL provider_data | json | NULL trial_ends_at | timestamp | NULL current_period_starts_at | timestamp | NULL current_period_ends_at | timestamp | NULL cancelled_at | timestamp | NULL expires_at | timestamp | NULL grace_period_ends_at | timestamp | NULL created_at | timestamp | NULL updated_at | timestamp | NULL === transactions === id | bigint unsigned | NOT NULL wallet_id | bigint unsigned | NOT NULL user_id | bigint unsigned | NOT NULL created_by | bigint unsigned | NOT NULL type | varchar(30) | NOT NULL jar | varchar(10) | NOT NULL DEFAULT 'spend' amount | bigint unsigned | NOT NULL spend_balance_after | bigint unsigned | NOT NULL DEFAULT '0' save_balance_after | bigint unsigned | NOT NULL DEFAULT '0' give_balance_after | bigint unsigned | NOT NULL DEFAULT '0' chore_id | bigint unsigned | NULL goal_id | bigint unsigned | NULL description_ar | varchar(255) | NULL description_en | varchar(255) | NULL note | text | NULL created_at | timestamp | NULL updated_at | timestamp | NULL === user_badges === id | bigint unsigned | NOT NULL user_id | bigint unsigned | NOT NULL badge_id | bigint unsigned | NOT NULL xp_earned | smallint unsigned | NOT NULL DEFAULT '0' trigger_type | varchar(255) | NULL trigger_id | bigint unsigned | NULL is_featured | tinyint(1) | NOT NULL DEFAULT '0' earned_at | timestamp | NOT NULL DEFAULT 'CURRENT_TIMESTAMP' created_at | timestamp | NULL updated_at | timestamp | NULL === users === id | bigint unsigned | NOT NULL name | varchar(255) | NOT NULL family_username | varchar(255) | NULL pin | varchar(255) | NULL pin_locked_until | timestamp | NULL pin_attempts | tinyint unsigned | NOT NULL DEFAULT '0' login_streak | smallint unsigned | NOT NULL DEFAULT '0' last_login_date | date | NULL save_streak | smallint unsigned | NOT NULL DEFAULT '0' onboarding_completed_at | timestamp | NULL last_save_date | date | NULL spend_requires_approval | tinyint(1) | NOT NULL DEFAULT '0' email | varchar(255) | NULL email_verified_at | timestamp | NULL password | varchar(255) | NULL remember_token | varchar(100) | NULL role | enum('parent','child') | NOT NULL DEFAULT 'parent' parent_id | bigint unsigned | NULL age | tinyint unsigned | NULL gender | enum('male','female') | NULL tier | tinyint unsigned | NULL theme | varchar(30) | NOT NULL DEFAULT 'football' language | enum('en','ar') | NOT NULL DEFAULT 'en' avatar | varchar(255) | NULL is_active | tinyint(1) | NOT NULL DEFAULT '1' xp | int unsigned | NOT NULL DEFAULT '0' level | tinyint unsigned | NOT NULL DEFAULT '1' created_at | timestamp | NULL updated_at | timestamp | NULL === wallets === id | bigint unsigned | NOT NULL user_id | bigint unsigned | NOT NULL spend_balance | bigint unsigned | NOT NULL DEFAULT '0' save_balance | bigint unsigned | NOT NULL DEFAULT '0' give_balance | bigint unsigned | NOT NULL DEFAULT '0' save_alert_threshold | int unsigned | NOT NULL DEFAULT '0' goal_alert_enabled | tinyint(1) | NOT NULL DEFAULT '1' spending_alert_enabled | tinyint(1) | NOT NULL DEFAULT '1' total_earned | bigint unsigned | NOT NULL DEFAULT '0' total_spent | bigint unsigned | NOT NULL DEFAULT '0' spend_percent | tinyint unsigned | NOT NULL DEFAULT '70' save_percent | tinyint unsigned | NOT NULL DEFAULT '20' give_percent | tinyint unsigned | NOT NULL DEFAULT '10' currency | varchar(3) | NOT NULL DEFAULT 'EGP' created_at | timestamp | NULL updated_at | timestamp | NULL