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!")