Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# app.py

import streamlit as st
from utils.translator import get_translator
import os

# -----------------------------
# Configure app layout
# -----------------------------
st.set_page_config(
page_title="Childhood Obesity Risk Dashboard",
layout="wide",
initial_sidebar_state="expanded"
)

# -----------------------------
# Translator setup (default English)
# -----------------------------
if 'translator' not in st.session_state:
st.session_state['translator'] = get_translator('en') # default language

# Language selector
lang = st.selectbox(
"🌐 Select Language",
['English', 'Italiano', 'Ελληνικά', '中文'],
key="language_select"
)

if lang == 'English':
st.session_state['translator'] = get_translator('en')
elif lang == 'Italiano':
st.session_state['translator'] = get_translator('it')
elif lang == 'Ελληνικά':
st.session_state['translator'] = get_translator('el')
elif lang == '中文':
st.session_state['translator'] = get_translator('zh-cn')

_ = st.session_state['translator'].translate

# -----------------------------
# Homepage content
# -----------------------------
st.title(_("🏠 Welcome to the Childhood Obesity Risk Dashboard"))

st.markdown(_("""
This dashboard uses publicly available Australian health data to predict childhood obesity risk
based on lifestyle and demographic factors.

Navigate using the sidebar to explore key features:
- 📊 Data Explorer
- ⚖️ Fairness & Ethics
- 🔍 Insights
- 🎯 Predictor
- 🧑‍🤝‍🧑 Caregiver Engine
- 🔒 Privacy
- 🎮 Healthy Habits Streaks (NEW!)
- 📍 Resource Hub

**Note:** This is an educational prototype — no personal data is collected or stored.
"""))

st.info(_("Tip: Start with the Predictor or Healthy Habits Streaks to try out the core features."))

# -----------------------------
# Sidebar navigation
# -----------------------------
with st.sidebar:
st.header("Go to pages")
st.page_link("pages/5_Predictor.py", label="🎯 Predictor")
st.page_link("pages/7_Resource_Hub.py", label="📍 Resource Hub")
if os.path.exists("pages/08_Healthy_Habits_Streaks.py"):
st.page_link("pages/08_Healthy_Habits_Streaks.py", label="🎮 Healthy Habits Streaks")
else:
st.caption("⚠️ Streaks page not found. Expected: pages/08_Healthy_Habits_Streaks.py")
82 changes: 82 additions & 0 deletions pages/00_Subscription.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import streamlit as st
import json, os

st.set_page_config(page_title="Subscription Plans", page_icon="💳")

st.title("💳 Subscription Plans")
st.caption("Choose a plan that works best for you or your family.")

# -----------------------------
# 1. Subscription Plans
# -----------------------------
plans = {
"free": {
"name": "Free Plan",
"price": "$0 / week",
"features": [
"✅ Track personal streaks (Activity, Sleep, Memory Aids)",
"✅ Daily habit reminders",
"❌ No social or family sharing"
]
},
"standard": {
"name": "Standard Plan",
"price": "$20.99 / week",
"features": [
"✅ Track streaks (Activity, Sleep, Memory Aids)",
"✅ Social Sharing with community",
"✅ Connect with other dashboard users",
"❌ No family sharing features"
]
},
"premium": {
"name": "Premium Plan",
"price": "$79.99 / week",
"features": [
"✅ Everything in Free + Standard",
"✅ Family Sharing Portal",
"✅ Family Support & Messaging",
"✅ Social Connections",
"✅ Weekly Reports & Alerts",
"✅ Caregiver monitoring"
]
}
}

# -----------------------------
# 2. Display Plan Options
# -----------------------------
cols = st.columns(3)

for i, key in enumerate(plans.keys()):
plan = plans[key]
with cols[i]:
st.subheader(plan["name"])
st.metric("Price", plan["price"])
for f in plan["features"]:
st.write(f)
if st.button(f"Subscribe to {plan['name']}", key=key):
st.session_state["active_plan"] = key
st.success(f"✅ You have subscribed to {plan['name']}")

# -----------------------------
# 3. Persist Subscription Choice
# -----------------------------
FILE = "subscription.json"

