| import streamlit as st |
| import pandas as pd |
| from datetime import date |
|
|
| |
| st.set_page_config(page_title="Sajha Pro 2026", page_icon="🇳🇵", layout="wide") |
|
|
| |
| npr_rate = 9.414 |
| kurangi_deadline = date(2026, 4, 2) |
| site_deadline = date(2026, 6, 1) |
|
|
| |
| rentals = [ |
| {"Title": "2BR Apartment (No Lift)", "Price": 16000, "Loc": "Machchangolhi", "ID": "6472479"}, |
| {"Title": "1BR Apartment (AC)", "Price": 10500, "Loc": "Hulhumale P2", "ID": "6488093"}, |
| {"Title": "Shared Room (Male)", "Price": 3500, "Loc": "Male City", "ID": "iBay-Shared"} |
| ] |
|
|
| |
| with st.sidebar: |
| st.title("🇳🇵 Sajha Pro") |
| menu = st.radio("Updates", ["🏠 Dashboard", "🏢 Housing (iBay)", "🚌 Ramadan Transit", "⚖️ Legal & 100 Scenarios", "🏥 Health & Insurance", "🧾 Bill Splitter"]) |
| st.markdown("---") |
| st.caption("Consular Support: +94 11-268-9656") |
|
|
| |
| if menu == "🏠 Dashboard": |
| st.title("Sajha Connect Dashboard 🇲🇻") |
| st.write(f"Today: {date.today().strftime('%B %d, 2026')}") |
| |
| c1, c2, c3 = st.columns(3) |
| c1.metric("MVR to NPR", f"{npr_rate}", "Live") |
| c2.metric("Kurangi Deadline", "Apr 2", f"{(kurangi_deadline - date.today()).days} Days") |
| c3.metric("Worksite Update", "June 1", "Employer Deadline") |
|
|
| st.error("🚨 **OPERATION KURANGI:** If you are undocumented, register before **April 2, 2026**. Biometrics are mandatory at the Ministry of Homeland Security.") |
| st.info("📢 **Consular News:** The Feb 9, 2026 camp at Kamana Maalam provided medical and passport aid to hundreds. Stay tuned for the next camp.") |
|
|
| |
| elif menu == "🏢 Housing (iBay)": |
| st.header("🏠 Rental Finder (Feb 2026 Trends)") |
| cols = st.columns(2) |
| for i, r in enumerate(rentals): |
| with cols[i % 2]: |
| st.markdown(f""" |
| <div style="border:2px solid #e0e0e0; padding:20px; border-radius:15px; background:white; margin-bottom:15px;"> |
| <h3 style="margin:0; color:#d32f2f;">{r['Title']}</h3> |
| <p><b>📍 {r['Loc']}</b> | <b>MVR {r['Price']:,}</b></p> |
| <small>Ref ID: {r['ID']} | Source: iBay.mv</small> |
| </div> |
| """, unsafe_allow_html=True) |
|
|
| |
| elif menu == "🚌 Ramadan Transit": |
| st.header("🚌 RTL Bus & Ferry Ramadan Schedule") |
| st.warning("⚠️ Peak Pause: Services halt during Iftar hours.") |
| |
| transit = { |
| "Route": ["Male-Hulhumale Bus", "Male Internal Bus", "Hulhumale Internal", "Male-Airport Bus", "Hulhumale-Male Ferry"], |
| "Pause Window": ["5:00 PM - 7:00 PM", "6:00 PM - 9:00 PM", "5:15 PM - 7:15 PM", "5:00 PM - 6:40 PM", "STOPS after 3:00 PM"] |
| } |
| st.table(pd.DataFrame(transit)) |
|
|
| |
| elif menu == "⚖️ Legal & 100 Scenarios": |
| st.header("⚖️ 100 Community Scenarios") |
| with st.expander("Is there a ban on Nepali cashiers?"): |
| st.write("Yes. Starting **Feb 5, 2027**, only Maldivians can work as cashiers. We recommend technical skill training now.") |
| with st.expander("What happens if my employer doesn't update my Worksite by June 1?"): |
| st.write("The employer's quota will be suspended, which may affect your work permit renewal.") |
|
|
| |
| elif menu == "🏥 Health & Insurance": |
| st.header("🏥 Expat Health Benefits 2026") |
| st.markdown(""" |
| | Benefit Type | Coverage Limit | |
| | :--- | :--- | |
| | **Inpatient (Hospital stay)** | MVR 100,000 | |
| | **Outpatient (Consultation/Meds)** | MVR 2,000 | |
| | **Repatriation (Death)** | MVR 100,000 | |
| """) |
| st.info("🏥 Top Hospitals: IGMH (Public), ADK (Private), Hulhumale Hospital.") |
|
|
| |
| elif menu == "🧾 Bill Splitter": |
| st.header("🧾 Shared Expense Splitter") |
| colA, colB = st.columns(2) |
| with colA: |
| rent = st.number_input("Rent (MVR)", value=12000) |
| elec = st.number_input("STELCO (Electricity)", value=1200) |
| with colB: |
| water = st.number_input("MWSC (Water)", value=400) |
| heads = st.number_input("Number of People", min_value=1, value=4) |
| |
| st.success(f"### Total per person: MVR {(rent + elec + water) / heads:,.2f}") |
|
|
| if __name__ == "__main__": |
| pass |