MonsterBoyTabs commited on
Commit
ff8dd7e
Β·
verified Β·
1 Parent(s): 0337f54

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +81 -15
app.py CHANGED
@@ -1,54 +1,99 @@
1
  import streamlit as st
2
  import json
3
- from pathlib import Path
4
  from datetime import datetime
 
 
5
 
6
- # Initialize session state for tasks
7
  if 'tasks' not in st.session_state:
8
  st.session_state.tasks = {
9
  day: [] for day in ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
10
  }
 
 
11
 
12
  # App title
13
  st.title("πŸ“š Student Study Tracker")
14
  days = list(st.session_state.tasks.keys())
15
 
16
- # Progress bar
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  completed_tasks = sum(
18
  sum(1 for task in st.session_state.tasks[day] if task['checked'])
19
  for day in days
20
  )
21
- st.progress(completed_tasks / max(1, sum(len(tasks) for tasks in st.session_state.tasks.values())))
 
22
 
23
- # Create day tabs
24
  tabs = st.tabs(days)
25
-
26
  for i, day in enumerate(days):
27
  with tabs[i]:
28
- # Display tasks with strikethrough
29
  for task_idx, task in enumerate(st.session_state.tasks[day]):
30
  checked = task['checked']
31
  text = task['text']
 
 
32
 
33
- col1, col2 = st.columns([0.9, 0.1])
34
  with col1:
35
- # Strikethrough styling for completed tasks
36
  if checked:
37
  st.markdown(
38
- f"<div style='color: #888; text-decoration: line-through; margin: 5px 0;'>"
39
- f"{text}"
40
  f"</div>",
41
  unsafe_allow_html=True
42
  )
43
  else:
 
44
  new_text = st.text_input(
45
  f"Task {task_idx + 1}",
46
  value=text,
47
- key=f"task_{day}_{task_idx}"
 
 
 
 
 
 
48
  )
 
 
 
 
 
 
 
 
49
  st.session_state.tasks[day][task_idx]['text'] = new_text
 
 
 
50
  with col2:
51
- # Checkbox with updated state
52
  is_checked = st.checkbox(
53
  "Done",
54
  value=checked,
@@ -58,10 +103,31 @@ for i, day in enumerate(days):
58
 
59
  # Add new task button
60
  if st.button(f"βž• Add Task for {day}"):
61
- st.session_state.tasks[day].append({'text': '', 'checked': False})
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
 
63
  # Save all tasks
64
  if st.button("πŸ’Ύ Save All Tasks"):
65
  with open("tasks.json", "w") as f:
66
  json.dump(st.session_state.tasks, f)
67
- st.success("All tasks saved!")
 
1
  import streamlit as st
2
  import json
 
3
  from datetime import datetime
4
+ import calendar
5
+ import random
6
 
7
+ # Initialize session state
8
  if 'tasks' not in st.session_state:
9
  st.session_state.tasks = {
10
  day: [] for day in ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
11
  }
12
+ if 'streak' not in st.session_state:
13
+ st.session_state.streak = 0
14
 
15
  # App title
16
  st.title("πŸ“š Student Study Tracker")
17
  days = list(st.session_state.tasks.keys())
18
 
19
+ # ========== Sidebar Features ==========
20
+ st.sidebar.header("πŸ—“οΈ Calendar")
21
+ current_date = datetime.now()
22
+ st.sidebar.markdown(f"### {current_date.strftime('%B %Y')}")
23
+ st.sidebar.text(calendar.month(current_date.year, current_date.month))
24
+
25
+ # Motivational Quotes
26
+ quotes = [
27
+ "The secret of getting ahead is getting started. – Mark Twain",
28
+ "You don’t have to be great to start, but you have to start to be great. – Zig Ziglar",
29
+ "The only way to do great work is to love what you do. – Steve Jobs"
30
+ ]
31
+ st.sidebar.markdown("πŸ’¬ **Quote of the Day**")
32
+ st.sidebar.write(random.choice(quotes))
33
+
34
+ # Streak Counter
35
+ completed_days = sum(
36
+ 1 for day in days
37
+ if any(task['checked'] for task in st.session_state.tasks[day])
38
+ )
39
+ st.sidebar.markdown(f"πŸ”₯ **Streak:** {completed_days}/7 days this week")
40
+
41
+ # ========== Main App ==========
42
+ # Progress Bar
43
+ total_tasks = sum(len(tasks) for tasks in st.session_state.tasks.values())
44
  completed_tasks = sum(
45
  sum(1 for task in st.session_state.tasks[day] if task['checked'])
46
  for day in days
47
  )
48
+ if total_tasks > 0:
49
+ st.progress(completed_tasks / total_tasks)
50
 
51
+ # Day Tabs
52
  tabs = st.tabs(days)
 
53
  for i, day in enumerate(days):
54
  with tabs[i]:
55
+ # Display tasks
56
  for task_idx, task in enumerate(st.session_state.tasks[day]):
57
  checked = task['checked']
58
  text = task['text']
59
+ tags = task.get('tags', [])
60
+ priority = task.get('priority', 'Medium')
61
 
62
+ col1, col2 = st.columns([0.8, 0.2])
63
  with col1:
 
64
  if checked:
65
  st.markdown(
66
+ f"<div style='color: #888; text-decoration: line-through;'>"
67
+ f"πŸ“Œ {text} <small>(Priority: {priority}, Tags: {', '.join(tags)})</small>"
68
  f"</div>",
69
  unsafe_allow_html=True
70
  )
71
  else:
72
+ # Editable task details
73
  new_text = st.text_input(
74
  f"Task {task_idx + 1}",
75
  value=text,
76
+ key=f"text_{day}_{task_idx}"
77
+ )
78
+ new_tags = st.multiselect(
79
+ "Tags",
80
+ options=["Study", "Homework", "Project", "Personal"],
81
+ default=tags,
82
+ key=f"tags_{day}_{task_idx}"
83
  )
84
+ new_priority = st.selectbox(
85
+ "Priority",
86
+ options=["High", "Medium", "Low"],
87
+ index=["High", "Medium", "Low"].index(priority),
88
+ key=f"priority_{day}_{task_idx}"
89
+ )
90
+
91
+ # Update task
92
  st.session_state.tasks[day][task_idx]['text'] = new_text
93
+ st.session_state.tasks[day][task_idx]['tags'] = new_tags
94
+ st.session_state.tasks[day][task_idx]['priority'] = new_priority
95
+
96
  with col2:
 
97
  is_checked = st.checkbox(
98
  "Done",
99
  value=checked,
 
103
 
104
  # Add new task button
105
  if st.button(f"βž• Add Task for {day}"):
106
+ st.session_state.tasks[day].append({
107
+ 'text': '',
108
+ 'checked': False,
109
+ 'tags': [],
110
+ 'priority': 'Medium'
111
+ })
112
+
113
+ # Export Tasks
114
+ if st.button("πŸ“₯ Export Tasks"):
115
+ export_text = ""
116
+ for day in days:
117
+ export_text += f"### {day}\n"
118
+ for task in st.session_state.tasks[day]:
119
+ status = "βœ…" if task['checked'] else "❌"
120
+ export_text += f"- {status} {task['text']} (Priority: {task['priority']}, Tags: {', '.join(task['tags'])})\n"
121
+ export_text += "\n"
122
+
123
+ st.download_button(
124
+ label="Download Tasks",
125
+ data=export_text,
126
+ file_name="weekly_tasks.txt"
127
+ )
128
 
129
  # Save all tasks
130
  if st.button("πŸ’Ύ Save All Tasks"):
131
  with open("tasks.json", "w") as f:
132
  json.dump(st.session_state.tasks, f)
133
+ st.success("Progress saved!")