if "active_plan" not in st.session_state:
# Load from file if exists
if os.path.exists(FILE):
with open(FILE, "r") as f:
data = json.load(f)
st.session_state["active_plan"] = data.get("plan", "free")
else:
st.session_state["active_plan"] = "free"

# Save selection when changed
if "active_plan" in st.session_state:
with open(FILE, "w") as f:
json.dump({"plan": st.session_state["active_plan"]}, f)

st.info(f"Your current plan: **{plans[st.session_state['active_plan']]['name']}**")

120 changes: 120 additions & 0 deletions pages/08_Healthy_Habits_Streaks.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
import streamlit as st
import datetime as dt
import json, os

st.title("🎮 Healthy Habits Streaks")

# --------------------------
# Step 1: Setup JSON persistence
# --------------------------
FILE = "streaks.json"

# Load streaks from file if exists
if os.path.exists(FILE):
with open(FILE, "r") as f:
streaks = json.load(f)
else:
streaks = {
"screen_time_ok": 0,
"activity_done": 0,
"sleep_ok": 0,
"memory_ok": 0,
"last_date": None,
"logged_today": [],
}

# Put into session_state
if "streaks" not in st.session_state:
st.session_state.streaks = streaks

today = dt.date.today()
last_date = (
dt.date.fromisoformat(st.session_state.streaks["last_date"])
if st.session_state.streaks["last_date"]
else None
)

# --------------------------
# Step 2: Reset if day skipped
# --------------------------
if last_date and (today - last_date).days > 1:
for k in ("screen_time_ok", "activity_done", "sleep_ok", "memory_ok"):
st.session_state.streaks[k] = 0
st.session_state.streaks["logged_today"] = []

# --------------------------
# Step 3: Habit logging
# --------------------------
col1, col2, col3 = st.columns(3)

# Screen time
with col1:
st.subheader("📱 Screen time")
ok = st.toggle("≤ 2 hrs today?", key="screen_time")
if ok and "screen_time_ok" not in st.session_state.streaks["logged_today"]:
st.session_state.streaks["screen_time_ok"] += 1
st.session_state.streaks["logged_today"].append("screen_time_ok")
st.session_state.streaks["last_date"] = str(today)
with open(FILE, "w") as f:
json.dump(st.session_state.streaks, f)

# Activity
with col2:
st.subheader("🏃 Activity")
done = st.toggle("≥ 60 mins activity?", key="activity")
if done and "activity_done" not in st.session_state.streaks["logged_today"]:
st.session_state.streaks["activity_done"] += 1
st.session_state.streaks["logged_today"].append("activity_done")
st.session_state.streaks["last_date"] = str(today)
with open(FILE, "w") as f:
json.dump(st.session_state.streaks, f)

# Sleep
with col3:
st.subheader("🛌 Sleep")
good = st.toggle("7–9 hrs sleep?", key="sleep")
if good and "sleep_ok" not in st.session_state.streaks["logged_today"]:
st.session_state.streaks["sleep_ok"] += 1
st.session_state.streaks["logged_today"].append("sleep_ok")
st.session_state.streaks["last_date"] = str(today)
with open(FILE, "w") as f:
json.dump(st.session_state.streaks, f)

st.divider()

# --------------------------
# Step 4: Metrics
# --------------------------
c1, c2, c3, c4 = st.columns(4)
with c1:
st.metric("Screen-time streak", st.session_state.streaks["screen_time_ok"])
with c2:
st.metric("Activity streak", st.session_state.streaks["activity_done"])
with c3:
st.metric("Sleep streak", st.session_state.streaks["sleep_ok"])
with c4:
st.metric("Memory streak", st.session_state.streaks["memory_ok"])

st.info("Tip: streaks reset if you miss a day. Each habit only counts once per day.")

# --------------------------
# Step 5: Memory Aids
# --------------------------
st.header("📝 Memory Aids")

reminders = [
"Don’t forget your morning walk 🏃",
"Drink a glass of water 💧 now",
"Stretch for 5 minutes 🙆",
]

today_idx = today.day % len(reminders)
st.info(reminders[today_idx])

