Spaces:
Running
Running
File size: 5,715 Bytes
6002e49 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
"""
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)**")
|