cold-email-assistant / usage_tracker.py
ahmednoorx's picture
Upload usage_tracker.py
6002e49 verified
"""
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)**")