SNA-AI commited on
Commit
220cb53
Β·
verified Β·
1 Parent(s): f028ba0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +79 -53
app.py CHANGED
@@ -5,30 +5,54 @@ import os
5
 
6
  DATA_FILE = "habits.csv"
7
 
8
- # Load data
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  def load_data():
10
  if os.path.exists(DATA_FILE):
11
  return pd.read_csv(DATA_FILE)
12
- else:
13
- return pd.DataFrame(columns=["Habit", "Streak", "Last Completed"])
14
 
15
- # Save data
16
  def save_data(df):
17
  df.to_csv(DATA_FILE, index=False)
18
 
19
- # Initialize
20
  if "habits" not in st.session_state:
21
  st.session_state.habits = load_data()
22
 
23
- st.title("πŸ“Œ Atomic Habit Tracker")
24
 
25
- # --- Add Habit ---
26
- st.subheader("Add New Habit")
27
- new_habit = st.text_input("Enter habit name")
28
 
29
  if st.button("Add Habit"):
30
  if new_habit.strip() == "":
31
- st.warning("Enter a valid habit name")
32
  elif new_habit in st.session_state.habits["Habit"].values:
33
  st.warning("Habit already exists")
34
  else:
@@ -39,65 +63,67 @@ if st.button("Add Habit"):
39
  ignore_index=True
40
  )
41
  save_data(st.session_state.habits)
42
- st.success(f"Habit '{new_habit}' added!")
43
 
44
- # --- Mark Habit Done ---
45
- st.subheader("Mark Habit as Done")
46
- habit_list = st.session_state.habits["Habit"].tolist()
47
 
48
- if habit_list:
49
- selected_habit = st.selectbox("Select Habit", habit_list)
50
 
51
- if st.button("Mark Done"):
52
- today = datetime.now().date()
53
- df = st.session_state.habits
54
 
55
- idx = df[df["Habit"] == selected_habit].index[0]
56
- last_date = df.loc[idx, "Last Completed"]
57
 
58
- # Streak logic
59
- if last_date != "Never":
60
- last_date = pd.to_datetime(last_date).date()
61
- if (today - last_date).days == 1:
62
- df.loc[idx, "Streak"] += 1
63
- elif (today - last_date).days > 1:
64
- df.loc[idx, "Streak"] = 1
65
- else:
66
- df.loc[idx, "Streak"] = 1
67
 
68
- df.loc[idx, "Last Completed"] = str(today)
69
 
70
- st.session_state.habits = df
71
- save_data(df)
72
 
73
- st.success(f"Habit '{selected_habit}' marked as done!")
 
 
 
 
 
74
 
75
- else:
76
- st.info("No habits added yet.")
77
 
78
- # --- Display Data ---
79
- st.subheader("Your Habits")
80
- st.dataframe(st.session_state.habits)
81
 
82
- # --- Delete Habit ---
83
- st.subheader("Delete Habit")
84
 
85
- if habit_list:
86
- delete_habit = st.selectbox("Select Habit to Delete", habit_list, key="delete")
 
 
 
87
 
88
- if st.button("Delete Habit"):
89
- st.session_state.habits = st.session_state.habits[
90
- st.session_state.habits["Habit"] != delete_habit
91
- ]
92
- save_data(st.session_state.habits)
93
- st.success(f"Habit '{delete_habit}' deleted!")
94
 
95
- # --- Reset All ---
96
- st.subheader("Danger Zone ⚠️")
 
 
 
97
 
98
- if st.button("Reset All Habits"):
 
99
  st.session_state.habits = pd.DataFrame(
100
  columns=["Habit", "Streak", "Last Completed"]
101
  )
102
  save_data(st.session_state.habits)
103
- st.warning("All habits cleared!")
 
5
 
6
  DATA_FILE = "habits.csv"
7
 
