Spaces:
Sleeping
Sleeping
import streamlit as st | |
import os | |
import json | |
import random | |
import requests | |
from datetime import datetime | |
from dotenv import load_dotenv | |
st.set_page_config(page_title="Kalam Comfort", page_icon="📚") | |
load_dotenv() | |
# ---------- File Setup ---------- | |
default_moods = { | |
"anxious": ["13:28", "2:286", "10:62", "20:46", "48:4"], | |
"sad": ["94:5", "93:6", "65:7", "9:51", "12:86"], | |
"hopeless": ["39:53", "12:87", "3:139", "65:2", "57:22"], | |
"grateful": ["14:7", "31:12", "2:152", "16:114", "76:3"], | |
"lonely": ["2:186", "9:40", "6:103", "50:16", "17:79"], | |
"angry": ["3:134", "41:34", "7:199", "42:37", "16:126"], | |
"lost": ["93:7", "6:122", "2:2", "24:35", "42:52"], | |
"tired": ["94:6", "3:200", "29:69", "52:48", "6:162"], | |
"afraid": ["8:46", "33:3", "2:286", "3:173", "11:56"] | |
} | |
default_duas = { | |
"anxious": [ | |
("اللهم اجعل قلبي مطمئنًا بذكرك", | |
"O Allah, make my heart tranquil with Your remembrance.", | |
"یا اللہ! میرے دل کو اپنے ذکر سے اطمینان دے۔"), | |
("اللهم لا سهل إلا ما جعلته سهلا", | |
"O Allah, nothing is easy except what You make easy.", | |
"یا اللہ! کچھ بھی آسان نہیں سوائے اس کے جسے تُو آسان کرے۔") | |
], | |
"sad": [ | |
("اللهم اجبر قلبي جبرا يتعجب له أهل السماوات والأرض", | |
"O Allah, mend my heart in a way that amazes the heavens and the earth.", | |
"یا اللہ! میرے دل کو ایسا سہارا دے جو زمین و آسمان کو حیران کر دے۔") | |
], | |
"hopeless": [ | |
("رب لا تذرني فردا وأنت خير الوارثين", | |
"My Lord, do not leave me alone — You are the Best Inheritor.", | |
"یا رب! مجھے تنہا نہ چھوڑ، تو بہترین وارث ہے۔") | |
], | |
"grateful": [ | |
("اللهم اجعلني لك شَكُورًا", | |
"O Allah, make me deeply grateful to You.", | |
"یا اللہ! مجھے شکر گزار بنا دے۔") | |
], | |
"lonely": [ | |
("اللهم كن معي حين لا يكون أحد بجانبي", | |
"O Allah, be with me when no one else is.", | |
"یا اللہ! جب کوئی ساتھ نہ ہو، تو میرے ساتھ ہو۔") | |
], | |
"angry": [ | |
("اللهم ارزقني الحلم عند الغضب", | |
"O Allah, grant me forbearance when I’m angry.", | |
"یا اللہ! غصے میں مجھے برداشت عطا فرما۔") | |
], | |
"lost": [ | |
("اللهم دلّني على صراطك المستقيم", | |
"O Allah, guide me to Your straight path.", | |
"یا اللہ! مجھے اپنے سیدھے راستے پر چلا۔") | |
], | |
"tired": [ | |
("اللهم جدد طاقتي، وارزقني راحة البال", | |
"O Allah, renew my energy and grant me peace of mind.", | |
"یا اللہ! میری طاقت کو تازہ کر اور مجھے ذہنی سکون عطا فرما۔") | |
], | |
"afraid": [ | |
("ربِّ أعني ولا تعن عليّ", | |
"My Lord, support me and not against me.", | |
"میرے رب! میری مدد فرما، میرے خلاف نہ ہو۔") | |
] | |
} | |
default_hadiths = { | |
"anxious": [ | |
("أَلَا بِذِكْرِ اللَّهِ تَطْمَئِنُّ الْقُلُوبُ", | |
"Verily, in the remembrance of Allah do hearts find rest.", | |
"خبردار! اللہ کے ذکر سے دلوں کو سکون ملتا ہے۔") | |
], | |
"sad": [ | |
("إِنَّ مَعَ الْعُسْرِ يُسْرًا", | |
"Indeed, with hardship comes ease.", | |
"بیشک ہر تنگی کے ساتھ آسانی ہے۔") | |
], | |
"hopeless": [ | |
("مَن تَوَكَّلَ عَلَى اللَّهِ فَهُوَ حَسْبُهُ", | |
"Whoever relies upon Allah — He is sufficient for him.", | |
"جو اللہ پر بھروسہ کرے، وہ اس کے لیے کافی ہے۔") | |
], | |
"grateful": [ | |
("مَن لَا يَشْكُرُ النَّاسَ لَا يَشْكُرُ اللَّهَ", | |
"He who does not thank people does not thank Allah.", | |
"جو لوگوں کا شکر ادا نہیں کرتا، وہ اللہ کا بھی شکر نہیں کرتا۔") | |
], | |
"lonely": [ | |
("أَنَا أَوْلَى بِالْمُؤْمِنِينَ مِنْ أَنْفُسِهِمْ", | |
"I am closer to the believers than their own selves.", | |
"میں مومنوں سے ان کی اپنی جانوں سے بھی زیادہ قریب ہوں۔") | |
], | |
"angry": [ | |
("لَيْسَ الشَّدِيدُ بِالصُّرَعَةِ...", | |
"The strong man is not the one who wrestles, but controls himself in anger.", | |
"طاقتور وہ نہیں جو پچھاڑ دے، بلکہ وہ ہے جو غصے میں خود پر قابو رکھے۔") | |
], | |
"lost": [ | |
("مَنْ سَلَكَ طَرِيقًا يَلْتَمِسُ فِيهِ عِلْمًا...", | |
"Whoever seeks a path in search of knowledge, Allah will ease his path to Paradise.", | |
"جو علم کے راستے پر چلے، اللہ اس کے لیے جنت کا راستہ آسان کر دیتا ہے۔") | |
], | |
"tired": [ | |
("مَا يُصِيبُ الْمُسْلِمَ مِنْ نَصَبٍ...", | |
"No fatigue or disease affects a Muslim except that Allah removes sins.", | |
"مسلمان کو جو بھی تھکن یا مرض لاحق ہو، اللہ اس سے اس کے گناہ مٹا دیتا ہے۔") | |
], | |
"afraid": [ | |
("احْفَظِ اللَّهَ يَحْفَظْكَ", | |
"Be mindful of Allah, He will protect you.", | |
"اللہ کا دھیان رکھو، وہ تمہاری حفاظت کرے گا۔") | |
] | |
} | |
# File creation if missing | |
if not os.path.exists("moods.json"): | |
with open("moods.json", "w") as f: | |
json.dump(default_moods, f, indent=4) | |
if not os.path.exists("reflections.json"): | |
with open("reflections.json", "w") as f: | |
json.dump({}, f) | |
# Load data | |
with open("moods.json", "r") as f: | |
moods = json.load(f) | |
with open("reflections.json", "r") as f: | |
reflections = json.load(f) | |
# ---------- UI ---------- | |
st.title("📚 Kalam Comfort") | |
st.subheader("Find Quranic comfort by emotion 💖") | |
selected_mood = st.selectbox("How are you feeling today?", list(moods.keys()), index=0) | |
if st.button("🔁 Show another verse"): | |
st.rerun() | |
if selected_mood: | |
# ----------- Quranic Verse ----------- | |
verse_list = moods[selected_mood] | |
verse_ref = random.choice(verse_list) | |
surah_num, ayah_num = verse_ref.split(":") | |
quran_api = f"https://api.alquran.cloud/v1/ayah/{surah_num}:{ayah_num}/editions/quran-simple,en.asad,ur.jalandhry" | |
response = requests.get(quran_api) | |
if response.status_code == 200: | |
data = response.json()['data'] | |
arabic = data[0]['text'] | |
english = data[1]['text'] | |
urdu = data[2]['text'] | |
surah_info = f"{data[0]['surah']['englishName']} ({data[0]['surah']['name']})" | |
st.markdown("### 🌙 Quranic Verse") | |
st.markdown(f"**Surah:** {surah_info} — Ayah {ayah_num}") | |
st.markdown(f"<div style='font-size:24px; direction: rtl'>{arabic}</div>", unsafe_allow_html=True) | |
st.markdown(f"**📖 English:** *{english}*") | |
st.markdown(f"**📖 Urdu:** {urdu}") | |
else: | |
st.error("❌ Failed to fetch Quranic verse.") | |
st.stop() | |
# ---------- Dua ---------- | |
st.markdown("### 🤲 Dua") | |
if selected_mood in default_duas: | |
dua_ar, dua_en, dua_ur = random.choice(default_duas[selected_mood]) | |
st.markdown(f"<div style='font-size:22px; direction: rtl'>{dua_ar}</div>", unsafe_allow_html=True) | |
st.markdown(f"**English:** {dua_en}") | |
st.markdown(f"**Urdu:** {dua_ur}") | |
# ---------- Hadith ---------- | |
st.markdown("### 🌟 Hadith") | |
if selected_mood in default_hadiths: | |
had_ar, had_en, had_ur = random.choice(default_hadiths[selected_mood]) | |
st.markdown(f"<div style='font-size:20px; direction: rtl'>{had_ar}</div>", unsafe_allow_html=True) | |
st.markdown(f"**English:** {had_en}") | |
st.markdown(f"**Urdu:** {had_ur}") | |
# ---------- Reflection ---------- | |
st.markdown("### 📝 Your Reflection") | |
reflection_input = st.text_area("Write your thoughts:", placeholder="How does this verse speak to you today?") | |
if st.button("💾 Save Reflection"): | |
reflections[selected_mood] = { | |
"text": reflection_input, | |
"timestamp": datetime.now().strftime("%Y-%m-%d %H:%M") | |
} | |
with open("reflections.json", "w") as f: | |
json.dump(reflections, f, indent=4) | |
st.success("Reflection saved.") | |
if selected_mood in reflections: | |
last = reflections[selected_mood] | |
st.markdown("#### 📜 Last Saved Reflection:") | |
st.markdown(f"**{last['timestamp']}** — {last['text']}") | |