ahmednoorx commited on
Commit
6002e49
Β·
verified Β·
1 Parent(s): 2e93556

Upload usage_tracker.py

Browse files
Files changed (1) hide show
  1. usage_tracker.py +140 -0
usage_tracker.py ADDED
@@ -0,0 +1,140 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Usage tracking for Premium Taste model
3
+ Tracks daily usage limits for HuggingFace Space users
4
+ """
5
+ import streamlit as st
6
+ from datetime import datetime, date
7
+ import json
8
+
9
+ class UsageTracker:
10
+ def __init__(self):
11
+ """Initialize usage tracking for premium taste model"""
12
+ self.today = date.today().isoformat()
13
+ self.daily_email_limit = 5
14
+ self.daily_scrape_limit = 2
15
+ self.daily_export_limit = 1
16
+ self.init_session_state()
17
+
18
+ def init_session_state(self):
19
+ """Initialize session state for usage tracking"""
20
+ if 'usage_data' not in st.session_state:
21
+ st.session_state.usage_data = {
22
+ 'date': self.today,
23
+ 'emails_generated': 0,
24
+ 'linkedin_scrapes': 0,
25
+ 'bulk_exports': 0,
26
+ 'email_address': None,
27
+ 'premium_features_used': []
28
+ }
29
+
30
+ # Reset counters if new day
31
+ if st.session_state.usage_data['date'] != self.today:
32
+ st.session_state.usage_data = {
33
+ 'date': self.today,
34
+ 'emails_generated': 0,
35
+ 'linkedin_scrapes': 0,
36
+ 'bulk_exports': 0,
37
+ 'email_address': st.session_state.usage_data.get('email_address'),
38
+ 'premium_features_used': []
39
+ }
40
+
41
+ def get_emails_generated(self):
42
+ """Get current email count"""
43
+ return st.session_state.usage_data['emails_generated']
44
+
45
+ def can_generate_email(self):
46
+ """Check if user can generate more emails (5/day limit)"""
47
+ return st.session_state.usage_data['emails_generated'] < 5
48
+
49
+ def can_scrape_linkedin(self):
50
+ """Check if user can scrape LinkedIn (2/day limit)"""
51
+ return st.session_state.usage_data['linkedin_scrapes'] < 2
52
+
53
+ def can_bulk_export(self):
54
+ """Check if user can export bulk data (1/day limit)"""
55
+ return st.session_state.usage_data['bulk_exports'] < 1
56
+
57
+ def increment_email_generation(self):
58
+ """Track email generation"""
59
+ st.session_state.usage_data['emails_generated'] += 1
60
+
61
+ def increment_linkedin_scrape(self):
62
+ """Track LinkedIn scraping"""
63
+ st.session_state.usage_data['linkedin_scrapes'] += 1
64
+
65
+ def increment_bulk_export(self):
66
+ """Track bulk export"""
67
+ st.session_state.usage_data['bulk_exports'] += 1
68
+
69
+ def add_premium_feature_used(self, feature_name):
70
+ """Track which premium features user tried"""
71
+ if feature_name not in st.session_state.usage_data['premium_features_used']:
72
+ st.session_state.usage_data['premium_features_used'].append(feature_name)
73
+
74
+ def get_remaining_emails(self):
75
+ """Get remaining email generations"""
76
+ return max(0, 5 - st.session_state.usage_data['emails_generated'])
77
+
78
+ def get_remaining_scrapes(self):
79
+ """Get remaining LinkedIn scrapes"""
80
+ return max(0, 2 - st.session_state.usage_data['linkedin_scrapes'])
81
+
82
+ def show_upgrade_prompt(self, feature_name):
83
+ """Show upgrade prompt when limits reached"""
84
+ st.error(f"""
85
+ πŸš€ **You've reached your daily {feature_name} limit!**
86
+
87
+ **Want unlimited access to all premium features?**
88
+
89
+ βœ… Unlimited email generation
90
+ βœ… Unlimited LinkedIn scraping
91
+ βœ… Unlimited bulk processing
92
+ βœ… Advanced quality insights
93
+ βœ… A/B subject line testing
94
+ βœ… Follow-up sequence templates
95
+
96
+ **🎯 Get Lifetime Access for Just $19**
97
+ """)
98
+
99
+ col1, col2 = st.columns([1, 1])
100
+ with col1:
101
+ if st.button("πŸš€ Get Unlimited Access", use_container_width=True, type="primary"):
102
+ st.markdown("**[πŸ”— Get Cold Email Assistant Pro β†’](https://gumroad.com/l/cold-email-assistant)**")
103
+ with col2:
104
+ if st.button("πŸ“§ Get Notified of Updates", use_container_width=True):
105
+ email = st.text_input("Enter your email for updates:")
106
+ if email:
107
+ st.session_state.usage_data['email_address'] = email
108
+ st.success("βœ… We'll notify you of new features!")
109
+
110
+ def show_usage_sidebar(self):
111
+ """Show usage stats in sidebar"""
112
+ st.sidebar.markdown("---")
113
+ st.sidebar.subheader("πŸ“Š Today's Usage")
114
+
115
+ # Email generation
116
+ emails_remaining = self.get_remaining_emails()
117
+ if emails_remaining > 0:
118
+ st.sidebar.success(f"πŸ“§ {emails_remaining}/5 emails remaining")
119
+ else:
120
+ st.sidebar.error("πŸ“§ Daily email limit reached")
121
+
122
+ # LinkedIn scraping
123
+ scrapes_remaining = self.get_remaining_scrapes()
124
+ if scrapes_remaining > 0:
125
+ st.sidebar.success(f"πŸ” {scrapes_remaining}/2 LinkedIn scrapes remaining")
126
+ else:
127
+ st.sidebar.error("πŸ” Daily LinkedIn limit reached")
128
+
129
+ # Bulk export
130
+ if self.can_bulk_export():
131
+ st.sidebar.success("πŸ“Š 1 bulk export available")
132
+ else:
133
+ st.sidebar.error("πŸ“Š Daily bulk export used")
134
+
135
+ # Upgrade CTA
136
+ st.sidebar.markdown("---")
137
+ st.sidebar.markdown("### πŸš€ Upgrade to Pro")
138
+ st.sidebar.info("Remove all limits + get exclusive features!")
139
+ if st.sidebar.button("Get Unlimited Access", use_container_width=True):
140
+ st.sidebar.markdown("**[πŸ”— Cold Email Assistant Pro β†’](https://gumroad.com/l/cold-email-assistant)**")