import streamlit as st import pickle import numpy as np import sqlite3 import hashlib # ====================== # Dark FinTech Theme # ====================== st.set_page_config(page_title="SecurePay AI", page_icon="🔐", layout="wide") st.markdown(""" """, unsafe_allow_html=True) # ====================== # Database Setup # ====================== def init_db(): conn = sqlite3.connect("database.db") c = conn.cursor() c.execute("CREATE TABLE IF NOT EXISTS users (username TEXT, password TEXT)") c.execute("""CREATE TABLE IF NOT EXISTS transactions (amount REAL, hour INT, risk REAL)""") conn.commit() conn.close() init_db() def hash_password(password): return hashlib.sha256(password.encode()).hexdigest() def register_user(username, password): conn = sqlite3.connect("database.db") c = conn.cursor() c.execute("INSERT INTO users VALUES (?,?)", (username, hash_password(password))) conn.commit() conn.close() def login_user(username, password): conn = sqlite3.connect("database.db") c = conn.cursor() c.execute("SELECT * FROM users WHERE username=? AND password=?", (username, hash_password(password))) result = c.fetchone() conn.close() return result def save_transaction(amount, hour, risk): conn = sqlite3.connect("database.db") c = conn.cursor() c.execute("INSERT INTO transactions VALUES (?,?,?)", (amount, hour, risk)) conn.commit() conn.close() # ====================== # Load Model # ====================== model = pickle.load(open("fraud_model.pkl", "rb")) # ====================== # Session State # ====================== if "logged_in" not in st.session_state: st.session_state.logged_in = False # ====================== # Login / Register # ====================== if not st.session_state.logged_in: st.title("🔐 SecurePay AI Login") menu = st.radio("Select Option", ["Login", "Register"]) username = st.text_input("Username") password = st.text_input("Password", type="password") if menu == "Register": if st.button("Create Account"): register_user(username, password) st.success("Account Created Successfully!") if menu == "Login": if st.button("Login"): if login_user(username, password): st.session_state.logged_in = True st.success("Login Successful") else: st.error("Invalid Credentials") # ====================== # Main Dashboard # ====================== else: st.title("💳 SecurePay AI Dashboard") st.subheader("Fraud Detection for Small Businesses") col1, col2 = st.columns(2) with col1: amount = st.number_input("Transaction Amount ($)", min_value=0.0) hour = st.slider("Transaction Hour", 0, 23, 12) with col2: new_customer = st.selectbox("New Customer?", ["No", "Yes"]) refund_request = st.selectbox("Refund Requested?", ["No", "Yes"]) location_mismatch = st.selectbox("Location Mismatch?", ["No", "Yes"]) new_customer = 1 if new_customer == "Yes" else 0 refund_request = 1 if refund_request == "Yes" else 0 location_mismatch = 1 if location_mismatch == "Yes" else 0 if st.button("Analyze Transaction"): features = np.array([[amount, hour, new_customer, refund_request, location_mismatch]]) prediction = model.predict(features)[0] probability = model.predict_proba(features)[0][1] save_transaction(amount, hour, probability) if prediction == 1: st.error("⚠️ High Fraud Risk Detected") else: st.success("✅ Transaction Appears Safe") st.progress(int(probability * 100)) st.write(f"Risk Score: {round(probability * 100, 2)}%") st.markdown("---") st.subheader("📊 Live Analytics") conn = sqlite3.connect("database.db") data = conn.execute("SELECT risk FROM transactions").fetchall() conn.close() risk_values = [r[0] for r in data] if risk_values: st.line_chart(risk_values)