04. Arsitektur Sistem

Ringkasan

T3 Stack Single-App Boilerplate dirancang sebagai aplikasi web modular dengan performa tinggi yang mengedepankan keamanan tipe data penuh.


Diagram Arsitektur

mermaid
graph TB
    subgraph Client Layer
        UI["Komponen React 19 / Tampilan UI"]
        ctx["Context Providers (Theme, i18n, TRPCProvider)"]
    end

    subgraph Server Layer (Next.js 15 App Router)
        RSC["React Server Components / Layout"]
        NextAuth["NextAuth.js (Sesi & JWT)"]
        tRPC["tRPC v11 Server Root Router"]
        
        subgraph Security & Middleware Guards
            RateLimit["Rate Limiter (Upstash / Memory)"]
            RBAC["RBAC Procedure Middleware"]
            Audit["Audit Logger Service"]
        end
        
        subgraph Adapters & Routers
            UserRouter["usersRouter"]
            RoleRouter["rolesRouter"]
            ThemeRouter["themeRouter"]
            StorageRouter["storageRouter"]
            PaymentRouter["paymentRouter"]
            AiRouter["integrationRouter"]
            SeoRouter["seoRouter"]
        end
    end

    subgraph Data & Storage Layer
        Prisma["Prisma ORM Client"]
        MySQL[("MySQL Database")]
        R2["Cloudflare R2 / Supabase / Cloudinary"]
    end

    UI --> ctx
    ctx -->|HTTP POST /api/trpc| tRPC
    tRPC --> RateLimit
    RateLimit --> RBAC
    RBAC --> Adapters
    Adapters --> Audit
    Adapters --> Prisma
    Prisma --> MySQL
    Adapters --> R2

Cara Kerja

1. Pipeline Prosedur tRPC Terpadu

Seluruh pemrosesan data (API) mengalir melalui prosedur tRPC terproteksi di src/server/api/trpc.ts:

  • `publicProcedure`: Dapat diakses tanpa otentikasi (misalnya: pemuatan tema awal, SEO meta).
  • `protectedProcedure`: Memerlukan sesi masuk NextAuth yang valid.
  • `aiProcedure`: Membatasi laju pemanggilan API asisten AI (maksimal 5 kali/menit) untuk keamanan kuota.
  • `authProcedure`: Membatasi laju login/registrasi (maksimal 10 kali/5 menit) guna mencegah brute force.
  • 2. Inisialisasi Konteks & Layout

    Dalam root layout src/app/layout.tsx:

  • Membaca cookie locale di sisi server untuk langsung merender bahasa yang tepat tanpa flicker hidrasi.
  • Mengambil preferensi tema dinamis dari database AppSettings dan menyuntikkannya sebagai CSS Custom Properties.
  • Membuka skrip analytics (GA4, Plausible, PostHog) jika diaktifkan.
  • Membungkus component anak dengan Provider context.

  • Berkas Terkait

  • src/app/layout.tsx — Root layout dan provider tree
  • src/server/api/trpc.ts — Definisi prosedur, rate limiter, dan guard otorisasi tRPC
  • src/server/api/root.ts — Penggabungan seluruh sub-router tRPC
  • src/server/db.ts — Inisialisasi Prisma Client database