if st.button("✅ I did it! (Memory Aid)") and "memory_ok" not in st.session_state.streaks["logged_today"]:
st.session_state.streaks["memory_ok"] += 1
st.session_state.streaks["logged_today"].append("memory_ok")
st.session_state.streaks["last_date"] = str(today)
with open(FILE, "w") as f:
json.dump(st.session_state.streaks, f)
st.success(f"Great job! Your memory streak is now {st.session_state.streaks['memory_ok']} 🔥")
100 changes: 100 additions & 0 deletions pages/09_Cognitive_Lifestyle_Support.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
import streamlit as st
import datetime
import time

st.set_page_config(page_title="Cognitive & Lifestyle Support", page_icon="🧠")

st.title("🧠 Cognitive & Lifestyle Support")
st.markdown("Tools to support memory, lifestyle habits, and relaxation — designed for both children & elders.")

# Initialize streaks in session_state
if "memory_streak" not in st.session_state:
st.session_state.memory_streak = 0
if "sleep_streak" not in st.session_state:
st.session_state.sleep_streak = 0

today = datetime.date.today()

# -------------------------
# Section 1: Memory Aids
# -------------------------
st.header("📝 Memory Aids")

reminders = [
"Don’t forget your morning walk 🏃",
"Drink a glass of water 💧 now",
"Stretch for 5 minutes 🙆",
"Call a friend or family member ☎️",
"Do a quick brain puzzle 🧩"
]

today_idx = today.day % len(reminders)
st.info(reminders[today_idx])

if st.button("✅ I did it! (Memory Aid)"):
st.session_state.memory_streak += 1
st.success(f"Great job! Your memory streak is now {st.session_state.memory_streak} 🔥")

st.metric("Memory Streak", st.session_state.memory_streak)

st.divider()

# -------------------------
# Section 2: Educational Tips
# -------------------------
st.header("📘 Daily Health Tip")

tips = [
"Stretch while watching TV 📺",
"Choose fruit instead of sugary snacks 🍎",
"Go for a 10-min walk after meals 🚶",
"Keep a water bottle nearby 💧",
"Practice gratitude before bed 🙏",
"Limit caffeine in the evening ☕"
]

today_tip = tips[today.day % len(tips)]
st.success(today_tip)

st.divider()

# -------------------------
# Section 3: Relaxation Guide
# -------------------------
st.header("🌙 Relaxation & Sleep Tracking")

st.markdown("Follow a simple breathing exercise to relax:")

if st.button("Start Breathing Exercise"):
for i in range(3):
st.write("🌬️ Breathe in...")
time.sleep(3)
st.write("😌 Hold...")
time.sleep(2)
st.write("🎈 Breathe out...")
time.sleep(4)
st.success("Well done! Feeling calmer already 😌")

# Sleep logging
sleep_hours = st.slider("How many hours did you sleep last night?", 0, 12, 7)
st.write(f"You logged **{sleep_hours} hours** of sleep 😴")

if sleep_hours >= 7:
if st.button("✅ Mark Sleep as Healthy"):
st.session_state.sleep_streak += 1
st.success(f"Awesome! Your sleep streak is {st.session_state.sleep_streak} 🌟")
else:
st.warning("Try to get at least 7–8 hours for better health 💡")

st.metric("Sleep Streak", st.session_state.sleep_streak)

st.divider()

# -------------------------
# Section 4: Quick Tips Panel
# -------------------------
st.header("💡 Quick Lifestyle Reminders")
st.write("- Stay hydrated 💧")
st.write("- Move every hour 🕒")
st.write("- Keep a consistent bedtime 🛌")
st.write("- Connect socially with friends/family 🤝")
9 changes: 9 additions & 0 deletions pages/10_Streak_Summary.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import streamlit as st

st.title("🔥 Overall Streak Summary")

st.write("Here’s how you’re doing across all lifestyle habits:")

st.metric("Memory Aids Streak", st.session_state.get("memory_streak", 0))
st.metric("Sleep Streak", st.session_state.get("sleep_streak", 0))
st.metric("Healthy Habits Streak (from page 08)", st.session_state.get("healthy_streak", 0))
Loading
Loading