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
-
-
-
-
-
-
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
Konversi mutasi rekening Bank Mandiri, BCA, BRI, dan BSI menjadi format siap impor Odoo Accounting & Excel Audit
+
-
+
-
+
+
-
-
+
-
+
-
+
Bank
@@ -101,10 +176,10 @@
Bank Statement Converter
OK
-
+
-
+
+
-
+
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"
+ }
+ ]
+ }
+ ]
+}