From 9ce5d01315ab21cbb196e0f59fb1981b51ff3919 Mon Sep 17 00:00:00 2001
From: dyzulk <66510723+dyzulk@users.noreply.github.com>
Date: Fri, 9 Jan 2026 08:22:46 +0700
Subject: [PATCH] refactor: migrate to official nextra i18n and native
navigation
---
next.config.js | 5 +-
pages/_meta.json | 13 +--
pages/en/_meta.json | 15 +++
pages/{ => en}/developer/_meta.json | 0
pages/{ => en}/developer/endpoints.mdx | 0
pages/{ => en}/developer/index.mdx | 0
pages/{ => en}/guide/_meta.json | 0
pages/{ => en}/guide/certificates/_meta.json | 0
.../guide/certificates/download-install.mdx | 0
pages/{ => en}/guide/certificates/renewal.mdx | 0
.../guide/certificates/request-new.mdx | 0
.../guide/certificates/revocation.mdx | 0
.../guide/certificates/view-details.mdx | 0
pages/{ => en}/guide/concepts/_meta.json | 0
.../guide/concepts/pki-undamentals.mdx | 0
.../guide/concepts/trust-architecture.mdx | 0
.../{ => en}/guide/getting-started/_meta.json | 0
.../getting-started/access-dashboard.mdx | 0
.../guide/getting-started/install-root-ca.mdx | 2 +-
pages/{ => en}/guide/index.mdx | 0
pages/{ => en}/guide/integrations/_meta.json | 0
pages/{ => en}/guide/integrations/smime.mdx | 0
.../guide/integrations/web-servers.mdx | 0
.../{ => en}/guide/troubleshooting/_meta.json | 0
.../guide/troubleshooting/browser-errors.mdx | 0
.../guide/troubleshooting/developer-tools.mdx | 0
pages/en/index.mdx | 3 +
pages/id/_meta.json | 15 +++
pages/id/developer/_meta.json | 4 +
pages/id/developer/endpoints.mdx | 71 ++++++++++++++
pages/id/developer/index.mdx | 20 ++++
pages/id/guide/_meta.json | 8 ++
pages/id/guide/certificates/_meta.json | 7 ++
.../guide/certificates/download-install.mdx | 43 ++++++++
pages/id/guide/certificates/renewal.mdx | 60 ++++++++++++
pages/id/guide/certificates/request-new.mdx | 51 ++++++++++
pages/id/guide/certificates/revocation.mdx | 22 +++++
pages/id/guide/certificates/view-details.mdx | 42 ++++++++
pages/id/guide/concepts/_meta.json | 4 +
pages/id/guide/concepts/pki-fundamentals.mdx | 58 +++++++++++
.../id/guide/concepts/trust-architecture.mdx | 50 ++++++++++
pages/id/guide/getting-started/_meta.json | 4 +
.../getting-started/access-dashboard.mdx | 96 ++++++++++++++++++
.../guide/getting-started/install-root-ca.mdx | 64 ++++++++++++
pages/id/guide/index.mdx | 23 +++++
pages/id/guide/integrations/_meta.json | 4 +
pages/id/guide/integrations/smime.mdx | 77 +++++++++++++++
pages/id/guide/integrations/web-servers.mdx | 78 +++++++++++++++
pages/id/guide/troubleshooting/_meta.json | 4 +
.../guide/troubleshooting/browser-errors.mdx | 43 ++++++++
.../guide/troubleshooting/developer-tools.mdx | 97 +++++++++++++++++++
pages/id/index.mdx | 3 +
pages/index.mdx | 3 -
theme.config.tsx | 6 +-
54 files changed, 980 insertions(+), 15 deletions(-)
create mode 100644 pages/en/_meta.json
rename pages/{ => en}/developer/_meta.json (100%)
rename pages/{ => en}/developer/endpoints.mdx (100%)
rename pages/{ => en}/developer/index.mdx (100%)
rename pages/{ => en}/guide/_meta.json (100%)
rename pages/{ => en}/guide/certificates/_meta.json (100%)
rename pages/{ => en}/guide/certificates/download-install.mdx (100%)
rename pages/{ => en}/guide/certificates/renewal.mdx (100%)
rename pages/{ => en}/guide/certificates/request-new.mdx (100%)
rename pages/{ => en}/guide/certificates/revocation.mdx (100%)
rename pages/{ => en}/guide/certificates/view-details.mdx (100%)
rename pages/{ => en}/guide/concepts/_meta.json (100%)
rename pages/{ => en}/guide/concepts/pki-undamentals.mdx (100%)
rename pages/{ => en}/guide/concepts/trust-architecture.mdx (100%)
rename pages/{ => en}/guide/getting-started/_meta.json (100%)
rename pages/{ => en}/guide/getting-started/access-dashboard.mdx (100%)
rename pages/{ => en}/guide/getting-started/install-root-ca.mdx (96%)
rename pages/{ => en}/guide/index.mdx (100%)
rename pages/{ => en}/guide/integrations/_meta.json (100%)
rename pages/{ => en}/guide/integrations/smime.mdx (100%)
rename pages/{ => en}/guide/integrations/web-servers.mdx (100%)
rename pages/{ => en}/guide/troubleshooting/_meta.json (100%)
rename pages/{ => en}/guide/troubleshooting/browser-errors.mdx (100%)
rename pages/{ => en}/guide/troubleshooting/developer-tools.mdx (100%)
create mode 100644 pages/en/index.mdx
create mode 100644 pages/id/_meta.json
create mode 100644 pages/id/developer/_meta.json
create mode 100644 pages/id/developer/endpoints.mdx
create mode 100644 pages/id/developer/index.mdx
create mode 100644 pages/id/guide/_meta.json
create mode 100644 pages/id/guide/certificates/_meta.json
create mode 100644 pages/id/guide/certificates/download-install.mdx
create mode 100644 pages/id/guide/certificates/renewal.mdx
create mode 100644 pages/id/guide/certificates/request-new.mdx
create mode 100644 pages/id/guide/certificates/revocation.mdx
create mode 100644 pages/id/guide/certificates/view-details.mdx
create mode 100644 pages/id/guide/concepts/_meta.json
create mode 100644 pages/id/guide/concepts/pki-fundamentals.mdx
create mode 100644 pages/id/guide/concepts/trust-architecture.mdx
create mode 100644 pages/id/guide/getting-started/_meta.json
create mode 100644 pages/id/guide/getting-started/access-dashboard.mdx
create mode 100644 pages/id/guide/getting-started/install-root-ca.mdx
create mode 100644 pages/id/guide/index.mdx
create mode 100644 pages/id/guide/integrations/_meta.json
create mode 100644 pages/id/guide/integrations/smime.mdx
create mode 100644 pages/id/guide/integrations/web-servers.mdx
create mode 100644 pages/id/guide/troubleshooting/_meta.json
create mode 100644 pages/id/guide/troubleshooting/browser-errors.mdx
create mode 100644 pages/id/guide/troubleshooting/developer-tools.mdx
create mode 100644 pages/id/index.mdx
delete mode 100644 pages/index.mdx
diff --git a/next.config.js b/next.config.js
index f84b98c..aaaa9e7 100644
--- a/next.config.js
+++ b/next.config.js
@@ -4,7 +4,10 @@ const withNextra = require('nextra')({
})
module.exports = withNextra({
- output: 'export',
+ i18n: {
+ locales: ['en', 'id'],
+ defaultLocale: 'en',
+ },
images: {
unoptimized: true,
},
diff --git a/pages/_meta.json b/pages/_meta.json
index b75a405..c574348 100644
--- a/pages/_meta.json
+++ b/pages/_meta.json
@@ -1,15 +1,10 @@
{
- "index": {
- "title": "Home",
+ "en": {
"type": "page",
"display": "hidden"
},
- "guide": {
- "title": "User Guide",
- "type": "page"
- },
- "developer": {
- "title": "Developer API",
- "type": "page"
+ "id": {
+ "type": "page",
+ "display": "hidden"
}
}
\ No newline at end of file
diff --git a/pages/en/_meta.json b/pages/en/_meta.json
new file mode 100644
index 0000000..b75a405
--- /dev/null
+++ b/pages/en/_meta.json
@@ -0,0 +1,15 @@
+{
+ "index": {
+ "title": "Home",
+ "type": "page",
+ "display": "hidden"
+ },
+ "guide": {
+ "title": "User Guide",
+ "type": "page"
+ },
+ "developer": {
+ "title": "Developer API",
+ "type": "page"
+ }
+}
\ No newline at end of file
diff --git a/pages/developer/_meta.json b/pages/en/developer/_meta.json
similarity index 100%
rename from pages/developer/_meta.json
rename to pages/en/developer/_meta.json
diff --git a/pages/developer/endpoints.mdx b/pages/en/developer/endpoints.mdx
similarity index 100%
rename from pages/developer/endpoints.mdx
rename to pages/en/developer/endpoints.mdx
diff --git a/pages/developer/index.mdx b/pages/en/developer/index.mdx
similarity index 100%
rename from pages/developer/index.mdx
rename to pages/en/developer/index.mdx
diff --git a/pages/guide/_meta.json b/pages/en/guide/_meta.json
similarity index 100%
rename from pages/guide/_meta.json
rename to pages/en/guide/_meta.json
diff --git a/pages/guide/certificates/_meta.json b/pages/en/guide/certificates/_meta.json
similarity index 100%
rename from pages/guide/certificates/_meta.json
rename to pages/en/guide/certificates/_meta.json
diff --git a/pages/guide/certificates/download-install.mdx b/pages/en/guide/certificates/download-install.mdx
similarity index 100%
rename from pages/guide/certificates/download-install.mdx
rename to pages/en/guide/certificates/download-install.mdx
diff --git a/pages/guide/certificates/renewal.mdx b/pages/en/guide/certificates/renewal.mdx
similarity index 100%
rename from pages/guide/certificates/renewal.mdx
rename to pages/en/guide/certificates/renewal.mdx
diff --git a/pages/guide/certificates/request-new.mdx b/pages/en/guide/certificates/request-new.mdx
similarity index 100%
rename from pages/guide/certificates/request-new.mdx
rename to pages/en/guide/certificates/request-new.mdx
diff --git a/pages/guide/certificates/revocation.mdx b/pages/en/guide/certificates/revocation.mdx
similarity index 100%
rename from pages/guide/certificates/revocation.mdx
rename to pages/en/guide/certificates/revocation.mdx
diff --git a/pages/guide/certificates/view-details.mdx b/pages/en/guide/certificates/view-details.mdx
similarity index 100%
rename from pages/guide/certificates/view-details.mdx
rename to pages/en/guide/certificates/view-details.mdx
diff --git a/pages/guide/concepts/_meta.json b/pages/en/guide/concepts/_meta.json
similarity index 100%
rename from pages/guide/concepts/_meta.json
rename to pages/en/guide/concepts/_meta.json
diff --git a/pages/guide/concepts/pki-undamentals.mdx b/pages/en/guide/concepts/pki-undamentals.mdx
similarity index 100%
rename from pages/guide/concepts/pki-undamentals.mdx
rename to pages/en/guide/concepts/pki-undamentals.mdx
diff --git a/pages/guide/concepts/trust-architecture.mdx b/pages/en/guide/concepts/trust-architecture.mdx
similarity index 100%
rename from pages/guide/concepts/trust-architecture.mdx
rename to pages/en/guide/concepts/trust-architecture.mdx
diff --git a/pages/guide/getting-started/_meta.json b/pages/en/guide/getting-started/_meta.json
similarity index 100%
rename from pages/guide/getting-started/_meta.json
rename to pages/en/guide/getting-started/_meta.json
diff --git a/pages/guide/getting-started/access-dashboard.mdx b/pages/en/guide/getting-started/access-dashboard.mdx
similarity index 100%
rename from pages/guide/getting-started/access-dashboard.mdx
rename to pages/en/guide/getting-started/access-dashboard.mdx
diff --git a/pages/guide/getting-started/install-root-ca.mdx b/pages/en/guide/getting-started/install-root-ca.mdx
similarity index 96%
rename from pages/guide/getting-started/install-root-ca.mdx
rename to pages/en/guide/getting-started/install-root-ca.mdx
index 5a420bc..907bf0a 100644
--- a/pages/guide/getting-started/install-root-ca.mdx
+++ b/pages/en/guide/getting-started/install-root-ca.mdx
@@ -53,7 +53,7 @@ Select your distribution to get the optimized installation command:
---
-import { DynamicInstallationGuide } from '../../../components/DynamicInstallationGuide'
+import { DynamicInstallationGuide } from '../../../../components/DynamicInstallationGuide'
## Individual Certificate Installation
diff --git a/pages/guide/index.mdx b/pages/en/guide/index.mdx
similarity index 100%
rename from pages/guide/index.mdx
rename to pages/en/guide/index.mdx
diff --git a/pages/guide/integrations/_meta.json b/pages/en/guide/integrations/_meta.json
similarity index 100%
rename from pages/guide/integrations/_meta.json
rename to pages/en/guide/integrations/_meta.json
diff --git a/pages/guide/integrations/smime.mdx b/pages/en/guide/integrations/smime.mdx
similarity index 100%
rename from pages/guide/integrations/smime.mdx
rename to pages/en/guide/integrations/smime.mdx
diff --git a/pages/guide/integrations/web-servers.mdx b/pages/en/guide/integrations/web-servers.mdx
similarity index 100%
rename from pages/guide/integrations/web-servers.mdx
rename to pages/en/guide/integrations/web-servers.mdx
diff --git a/pages/guide/troubleshooting/_meta.json b/pages/en/guide/troubleshooting/_meta.json
similarity index 100%
rename from pages/guide/troubleshooting/_meta.json
rename to pages/en/guide/troubleshooting/_meta.json
diff --git a/pages/guide/troubleshooting/browser-errors.mdx b/pages/en/guide/troubleshooting/browser-errors.mdx
similarity index 100%
rename from pages/guide/troubleshooting/browser-errors.mdx
rename to pages/en/guide/troubleshooting/browser-errors.mdx
diff --git a/pages/guide/troubleshooting/developer-tools.mdx b/pages/en/guide/troubleshooting/developer-tools.mdx
similarity index 100%
rename from pages/guide/troubleshooting/developer-tools.mdx
rename to pages/en/guide/troubleshooting/developer-tools.mdx
diff --git a/pages/en/index.mdx b/pages/en/index.mdx
new file mode 100644
index 0000000..a45ad62
--- /dev/null
+++ b/pages/en/index.mdx
@@ -0,0 +1,3 @@
+import { LandingPage } from '../../components/LandingPage'
+
+
diff --git a/pages/id/_meta.json b/pages/id/_meta.json
new file mode 100644
index 0000000..5c87116
--- /dev/null
+++ b/pages/id/_meta.json
@@ -0,0 +1,15 @@
+{
+ "index": {
+ "title": "Beranda",
+ "type": "page",
+ "display": "hidden"
+ },
+ "guide": {
+ "title": "Panduan Pengguna",
+ "type": "page"
+ },
+ "developer": {
+ "title": "Developer API",
+ "type": "page"
+ }
+}
\ No newline at end of file
diff --git a/pages/id/developer/_meta.json b/pages/id/developer/_meta.json
new file mode 100644
index 0000000..6084e96
--- /dev/null
+++ b/pages/id/developer/_meta.json
@@ -0,0 +1,4 @@
+{
+ "index": "Dokumentasi API",
+ "endpoints": "Titik Akhir (Endpoints)"
+}
\ No newline at end of file
diff --git a/pages/id/developer/endpoints.mdx b/pages/id/developer/endpoints.mdx
new file mode 100644
index 0000000..f7c3143
--- /dev/null
+++ b/pages/id/developer/endpoints.mdx
@@ -0,0 +1,71 @@
+import { Tabs } from 'nextra/components'
+import { Code, Terminal, Send, ShieldCheck } from 'lucide-react'
+
+# Titik Akhir (Endpoints)
+
+Gunakan titik akhir API berikut untuk melakukan integrasi programatik dengan layanan TrustLab.
+
+## Dasar URL
+Semua permintaan API dilakukan ke:
+`https://trustlab.dyzulk.com/api`
+
+---
+
+## Pengambilan Sertifikat Publik
+
+Endpoint ini digunakan untuk mengambil informasi publik mengenai sertifikat atau CA.
+
+### 1. Unduh Root CA
+Mengunduh sertifikat root pemegang kepercayaan utama.
+
+- **Endpoint**: `GET /ca/root/download`
+- **Output**: File `trustlab-root.crt`
+
+### 2. Lihat Detail Sertifikat (via Serial)
+Mendapatkan metadata sertifikat berdasarkan nomor serinya.
+
+- **Endpoint**: `GET /certificates/detail/{serial_number}`
+- **Respon Contoh**:
+```json
+{
+ "serial": "12345-ABCDE",
+ "common_name": "myserver.local",
+ "issuer": "TrustLab Intermediate CA",
+ "not_after": "2025-12-31T23:59:59Z",
+ "status": "VALID"
+}
+```
+
+---
+
+## Contoh Implementasi (cURL)
+
+
+
+ ```bash
+ curl -O https://trustlab.dyzulk.com/api/ca/root/download
+ ```
+
+
+ ```bash
+ curl https://trustlab.dyzulk.com/api/certificates/detail/99887766
+ ```
+
+
+
+---
+
+## Status Respon API
+
+TrustLab menggunakan kode status HTTP standar:
+
+| Kode | Arti |
+| :--- | :--- |
+| `200 OK` | Permintaan berhasil. |
+| `404 Not Found` | Sertifikat tidak ditemukan. |
+| `500 Server Error` | Terjadi masalah pada database TrustLab. |
+
+---
+
+> [!IMPORTANT]
+> Fitur manajemen sertifikat penuh (Create, Revoke, Renew) via API saat ini masih dalam tahap **Beta Tertutup**. Silakan hubungi admin untuk mendapatkan akses API Key jika Anda memerlukannya untuk otomatisasi infrastruktur.
diff --git a/pages/id/developer/index.mdx b/pages/id/developer/index.mdx
new file mode 100644
index 0000000..b0c0c14
--- /dev/null
+++ b/pages/id/developer/index.mdx
@@ -0,0 +1,20 @@
+# Dokumentasi API Developer
+
+Gunakan API TrustLab untuk mengotomatiskan manajemen siklus hidup sertifikat dalam alur kerja pengembangan atau infrastruktur Anda.
+
+## Gambaran Umum
+
+API kami berbasis REST dan mengembalikan respon dalam format JSON. Saat ini, API mendukung operasi dasar untuk pengambilan informasi sertifikat publik.
+
+## Autentikasi
+
+Saat ini, endpoint publik untuk pengambilan sertifikat tidak memerlukan autentikasi API Key khusus. Namun, penggunaan secara massal untuk endpoint manajemen akan segera hadir.
+
+## Endpoint Utama
+
+- **[Daftar Endpoint](/id/developer/endpoints)**: Lihat daftar lengkap fungsi API yang tersedia saat ini.
+
+---
+
+> [!NOTE]
+> Dokumentasi API sedang dikembangkan lebih lanjut. Hubungi tim dukungan kami jika Anda memerlukan akses integrasi skala besar.
diff --git a/pages/id/guide/_meta.json b/pages/id/guide/_meta.json
new file mode 100644
index 0000000..4999756
--- /dev/null
+++ b/pages/id/guide/_meta.json
@@ -0,0 +1,8 @@
+{
+ "index": "Panduan Pengguna",
+ "getting-started": "Mulai Cepat",
+ "concepts": "Konsep Inti",
+ "certificates": "Operasi Sertifikat",
+ "integrations": "Integrasi",
+ "troubleshooting": "Pemecahan Masalah"
+}
\ No newline at end of file
diff --git a/pages/id/guide/certificates/_meta.json b/pages/id/guide/certificates/_meta.json
new file mode 100644
index 0000000..007dfa2
--- /dev/null
+++ b/pages/id/guide/certificates/_meta.json
@@ -0,0 +1,7 @@
+{
+ "request-new": "Minta Sertifikat Baru",
+ "download-install": "Unduh & Format",
+ "view-details": "Lihat Detail",
+ "renewal": "Proses Perpanjangan",
+ "revocation": "Pencabutan (Revocation)"
+}
\ No newline at end of file
diff --git a/pages/id/guide/certificates/download-install.mdx b/pages/id/guide/certificates/download-install.mdx
new file mode 100644
index 0000000..9efa6df
--- /dev/null
+++ b/pages/id/guide/certificates/download-install.mdx
@@ -0,0 +1,43 @@
+# Unduh & Format (PEM, PFX, JKS)
+
+Setelah sertifikat Anda diterbitkan, Anda dapat mengunduhnya dalam berbagai format yang sesuai untuk server dan aplikasi yang berbeda.
+
+## Format yang Tersedia
+
+| Format | Ekstensi | Digunakan Untuk |
+| :--- | :--- | :--- |
+| **PEM (Nginx/Apache)** | `.crt`, `.key` | Server web Linux standar. Anda mendapatkan file Sertifikat dan Private Key terpisah. |
+| **PFX / PKCS#12** | `.pfx`, `.p12` | IIS (Windows), Microsoft Exchange, Sertifikat Klien (S/MIME). Berisi key dan cert sekaligus. |
+| **JKS (Java)** | `.jks` | Aplikasi Java (Tomcat, Spring Boot). |
+
+## Cara Mengunduh (Salin & Simpan)
+
+Dashboard memungkinkan Anda untuk menyalin data mentah sertifikat secara langsung.
+
+1. Buka menu **"My Certificates"** dan klik tombol **View (Ikon Mata)** pada sertifikat Anda.
+2. **Sertifikat:** Gulir ke bagian "Certificate (CRT)" dan klik **Ikon Salin** di pojok kanan atas. Simpan ke dalam file bernama `domain.crt` atau `domain.pem`.
+3. **Private Key:** Gulir ke bagian "Private Key (KEY)", klik **Show**, lalu klik **Ikon Salin**. Simpan ke dalam file bernama `domain.key`.
+
+> [!TIP]
+> Gunakan editor teks murni (Notepad, VS Code, Nano) untuk menyimpan file-file ini. Jangan gunakan Word atau editor Rich Text.
+
+> [!WARNING]
+> **Private Key** dihasilkan secara aman secara lokal di browser/server. Jika Anda menghilangkannya, kunci tersebut **TIDAK BISA** dipulihkan. Anda harus melakukan revoke dan menerbitkan ulang sertifikat.
+
+## Contoh Instalasi
+
+### Nginx (PEM)
+```nginx
+server {
+ listen 443 ssl;
+ server_name internal.app;
+
+ ssl_certificate /etc/nginx/ssl/internal.app.crt;
+ ssl_certificate_key /etc/nginx/ssl/internal.app.key;
+}
+```
+
+### Windows (PFX)
+1. Klik dua kali file `.pfx` yang diunduh.
+2. Ikuti "Certificate Import Wizard".
+3. Saat diminta kata sandi, masukkan kata sandi yang Anda tetapkan saat mengunduh (atau kata sandi ekspor default yang disediakan di UI).
diff --git a/pages/id/guide/certificates/renewal.mdx b/pages/id/guide/certificates/renewal.mdx
new file mode 100644
index 0000000..e9c88ca
--- /dev/null
+++ b/pages/id/guide/certificates/renewal.mdx
@@ -0,0 +1,60 @@
+import { Steps } from 'nextra/components'
+import { RefreshCcw, Bell, ShieldCheck } from 'lucide-react'
+
+# Proses Perpanjangan
+
+Sertifikat SSL/TLS memiliki masa aktif yang terbatas. Di TrustLab, kami menyederhanakan proses perpanjangan (renewal) untuk memastikan layanan Anda tetap berjalan tanpa gangguan.
+
+## Kapan Harus Memperpanjang?
+
+- **Rekomendasi**: Lakukan perpanjangan **30 hari** sebelum sertifikat kadaluarsa.
+- **Notifikasi**: TrustLab akan mengirimkan pengingat email otomatis ke akun Anda pada H-30, H-7, dan H-1 sebelum masa berlaku habis.
+
+---
+
+## Proses Pembaruan
+
+Sertifikat memiliki masa berlaku untuk menjamin rotasi keamanan. TrustLab menyederhanakan proses pembaruan agar Anda tidak mengalami downtime.
+
+## Kapan Harus Memperbarui?
+Anda akan menerima notifikasi email:
+- **30 hari** sebelum kedaluwarsa.
+- **7 hari** sebelum kedaluwarsa.
+- **1 hari** sebelum kedaluwarsa.
+
+## Cara Memperbarui (Penerbitan Ulang Manual)
+
+Untuk memperbarui sertifikat, Anda cukup membuat sertifikat baru dengan nama domain yang sama.
+
+
+### Buka Dashboard
+Login ke [trustlab.dyzulk.com](https://trustlab.dyzulk.com) dan masuk ke menu **"Manage Certificates"**.
+
+1. Buka menu **Certificates** dan klik **"Generate New"**.
+2. **Identity**: Masukkan **Common Name (CN) yang sama** dengan sertifikat Anda yang akan habis masa berlakunya.
+3. **Generate**: Sistem akan menerbitkan sertifikat baru dengan masa berlaku yang segar.
+4. **Ganti**: Unduh `.crt` baru (dan `.key` jika Anda tidak menggunakan kembali CSR) dan ganti file di server Anda.
+
+
+> [!NOTE]
+> Sertifikat lama akan tetap valid sampai habis masa berlakunya secara alami. Anda dapat menghapusnya dengan aman setelah memastikan sertifikat baru berfungsi.
+
+## Apa yang Terjadi Selanjutnya?
+- **Sertifikat baru** dihasilkan dengan masa berlaku baru.
+- **Private Key** tetap sama (jika "Reuse Key" dipilih) ATAU kunci baru dihasilkan (disarankan).
+- Sertifikat lama tetap valid hingga tanggal kedaluwarsa aslinya (kecuali dicabut).
+
+> [!IMPORTANT]
+> Anda harus **mengunduh dan menginstal sertifikat baru** di server Anda. Pembaruan **tidak terjadi otomatis** di sisi server kecuali Anda menggunakan integrasi ACME kami.
+
+---
+
+## Penting: Mengapa Harus Perpanjang?
+
+Jika sertifikat kadaluarsa sebelum diganti:
+- Browser akan memblokir akses ke situs Anda dengan pesan **"Your connection is not private"**.
+- API internal akan gagal melakukan enkripsi (SSL Handshake Error).
+- Pengguna akan kehilangan kepercayaan terhadap keamanan jaringan Anda.
+
+> [!TIP]
+> Perpanjangan di TrustLab tidak mengubah Root CA Anda. Anda **tidak perlu** menginstal ulang Root CA di perangkat klien setiap kali Anda memperpanjang sertifikat server.
diff --git a/pages/id/guide/certificates/request-new.mdx b/pages/id/guide/certificates/request-new.mdx
new file mode 100644
index 0000000..2de323e
--- /dev/null
+++ b/pages/id/guide/certificates/request-new.mdx
@@ -0,0 +1,51 @@
+import { Steps, Callout, Cards, Card } from 'nextra/components'
+import { FileBadge, ShieldCheck, Globe, Code, Save, AlertTriangle } from 'lucide-react'
+
+# Menerbitkan Sertifikat Baru
+
+TrustLab menyediakan wizard yang disederhanakan untuk menghasilkan sertifikat SSL/TLS pribadi untuk infrastruktur internal Anda.
+
+## Prasyarat
+Sebelum memulai, pastikan Anda memiliki:
+* Akses akun TrustLab yang aktif.
+* **Root CA** telah terinstal di perangkat Anda (agar mempercayai sertifikat yang diterbitkan).
+
+---
+
+
+### 1. Buka Menu Sertifikat
+Akses halaman **Certificates**. Tampilan ini mencantumkan semua sertifikat aktif dan kedaluwarsa Anda. Klik tombol **"Generate New"** (atau "+") untuk memulai.
+
+
+
+### 2. Masukkan Detail Domain (Mode Default)
+Secara default, Anda hanya perlu memberikan Identitas. Sistem akan mengisi otomatis metadata Organisasi & Lokasi.
+
+
+
+* **Common Name (CN)**: Domain utama (misalnya, `app.internal`).
+* **SANs**: Domain tambahan atau alamat IP.
+* **Key Strength**: Pilih tingkat enkripsi.
+ 
+ * **2048-bit**: Standar industri, kompatibel dengan semua perangkat.
+ * **4096-bit**: Keamanan lebih tinggi, sedikit lebih intensif pada CPU.
+
+### 3. Kustomisasi CSR (Kontrol Manual)
+Aktifkan **"Manual Control"** jika Anda perlu menimpa bidang Identitas default (misalnya, untuk kantor cabang tertentu atau entitas hukum khusus).
+
+
+
+* **Organization (O)**: Ganti nama perusahaan default.
+* **Locality (L) / State (ST)**: Atur data lokasi spesifik.
+* **Country (C)**: Kode ISO Negara.
+
+
+### 4. Terbitkan & Simpan
+Klik **Generate**.
+* **Certificate (.pem)** dan **Private Key (.key)** akan dihasilkan secara instan.
+* Anda dapat menyalinnya segera atau mengaksesnya nanti dari halaman **Certificate Details**.
+
+}>
+ **Penyimpanan:** Private Key Anda disimpan dengan aman di server (dienkripsi). Anda dapat melihatnya kapan saja dengan mengklik **"View Details"** pada daftar sertifikat.
+
+
diff --git a/pages/id/guide/certificates/revocation.mdx b/pages/id/guide/certificates/revocation.mdx
new file mode 100644
index 0000000..90d6331
--- /dev/null
+++ b/pages/id/guide/certificates/revocation.mdx
@@ -0,0 +1,22 @@
+# Pencabutan (Revocation)
+
+Pencabutan membatalkan validitas sertifikat sebelum tanggal kedaluwarsanya. Ini sangat penting jika Private Key Anda bocor atau hilang.
+
+## Kapan Harus Mencabut?
+- **Kebocoran Kunci (Key Compromise)**: Anda curiga seseorang telah mencuri Private Key Anda.
+- **Perubahan Layanan**: Nama domain secara efektif tidak lagi menjadi milik layanan tersebut.
+- **Kesalahan**: Sertifikat diterbitkan dengan detail yang salah.
+
+## Cara Menghapus / Mencabut
+
+Jika sertifikat bocor atau tidak lagi dibutuhkan, Anda dapat menghapusnya dari sistem.
+
+1. Buka daftar **Certificates**.
+2. Cari sertifikat yang ingin dihapus.
+3. Klik **Ikon Tempat Sampah** (Delete) di sisi kanan baris.
+4. **Konfirmasi**: Ketik `DELETE` di modal konfirmasi untuk menghapus sertifikat dan private key-nya secara permanen dari TrustLab.
+
+
+
+## CRL (Certificate Revocation List)
+Setelah dicabut, nomor seri sertifikat akan ditambahkan ke TrustLab CRL. Semua klien yang memeriksa CRL akan segera menolak sertifikat tersebut.
diff --git a/pages/id/guide/certificates/view-details.mdx b/pages/id/guide/certificates/view-details.mdx
new file mode 100644
index 0000000..e929ef4
--- /dev/null
+++ b/pages/id/guide/certificates/view-details.mdx
@@ -0,0 +1,42 @@
+import { Steps } from 'nextra/components'
+import { Search, Eye, Clipboard, ShieldAlert } from 'lucide-react'
+
+# Lihat Detail Sertifikat
+
+Setiap sertifikat di TrustLab memiliki metadata lengkap yang bisa Anda audit kapan saja untuk memastikan kesesuaian identitas dan keamanan.
+
+## Cara Melihat Detail
+
+
+### Navigasi ke List
+Di menu utama Dashboard, klik **"Manage Certificates"**. Anda akan melihat daftar semua sertifikat yang pernah diterbitkan.
+
+### Klik Ikon Mata
+Gunakan kolom pencarian untuk menemukan domain Anda. Klik tombol **"View Details"** (ikon mata 👁️) di sisi kanan baris sertifikat.
+
+### Tinjau Tab Informasi
+Anda akan melihat detail seperti:
+- **Serial Number**: ID unik sertifikat Anda.
+- **Validity period**: Tanggal mulai dan berakhir.
+- **Issuer**: CA mana yang menandatangani (TrustLab Intermediate).
+- **Public Key Info**: Algoritma yang digunakan (RSA 2048/4096).
+
+
+---
+
+## Audit Metadata
+
+Penting untuk memeriksa detail berikut secara berkala:
+
+- **Thumbprint (SHA-1/SHA-256)**: Gunakan fingerprint ini untuk memverifikasi apakah sertifikat yang terpasang di server benar-benar yang Anda terbitkan dari TrustLab.
+- **Subject Alternative Names (SAN)**: Pastikan semua alias domain yang dibutuhkan sudah terdaftar di sini.
+- **Status**: Pastikan statusnya **Valid** (hijau). Jika warnanya merah, berarti sertifikat telah kadaluarsa atau dicabut.
+
+---
+
+## Keamanan Data Detail
+
+Meskipun detail sertifikat (Public) aman untuk dilihat, tim TrustLab menyarankan untuk membatasi akses ke dashboard hanya untuk admin sistem yang berkepentingan untuk mencegah kebocoran informasi topologi jaringan.
+
+> [!TIP]
+> Anda bisa menyalin (copy) Serial Number secara cepat melalui tombol clipboard di samping teks untuk keperluan dokumentasi internal atau konfigurasi firewall.
diff --git a/pages/id/guide/concepts/_meta.json b/pages/id/guide/concepts/_meta.json
new file mode 100644
index 0000000..f75aa11
--- /dev/null
+++ b/pages/id/guide/concepts/_meta.json
@@ -0,0 +1,4 @@
+{
+ "pki-fundamentals": "Dasar-Dasar PKI",
+ "trust-architecture": "Arsitektur Kepercayaan"
+}
\ No newline at end of file
diff --git a/pages/id/guide/concepts/pki-fundamentals.mdx b/pages/id/guide/concepts/pki-fundamentals.mdx
new file mode 100644
index 0000000..1ee088f
--- /dev/null
+++ b/pages/id/guide/concepts/pki-fundamentals.mdx
@@ -0,0 +1,58 @@
+import { Steps } from 'nextra/components'
+import { Shield, Key, Lock, Globe } from 'lucide-react'
+
+# Dasar-Dasar PKI
+
+Memahami cara kerja **Public Key Infrastructure (PKI)** sangat penting untuk mengelola keamanan jaringan internal Anda. TrustLab menyederhanakan konsep kompleks ini menjadi alur kerja yang mudah dikelola.
+
+## Apa itu PKI?
+
+PKI adalah kerangka kerja yang terdiri dari peran, kebijakan, perangkat lunak, dan perangkat keras yang digunakan untuk membuat, mengelola, mendistribusikan, menggunakan, menyimpan, dan mencabut sertifikat digital.
+
+---
+
+## Komponen Utama TrustLab
+
+TrustLab mengelola tiga pilar utama keamanan untuk Anda:
+
+### 1. Root Certificate Authority (CA)
+Akar dari kepercayaan di seluruh jaringan Anda. Root CA digunakan untuk menandatangani sertifikat lain di bawahnya. Jika perangkat mempercayai Root CA ini, mereka akan mempercayai semua sertifikat yang diterbitkannya.
+
+### 2. Intermediate CA
+Digunakan oleh TrustLab untuk operasional sehari-hari. Kami tidak menggunakan Root CA langsung untuk menandatangani sertifikat pengguna akhir (end-entity) demi alasan keamanan (isolasi).
+
+### 3. Sertifikat Pengguna Akhir
+Sertifikat SSL/TLS yang Anda pasang di server web, perangkat IoT, atau klien email. Inilah yang sebenarnya "mengamankan" koneksi Anda.
+
+---
+
+## Cara Kerja Kepercayaan (Trust)
+
+Bagaimana browser Anda tahu bahwa sebuah situs web itu aman?
+
+
+### Instalasi Akar
+Administrator menginstal Root CA TrustLab ke sistem trust store Anda.
+
+### Pengenalan Sertifikat
+Saat Anda mengakses situs internal, server menyajikan sertifikatnya.
+
+### Verifikasi Rantai
+Browser memeriksa: "Apakah sertifikat ini ditandatangani oleh pemegang yang saya percayai (Root CA)?"
+
+### Koneksi Aman
+Jika rantai valid, gembok hijau muncul dan enkripsi data dimulai.
+
+
+---
+
+## Mengapa PKI Privat?
+
+Mungkin Anda bertanya, kenapa tidak menggunakan CA publik seperti Let's Encrypt?
+
+1. **Domain Non-Publik**: CA publik tidak bisa mengeluarkan sertifikat untuk `.local` atau `.internal`.
+2. **Kontrol Penuh**: Anda menentukan masa berlaku, algoritma enkripsi, dan siapa yang berhak mendapatkan sertifikat.
+3. **Tanpa Validasi DNS**: Karena ini internal, Anda tidak perlu membuktikan kepemilikan domain ke pihak luar.
+
+> [!IMPORTANT]
+> Keamanan PKI privat Anda bergantung sepenuhnya pada **kerahasiaan Private Key Root CA**. TrustLab menyimpan key ini dengan enkripsi kuat untuk memastikan integritas jaringan Anda.
diff --git a/pages/id/guide/concepts/trust-architecture.mdx b/pages/id/guide/concepts/trust-architecture.mdx
new file mode 100644
index 0000000..213e8ab
--- /dev/null
+++ b/pages/id/guide/concepts/trust-architecture.mdx
@@ -0,0 +1,50 @@
+import { Steps } from 'nextra/components'
+import { Shield, Lock, Server, Users } from 'lucide-react'
+
+# Arsitektur Kepercayaan
+
+Arsitektur TrustLab dibangun di atas prinsip isolasi dan keamanan berlapis. Kami menggunakan struktur otoritas bertingkat untuk memastikan integritas jaringan Anda tetap terjaga.
+
+## Hirarki Otoritas Sertifikat
+
+Untuk keamanan maksimal, TrustLab tidak menggunakan satu kunci untuk semua hal. Kami menggunakan hirarki berikut:
+
+### 1. Root CA (Offline Root)
+Ini adalah "Ayah" dari segala kepercayaan. Key ini sangat sensitif dan idealnya jarang digunakan. Dalam infrastruktur yang sangat ketat, Root CA biasanya tetap offline.
+
+### 2. Intermediate CA (Issuing CA)
+TrustLab secara otomatis membuat Intermediate CA yang menandatangani sertifikat pengguna Anda. Jika Intermediate CA disusupi, Root CA dapat mencabutnya tanpa merusak seluruh ekosistem keamanan Anda.
+
+### 3. End-Entity Certificates
+Aplikasi atau server Anda menggunakan sertifikat ini. Mereka memiliki masa berlaku yang lebih pendek (biasanya 1 tahun atau kurang) untuk meminimalkan risiko.
+
+---
+
+## Alur Penerbitan Sertifikat
+
+Bagaimana data Anda berpindah dari dashboard hingga menjadi sertifikat sah?
+
+
+### Permintaan Klien (CSR)
+Dashboard membuat sepasang kunci (Public & Private). Public key dikirim dalam format Certificate Signing Request (CSR).
+
+### Validasi Internal
+Dashboard TrustLab memverifikasi identitas Anda dan hak akses Anda terhadap domain yang diminta.
+
+### Penandatanganan CA
+Intermediate CA menandatangani CSR tersebut menggunakan Private Key CA-nya sendiri.
+
+### Pengiriman Sertifikat
+Sertifikat hasil tanda tangan dikembalikan ke Dashboard untuk Anda unduh.
+
+
+---
+
+## Keamanan Kunci (Key Security)
+
+- **Enkripsi saat Istirahat (Encryption at Rest)**: Semua Private Key disimpan dalam database menggunakan enkripsi tingkat tinggi (AES-256).
+- **Isolasi Database**: Hanya layanan CA internal yang memiliki akses ke modul yang mendekripsi key tersebut.
+- **Audit Logs**: Setiap aksi penandatanganan dicatat dalam log sistem yang tidak dapat diubah (immutable logs).
+
+> [!TIP]
+> Jangan pernah membagikan file Private Key (`.key`) Anda kepada siapapun. Siapapun yang memiliki key tersebut bisa menyamar sebagai server Anda.
diff --git a/pages/id/guide/getting-started/_meta.json b/pages/id/guide/getting-started/_meta.json
new file mode 100644
index 0000000..80dd6d6
--- /dev/null
+++ b/pages/id/guide/getting-started/_meta.json
@@ -0,0 +1,4 @@
+{
+ "install-root-ca": "Instal Root CA",
+ "access-dashboard": "Akses Dashboard"
+}
\ No newline at end of file
diff --git a/pages/id/guide/getting-started/access-dashboard.mdx b/pages/id/guide/getting-started/access-dashboard.mdx
new file mode 100644
index 0000000..24c4f45
--- /dev/null
+++ b/pages/id/guide/getting-started/access-dashboard.mdx
@@ -0,0 +1,96 @@
+import { Callout, Steps, Cards, Card } from 'nextra/components'
+import { Monitor, Smartphone, LayoutDashboard, Key, Shield, Info, Clock, AlertTriangle } from 'lucide-react'
+
+# Mengakses Dashboard
+
+**TrustLab Dashboard** adalah pusat kendali utama Anda untuk mengelola sertifikat. Di sini Anda dapat meminta sertifikat baru, mengunduh kunci, dan mengelola sertifikat yang sudah ada.
+
+
+
+## Metode Autentikasi
+
+Kami mengutamakan keamanan dengan menawarkan opsi autentikasi modern tanpa kata sandi (passwordless).
+
+
+ } title="SSO (Google / GitHub)" href="#1-single-sign-on-sso" arrow />
+ } title="Magic Link (Email)" href="#2-magic-link" arrow />
+
+
+### 1. Single Sign-On (SSO)
+Cara tercepat untuk masuk. Klik **Continue with Google** atau **Continue with GitHub**.
+
+}>
+**Perilaku SSO:**
+* **Pengguna Lama:** Anda hanya dapat Masuk via SSO jika alamat email Anda sudah terdaftar.
+* **Pengguna Baru:** Anda dapat **Mendaftar** akun baru secara instan dengan mengklik tombol Social Login pada halaman *Sign In* atau *Sign Up*.
+
+
+### 2. Magic Link
+Masuk yang aman dan tanpa kata sandi melalui email.
+
+
+### Masukkan Email
+Masukkan alamat email terdaftar Anda pada formulir login dan klik **"Continue with Email"**.
+
+### Cek Kotak Masuk
+Anda akan menerima email berisi tautan login unik yang sensitif terhadap waktu.
+
+### Klik untuk Verifikasi
+Klik tombol **"Sign in to TrustLab"** di dalam email tersebut. Anda akan langsung masuk ke dashboard secara instan.
+
+
+}>
+ **Kedaluwarsa:** Tautan Magic Link hanya berlaku selama **15 menit**. Jika kedaluwarsa, cukup minta tautan baru dengan memasukkan email Anda kembali.
+
+
+## Ikhtisar Dashboard
+
+Setelah berhasil masuk, Anda akan mendarat di dashboard utama.
+
+
+
+Hub pusat ini memungkinkan Anda untuk mengakses:
+* **Active Certificates**: Lihat semua sertifikat valid yang diterbitkan untuk Anda.
+* **Request Certificate**: Wizard untuk menghasilkan Private Key dan CSR baru.
+* **Revocation**: Antarmuka untuk menandai sertifikat yang hilang atau bocor sebagai tidak valid.
+
+## Registrasi
+
+Pengguna baru dapat membuat akun untuk mulai mengelola sertifikat.
+
+
+
+
+### Opsi A: Registrasi Sosial (Instan)
+1. Klik **Continue with Google** atau **Continue with GitHub**.
+2. **Atur Kata Sandi:** Pertama, pastikan Anda telah [**Menginstal Root CA**](/id/guide/getting-started/install-root-ca) di perangkat Anda.
+
+
+
+### Opsi B: Registrasi Email
+1. Klik **"Sign up"** atau isi formulir.
+2. Berikan detail dan kata sandi Anda.
+3. **Verifikasi Email:** Klik tautan yang dikirim ke kotak masuk Anda untuk mengaktifkan.
+
+
+## Pemulihan Kata Sandi
+
+Jika Anda kehilangan akses ke akun, Anda dapat mengatur ulang kata sandi dengan aman.
+
+
+
+1. Klik **"Forgot password?"** pada layar login.
+2. Masukkan alamat email terdaftar Anda.
+3. Cek kotak masuk Anda untuk tautan pengaturan ulang kata sandi.
+4. Buat kata sandi baru dan masuk.
+
+## Pemecahan Masalah
+
+### Saya tidak menerima Magic Link
+* **Cek Spam/Junk**: Seringkali masuk ke sana untuk domain perusahaan.
+* **Tunggu 1-2 Menit**: Pengiriman email terkadang tertunda.
+* **Whitelist Pengirim**: Tambahkan `@trustlab.dyzulk.com` ke daftar **Safe Senders** penyedia email Anda agar tidak diblokir.
+
+### Akses Ditolak / Pengguna Tidak Ditemukan
+* **Salah Ketik**: Periksa kembali alamat email Anda.
+* **Belum Terdaftar**: Jika Anda belum membuat akun, silakan **Daftar** terlebih dahulu. Anda tidak dapat masuk via SSO jika email Anda belum ada di sistem kami (kecuali Anda menggunakan alur Pendaftaran).
diff --git a/pages/id/guide/getting-started/install-root-ca.mdx b/pages/id/guide/getting-started/install-root-ca.mdx
new file mode 100644
index 0000000..baac0ad
--- /dev/null
+++ b/pages/id/guide/getting-started/install-root-ca.mdx
@@ -0,0 +1,64 @@
+import { Tabs, Steps, Cards, Card, Callout } from 'nextra/components'
+import { Monitor, Smartphone, AlertTriangle, Info } from 'lucide-react'
+
+# Menginstal Root CA
+
+Untuk memastikan browser Anda mempercayai sertifikat yang diterbitkan oleh TrustLab, Anda harus menginstal Root CA kami.
+
+## Instalasi Cepat (Bundle)
+
+Instal secara instan **SEMUA** sertifikat Root & Intermediate TrustLab menggunakan skrip bundle otomatis kami.
+
+### Linux / Server (CLI)
+
+Pilih distribusi Anda untuk mendapatkan perintah instalasi yang dioptimalkan:
+
+
+
+ ```bash
+ sudo apt update && sudo apt install -y curl && curl -sL https://cdn.trustlab.dyzulk.com/ca/bundles/trustlab-all.sh | sudo bash
+ ```
+
+
+ ```bash
+ (sudo yum install -y curl || sudo dnf install -y curl) && curl -sL https://cdn.trustlab.dyzulk.com/ca/bundles/trustlab-all.sh | sudo bash
+ ```
+
+
+ ```bash
+ sudo pacman -Sy --noconfirm curl && curl -sL https://cdn.trustlab.dyzulk.com/ca/bundles/trustlab-all.sh | sudo bash
+ ```
+
+
+ ```bash
+ curl -sL https://cdn.trustlab.dyzulk.com/ca/bundles/trustlab-all.sh | sudo bash
+ ```
+
+
+
+### Ekosistem Windows & Apple
+
+
+ } title="Windows Bundle Installer (.bat)" href="https://cdn.trustlab.dyzulk.com/ca/bundles/trustlab-all.bat" arrow />
+ } title="macOS / iOS Profile (.mobileconfig)" href="https://cdn.trustlab.dyzulk.com/ca/bundles/trustlab-all.mobileconfig" arrow />
+
+
+
+}>
+ **Pengguna Windows:** Anda **WAJIB** klik kanan file `.bat` dan pilih **"Run as Administrator"**. Mengklik dua kali secara langsung kemungkinan besar akan gagal karena batasan izin.
+
+
+
+}>
+ **Pengguna Apple:** Setelah mengunduh profil, buka **System Settings > Privacy & Security > Profiles** untuk menginstalnya. Untuk iOS, lihat bagian *Instalasi Sertifikat Individu* di bawah untuk langkah-langkah kepercayaan mendetail.
+
+
+---
+
+import { DynamicInstallationGuide } from '../../../../components/DynamicInstallationGuide'
+
+## Instalasi Sertifikat Individu
+
+Jika Anda perlu menginstal sertifikat tertentu secara individu (misal: hanya Root, atau Intermediate tertentu), gunakan panduan langsung di bawah ini.
+
+
diff --git a/pages/id/guide/index.mdx b/pages/id/guide/index.mdx
new file mode 100644
index 0000000..51dd9d9
--- /dev/null
+++ b/pages/id/guide/index.mdx
@@ -0,0 +1,23 @@
+# Panduan Pengguna TrustLab
+
+Selamat datang di dokumentasi resmi TrustLab. Panduan ini dirancang untuk membantu Anda memahami, menginstal, dan mengelola Otoritas Sertifikat (CA) privat Anda sendiri.
+
+## Apa itu TrustLab?
+
+TrustLab adalah solusi manajemen PKI (Public Key Infrastructure) yang disederhanakan untuk jaringan internal. Kami memungkinkan Anda untuk:
+
+- **Mengeluarkan Sertifikat SSL/TLS** untuk domain internal seperti `.local`, `.corp`, atau alamat IP privat.
+- **Mengamankan Komunikasi IoT** dan perangkat dalam jaringan lokal.
+- **Enkripsi Email (S/MIME)** untuk kerahasiaan data karyawan.
+- **Otomasi Integrasi** dengan web server modern seperti Nginx dan IIS.
+
+## Langkah Cepat
+
+1. **Instal Root CA**: Langkah pertama yang wajib dilakukan agar semua sertifikat Anda dipercaya oleh perangkat. [Baca selengkapnya](/id/guide/getting-started/install-root-ca)
+2. **Akses Dashboard**: Masuk ke portal manajemen Anda untuk mulai menerbitkan sertifikat. [Baca selengkapnya](/id/guide/getting-started/access-dashboard)
+3. **Terbitkan Sertifikat**: Pelajari cara membuat permintaan sertifikat baru dalam hitungan detik. [Baca selengkapnya](/id/guide/certificates/request-new)
+
+---
+
+> [!TIP]
+> Mulailah dari bagian **Mulai Cepat** untuk mendapatkan Certificate Authority yang berfungsi penuh dalam waktu kurang dari 5 menit.
diff --git a/pages/id/guide/integrations/_meta.json b/pages/id/guide/integrations/_meta.json
new file mode 100644
index 0000000..6d3ef99
--- /dev/null
+++ b/pages/id/guide/integrations/_meta.json
@@ -0,0 +1,4 @@
+{
+ "web-servers": "Konfigurasi Web Server",
+ "smime": "Keamanan Email S/MIME"
+}
\ No newline at end of file
diff --git a/pages/id/guide/integrations/smime.mdx b/pages/id/guide/integrations/smime.mdx
new file mode 100644
index 0000000..6b3a73d
--- /dev/null
+++ b/pages/id/guide/integrations/smime.mdx
@@ -0,0 +1,77 @@
+import { Steps, Callout, Tabs } from 'nextra/components'
+import { Mail, BadgeAlert, ShieldCheck } from 'lucide-react'
+
+# Keamanan Email S/MIME
+
+Secure/Multipurpose Internet Mail Extensions (S/MIME) memungkinkan Anda untuk **menandatangani** (membuktikan identitas) dan **mengenkripsi** (melindungi konten) pesan email.
+
+}>
+ **Hanya untuk Penggunaan Internal:**
+ Sertifikat TrustLab bersifat pribadi. Jika Anda mengirim email bertanda tangan ke **Penerima Eksternal** (misal: Gmail, Yahoo), mereka akan melihat peringatan "Tanda Tangan Tidak Dipercaya/Tidak Valid" karena mereka tidak mempercayai Root CA TrustLab.
+
+ **Gunakan ini hanya untuk komunikasi internal perusahaan.**
+
+
+## Panduan Pengaturan
+
+## Konfigurasi Microsoft Outlook
+
+
+
+ **Versi yang Didukung:** Outlook 365, 2019, 2016.
+
+
+ ### 1. Buka Trust Center
+ Buka **File > Options > Trust Center > Trust Center Settings**.
+
+ ### 2. Email Security
+ Pilih **Email Security** dari sidebar kiri.
+
+ ### 3. Impor Sertifikat
+ Di bawah *Encrypted Email*, klik **Settings...**
+ * **Signing Certificate**: Klik 'Choose' dan pilih sertifikat TrustLab Anda.
+ * **Encryption Certificate**: Sama seperti di atas.
+
+ ### 4. Simpan
+ Klik **OK** untuk menerapkan.
+
+
+
+ **Versi yang Didukung:** Outlook baru untuk Windows, OWA.
+ *Catatan: Memerlukan ekstensi S/MIME Control.*
+
+
+ ### 1. Buka Pengaturan
+ Klik **Ikon Roda Gigi** (Settings) di pojok kanan atas.
+
+ ### 2. Menu S/MIME
+ Navigasi ke **Mail > S/MIME**.
+
+ ### 3. Aktifkan
+ Aktifkan **"Encrypt with S/MIME"** dan pilih sertifikat Anda.
+
+
+
+
+## Konfigurasi Thunderbird
+
+**Persyaratan Versi:** v115+ (Supernova) atau yang lebih baru.
+
+
+### 1. Pengaturan Akun
+Klik tombol **Menu (≡)** dan pilih **Account Settings**.
+
+### 2. Enkripsi End-to-End
+Pilih akun email Anda dari sidebar dan klik **End-to-End Encryption**.
+
+### 3. Impor Sertifikat
+Di bagian **S/MIME**, klik **Add** (atau Manager) untuk mengimpor file `.p12` Anda.
+
+### 4. Terapkan Sertifikat
+Di bawah *Select Certificate*, pilih file yang diimpor untuk keduanya:
+* **Digital Signing**
+* **Encryption**
+
+
+## Cara Mengetes
+Kirim email ke rekan kerja yang juga telah menginstal Root CA. Mereka seharusnya melihat ikon **Pita/Badge** terverifikasi yang menunjukkan bahwa email tersebut dipercaya dan tidak dimodifikasi.
diff --git a/pages/id/guide/integrations/web-servers.mdx b/pages/id/guide/integrations/web-servers.mdx
new file mode 100644
index 0000000..2f602ea
--- /dev/null
+++ b/pages/id/guide/integrations/web-servers.mdx
@@ -0,0 +1,78 @@
+import { Tabs, Callout } from 'nextra/components'
+import { Server, Globe, Shield } from 'lucide-react'
+
+# Konfigurasi Web Server
+
+Untuk mengaktifkan HTTPS pada layanan internal Anda, Anda perlu mengonfigurasi web server agar menggunakan sertifikat yang diterbitkan oleh TrustLab.
+
+}>
+ **Prasyarat:** Pastikan Anda telah mengunduh **PEM Bundle** (untuk Linux) atau **PFX** (untuk Windows) seperti yang dijelaskan dalam [Panduan Unduh](/id/guide/certificates/download-install).
+
+
+## Contoh Konfigurasi
+
+Pilih lingkungan web server Anda di bawah ini:
+
+
+
+ ### Pengaturan Nginx
+ File Target: `/etc/nginx/sites-available/default` atau `internal.app.conf`
+
+ ```nginx
+ server {
+ listen 80;
+ server_name internal.app;
+ return 301 https://$host$request_uri;
+ }
+
+ server {
+ listen 443 ssl http2;
+ server_name internal.app;
+
+ # SSL Configuration
+ ssl_certificate /etc/ssl/trustlab/internal.app.crt;
+ ssl_certificate_key /etc/ssl/trustlab/internal.app.key;
+
+ # Recommended Security
+ ssl_protocols TLSv1.2 TLSv1.3;
+ ssl_ciphers HIGH:!aNULL:!MD5;
+ ssl_prefer_server_ciphers on;
+ }
+ ```
+
+
+ ### Pengaturan Apache / HTTPD
+ File Target: `/etc/httpd/conf.d/ssl.conf` atau file VHost.
+
+ ```apache
+
+ ServerName internal.app
+ DocumentRoot /var/www/html/internal
+
+ SSLEngine on
+ SSLCertificateFile "/path/to/internal.app.crt"
+ SSLCertificateKeyFile "/path/to/internal.app.key"
+
+ # Best Practice
+ SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
+
+ ```
+ 5. Pergi ke **Sites**, pilih situs Anda, dan klik **Bindings...**.
+ 6. Tambahkan binding `https` dan pilih sertifikat TrustLab yang baru diimpor.
+
+
+
+---
+
+## Verifikasi Konfigurasi
+
+Gunakan perintah `curl` dari terminal untuk memastikan sertifikat terdeteksi dengan benar:
+
+```bash
+curl -vI https://internal.yourcompany.local
+```
+
+Perhatikan baris `server certificate verification OK`. Jika muncul error, pastikan Anda telah menginstal Root CA di perangkat yang menjalankan perintah tersebut.
+
+> [!NOTE]
+> Sangat disarankan untuk selalu menggunakan file **BUNDLE/COMBINED** (Sertifikat + Intermediate) untuk menghindari masalah rantai sertifikat (Chain Error) di beberapa browser mobile.
diff --git a/pages/id/guide/troubleshooting/_meta.json b/pages/id/guide/troubleshooting/_meta.json
new file mode 100644
index 0000000..4d35789
--- /dev/null
+++ b/pages/id/guide/troubleshooting/_meta.json
@@ -0,0 +1,4 @@
+{
+ "browser-errors": "Kesalahan Umum Browser",
+ "developer-tools": "Masalah CLI & Bahasa"
+}
\ No newline at end of file
diff --git a/pages/id/guide/troubleshooting/browser-errors.mdx b/pages/id/guide/troubleshooting/browser-errors.mdx
new file mode 100644
index 0000000..73e813a
--- /dev/null
+++ b/pages/id/guide/troubleshooting/browser-errors.mdx
@@ -0,0 +1,43 @@
+import { Callout, Cards, Card } from 'nextra/components'
+import { AlertTriangle, Globe, Calendar, XCircle, HelpCircle } from 'lucide-react'
+
+# Kesalahan Browser Umum
+
+Saat menggunakan sertifikat internal, browser sangatlah ketat. Berikut adalah kode kesalahan yang paling umum dan cara mengatasinya.
+
+### `NET::ERR_CERT_AUTHORITY_INVALID`
+
+}>
+ **Logikanya:** Browser sama sekali **tidak mengenal** "TrustLab Root CA" yang menandatangani sertifikat situs web Anda, sehingga ia menganggapnya palsu.
+
+
+**Solusi:**
+Anda belum menginstal Root CA di perangkat Anda.
+* [**Panduan Instalasi Root CA**](/id/guide/getting-started/install-root-ca)
+
+---
+
+### `NET::ERR_CERT_COMMON_NAME_INVALID`
+
+}>
+ **Logikanya:** Anda mengunjungi `app.local`, tetapi sertifikat hanya diterbitkan untuk `api.local`. Namanya **tidak cocok**.
+
+
+**Solusi:**
+Domain tersebut tidak ada dalam **SANs (Subject Alternative Names)** sertifikat.
+1. Klik ikon **"Not Secure"** > **Certificate**.
+2. Periksa bidang **DNS Name** atau SAN.
+3. Jika tidak ada, Anda harus **[Menerbitkan Sertifikat Baru](/id/guide/certificates/request-new)** yang menyertakan domain yang benar.
+
+---
+
+### `NET::ERR_CERT_DATE_INVALID`
+
+}>
+ **Logikanya:** Sertifikat telah kedaluwarsa, ATAU jam komputer Anda diatur ke tanggal yang salah (lampau/masa depan).
+
+
+**Solusi:**
+1. Periksa jam sistem Anda terlebih dahulu.
+2. Jika jam sudah benar, berarti sertifikat benar-benar kedaluwarsa.
+3. **[Perbarui Sertifikat](/id/guide/certificates/renewal)** segera.
diff --git a/pages/id/guide/troubleshooting/developer-tools.mdx b/pages/id/guide/troubleshooting/developer-tools.mdx
new file mode 100644
index 0000000..c190843
--- /dev/null
+++ b/pages/id/guide/troubleshooting/developer-tools.mdx
@@ -0,0 +1,97 @@
+import { Callout, Steps } from 'nextra/components'
+import { Terminal, Code, Server, Download } from 'lucide-react'
+
+# Masalah CLI & Bahasa Pemrograman
+
+Bahkan jika Anda sudah menginstal Root CA di sistem operasi Anda, banyak alat pengembang dan bahasa pemrograman yang **mengabaikan penyimpanan sistem (system store)** dan menggunakan penyimpanan mereka sendiri.
+
+}>
+ **Prasyarat:**
+ Anda harus memiliki file **`trustlab-root.crt`** yang sudah diunduh di mesin Anda.
+ [Unduh di sini](/id/guide/getting-started/install-root-ca).
+
+
+Jika kode atau skrip Anda gagal dengan kesalahan sertifikat, periksa solusi di bawah ini.
+
+## 1. cURL & Wget
+
+Alat baris perintah standar sering kali mencari file bundle tertentu.
+
+### cURL
+}>
+ `curl: (60) SSL certificate problem: unable to get local issuer certificate`
+
+
+**Solusi:**
+Teruskan Root CA secara eksplisit:
+```bash
+curl --cacert /jalur/ke/trustlab-root.crt https://domain-anda.local
+```
+
+### Wget
+**Solusi:**
+```bash
+wget --ca-certificate=/jalur/ke/trustlab-root.crt https://domain-anda.local
+```
+
+---
+
+## 2. Node.js / JavaScript
+
+Node.js tidak menggunakan Root CA Sistem secara default.
+
+}>
+ `Error: self signed certificate in certificate chain`
+
+
+**Solusi (Variabel Lingkungan):**
+Atur variabel ini sebelum menjalankan aplikasi Anda. Ini berfungsi untuk sebagian besar aplikasi Node.js (npm, yarn, skrip kustom).
+
+```bash
+export NODE_EXTRA_CA_CERTS="/jalur/ke/trustlab-root.crt"
+node server.js
+```
+
+---
+
+## 3. Python (Requests/Pip)
+
+Pustaka `requests` di Python (dan `pip`) menggunakan paket sertifikatnya sendiri (`certifi`), mengabaikan penyimpanan sistem Windows/macOS/Linux.
+
+}>
+ `SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed'))`
+
+
+**Solusi:**
+Arahkan ke Root CA Anda menggunakan variabel lingkungan.
+
+```bash
+export REQUESTS_CA_BUNDLE="/jalur/ke/trustlab-root.crt"
+python script.py
+```
+
+---
+
+## 4. Aplikasi Java
+
+Java menggunakan "Keystore" (JKS) milik sendiri dan biasanya **mengabaikan** Windows Certificate Store.
+
+}>
+ `sun.security.validator.ValidatorException: PKIX path building failed`
+
+
+**Solusi:**
+Anda harus mengimpor Root CA TrustLab ke dalam Java Keystore (cacerts).
+
+
+### Lokasi standar cacerts
+Biasanya di `$JAVA_HOME/lib/security/cacerts`.
+
+### Impor dengan keytool
+```bash
+keytool -import -trustcacerts -alias trustlab-root \
+ -file trustlab-root.crt \
+ -keystore "$JAVA_HOME/lib/security/cacerts"
+```
+*Kata sandi default biasanya adalah `changeit`.*
+
diff --git a/pages/id/index.mdx b/pages/id/index.mdx
new file mode 100644
index 0000000..1aff258
--- /dev/null
+++ b/pages/id/index.mdx
@@ -0,0 +1,3 @@
+import { LandingPage } from '../../components/LandingPage'
+
+
diff --git a/pages/index.mdx b/pages/index.mdx
deleted file mode 100644
index ce1d4b4..0000000
--- a/pages/index.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
-import { LandingPage } from '../components/LandingPage'
-
-
diff --git a/theme.config.tsx b/theme.config.tsx
index 0bb5540..933068b 100644
--- a/theme.config.tsx
+++ b/theme.config.tsx
@@ -11,6 +11,10 @@ const config: DocsThemeConfig = {
),
logoLink: '/',
+ i18n: [
+ { locale: 'en', text: 'English' },
+ { locale: 'id', text: 'Bahasa Indonesia' }
+ ],
project: {
link: 'https://github.com/dyzulk/trustlab-docs',
},
@@ -25,7 +29,7 @@ const config: DocsThemeConfig = {
docsRepositoryBase: 'https://github.com/dyzulk/trustlab-docs/tree/main',
useNextSeoProps() {
const { asPath } = useRouter()
- if (asPath === '/') {
+ if (asPath.includes('/index') || asPath.endsWith('/en/') || asPath.endsWith('/id/')) {
return {
titleTemplate: 'TrustLab - Private Certificate Authority'
}