Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

32 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸš€ Init Next.js App β€” Amir App

Selamat datang di Amir App, template Next.js 16 modern berbasis React 19, Tailwind CSS v4.3, dan TypeScript 6 (Strict Mode) dengan dukungan Progressive Web App (PWA) serta integrasi i18n native berbasis cookie tanpa URL prefix.

Repositori ini dioptimalkan secara mendalam menggunakan Bun sebagai pengelola paket, konfigurasi ESLint v9, serta dilengkapi dengan ID Security Suite bawaan untuk pengamanan identitas data Anda.


πŸ“Š Arsitektur Pengamanan ID (ID Security Suite)

Berikut adalah visualisasi alur pemrosesan data pada dua fitur keamanan utama (Sqids & AES-256-GCM) yang terintegrasi di dalam template ini:

graph TD
    Input[("Input ID / Teks")] --> Decision{"Pilih Metode Keamanan"}
    
    %% Obfuscation Path (Sqids)
    Decision -- "Penyamaran ID (Sqids)" --> SqidsBlock["lib/obfuscator.ts (Sqids)"]
    SqidsBlock --> |"Encode (Positive Integer)"| ObfHash["Obfuscated Hash (misal: o7vL39)"]
    ObfHash --> |"Deobfuscate"| SqidsBlock
    
    %% Encryption Path (AES)
    Decision -- "Enkripsi Kriptografis (AES-256-GCM)" --> ServerAction["app/demo-encryption/actions.ts (use server)"]
    ServerAction --> |"Membaca ENCRYPTION_KEY"| AESGCM["lib/crypto.ts (AES-256-GCM)"]
    AESGCM --> |"Encrypt & Sign"| EncToken["Base64 URL-Safe Encrypted Token"]
    EncToken --> |"Decrypt & Verify"| AESGCM
    
    %% UI Presentation
    ObfHash --> UI["Demo Interface / URL SearchParams"]
    EncToken --> UI
    
    style Decision fill:#1a1a1a,stroke:#333,stroke-width:2px,color:#fff
    style SqidsBlock fill:#312e81,stroke:#4338ca,color:#fff
    style AESGCM fill:#064e3b,stroke:#047857,color:#fff
    style ServerAction fill:#0f172a,stroke:#1e293b,color:#fff
Loading

✨ Fitur Utama

  1. Next.js 16 (App Router) & React 19: Memanfaatkan fitur rendering server terbaru (Server Components by default).
  2. Tailwind CSS v4.3 & Theming: Styling modern berbasis CSS variables (@theme inline) dilengkapi ThemeSwitcher (next-themes) untuk Dark πŸŒ™, Light β˜€οΈ, dan System πŸ’» mode.
  3. Serwist PWA v9.5: Service worker luring (offline-first) yang tangguh untuk mendukung Progressive Web Application.
  4. Cookie-Based Native i18n: Sistem lokalisasi native berbasis cookie NEXT_LOCALE tanpa prefix URL [lang], menjaga URL tetap bersih (/, /demo-encryption). Mendukung Bahasa Indonesia (default: id) dan Inggris (en).
  5. ID Security Suite:
    • Sqids Obfuscation: Mengubah ID integer database (auto-increment) menjadi hash unik ramah URL untuk menyembunyikan detail sensitif database.
    • AES-256-GCM Cryptography: Enkripsi dua arah terautentikasi (tamper-proof) berbasis server untuk menjaga privasi data sensitif seperti UUID atau string transaksi.
  6. Continuous Integration (CI): Pipeline GitHub Actions otomatis untuk mendeteksi error linter dan memverifikasi build aplikasi pada setiap Pull Request ke cabang master.

πŸ“ Struktur Folder Utama

