import streamlit as st
import pandas as pd
import datetime
from PIL import Image
# Title and Description
st.markdown("""
Smart Project Tracker
Keep your construction projects on track with real-time updates and insights.
""", unsafe_allow_html=True)
# Sidebar for Navigation
st.sidebar.markdown("""
Navigation
""", unsafe_allow_html=True)
page = st.sidebar.radio("Go to", ["Track Progress", "Monitor Milestones", "Generate Reports"])
# Data Containers
if "progress_data" not in st.session_state:
st.session_state.progress_data = []
if "milestones_data" not in st.session_state:
st.session_state.milestones_data = []
if "budget_data" not in st.session_state:
st.session_state.budget_data = []
# Track Progress
if page == "Track Progress":
st.markdown("""
Track Construction Progress
""", unsafe_allow_html=True)
# Upload Section
uploaded_file = st.file_uploader("Upload a photo or video of the site", type=["jpg", "jpeg", "png", "mp4", "mov"])
if uploaded_file:
file_type = "Video" if uploaded_file.type.startswith("video") else "Image"
date = datetime.date.today()
st.session_state.progress_data.append({"Date": date, "Type": file_type, "File": uploaded_file})
st.success("File uploaded successfully!")
# Display Progress Updates
st.markdown("""
Progress Updates
""", unsafe_allow_html=True)
for entry in st.session_state.progress_data:
st.write(f"**Date:** {entry['Date']} | **Type:** {entry['Type']}")
if entry['Type'] == "Image":
image = Image.open(entry['File'])
st.image(image, caption="Site Progress")
else:
st.video(entry['File'])
# Monitor Milestones
elif page == "Monitor Milestones":
st.markdown("""
Monitor Milestones, Budgets, and Deadlines
""", unsafe_allow_html=True)
# Add Milestones
st.markdown("""
Add a Milestone
""", unsafe_allow_html=True)
milestone_name = st.text_input("Milestone Name")
milestone_date = st.date_input("Deadline")
milestone_budget = st.number_input("Budget (in PKR)", min_value=0.0, step=100.0)
if st.button("Add Milestone"):
if milestone_name and milestone_date:
st.session_state.milestones_data.append({
"Name": milestone_name,
"Deadline": milestone_date,
"Budget": milestone_budget
})
st.success("Milestone added successfully!")
else:
st.error("Please provide all milestone details.")
# Display Milestones
st.markdown("""
Upcoming Milestones
""", unsafe_allow_html=True)
milestones_df = pd.DataFrame(st.session_state.milestones_data)
if not milestones_df.empty:
st.table(milestones_df)
else:
st.write("No milestones added yet.")
# Generate Reports
elif page == "Generate Reports":
st.markdown("""
Generate Automated Reports
""", unsafe_allow_html=True)
# Generate Summary Report
if st.button("Generate Report"):
st.markdown("""
Project Summary Report
""", unsafe_allow_html=True)
# Milestone Summary
st.markdown("### Milestones")
milestones_df = pd.DataFrame(st.session_state.milestones_data)
if not milestones_df.empty:
st.table(milestones_df)
else:
st.write("No milestones available.")
# Budget Summary
total_budget = milestones_df["Budget"].sum() if not milestones_df.empty else 0
st.markdown(f"### Total Budget: PKR {total_budget}")
# Progress Summary
st.markdown("### Progress Updates")
for entry in st.session_state.progress_data:
st.write(f"**Date:** {entry['Date']} | **Type:** {entry['Type']}")
if entry['Type'] == "Image":
image = Image.open(entry['File'])
st.image(image, caption="Site Progress")
else:
st.video(entry['File'])
st.sidebar.info("Developed for effective project management.")