{"id":195,"date":"2026-05-21T11:07:53","date_gmt":"2026-05-21T11:07:53","guid":{"rendered":"https:\/\/cashchat.se\/dir\/?page_id=195"},"modified":"2026-05-22T12:53:57","modified_gmt":"2026-05-22T12:53:57","slug":"africa","status":"publish","type":"page","link":"https:\/\/cashchat.se\/dir\/africa\/","title":{"rendered":"Africa"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=yes\">\n  <title>Adase Ads \u2013 Complete Dashboard (Offline \/ LocalStorage)<\/title>\n  <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/html2canvas\/1.4.1\/html2canvas.min.js\"><\/script>\n  <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/2.5.1\/jspdf.umd.min.js\"><\/script>\n  <style>\n    * { margin: 0; padding: 0; box-sizing: border-box; }\n    :root {\n      --primary: #0a1f44;\n      --gold: #c49a2b;\n      --bg: #f4f6f9;\n      --card-bg: #ffffff;\n      --text: #1e293b;\n      --shadow: 0 10px 25px -5px rgba(0,0,0,0.05), 0 8px 10px -6px rgba(0,0,0,0.02);\n      --radius: 16px;\n    }\n    body {\n      font-family: 'Inter', system-ui, -apple-system, sans-serif;\n      background: var(--bg);\n      color: var(--text);\n      display: flex;\n      min-height: 100vh;\n    }\n    .sidebar {\n      width: 260px;\n      background: var(--primary);\n      color: #fff;\n      padding: 24px 16px;\n      position: fixed;\n      top: 0; left: 0; bottom: 0;\n      z-index: 100;\n      transition: transform 0.3s ease;\n      display: flex;\n      flex-direction: column;\n    }\n    .sidebar .logo {\n      font-family: 'Playfair Display', serif;\n      font-size: 24px;\n      font-weight: 700;\n      text-align: center;\n      letter-spacing: 2px;\n      margin-bottom: 32px;\n    }\n    .sidebar .logo span { color: var(--gold); }\n    .sidebar nav a {\n      display: flex;\n      align-items: center;\n      gap: 10px;\n      color: rgba(255,255,255,0.8);\n      text-decoration: none;\n      padding: 12px 16px;\n      border-radius: 10px;\n      margin-bottom: 6px;\n      font-weight: 500;\n      transition: background 0.2s, color 0.2s;\n    }\n    .sidebar nav a:hover,\n    .sidebar nav a.active { background: rgba(255,255,255,0.08); color: var(--gold); }\n    .main {\n      margin-left: 260px;\n      flex: 1;\n      padding: 28px 32px;\n      transition: margin-left 0.3s;\n    }\n    .mobile-header {\n      display: none;\n      align-items: center;\n      gap: 16px;\n      background: var(--primary);\n      color: #fff;\n      padding: 14px 20px;\n      position: sticky;\n      top: 0; z-index: 99;\n    }\n    .mobile-header .menu-toggle {\n      background: none; border: none; color: #fff; font-size: 24px; cursor: pointer;\n    }\n    .section {\n      background: var(--card-bg);\n      border-radius: var(--radius);\n      padding: 24px;\n      margin-bottom: 24px;\n      box-shadow: var(--shadow);\n      display: none;\n    }\n    .section.active { display: block; }\n    h2 {\n      font-family: 'Playfair Display', serif;\n      color: var(--primary);\n      font-size: 22px;\n      margin-bottom: 20px;\n      border-bottom: 2px solid var(--gold);\n      padding-bottom: 10px;\n      display: inline-block;\n    }\n    h3 { color: var(--primary); margin: 16px 0 10px; }\n    .wallet-balance { font-size: 32px; font-weight: 700; color: var(--gold); }\n    .btn {\n      display: inline-flex;\n      align-items: center;\n      gap: 6px;\n      background: var(--primary);\n      color: #fff;\n      border: none;\n      padding: 10px 20px;\n      border-radius: 30px;\n      font-weight: 600;\n      cursor: pointer;\n      transition: all 0.2s;\n      font-size: 14px;\n    }\n    .btn-gold { background: var(--gold); color: var(--primary); }\n    .btn-outline {\n      background: transparent;\n      border: 1.5px solid var(--primary);\n      color: var(--primary);\n    }\n    .btn:hover { opacity: 0.9; transform: translateY(-1px); }\n    .btn-danger { background: #dc3545; }\n    .form-group { margin-bottom: 16px; }\n    .form-group label {\n      display: block;\n      font-weight: 600;\n      margin-bottom: 6px;\n      color: var(--primary);\n    }\n    .form-control {\n      width: 100%;\n      padding: 10px 14px;\n      border: 1.5px solid #e2e8f0;\n      border-radius: 10px;\n      font-size: 15px;\n      transition: border 0.2s;\n    }\n    .form-control:focus { border-color: var(--gold); outline: none; }\n    .row { display: flex; gap: 20px; flex-wrap: wrap; }\n    .col { flex: 1; min-width: 200px; }\n    table {\n      width: 100%;\n      border-collapse: collapse;\n      margin-top: 12px;\n      overflow-x: auto;\n      display: block;\n    }\n    th, td {\n      padding: 12px 14px;\n      border-bottom: 1px solid #e2e8f0;\n      text-align: left;\n      font-size: 14px;\n    }\n    th { background: #f8fafc; color: var(--primary); font-weight: 600; }\n    .badge {\n      display: inline-block;\n      padding: 2px 10px;\n      border-radius: 12px;\n      font-size: 12px;\n      font-weight: 600;\n    }\n    .badge-success { background: #d4edda; color: #155724; }\n    .badge-warning { background: #fff3cd; color: #856404; }\n    .badge-danger { background: #f8d7da; color: #721c24; }\n    .notification {\n      background: #fff3cd;\n      border-left: 4px solid #ffc107;\n      padding: 12px;\n      border-radius: 8px;\n      margin-bottom: 12px;\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      flex-wrap: wrap;\n    }\n    .auth-container {\n      max-width: 500px;\n      margin: 40px auto;\n      background: var(--card-bg);\n      border-radius: var(--radius);\n      padding: 32px;\n      box-shadow: var(--shadow);\n    }\n    .terms-box {\n      display: flex;\n      align-items: center;\n      gap: 8px;\n      margin: 16px 0;\n      font-size: 14px;\n      flex-wrap: wrap;\n    }\n    .terms-box input[type=\"checkbox\"] { width: 18px; height: 18px; cursor: pointer; }\n    \n    \/* Responsive *\/\n    @media (max-width: 768px) {\n      .sidebar { transform: translateX(-100%); }\n      .sidebar.open { transform: translateX(0); width: 260px; }\n      .main { margin-left: 0; padding: 20px 16px; }\n      .mobile-header { display: flex; }\n      .row { flex-direction: column; gap: 12px; }\n      .col { min-width: 100%; }\n      h2 { font-size: 20px; }\n      .btn { padding: 8px 16px; font-size: 13px; }\n      table, thead, tbody, th, td, tr { display: block; }\n      th { position: absolute; top: -9999px; left: -9999px; }\n      tr { border: 1px solid #ccc; margin-bottom: 12px; border-radius: 12px; }\n      td { position: relative; padding-left: 50%; border: none; border-bottom: 1px solid #e2e8f0; }\n      td:before { content: attr(data-label); position: absolute; left: 12px; width: 45%; font-weight: 600; color: var(--primary); }\n    }\n  <\/style>\n<\/head>\n<body>\n  <!-- Sidebar -->\n  <aside class=\"sidebar\" id=\"sidebar\">\n    <div class=\"logo\">ADASE <span>ADS<\/span><\/div>\n    <nav>\n      <a href=\"#dashboard\" class=\"active\" data-section=\"dashboard\">\ud83d\udcca Dashboard<\/a>\n      <a href=\"#wallet\" data-section=\"wallet\">\ud83d\udcb0 Wallet<\/a>\n      <a href=\"#invest\" data-section=\"invest\">\ud83d\udcdc Buy Notes<\/a>\n      <a href=\"#history-invest\" data-section=\"history-invest\">\ud83c\udfe6 Investments<\/a>\n      <a href=\"#history-tx\" data-section=\"history-tx\">\ud83e\uddfe Transactions<\/a>\n      <a href=\"#\" id=\"logoutSidebar\">\ud83d\udeaa Logout<\/a>\n      <a href=\"#\" id=\"adminSidebarLink\" style=\"margin-top:20px; border-top:1px solid rgba(255,255,255,0.2); padding-top:15px;\">\ud83d\udd10 Admin<\/a>\n    <\/nav>\n  <\/aside>\n\n  <!-- Mobile header -->\n  <div class=\"mobile-header\">\n    <button class=\"menu-toggle\" id=\"menuToggle\">\u2630<\/button>\n    <span style=\"font-weight:600;\">Adase Dashboard<\/span>\n  <\/div>\n\n  <!-- Main content -->\n  <main class=\"main\" id=\"mainContent\">\n    <!-- ========== USER AUTH ========== -->\n    <div id=\"authSection\">\n      <div class=\"auth-container\">\n        <h2 style=\"text-align:center;\">Welcome<\/h2>\n        <div style=\"display:flex; gap:8px; justify-content:center; margin-bottom:20px;\">\n          <button class=\"btn\" onclick=\"showAuthTab('login')\">Login<\/button>\n          <button class=\"btn btn-outline\" onclick=\"showAuthTab('register')\">Register<\/button>\n        <\/div>\n        <!-- LOGIN -->\n        <div id=\"loginForm\">\n          <div class=\"form-group\"><label>Email<\/label><input type=\"email\" class=\"form-control\" id=\"loginEmail\" placeholder=\"you@example.com\"><\/div>\n          <div class=\"form-group\"><label>Password<\/label><input type=\"password\" class=\"form-control\" id=\"loginPassword\" placeholder=\"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\"><\/div>\n          <button class=\"btn btn-gold\" onclick=\"login()\" style=\"width:100%;\">Login<\/button>\n        <\/div>\n        <!-- REGISTER -->\n        <div id=\"registerForm\" style=\"display:none;\">\n          <div class=\"row\">\n            <div class=\"col\"><div class=\"form-group\"><label>First Name *<\/label><input type=\"text\" class=\"form-control\" id=\"regFirstName\" required><\/div><\/div>\n            <div class=\"col\"><div class=\"form-group\"><label>Last Name *<\/label><input type=\"text\" class=\"form-control\" id=\"regLastName\" required><\/div><\/div>\n          <\/div>\n          <div class=\"form-group\"><label>Email *<\/label><input type=\"email\" class=\"form-control\" id=\"regEmail\" required><\/div>\n          <div class=\"row\">\n            <div class=\"col\"><div class=\"form-group\"><label>Country *<\/label><input type=\"text\" class=\"form-control\" id=\"regCountry\" required><\/div><\/div>\n            <div class=\"col\"><div class=\"form-group\"><label>Mobile Number *<\/label><input type=\"text\" class=\"form-control\" id=\"regMobile\" required><\/div><\/div>\n          <\/div>\n          <div class=\"form-group\"><label>NIN \/ Passport Number *<\/label><input type=\"text\" class=\"form-control\" id=\"regNIN\" required><\/div>\n          <div class=\"row\">\n            <div class=\"col\"><div class=\"form-group\"><label>Password *<\/label><input type=\"password\" class=\"form-control\" id=\"regPassword\" required><\/div><\/div>\n            <div class=\"col\"><div class=\"form-group\"><label>Confirm Password *<\/label><input type=\"password\" class=\"form-control\" id=\"regConfirmPassword\" required><\/div><\/div>\n          <\/div>\n          <div class=\"terms-box\">\n            <input type=\"checkbox\" id=\"acceptTerms\" required>\n            <label for=\"acceptTerms\">I accept the <a href=\"#\" style=\"color:var(--gold);\">Terms and Conditions<\/a><\/label>\n          <\/div>\n          <button class=\"btn btn-gold\" onclick=\"register()\" style=\"width:100%;\">Register<\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- ========== USER DASHBOARD ========== -->\n    <div id=\"dashboardSections\" style=\"display:none;\">\n      <section class=\"section active\" id=\"section-dashboard\">\n        <h2>Dashboard<\/h2>\n        <div class=\"row\">\n          <div class=\"col\"><p style=\"color:#666;\">Wallet Balance<\/p><div class=\"wallet-balance\" id=\"balanceDisplay\">0 UGX<\/div><\/div>\n          <div class=\"col\" style=\"text-align:right;\"><span id=\"userNameDisplay\"><\/span><\/div>\n        <\/div>\n        <div style=\"margin-top:20px;\">\n          <button class=\"btn btn-gold\" onclick=\"switchSection('wallet')\">\ud83d\udcb5 Add Money<\/button>\n          <button class=\"btn\" onclick=\"switchSection('invest')\">\ud83d\udcdc Buy Notes<\/button>\n        <\/div>\n        <h3 style=\"margin-top:24px;\">\ud83d\udd14 Notifications<\/h3>\n        <div id=\"notificationsPreview\"><\/div>\n      <\/section>\n\n      <section class=\"section\" id=\"section-wallet\">\n        <h2>Wallet<\/h2>\n        <div class=\"row\">\n          <div class=\"col\"><h3>Add Money (Top\u2011up)<\/h3><div class=\"form-group\"><label>Amount (UGX)<\/label><input type=\"number\" class=\"form-control\" id=\"topupAmount\" placeholder=\"e.g., 500000\"><\/div><button class=\"btn btn-gold\" onclick=\"submitTopup()\">Request Top\u2011up<\/button><\/div>\n          <div class=\"col\"><h3>Withdraw<\/h3><div class=\"form-group\"><label>Amount (UGX)<\/label><input type=\"number\" class=\"form-control\" id=\"withdrawAmount\" placeholder=\"e.g., 200000\"><\/div><button class=\"btn btn-outline\" onclick=\"submitWithdraw()\">Request Withdrawal<\/button><\/div>\n        <\/div>\n        <div style=\"margin-top:30px;\">\n          <h3>Transfer to Another User<\/h3>\n          <div class=\"row\">\n            <div class=\"col\"><div class=\"form-group\"><label>Recipient Email<\/label><input type=\"email\" class=\"form-control\" id=\"transferEmail\" placeholder=\"user@example.com\"><\/div><\/div>\n            <div class=\"col\"><div class=\"form-group\"><label>Amount (UGX)<\/label><input type=\"number\" class=\"form-control\" id=\"transferAmount\" placeholder=\"e.g., 100000\"><\/div><\/div>\n          <\/div>\n          <button class=\"btn\" onclick=\"submitTransfer()\">Request Transfer<\/button>\n        <\/div>\n      <\/section>\n\n      <section class=\"section\" id=\"section-invest\">\n        <h2>Buy Convertible Notes<\/h2>\n        <p style=\"color:#666; margin-bottom:20px;\">Minimum 100,000 UGX. Amount deducted from wallet on purchase.<\/p>\n        <div class=\"row\">\n          <div class=\"col\"><div class=\"form-group\"><label>Investment Amount (UGX)<\/label><input type=\"number\" class=\"form-control\" id=\"investAmount\" min=\"100000\" placeholder=\"e.g., 1000000\"><\/div><\/div>\n          <div class=\"col\" style=\"display:flex; align-items:flex-end;\"><button class=\"btn btn-gold\" onclick=\"buyAndDownload()\" style=\"width:100%;\">Buy &amp; Download Certificate<\/button><\/div>\n        <\/div>\n        <p id=\"investMsg\" style=\"margin-top:12px;\"><\/p>\n      <\/section>\n\n      <section class=\"section\" id=\"section-history-invest\">\n        <h2>Investment History<\/h2>\n        <div style=\"overflow-x:auto;\">\n          <table>\n            <thead><tr><th>Certificate No<\/th><th>Principal<\/th><th>Date<\/th><th>Download<\/th><\/tr><\/thead>\n            <tbody id=\"investHistoryBody\"><tr><td colspan=\"4\">Loading&#8230;<\/td><\/tr><\/tbody>\n          <\/table>\n        <\/div>\n      <\/section>\n\n      <section class=\"section\" id=\"section-history-tx\">\n        <h2>Wallet Transactions<\/h2>\n        <div style=\"overflow-x:auto;\">\n          <table>\n            <thead><tr><th>Type<\/th><th>Amount<\/th><th>Status<\/th><th>Date<\/th><th>Note<\/th><\/tr><\/thead>\n            <tbody id=\"txHistoryBody\"><tr><td colspan=\"5\">Loading&#8230;<\/td><\/tr><\/tbody>\n          <\/table>\n        <\/div>\n      <\/section>\n    <\/div>\n\n    <!-- ========== ADMIN PANEL ========== -->\n    <div id=\"adminPanel\" style=\"display:none;\">\n      <div style=\"margin-bottom:20px; display:flex; gap:10px; flex-wrap:wrap; align-items:center;\">\n        <button class=\"btn\" onclick=\"switchToUserView()\">\u2b05 User Dashboard<\/button>\n        <button class=\"btn\" onclick=\"switchSection('admin-requests')\">\ud83d\udd01 Requests<\/button>\n        <button class=\"btn\" onclick=\"switchSection('admin-users')\">\ud83d\udc65 All Registered Users<\/button>\n        <button class=\"btn btn-outline\" onclick=\"switchSection('admin-notify')\">\ud83d\udce8 Notify<\/button>\n        <button class=\"btn btn-danger\" onclick=\"adminLogout()\" style=\"margin-left:auto;\">Logout Admin<\/button>\n      <\/div>\n\n      <section class=\"section active\" id=\"section-admin-requests\">\n        <h2>Pending Requests<\/h2>\n        <button class=\"btn\" onclick=\"loadAdminRequests()\">Refresh<\/button>\n        <div id=\"adminRequestsContainer\"><\/div>\n      <\/section>\n\n      <section class=\"section\" id=\"section-admin-users\">\n        <div style=\"display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:10px;\">\n          <h2>All Registered Users (Record)<\/h2>\n          <button class=\"btn btn-gold\" onclick=\"exportUsersToCSV()\">\ud83d\udcce Download CSV<\/button>\n        <\/div>\n        <div style=\"overflow-x:auto; margin-top:20px;\">\n          <table id=\"adminUsersTable\">\n            <thead><tr><th>ID<\/th><th>Full Name<\/th><th>Email<\/th><th>Country<\/th><th>Mobile<\/th><th>NIN\/Passport<\/th><th>Wallet (UGX)<\/th><th>Registered Date<\/th><\/tr><\/thead>\n            <tbody id=\"adminUsersContainer\"><tr><td colspan=\"8\">Loading&#8230;<\/td><\/tr><\/tbody>\n          <\/table>\n        <\/div>\n      <\/section>\n\n      <section class=\"section\" id=\"section-admin-notify\">\n        <h2>Send Notification to User<\/h2>\n        <div class=\"row\">\n          <div class=\"col\"><input type=\"text\" class=\"form-control\" id=\"notifyUserId\" placeholder=\"User ID\"><\/div>\n          <div class=\"col\"><input type=\"text\" class=\"form-control\" id=\"notifyMsg\" placeholder=\"Message (e.g., MTN number)\"><\/div>\n        <\/div>\n        <button class=\"btn\" onclick=\"adminSendNotification()\" style=\"margin-top:10px;\">Send<\/button>\n      <\/section>\n    <\/div>\n\n    <!-- ========== ADMIN LOGIN ========== -->\n    <div id=\"adminLoginSection\" style=\"display:none;\">\n      <div class=\"auth-container\" style=\"max-width:400px; margin:80px auto;\">\n        <h2 style=\"text-align:center;\">Admin Login<\/h2>\n        <div class=\"form-group\"><label>Password<\/label><input type=\"password\" class=\"form-control\" id=\"adminPassword\" placeholder=\"Admin password\"><\/div>\n        <button class=\"btn btn-gold\" onclick=\"adminLogin()\" style=\"width:100%;\">Login<\/button>\n        <p style=\"text-align:center; margin-top:15px;\"><a href=\"#\" onclick=\"switchToUserView()\" style=\"color:var(--gold);\">\u2190 Back to User Dashboard<\/a><\/p>\n      <\/div>\n    <\/div>\n  <\/main>\n\n  <script>\n    \/\/ ==================== UPDATED ADMIN PASSWORD ====================\n    const ADMIN_PASSWORD = \"Equity.Get.shares2026##\";\n    \n    let currentUser = null;\n    let adminToken = localStorage.getItem('adminToken') === 'true';\n\n    \/\/ Helper: load all data\n    function loadData() {\n      let users = JSON.parse(localStorage.getItem('adase_users') || '[]');\n      if (users.length === 0) {\n        \/\/ Create admin user with new password\n        users.push({\n          id: 'admin',\n          firstName: 'Admin',\n          lastName: 'Equity',\n          email: 'equity@cashchat.se',\n          password: ADMIN_PASSWORD,\n          role: 'admin',\n          walletBalance: 0,\n          country: 'Uganda',\n          mobile: '0000000000',\n          nin: 'ADMIN123',\n          createdAt: new Date().toISOString()\n        });\n        \/\/ Demo normal user\n        users.push({\n          id: 'user1',\n          firstName: 'John',\n          lastName: 'Investor',\n          email: 'john@example.com',\n          password: 'password123',\n          role: 'user',\n          walletBalance: 500000,\n          country: 'Uganda',\n          mobile: '+256700000001',\n          nin: 'NIN123456',\n          createdAt: new Date().toISOString()\n        });\n        localStorage.setItem('adase_users', JSON.stringify(users));\n      } else {\n        \/\/ Ensure admin password is updated if admin exists\n        const adminIdx = users.findIndex(u => u.role === 'admin');\n        if (adminIdx !== -1) users[adminIdx].password = ADMIN_PASSWORD;\n        else {\n          users.push({\n            id: 'admin',\n            firstName: 'Admin',\n            lastName: 'Equity',\n            email: 'equity@cashchat.se',\n            password: ADMIN_PASSWORD,\n            role: 'admin',\n            walletBalance: 0,\n            country: 'Uganda',\n            mobile: '0000000000',\n            nin: 'ADMIN123',\n            createdAt: new Date().toISOString()\n          });\n        }\n        localStorage.setItem('adase_users', JSON.stringify(users));\n      }\n      let transactions = JSON.parse(localStorage.getItem('adase_transactions') || '[]');\n      let investments = JSON.parse(localStorage.getItem('adase_investments') || '[]');\n      let notifications = JSON.parse(localStorage.getItem('adase_notifications') || '[]');\n      return { users, transactions, investments, notifications };\n    }\n\n    function saveData(users, transactions, investments, notifications) {\n      localStorage.setItem('adase_users', JSON.stringify(users));\n      localStorage.setItem('adase_transactions', JSON.stringify(transactions));\n      localStorage.setItem('adase_investments', JSON.stringify(investments));\n      localStorage.setItem('adase_notifications', JSON.stringify(notifications));\n    }\n\n    function getCurrentUserFromStore() {\n      if (!currentUser) return null;\n      const { users } = loadData();\n      return users.find(u => u.email === currentUser.email);\n    }\n\n    function updateCurrentUser(updatedUser) {\n      const { users, transactions, investments, notifications } = loadData();\n      const idx = users.findIndex(u => u.id === updatedUser.id);\n      if (idx !== -1) users[idx] = updatedUser;\n      saveData(users, transactions, investments, notifications);\n      currentUser = updatedUser;\n    }\n\n    \/\/ ==================== UI HELPERS ====================\n    function switchSection(name) {\n      document.querySelectorAll('.section').forEach(s => s.classList.remove('active'));\n      const target = document.getElementById(`section-${name}`);\n      if (target) target.classList.add('active');\n      if (!name.startsWith('admin-')) {\n        document.querySelectorAll('.sidebar nav a').forEach(a => a.classList.remove('active'));\n        const link = document.querySelector(`.sidebar nav a[data-section=\"${name}\"]`);\n        if (link) link.classList.add('active');\n      }\n      document.getElementById('sidebar')?.classList.remove('open');\n      if (name === 'history-invest') fetchInvestments();\n      if (name === 'history-tx') fetchTransactions();\n      if (name === 'admin-requests') loadAdminRequests();\n      if (name === 'admin-users') loadAdminUsers();\n    }\n\n    function showAuthTab(tab) {\n      document.getElementById('loginForm').style.display = tab === 'login' ? 'block' : 'none';\n      document.getElementById('registerForm').style.display = tab === 'register' ? 'block' : 'none';\n    }\n\n    \/\/ ==================== USER AUTH ====================\n    function login() {\n      const email = document.getElementById('loginEmail').value.trim();\n      const password = document.getElementById('loginPassword').value;\n      const { users } = loadData();\n      const user = users.find(u => u.email === email && u.password === password);\n      if (!user) return alert('Invalid email or password');\n      if (user.role === 'admin') return alert('Use Admin Login from sidebar');\n      currentUser = user;\n      document.getElementById('authSection').style.display = 'none';\n      document.getElementById('dashboardSections').style.display = 'block';\n      document.getElementById('adminPanel').style.display = 'none';\n      document.getElementById('adminLoginSection').style.display = 'none';\n      document.getElementById('userNameDisplay').innerText = `${user.firstName} ${user.lastName}`;\n      updateBalanceUI(user.walletBalance);\n      fetchNotifications();\n      fetchInvestments();\n      fetchTransactions();\n      switchSection('dashboard');\n    }\n\n    function register() {\n      const firstName = document.getElementById('regFirstName').value.trim();\n      const lastName = document.getElementById('regLastName').value.trim();\n      const email = document.getElementById('regEmail').value.trim();\n      const country = document.getElementById('regCountry').value.trim();\n      const mobile = document.getElementById('regMobile').value.trim();\n      const nin = document.getElementById('regNIN').value.trim();\n      const password = document.getElementById('regPassword').value;\n      const confirm = document.getElementById('regConfirmPassword').value;\n      if (!firstName || !lastName || !email || !country || !mobile || !nin || !password) return alert('All fields required');\n      if (password !== confirm) return alert('Passwords do not match');\n      if (!document.getElementById('acceptTerms').checked) return alert('Accept Terms');\n      const { users, transactions, investments, notifications } = loadData();\n      if (users.find(u => u.email === email)) return alert('Email already registered');\n      const newUser = {\n        id: 'u' + Date.now(),\n        firstName, lastName, email, country, mobile, nin, password,\n        role: 'user',\n        walletBalance: 0,\n        createdAt: new Date().toISOString()\n      };\n      users.push(newUser);\n      saveData(users, transactions, investments, notifications);\n      alert('Registration successful! Please login.');\n      showAuthTab('login');\n    }\n\n    function userLogout() {\n      currentUser = null;\n      document.getElementById('authSection').style.display = 'block';\n      document.getElementById('dashboardSections').style.display = 'none';\n      document.getElementById('adminPanel').style.display = 'none';\n      document.getElementById('adminLoginSection').style.display = 'none';\n      document.getElementById('loginEmail').value = '';\n      document.getElementById('loginPassword').value = '';\n    }\n\n    function updateBalanceUI(balance) {\n      document.getElementById('balanceDisplay').innerText = balance.toLocaleString() + ' UGX';\n    }\n\n    \/\/ ==================== WALLET ACTIONS ====================\n    function submitTopup() {\n      const amount = parseFloat(document.getElementById('topupAmount').value);\n      if (!amount || amount <= 0) return alert('Enter valid amount');\n      const user = getCurrentUserFromStore();\n      if (!user) return;\n      const { users, transactions, investments, notifications } = loadData();\n      const newTx = {\n        id: 'tx' + Date.now(),\n        userId: user.id,\n        type: 'topup',\n        amount,\n        status: 'pending',\n        createdAt: new Date().toISOString(),\n        description: `Top-up request of UGX ${amount}`\n      };\n      transactions.push(newTx);\n      saveData(users, transactions, investments, notifications);\n      alert('Top-up request sent to admin.');\n      document.getElementById('topupAmount').value = '';\n      fetchTransactions();\n    }\n\n    function submitWithdraw() {\n      const amount = parseFloat(document.getElementById('withdrawAmount').value);\n      if (!amount || amount <= 0) return alert('Enter valid amount');\n      const user = getCurrentUserFromStore();\n      if (!user || user.walletBalance < amount) return alert('Insufficient balance');\n      const { users, transactions, investments, notifications } = loadData();\n      const newTx = {\n        id: 'tx' + Date.now(),\n        userId: user.id,\n        type: 'withdraw',\n        amount,\n        status: 'pending',\n        createdAt: new Date().toISOString(),\n        description: `Withdrawal request of UGX ${amount}`\n      };\n      transactions.push(newTx);\n      saveData(users, transactions, investments, notifications);\n      alert('Withdrawal request sent to admin.');\n      document.getElementById('withdrawAmount').value = '';\n      fetchTransactions();\n    }\n\n    function submitTransfer() {\n      const toEmail = document.getElementById('transferEmail').value.trim();\n      const amount = parseFloat(document.getElementById('transferAmount').value);\n      if (!toEmail || !amount || amount <= 0) return alert('Enter valid email and amount');\n      const user = getCurrentUserFromStore();\n      if (!user || user.walletBalance < amount) return alert('Insufficient balance');\n      const { users, transactions, investments, notifications } = loadData();\n      const recipient = users.find(u => u.email === toEmail);\n      if (!recipient) return alert('Recipient not found');\n      const newTx = {\n        id: 'tx' + Date.now(),\n        userId: user.id,\n        type: 'transfer',\n        amount,\n        toUserId: recipient.id,\n        toUserEmail: recipient.email,\n        status: 'pending',\n        createdAt: new Date().toISOString(),\n        description: `Transfer of UGX ${amount} to ${recipient.email}`\n      };\n      transactions.push(newTx);\n      saveData(users, transactions, investments, notifications);\n      alert('Transfer request sent to admin.');\n      document.getElementById('transferEmail').value = '';\n      document.getElementById('transferAmount').value = '';\n      fetchTransactions();\n    }\n\n    \/\/ ==================== INVESTMENTS ====================\n    async function buyAndDownload() {\n      const principal = parseFloat(document.getElementById('investAmount').value);\n      if (principal < 100000) return alert('Minimum investment is 100,000 UGX');\n      const user = getCurrentUserFromStore();\n      if (!user || user.walletBalance < principal) return alert('Insufficient wallet balance');\n      user.walletBalance -= principal;\n      const certNumber = 'ADASE-' + Date.now();\n      const { users, transactions, investments, notifications } = loadData();\n      const newInv = {\n        id: 'inv' + Date.now(),\n        userId: user.id,\n        certificateNumber: certNumber,\n        principal,\n        issuedAt: new Date().toISOString(),\n        interestRate: 17,\n        maturity: new Date(new Date().setFullYear(new Date().getFullYear() + 3)).toISOString()\n      };\n      investments.push(newInv);\n      const newTx = {\n        id: 'tx' + Date.now(),\n        userId: user.id,\n        type: 'investment',\n        amount: principal,\n        status: 'approved',\n        createdAt: new Date().toISOString(),\n        description: `Purchase of convertible note ${certNumber}`\n      };\n      transactions.push(newTx);\n      const idx = users.findIndex(u => u.id === user.id);\n      users[idx] = user;\n      saveData(users, transactions, investments, notifications);\n      currentUser = user;\n      updateBalanceUI(user.walletBalance);\n      alert(`Investment successful! Certificate: ${certNumber}`);\n      fetchInvestments();\n      fetchTransactions();\n      generateCertificate(certNumber, principal, `${user.firstName} ${user.lastName}`);\n      document.getElementById('investAmount').value = '';\n    }\n\n    async function generateCertificate(certNumber, amount, name) {\n      const issueDate = new Date().toISOString().split('T')[0];\n      const maturity = new Date(new Date().setFullYear(new Date().getFullYear() + 3)).toISOString().split('T')[0];\n      const wrapper = document.createElement('div');\n      wrapper.style.position = 'absolute';\n      wrapper.style.left = '-9999px';\n      wrapper.innerHTML = `\n        <div style=\"width:800px;padding:40px;background:#fefdf8;border:6px double #0a1f44;font-family:Inter,sans-serif;\">\n          <div style=\"text-align:center;font-size:28px;font-weight:700;color:#0a1f44;\">ADASE ADS LTD<\/div>\n          <div style=\"text-align:center;font-size:20px;color:#c49a2b;margin:8px 0 20px;\">Convertible Note Certificate<\/div>\n          <p style=\"font-size:16px;\">This certifies that <strong>${name}<\/strong> has invested <strong>UGX ${amount.toLocaleString()}<\/strong> on <strong>${issueDate}<\/strong>.<\/p>\n          <table style=\"width:100%;margin:20px 0;font-size:14px;border-collapse:collapse;\">\n            <tr><td style=\"padding:8px 0;border-bottom:1px dotted #ccc;\">Certificate No<\/td><td style=\"font-weight:bold;\">${certNumber}<\/td><\/tr>\n            <tr><td style=\"padding:8px 0;border-bottom:1px dotted #ccc;\">Interest Rate<\/td><td>17% p.a.<\/td><\/tr>\n            <tr><td style=\"padding:8px 0;border-bottom:1px dotted #ccc;\">Maturity<\/td><td>${maturity}<\/td><\/tr>\n            <tr><td style=\"padding:8px 0;border-bottom:1px dotted #ccc;\">Conversion Discount<\/td><td>20%<\/td><\/tr>\n          <\/table>\n          <p style=\"margin-top:32px;font-style:italic;\">Authorized Signatory<\/p>\n        <\/div>\n      `;\n      document.body.appendChild(wrapper);\n      const canvas = await html2canvas(wrapper.firstChild, { scale: 2 });\n      document.body.removeChild(wrapper);\n      const link = document.createElement('a');\n      link.download = `Adase_Note_${certNumber}.png`;\n      link.href = canvas.toDataURL();\n      link.click();\n    }\n\n    function fetchInvestments() {\n      const user = getCurrentUserFromStore();\n      if (!user) return;\n      const { investments } = loadData();\n      const myInvs = investments.filter(i => i.userId === user.id);\n      const tbody = document.getElementById('investHistoryBody');\n      if (myInvs.length === 0) tbody.innerHTML = '<tr><td colspan=\"4\">No investments yet.<\/td><\/tr>';\n      else {\n        tbody.innerHTML = myInvs.map(i => `\n          <tr>\n            <td data-label=\"Certificate No\">${i.certificateNumber}<\/td>\n            <td data-label=\"Principal\">${i.principal.toLocaleString()} UGX<\/td>\n            <td data-label=\"Date\">${new Date(i.issuedAt).toLocaleDateString()}<\/td>\n            <td data-label=\"Download\"><button class=\"btn\" onclick=\"generateCertificate('${i.certificateNumber}', ${i.principal}, '${user.firstName} ${user.lastName}')\">Download<\/button><\/td>\n          <\/tr>\n        `).join('');\n      }\n    }\n\n    function fetchTransactions() {\n      const user = getCurrentUserFromStore();\n      if (!user) return;\n      const { transactions } = loadData();\n      const myTx = transactions.filter(t => t.userId === user.id).sort((a,b)=>new Date(b.createdAt)-new Date(a.createdAt));\n      const tbody = document.getElementById('txHistoryBody');\n      if (myTx.length === 0) tbody.innerHTML = '<tr><td colspan=\"5\">No transactions<\/td><\/tr>';\n      else {\n        tbody.innerHTML = myTx.map(t => `\n          <tr>\n            <td data-label=\"Type\">${t.type}<\/td>\n            <td data-label=\"Amount\">${t.amount.toLocaleString()} UGX<\/td>\n            <td data-label=\"Status\"><span class=\"badge ${t.status==='approved'?'badge-success':t.status==='pending'?'badge-warning':'badge-danger'}\">${t.status}<\/span><\/td>\n            <td data-label=\"Date\">${new Date(t.createdAt).toLocaleString()}<\/td>\n            <td data-label=\"Note\">${t.description||''}<\/td>\n          <\/tr>\n        `).join('');\n      }\n    }\n\n    function fetchNotifications() {\n      const user = getCurrentUserFromStore();\n      if (!user) return;\n      const { notifications } = loadData();\n      const userNotifs = notifications.filter(n => n.userId === user.id && !n.dismissed);\n      const container = document.getElementById('notificationsPreview');\n      if (userNotifs.length === 0) container.innerHTML = '<p>No new notifications<\/p>';\n      else {\n        container.innerHTML = userNotifs.map(n => `\n          <div class=\"notification\"><span>${n.message} <small>(${new Date(n.createdAt).toLocaleString()})<\/small><\/span>\n          <button class=\"btn\" style=\"padding:4px 10px;\" onclick=\"dismissNotif('${n.id}')\">Dismiss<\/button><\/div>\n        `).join('');\n      }\n    }\n\n    function dismissNotif(id) {\n      const { users, transactions, investments, notifications } = loadData();\n      const notif = notifications.find(n => n.id === id);\n      if (notif) notif.dismissed = true;\n      saveData(users, transactions, investments, notifications);\n      fetchNotifications();\n    }\n\n    \/\/ ==================== ADMIN ====================\n    function adminLogin() {\n      const pwd = document.getElementById('adminPassword').value;\n      if (pwd === ADMIN_PASSWORD) {\n        adminToken = true;\n        localStorage.setItem('adminToken', 'true');\n        showAdminPanel();\n      } else alert('Invalid admin password');\n    }\n\n    function showAdminPanel() {\n      document.getElementById('authSection').style.display = 'none';\n      document.getElementById('dashboardSections').style.display = 'none';\n      document.getElementById('adminPanel').style.display = 'block';\n      document.getElementById('adminLoginSection').style.display = 'none';\n      switchSection('admin-requests');\n    }\n\n    function adminLogout() {\n      adminToken = false;\n      localStorage.removeItem('adminToken');\n      if (currentUser) switchToUserView();\n      else location.reload();\n    }\n\n    function switchToUserView() {\n      if (currentUser) {\n        document.getElementById('authSection').style.display = 'none';\n        document.getElementById('dashboardSections').style.display = 'block';\n        document.getElementById('adminPanel').style.display = 'none';\n        document.getElementById('adminLoginSection').style.display = 'none';\n        switchSection('dashboard');\n      } else {\n        location.reload();\n      }\n    }\n\n    function loadAdminRequests() {\n      const { users, transactions } = loadData();\n      const pending = transactions.filter(t => t.status === 'pending');\n      const topups = pending.filter(t => t.type === 'topup');\n      const withdraws = pending.filter(t => t.type === 'withdraw');\n      const transfers = pending.filter(t => t.type === 'transfer');\n      const renderTable = (items, type) => {\n        if (!items.length) return '<p>None<\/p>';\n        let html = '<table><thead><tr>';\n        if (type === 'transfer') html += '<th>From<\/th><th>To<\/th>';\n        else html += '<th>User<\/th>';\n        html += '<th>Amount<\/th><th>Actions<\/th><\/tr><\/thead><tbody>';\n        items.forEach(item => {\n          const fromUser = users.find(u => u.id === item.userId);\n          const fromName = fromUser ? `${fromUser.firstName} ${fromUser.lastName}` : 'Unknown';\n          if (type === 'transfer') {\n            const toUser = users.find(u => u.id === item.toUserId);\n            html += `<tr>\n              <td data-label=\"From\">${fromName} (${fromUser?.email})<\/td>\n              <td data-label=\"To\">${toUser?.email || item.toUserEmail}<\/td>\n              <td data-label=\"Amount\">${item.amount.toLocaleString()} UGX<\/td>\n              <td data-label=\"Actions\"><button class=\"btn\" onclick=\"adminApprove('${item.id}')\">Approve<\/button> <button class=\"btn btn-outline\" onclick=\"adminDecline('${item.id}')\">Decline<\/button><\/td>\n            <\/tr>`;\n          } else {\n            html += `<tr>\n              <td data-label=\"User\">${fromName} (${fromUser?.email})<\/td>\n              <td data-label=\"Amount\">${item.amount.toLocaleString()} UGX<\/td>\n              <td data-label=\"Actions\"><button class=\"btn\" onclick=\"adminApprove('${item.id}')\">Approve<\/button> <button class=\"btn btn-outline\" onclick=\"adminDecline('${item.id}')\">Decline<\/button>\n              <button class=\"btn\" onclick=\"adminRequestPayment('${item.userId}')\">Request Payment<\/button><\/td>\n            <\/tr>`;\n          }\n        });\n        html += '<\/tbody><\/table>';\n        return html;\n      };\n      const html = `<h3>Top\u2011ups<\/h3>${renderTable(topups, 'topup')}<h3>Withdrawals<\/h3>${renderTable(withdraws, 'withdraw')}<h3>Transfers<\/h3>${renderTable(transfers, 'transfer')}`;\n      document.getElementById('adminRequestsContainer').innerHTML = html;\n    }\n\n    async function adminApprove(txId) {\n      const { users, transactions, investments, notifications } = loadData();\n      const tx = transactions.find(t => t.id === txId);\n      if (!tx) return;\n      tx.status = 'approved';\n      const user = users.find(u => u.id === tx.userId);\n      if (tx.type === 'topup') {\n        user.walletBalance += tx.amount;\n      } else if (tx.type === 'withdraw') {\n        if (user.walletBalance >= tx.amount) user.walletBalance -= tx.amount;\n        else tx.status = 'declined';\n      } else if (tx.type === 'transfer') {\n        const recipient = users.find(u => u.id === tx.toUserId);\n        if (user.walletBalance >= tx.amount && recipient) {\n          user.walletBalance -= tx.amount;\n          recipient.walletBalance += tx.amount;\n        } else tx.status = 'declined';\n      }\n      saveData(users, transactions, investments, notifications);\n      loadAdminRequests();\n      if (currentUser && currentUser.id === user.id) updateBalanceUI(user.walletBalance);\n    }\n\n    async function adminDecline(txId) {\n      const { users, transactions, investments, notifications } = loadData();\n      const tx = transactions.find(t => t.id === txId);\n      if (tx) tx.status = 'declined';\n      saveData(users, transactions, investments, notifications);\n      loadAdminRequests();\n    }\n\n    function adminRequestPayment(userId) {\n      const msg = prompt('Enter message to request payment details (e.g., MTN number):');\n      if (!msg) return;\n      const { users, transactions, investments, notifications } = loadData();\n      const newNotif = {\n        id: 'notif' + Date.now(),\n        userId,\n        message: msg,\n        createdAt: new Date().toISOString(),\n        dismissed: false\n      };\n      notifications.push(newNotif);\n      saveData(users, transactions, investments, notifications);\n      alert('Notification sent');\n    }\n\n    function loadAdminUsers() {\n      const { users } = loadData();\n      const normalUsers = users.filter(u => u.role !== 'admin');\n      const tbody = document.getElementById('adminUsersContainer');\n      if (normalUsers.length === 0) tbody.innerHTML = '<tr><td colspan=\"8\">No registered users found.<\/td><\/tr>';\n      else {\n        tbody.innerHTML = normalUsers.map(u => `\n          <tr>\n            <td data-label=\"ID\">${u.id}<\/td>\n            <td data-label=\"Full Name\">${u.firstName} ${u.lastName}<\/td>\n            <td data-label=\"Email\">${u.email}<\/td>\n            <td data-label=\"Country\">${u.country || '\u2014'}<\/td>\n            <td data-label=\"Mobile\">${u.mobile || '\u2014'}<\/td>\n            <td data-label=\"NIN\/Passport\">${u.nin || '\u2014'}<\/td>\n            <td data-label=\"Wallet\">${u.walletBalance.toLocaleString()} UGX<\/td>\n            <td data-label=\"Registered Date\">${new Date(u.createdAt).toLocaleDateString()}<\/td>\n          <\/tr>\n        `).join('');\n      }\n    }\n\n    function exportUsersToCSV() {\n      const { users } = loadData();\n      const normalUsers = users.filter(u => u.role !== 'admin');\n      if (normalUsers.length === 0) { alert('No users to export.'); return; }\n      const headers = ['User ID', 'First Name', 'Last Name', 'Email', 'Country', 'Mobile', 'NIN\/Passport', 'Wallet Balance (UGX)', 'Registration Date'];\n      const rows = normalUsers.map(u => [u.id, u.firstName, u.lastName, u.email, u.country || '', u.mobile || '', u.nin || '', u.walletBalance, new Date(u.createdAt).toLocaleString()]);\n      const csvContent = [headers, ...rows].map(row => row.map(cell => `\"${String(cell).replace(\/\"\/g, '\"\"')}\"`).join(',')).join('\\n');\n      const blob = new Blob([csvContent], { type: 'text\/csv;charset=utf-8;' });\n      const link = document.createElement('a');\n      const url = URL.createObjectURL(blob);\n      link.href = url;\n      link.setAttribute('download', 'adase_registered_users.csv');\n      document.body.appendChild(link);\n      link.click();\n      document.body.removeChild(link);\n      URL.revokeObjectURL(url);\n    }\n\n    function adminSendNotification() {\n      const userId = document.getElementById('notifyUserId').value.trim();\n      const message = document.getElementById('notifyMsg').value.trim();\n      if (!userId || !message) return alert('Fill both fields');\n      const { users, transactions, investments, notifications } = loadData();\n      const userExists = users.find(u => u.id === userId);\n      if (!userExists) return alert('User ID not found');\n      const newNotif = { id: 'notif' + Date.now(), userId, message, createdAt: new Date().toISOString(), dismissed: false };\n      notifications.push(newNotif);\n      saveData(users, transactions, investments, notifications);\n      alert('Notification sent');\n      document.getElementById('notifyUserId').value = '';\n      document.getElementById('notifyMsg').value = '';\n    }\n\n    \/\/ ==================== INIT ====================\n    document.querySelectorAll('.sidebar nav a[data-section]').forEach(a => {\n      a.addEventListener('click', e => {\n        e.preventDefault();\n        switchSection(a.dataset.section);\n      });\n    });\n    document.getElementById('logoutSidebar')?.addEventListener('click', e => { e.preventDefault(); userLogout(); });\n    document.getElementById('adminSidebarLink')?.addEventListener('click', e => {\n      e.preventDefault();\n      document.getElementById('authSection').style.display = 'none';\n      document.getElementById('dashboardSections').style.display = 'none';\n      document.getElementById('adminPanel').style.display = 'none';\n      document.getElementById('adminLoginSection').style.display = 'block';\n    });\n    document.getElementById('menuToggle')?.addEventListener('click', () => {\n      document.getElementById('sidebar').classList.toggle('open');\n    });\n\n    \/\/ Auto restore session\n    if (adminToken) {\n      showAdminPanel();\n    } else {\n      const storedUser = localStorage.getItem('adase_current_user');\n      if (storedUser) {\n        try {\n          currentUser = JSON.parse(storedUser);\n          document.getElementById('authSection').style.display = 'none';\n          document.getElementById('dashboardSections').style.display = 'block';\n          document.getElementById('userNameDisplay').innerText = `${currentUser.firstName} ${currentUser.lastName}`;\n          updateBalanceUI(currentUser.walletBalance);\n          fetchNotifications(); fetchInvestments(); fetchTransactions();\n          switchSection('dashboard');\n        } catch(e) {}\n      }\n    }\n    window.addEventListener('beforeunload', () => {\n      if (currentUser) localStorage.setItem('adase_current_user', JSON.stringify(currentUser));\n      else localStorage.removeItem('adase_current_user');\n    });\n  <\/script>\n<\/body>\n<\/html>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Adase Ads \u2013 Complete Dashboard (Offline \/ LocalStorage) ADASE ADS \ud83d\udcca Dashboard \ud83d\udcb0 Wallet \ud83d\udcdc Buy Notes \ud83c\udfe6 Investments \ud83e\uddfe Transactions \ud83d\udeaa Logout \ud83d\udd10 Admin \u2630 Adase Dashboard Welcome Login Register Email Password Login First Name * Last Name * Email * Country * Mobile Number * NIN \/ Passport Number * Password * Confirm [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"pagelayer_contact_templates":[],"_pagelayer_content":"","footnotes":""},"class_list":["post-195","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/pages\/195","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/comments?post=195"}],"version-history":[{"count":6,"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/pages\/195\/revisions"}],"predecessor-version":[{"id":208,"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/pages\/195\/revisions\/208"}],"wp:attachment":[{"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/media?parent=195"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}