Init-nextjs-app/
β”œβ”€β”€ .github/workflows/         # Pipeline CI GitHub Actions (Lint & Build)
β”œβ”€β”€ src/                       # πŸ“‚ Semua Source Code Utama
β”‚   β”œβ”€β”€ app/                   # Next.js App Router
β”‚   β”‚   β”œβ”€β”€ _components/       # Komponen UI App-wide (ThemeSwitcher, LanguageSwitcher)
β”‚   β”‚   β”œβ”€β”€ demo-encryption/   # Halaman & Komponen Demo Keamanan ID
β”‚   β”‚   β”‚   β”œβ”€β”€ actions.ts     # Server Actions (use server)
β”‚   β”‚   β”‚   β”œβ”€β”€ DemoClient.tsx # Komponen Interaktif Klien
β”‚   β”‚   β”‚   └── page.tsx       # Halaman utama demo (Server Component)
β”‚   β”‚   β”œβ”€β”€ favicon.ico
β”‚   β”‚   β”œβ”€β”€ globals.css        # Pengaturan CSS & Tema Tailwind v4
β”‚   β”‚   β”œβ”€β”€ layout.tsx         # Root Layout (ThemeProvider, Metadata SEO)
β”‚   β”‚   β”œβ”€β”€ manifest.ts        # Web App Manifest PWA
β”‚   β”‚   β”œβ”€β”€ page.tsx           # Halaman Utama (Homepage i18n)
β”‚   β”‚   β”œβ”€β”€ providers.tsx      # Provider Wrapper (next-themes ThemeProvider)
β”‚   β”‚   β”œβ”€β”€ robots.ts          # Generator robots.txt
β”‚   β”‚   β”œβ”€β”€ sitemap.ts         # Generator sitemap.xml
β”‚   β”‚   └── sw.ts              # Service Worker (Serwist)
β”‚   β”œβ”€β”€ dictionaries/          # Berkas Terjemahan Bahasa (JSON)
β”‚   β”‚   β”œβ”€β”€ id.json            # Bahasa Indonesia (Default)
β”‚   β”‚   └── en.json            # Bahasa Inggris
β”‚   β”œβ”€β”€ i18n/                  # Konfigurasi i18n
β”‚   β”‚   └── config.ts          # Config locale & tipe Locale
β”‚   β”œβ”€β”€ lib/                   # Utilitas Pendukung Server & Client
β”‚   β”‚   β”œβ”€β”€ crypto.ts          # Enkripsi & Dekripsi AES-256-GCM (Server-Only)
β”‚   β”‚   β”œβ”€β”€ dictionaries.ts    # Dictionary loader (Server-Only)
β”‚   β”‚   β”œβ”€β”€ i18n-actions.ts    # Server Action pengubah cookie NEXT_LOCALE
β”‚   β”‚   β”œβ”€β”€ i18n-server.ts     # Helper retrieval locale & dictionary (Server-Only)
β”‚   β”‚   β”œβ”€β”€ obfuscator.ts      # Penyamaran & Pemulihan ID (Sqids)
β”‚   β”‚   └── seo.ts             # Utilitas JSON-LD & SEO Metadata
β”‚   └── proxy.ts               # Proxy middleware ringan
β”œβ”€β”€ public/                    # Aset statis & Ikon PWA
β”œβ”€β”€ prompt_ai/                 # Prompt AI & panduan instruksi
β”œβ”€β”€ .env                       # Variabel environment umum
β”œβ”€β”€ .env.development           # Overrides dev lokal
β”œβ”€β”€ .env.production            # Overrides produksi (tanpa rahasia)
β”œβ”€β”€ .env.example               # Template referensi variabel environment
β”œβ”€β”€ AGENTS.md                  # Aturan khusus AI Agent (Next.js & Skills)
β”œβ”€β”€ GUIDELINE.md               # πŸ“Œ Panduan arsitektur & standar coding proyek
β”œβ”€β”€ next.config.ts             # Konfigurasi Next.js
β”œβ”€β”€ tsconfig.json              # Konfigurasi TypeScript Strict
β”œβ”€β”€ eslint.config.mjs          # Konfigurasi ESLint v9
└── package.json               # Dependensi & skrip proyek

