Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import pandas as pd | |
| import matplotlib.pyplot as plt | |
| from datetime import date | |
| # Configure Streamlit page | |
| st.set_page_config(page_title="Productivity Tracker", layout="centered") | |
| st.markdown("<h1 style='text-align: center; color: #2C3E50;'>ποΈ Daily Productivity Tracker</h1>", unsafe_allow_html=True) | |
| st.markdown("<p style='text-align: center; color: gray;'>Track your tasks, working hours, and daily notes with clean summaries and visuals</p>", unsafe_allow_html=True) | |
| # Initialize session data | |
| if "data" not in st.session_state: | |
| st.session_state.data = [] | |
| # --- Input Form --- | |
| st.markdown("### β Add New Entry") | |
| with st.form("entry_form", clear_on_submit=True): | |
| col1, col2 = st.columns(2) | |
| with col1: | |
| task = st.text_input("π Task Description") | |
| with col2: | |
| hours = st.number_input("β±οΈ Hours Worked", min_value=0.0, step=0.5) | |
| notes = st.text_area("π§Ύ Short Notes", height=100) | |
| submitted = st.form_submit_button("Add Task", use_container_width=True) | |
| # Save data | |
| if submitted and task: | |
| today = date.today().strftime("%Y-%m-%d") | |
| st.session_state.data.append({ | |
| "Date": today, | |
| "Task": task, | |
| "Hours": hours, | |
| "Notes": notes | |
| }) | |
| st.success("β Task added successfully!") | |
| # Convert to DataFrame | |
| df = pd.DataFrame(st.session_state.data) | |
| # --- Show Data --- | |
| if not df.empty: | |
| st.markdown("---") | |
| st.markdown("### π All Logged Entries") | |
| st.dataframe(df, use_container_width=True) | |
| st.markdown("### π Productivity Overview") | |
| daily_summary = df.groupby("Date")["Hours"].sum().reset_index() | |
| fig, ax = plt.subplots(figsize=(8, 4)) | |
| ax.plot(daily_summary["Date"], daily_summary["Hours"], marker='o', color="#3498DB", linewidth=2) | |
| ax.set_title("Hours Worked Per Day", fontsize=14) | |
| ax.set_xlabel("Date", fontsize=12) | |
| ax.set_ylabel("Total Hours", fontsize=12) | |
| ax.grid(True) | |
| plt.xticks(rotation=45) | |
| st.pyplot(fig) | |
| st.markdown("### π Summary Statistics") | |
| col1, col2, col3 = st.columns(3) | |
| with col1: | |
| st.metric("Total Tasks", len(df)) | |
| with col2: | |
| st.metric("Total Hours", f"{df['Hours'].sum():.1f}") | |
| with col3: | |
| avg = df.groupby("Date")["Hours"].sum().mean() | |
| st.metric("Avg Hours/Day", f"{avg:.2f}") | |
| else: | |
| st.warning("No entries yet. Start by adding a task above.") | |
| # --- Footer --- | |
| st.markdown("---") | |
| st.markdown("<p style='text-align: center; color: #95A5A6;'>Β© 2025 Productivity Tracker | Built with β€οΈ in Streamlit</p>", unsafe_allow_html=True) | |