Spaces:
Sleeping
Sleeping
File size: 5,026 Bytes
496e606 ab3a403 ff8dd7e ab3a403 ff8dd7e d7d16f5 ff8dd7e 496e606 ab3a403 496e606 d7d16f5 496e606 ff8dd7e fc4345e ff8dd7e ab3a403 ff8dd7e ab3a403 ff8dd7e 496e606 ff8dd7e d7d16f5 ab3a403 ff8dd7e ab3a403 ff8dd7e d7d16f5 ab3a403 ff8dd7e ab3a403 ff8dd7e ab3a403 ff8dd7e fc4345e ff8dd7e ab3a403 ff8dd7e ab3a403 ff8dd7e d7d16f5 ab3a403 d7d16f5 ff8dd7e d7d16f5 ab3a403 d7d16f5 ab3a403 ff8dd7e |
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 |
import streamlit as st
import json
from datetime import datetime
import calendar
import random
# Initialize session state
if 'tasks' not in st.session_state:
st.session_state.tasks = {
day: [] for day in ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
}
if 'streak' not in st.session_state:
st.session_state.streak = 0
# App title
st.title("π Student Study Tracker")
days = list(st.session_state.tasks.keys())
# ========== Sidebar Features ==========
st.sidebar.header("ποΈ Calendar")
current_date = datetime.now()
st.sidebar.markdown(f"### {current_date.strftime('%B %Y')}")
# Display the correct calendar for the current month and year
cal = calendar.monthcalendar(current_date.year, current_date.month)
calendar_text = ""
for week in cal:
week_str = " ".join(f"{day:2}" if day != 0 else " " for day in week)
calendar_text += week_str + "\n"
st.sidebar.text(calendar_text)
# Motivational Quotes
quotes = [
"The secret of getting ahead is getting started. β Mark Twain",
"You donβt have to be great to start, but you have to start to be great. β Zig Ziglar",
"The only way to do great work is to love what you do. β Steve Jobs"
]
st.sidebar.markdown("π¬ **Quote of the Day**")
st.sidebar.write(random.choice(quotes))
# Streak Counter
completed_days = sum(
1 for day in days
if any(task['checked'] for task in st.session_state.tasks[day])
)
st.sidebar.markdown(f"π₯ **Streak:** {completed_days}/7 days this week")
# ========== Main App ==========
# Progress Bar
total_tasks = sum(len(tasks) for tasks in st.session_state.tasks.values())
completed_tasks = sum(
sum(1 for task in st.session_state.tasks[day] if task['checked'])
for day in days
)
if total_tasks > 0:
st.progress(completed_tasks / total_tasks)
# Day Tabs
tabs = st.tabs(days)
for i, day in enumerate(days):
with tabs[i]:
# Display tasks
for task_idx, task in enumerate(st.session_state.tasks[day]):
checked = task['checked']
text = task['text']
tags = task.get('tags', [])
priority = task.get('priority', 'Medium')
col1, col2 = st.columns([0.8, 0.2])
with col1:
if checked:
st.markdown(
f"<div style='color: #888; text-decoration: line-through;'>"
f"π {text} <small>(Priority: {priority}, Tags: {', '.join(tags)})</small>"
f"</div>",
unsafe_allow_html=True
)
else:
# Editable task details
new_text = st.text_input(
f"Task {task_idx + 1}",
value=text,
key=f"text_{day}_{task_idx}"
)
new_tags = st.multiselect(
"Tags",
options=["Study", "Homework", "Project", "Personal", "Assignment"], # Added "Assignment"
default=tags,
key=f"tags_{day}_{task_idx}"
)
new_priority = st.selectbox(
"Priority",
options=["High", "Medium", "Low"],
index=["High", "Medium", "Low"].index(priority),
key=f"priority_{day}_{task_idx}"
)
# Update task
st.session_state.tasks[day][task_idx]['text'] = new_text
st.session_state.tasks[day][task_idx]['tags'] = new_tags
st.session_state.tasks[day][task_idx]['priority'] = new_priority
with col2:
is_checked = st.checkbox(
"Done",
value=checked,
key=f"check_{day}_{task_idx}"
)
st.session_state.tasks[day][task_idx]['checked'] = is_checked
# Add new task button
if st.button(f"β Add Task for {day}"):
st.session_state.tasks[day].append({
'text': '',
'checked': False,
'tags': [],
'priority': 'Medium'
})
# Export Tasks
if st.button("π₯ Export Tasks"):
export_text = ""
for day in days:
export_text += f"### {day}\n"
for task in st.session_state.tasks[day]:
status = "β
" if task['checked'] else "β"
export_text += f"- {status} {task['text']} (Priority: {task['priority']}, Tags: {', '.join(task['tags'])})\n"
export_text += "\n"
st.download_button(
label="Download Tasks",
data=export_text,
file_name="weekly_tasks.txt"
)
# Save all tasks
if st.button("πΎ Save All Tasks"):
with open("tasks.json", "w") as f:
json.dump(st.session_state.tasks, f)
st.success("Progress saved!") |