πŸ› οΈ Panduan Pengembangan

Prasyarat

Pastikan Anda telah memasang Bun (β‰₯ 1.3) di sistem lokal Anda.

1. Pemasangan Dependensi

Pasang seluruh paket pustaka dengan cepat menggunakan Bun:

bun install

2. Jalankan Mode Pengembangan

Jalankan server lokal untuk melihat hasil perubahan secara langsung:

bun run dev

Buka http://localhost:3000 di peramban Anda.

3. Pemeriksaan Linter (ESLint)

Pastikan kode Anda bebas dari error linter sebelum melakukan komit:

bun run lint

4. Build untuk Produksi

Verifikasi kelayakan kompilasi proyek Next.js Anda:

bun run build

🌐 Panduan Penggunaan i18n (Internationalization)

Pengaturan bahasa menggunakan cookie NEXT_LOCALE tanpa mengubah URL path.

Di Server Component:

import { getCurrentDictionary } from "@/lib/i18n-server";

export default async function Page() {
  const { locale, dict } = await getCurrentDictionary();

  return <h1>{dict.home.title}</h1>;
}

Di Client Component:

Gunakan komponen LanguageSwitcher dari @/app/_components/language-switcher:

import { LanguageSwitcher } from "@/app/_components/language-switcher";

export function Header() {
  return <LanguageSwitcher />;
}

πŸ”’ Panduan Penggunaan ID Security Suite

1. Penyamaran ID (Sqids)

Cocok untuk mengubah angka ID database (seperti 10543) menjadi hash string unik pendek seperti o7vL39 untuk digunakan pada parameter URL tanpa menampilkan ID asli.

import { obfuscateId, deobfuscateId } from "@/lib/obfuscator";

// Proses menyamarkan ID
const hash = obfuscateId(10543);
console.log(hash); // Output: "o7vL39" (panjang minimal 6 karakter)

// Proses mengembalikan ke ID asli
const originalId = deobfuscateId("o7vL39");
console.log(originalId); // Output: 10543

2. Enkripsi Kriptografis (AES-256-GCM)

Enkripsi terautentikasi super aman untuk mengenkripsi string sensitif secara bolak-balik menggunakan algoritma AES-256-GCM. Fitur ini dilindungi dengan pustaka "server-only" sehingga kunci rahasia (ENCRYPTION_KEY) tidak akan pernah bocor ke sisi klien peramban.

// PENTING: Hanya dapat dipanggil di Server Components, Server Actions, atau API Routes
import { encrypt, decrypt } from "@/lib/crypto";

// Proses Enkripsi
const token = encrypt("user-1234-uuid-secret");
console.log(token); // Output: Base64 URL-Safe String terenkripsi

// Proses Dekripsi
const plainText = decrypt(token);
console.log(plainText); // Output: "user-1234-uuid-secret"

Catatan: Jika token terenkripsi mengalami manipulasi karakter oleh peretas, proses dekripsi akan secara otomatis mendeteksi kegagalan otentikasi data dan mengembalikan nilai null secara aman untuk mencegah serangan injeksi.


πŸš€ Konfigurasi Environment Variables

Template ini menggunakan sistem prioritas variabel lingkungan bawaan Next.js. Rahasia kriptografi diatur tanpa awalan NEXT_PUBLIC_ untuk memastikan keamanan penuh di sisi server.

Salin berkas template .env.example menjadi .env.local untuk konfigurasi lokal Anda:

cp .env.example .env.local

Variabel Utama:

  • ENCRYPTION_KEY: Kunci rahasia berukuran tepat 32 karakter (256-bit) yang digunakan oleh modul AES-GCM.
  • SQIDS_ALPHABET: Deretan karakter kustom yang digunakan oleh Sqids untuk mengacak hash URL yang dihasilkan.

About

Initiate Next Js Project Apps

Topics

Resources

Code of conduct

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages