diff --git a/index.html b/index.html index 209ee53..6a92b7b 100644 --- a/index.html +++ b/index.html @@ -4,81 +4,156 @@ - Bank Statement Converter to Odoo / Excel - - - - - - + + + + - + + + + + + + + + + + + + + + + + + + -
-
+
+
Client-Side Multi-Bank Converter

Bank Statement Converter

-

Konversi mutasi rekening Bank menjadi format Odoo

-
+

Konversi mutasi rekening Bank Mandiri, BCA, BRI, dan BSI menjadi format siap impor Odoo Accounting & Excel Audit

+ -
- - - - -
+ -
- 📄 +
+ Pilih atau Seret File Rekening Koran Mandiri Format: .csv - -
+ + -
- - -
+ -
+
-
+
+ -
+
Preview Transaksi 0 baris @@ -117,30 +192,22 @@

Bank Statement Converter

-
+ -
+
Keterangan Format File Bank Mandiri:
    -
  • Mendukung file .csvasli unduhan Kopra
  • +
  • Mendukung file .csv asli unduhan Kopra / Mandiri Online.
  • Kolom otomatis terdeteksi: PostDate/Date, Remarks/Keterangan, Credit, Debit.
  • Mendukung ekspor ke Odoo Clean (.xlsx) dan Tabel Mutasi Lengkap (.xlsx).
-
- - -
- - - - - - - - + + + + diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..98a2f3e --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/manifest.json b/public/manifest.json new file mode 100644 index 0000000..f8e0410 --- /dev/null +++ b/public/manifest.json @@ -0,0 +1,17 @@ +{ + "name": "Bank Statement Converter to Odoo", + "short_name": "BankConverter", + "description": "Konversi mutasi rekening Bank Mandiri, BCA, BRI, dan BSI ke format Odoo Accounting & Excel.", + "start_url": "/", + "display": "standalone", + "background_color": "#0b0f19", + "theme_color": "#6366f1", + "icons": [ + { + "src": "/public/favicon.svg", + "sizes": "any", + "type": "image/svg+xml", + "purpose": "any maskable" + } + ] +} diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..7f0ed1d --- /dev/null +++ b/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Allow: / + +Sitemap: https://bankparsen.vercel.app/sitemap.xml diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..afc6b85 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,9 @@ + + + + https://bankparsen.vercel.app/ + 2026-09-04 + weekly + 1.0 + + diff --git a/src/css/style.css b/src/css/style.css index 38219aa..b3deea2 100644 --- a/src/css/style.css +++ b/src/css/style.css @@ -485,10 +485,17 @@ tr:hover td { } .footer-credit { - margin-top: 24px; + margin-top: 28px; text-align: center; font-size: 11.5px; color: var(--text-secondary); + border-top: 1px solid rgba(255, 255, 255, 0.05); + padding-top: 16px; +} + +.footer-credit p { + margin: 0; + line-height: 1.6; } /* Responsive Media Queries */ diff --git a/src/js/bca-parser.js b/src/js/bca-parser.js index d17d654..761b7fa 100644 --- a/src/js/bca-parser.js +++ b/src/js/bca-parser.js @@ -22,6 +22,10 @@ const BCAParser = { throw new Error("Library PDF.js belum dimuat. Pastikan koneksi internet aktif untuk memuat library."); } + if (!pdfjsLib.GlobalWorkerOptions.workerSrc) { + pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.11.174/pdf.worker.min.js'; + } + const loadingTask = pdfjsLib.getDocument({ data: arrayBuffer }); const pdfDoc = await loadingTask.promise; const pageTexts = []; diff --git a/vercel.json b/vercel.json new file mode 100644 index 0000000..b5e1da2 --- /dev/null +++ b/vercel.json @@ -0,0 +1,49 @@ +{ + "$schema": "https://openapi.vercel.sh/vercel.json", + "cleanUrls": true, + "headers": [ + { + "source": "/(.*)", + "headers": [ + { + "key": "X-Content-Type-Options", + "value": "nosniff" + }, + { + "key": "X-Frame-Options", + "value": "DENY" + }, + { + "key": "X-XSS-Protection", + "value": "1; mode=block" + }, + { + "key": "Referrer-Policy", + "value": "strict-origin-when-cross-origin" + }, + { + "key": "Permissions-Policy", + "value": "camera=(), microphone=(), geolocation=()" + } + ] + }, + { + "source": "/public/(.*)", + "headers": [ + { + "key": "Cache-Control", + "value": "public, max-age=31536000, immutable" + } + ] + }, + { + "source": "/src/(.*)", + "headers": [ + { + "key": "Cache-Control", + "value": "public, max-age=86400, stale-while-revalidate=604800" + } + ] + } + ] +}