import streamlit as st import pandas as pd from fpdf import FPDF import datetime # Initialize session state def init_session_state(): if "study_data" not in st.session_state: st.session_state.study_data = pd.DataFrame(columns=["Subject", "Topic", "Goal", "Progress (%)"]) if "calendar_data" not in st.session_state: st.session_state.calendar_data = pd.DataFrame({"Day": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], "Planned Topic": ["" for _ in range(7)]}) # PDF Generation def generate_pdf(df): pdf = FPDF() pdf.add_page() pdf.set_font("Arial", size=12) pdf.cell(200, 10, txt="Study Plan Report", ln=True, align='C') pdf.ln(10) for i, row in df.iterrows(): pdf.multi_cell(0, 10, f"Subject: {row['Subject']}\nTopic: {row['Topic']}\nGoal: {row['Goal']}\nProgress: {row['Progress (%)']}%\n") pdf.ln(1) file_path = "study_report.pdf" pdf.output(file_path) return file_path def main(): st.set_page_config(page_title="Study Planner", layout="wide") st.title("📚 Smart Study Planner") init_session_state() st.sidebar.markdown("---") st.sidebar.header("📂 Upload Your Study Plan (optional)") uploaded_plan = st.sidebar.file_uploader("Upload Study CSV", type=["csv"]) uploaded_calendar = st.sidebar.file_uploader("Upload Calendar CSV", type=["csv"]) # Handle uploads if uploaded_plan: st.session_state.study_data = pd.read_csv(uploaded_plan) if uploaded_calendar: st.session_state.calendar_data = pd.read_csv(uploaded_calendar) if st.sidebar.button("🔁 Reset All"): st.session_state.study_data = pd.DataFrame(columns=["Subject", "Topic", "Goal", "Progress (%)"]) st.session_state.calendar_data = pd.DataFrame({"Day": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], "Planned Topic": ["" for _ in range(7)]}) st.sidebar.success("Planner has been reset.") with st.sidebar: st.header("➕ Add Study Task") subject = st.text_input("Subject") topic = st.text_input("Topic") goal = st.text_area("Goal Description") progress = st.slider("Progress (%)", 0, 100, 0) if st.button("Add Task"): if subject and topic: new_row = {"Subject": subject, "Topic": topic, "Goal": goal, "Progress (%)": progress} st.session_state.study_data = pd.concat([ st.session_state.study_data, pd.DataFrame([new_row]) ], ignore_index=True) st.success("Task added!") else: st.error("Subject and Topic are required.") df = st.session_state.study_data calendar_df = st.session_state.calendar_data st.subheader("🎯 Study Summary by Subject") if not df.empty: subjects = df["Subject"].unique() cols = st.columns(len(subjects)) colors = ["#fca311", "#a1c181", "#f28482", "#8ecae6", "#ffb703"] for i, subject in enumerate(subjects): sub_df = df[df["Subject"] == subject] avg_progress = int(sub_df["Progress (%)"].mean()) with cols[i % len(cols)]: st.markdown(f"""
Topics: {len(sub_df)}
Avg. Progress: {avg_progress}%