""" Usage tracking for Premium Taste model Tracks daily usage limits for HuggingFace Space users """ import streamlit as st from datetime import datetime, date import json class UsageTracker: def __init__(self): """Initialize usage tracking for premium taste model""" self.today = date.today().isoformat() self.daily_email_limit = 5 self.daily_scrape_limit = 2 self.daily_export_limit = 1 self.init_session_state() def init_session_state(self): """Initialize session state for usage tracking""" if 'usage_data' not in st.session_state: st.session_state.usage_data = { 'date': self.today, 'emails_generated': 0, 'linkedin_scrapes': 0, 'bulk_exports': 0, 'email_address': None, 'premium_features_used': [] } # Reset counters if new day if st.session_state.usage_data['date'] != self.today: st.session_state.usage_data = { 'date': self.today, 'emails_generated': 0, 'linkedin_scrapes': 0, 'bulk_exports': 0, 'email_address': st.session_state.usage_data.get('email_address'), 'premium_features_used': [] } def get_emails_generated(self): """Get current email count""" return st.session_state.usage_data['emails_generated'] def can_generate_email(self): """Check if user can generate more emails (5/day limit)""" return st.session_state.usage_data['emails_generated'] < 5 def can_scrape_linkedin(self): """Check if user can scrape LinkedIn (2/day limit)""" return st.session_state.usage_data['linkedin_scrapes'] < 2 def can_bulk_export(self): """Check if user can export bulk data (1/day limit)""" return st.session_state.usage_data['bulk_exports'] < 1 def increment_email_generation(self): """Track email generation""" st.session_state.usage_data['emails_generated'] += 1 def increment_linkedin_scrape(self): """Track LinkedIn scraping""" st.session_state.usage_data['linkedin_scrapes'] += 1 def increment_bulk_export(self): """Track bulk export""" st.session_state.usage_data['bulk_exports'] += 1 def add_premium_feature_used(self, feature_name): """Track which premium features user tried""" if feature_name not in st.session_state.usage_data['premium_features_used']: st.session_state.usage_data['premium_features_used'].append(feature_name) def get_remaining_emails(self): """Get remaining email generations""" return max(0, 5 - st.session_state.usage_data['emails_generated']) def get_remaining_scrapes(self): """Get remaining LinkedIn scrapes""" return max(0, 2 - st.session_state.usage_data['linkedin_scrapes']) def show_upgrade_prompt(self, feature_name): """Show upgrade prompt when limits reached""" st.error(f""" 🚀 **You've reached your daily {feature_name} limit!** **Want unlimited access to all premium features?** ✅ Unlimited email generation ✅ Unlimited LinkedIn scraping ✅ Unlimited bulk processing ✅ Advanced quality insights ✅ A/B subject line testing ✅ Follow-up sequence templates **🎯 Get Lifetime Access for Just $19** """) col1, col2 = st.columns([1, 1]) with col1: if st.button("🚀 Get Unlimited Access", use_container_width=True, type="primary"): st.markdown("**[🔗 Get Cold Email Assistant Pro →](https://gumroad.com/l/cold-email-assistant)**") with col2: if st.button("📧 Get Notified of Updates", use_container_width=True): email = st.text_input("Enter your email for updates:") if email: st.session_state.usage_data['email_address'] = email st.success("✅ We'll notify you of new features!") def show_usage_sidebar(self): """Show usage stats in sidebar""" st.sidebar.markdown("---") st.sidebar.subheader("📊 Today's Usage") # Email generation emails_remaining = self.get_remaining_emails() if emails_remaining > 0: st.sidebar.success(f"📧 {emails_remaining}/5 emails remaining") else: st.sidebar.error("📧 Daily email limit reached") # LinkedIn scraping scrapes_remaining = self.get_remaining_scrapes() if scrapes_remaining > 0: st.sidebar.success(f"🔍 {scrapes_remaining}/2 LinkedIn scrapes remaining") else: st.sidebar.error("🔍 Daily LinkedIn limit reached") # Bulk export if self.can_bulk_export(): st.sidebar.success("📊 1 bulk export available") else: st.sidebar.error("📊 Daily bulk export used") # Upgrade CTA st.sidebar.markdown("---") st.sidebar.markdown("### 🚀 Upgrade to Pro") st.sidebar.info("Remove all limits + get exclusive features!") if st.sidebar.button("Get Unlimited Access", use_container_width=True): st.sidebar.markdown("**[🔗 Cold Email Assistant Pro →](https://gumroad.com/l/cold-email-assistant)**")