8
+ # ---------- Custom CSS (Modern Neon Blue UI) ----------
9
+ st.markdown("""
10
+ <style>
11
+ body {
12
+ background-color: #0f172a;
13
+ color: #e2e8f0;
14
+ }
15
+ .stApp {
16
+ background: linear-gradient(135deg, #0f172a, #1e293b);
17
+ }
18
+ h1, h2, h3 {
19
+ color: #38bdf8;
20
+ }
21
+ div.stButton > button {
22
+ background-color: #0ea5e9;
23
+ color: white;
24
+ border-radius: 10px;
25
+ transition: 0.3s;
26
+ }
27
+ div.stButton > button:hover {
28
+ background-color: #0284c7;
29
+ box-shadow: 0px 0px 10px #38bdf8;
30
+ }
31
+ </style>
32
+ """, unsafe_allow_html=True)
33
+
34
+ # ---------- Load / Save ----------
35
  def load_data():
36
  if os.path.exists(DATA_FILE):
37
  return pd.read_csv(DATA_FILE)
38
+ return pd.DataFrame(columns=["Habit", "Streak", "Last Completed"])
 
39
 
 
40
  def save_data(df):
41
  df.to_csv(DATA_FILE, index=False)
42
 
43
+ # ---------- Init ----------
44
  if "habits" not in st.session_state:
45
  st.session_state.habits = load_data()
46
 
47
+ st.title("⚑ Atomic Habit Tracker")
48
 
49
+ # ---------- Add Habit ----------
50
+ st.subheader("βž• Add Habit")
51
+ new_habit = st.text_input("Habit name")
52
 
53
  if st.button("Add Habit"):
54
  if new_habit.strip() == "":
55
+ st.warning("Enter valid habit")
56
  elif new_habit in st.session_state.habits["Habit"].values:
57
  st.warning("Habit already exists")
58
  else:
 
63
  ignore_index=True
64
  )
65
  save_data(st.session_state.habits)
66
+ st.success("Habit added!")
67
 
68
+ # ---------- Mark Done (Checkbox UI) ----------
69
+ st.subheader("βœ… Daily Tracker")
 
70
 
71
+ today = datetime.now().date()
72
+ df = st.session_state.habits
73
 
74
+ for i, row in df.iterrows():
75
+ col1, col2 = st.columns([3, 1])
 
76
 
77
+ with col1:
78
+ st.write(f"**{row['Habit']}** πŸ”₯ Streak: {row['Streak']}")
79
 
80
+ with col2:
81
+ if st.checkbox("Done", key=f"done_{i}"):
 
 
 
 
 
 
 
82
 
83
+ last_date = row["Last Completed"]
84
 
85
+ if last_date != "Never":
86
+ last_date = pd.to_datetime(last_date).date()
87
 
88
+ if (today - last_date).days == 1:
89
+ df.loc[i, "Streak"] += 1
90
+ elif (today - last_date).days > 1:
91
+ df.loc[i, "Streak"] = 1
92
+ else:
93
+ df.loc[i, "Streak"] = 1
94
 
95
+ df.loc[i, "Last Completed"] = str(today)
96
+ st.success(f"{row['Habit']} completed!")
97
 
98
+ # Save after loop
99
+ st.session_state.habits = df
100
+ save_data(df)
101
 
102
+ # ---------- Graph ----------
103
+ st.subheader("πŸ“Š Streak Progress")
104
 
105
+ if not df.empty:
106
+ chart_data = df.set_index("Habit")["Streak"]
107
+ st.bar_chart(chart_data)
108
+ else:
109
+ st.info("No data yet")
110
 
111
+ # ---------- Delete ----------
112
+ st.subheader("πŸ—‘οΈ Manage")
113
+
114
+ if not df.empty:
115
+ habit_to_delete = st.selectbox("Delete habit", df["Habit"])
 
116
 
117
+ if st.button("Delete"):
118
+ df = df[df["Habit"] != habit_to_delete]
119
+ st.session_state.habits = df
120
+ save_data(df)
121
+ st.warning("Habit deleted!")
122
 
123
+ # ---------- Reset ----------
124
+ if st.button("Reset All"):
125
  st.session_state.habits = pd.DataFrame(
126
  columns=["Habit", "Streak", "Last Completed"]
127
  )
128
  save_data(st.session_state.habits)
129
+ st.error("All habits removed!")