Skip to content
Demo Project

A concept build of the KONTROVERSIONAL website — not the agency's official site.

About this build

KONTROVERSIONAL Website Rebuild

What this is

A demonstration rebuild of the site for KONTROVERSIONAL, a Jakarta digital agency running viral campaigns and a managed roster of TikTok creators. The existing site speaks to brands only. This rebuild serves two audiences at once — brand clients and prospective talents — and carries the agency's TikTok visual identity onto the web.

Every talent, client and testimonial shown here is placeholder or reference content. Nothing on this build should be read as a live commercial claim.

Two audiences, one voice

The site forks early — a homepage split plus audience-labelled nav — so brands reach services, case studies and proof in one click, while creators reach the roster, the value proposition and the application flow just as fast. The cross-sell sits on the talent profile pages, where a “book this talent” CTA hands creator traffic back to the brand funnel.

Design direction

Black, white and a single red accent — no fourth colour, no gradients. Oversized display type does the work of decoration, photography runs full-bleed, and the agency's signature “Kontroversial Take:” callout recurs across the site as a reusable component. Motion stays fast and snappy — closer to a zine than a corporate agency site.

How it is built

  • Next.js 15 (App Router, output: export)
  • TypeScript + Zod-validated content
  • Tailwind CSS, palette locked to 3 colours
  • Content as JSON in-repo — no CMS, no backend
  • Static hosting, forms via a static form service

Timeline — 4 weeks

  1. Week 1

    Foundation & Design System

    Next.js static export, closed black/white/red palette, fluid display type scale, and the signature components: Logo, TwoToneHeadline, TakeCallout, MarqueeTicker, StatBadge.

  2. Week 2

    Content Layer & Talent Pages

    Typed JSON content schema with build-time validation, the 10-talent launch roster, filterable roster grid, and the editorial talent profile layout with TikTok embeds.

  3. Week 3

    Brand-Facing Pages

    Home audience fork, /brands services and case studies, client logos, testimonials, /work, /about, and /contact with branched inquiry routing plus the WhatsApp fallback.

  4. Week 4

    Polish & Launch

    Responsive image pipeline, SEO metadata and per-page OG images, sitemap, contrast and accessibility pass, performance budget, static deploy.

Contact

Questions about this build, the scope or the timeline:

croissantsmoon@gmail.com

Two documents, each in Bahasa Indonesia or English. Pick a language — it opens in a new tab and prints straight to PDF.

  • Project PDF

    Background, scope, architecture, 4-week timeline.

  • Design PDF

    Palette, type scale, layout patterns, a screenshot of every screen.

Sistem Desain

Dari konten TikTok ke web — aturan visual, layar yang dihasilkan, dan file yang membangunnya.

Baca dalam English

Versi
1.0
Sumber
DESIGN.md
Layar
16 screenshot
Kontak
croissantsmoon@gmail.com

01

Ringkasan

Sistem visual ini tidak dikarang dari nol. Ia diterjemahkan dari materi yang sudah berjalan di TikTok agensi: carousel “Types of Gen Z Workers,” moodboard “cara ngonten & branding,” dan sepuluh kartu profil talent seri “meet our trover.” Tugas dokumen ini memastikan situs terasa seperti akun yang sama, bukan seperti situs agensi generik yang kebetulan memakai logo yang sama.

Setiap bagian berikut menampilkan tiga hal berurutan: aturan dari DESIGN.md, screenshot layar yang sudah jadi, lalu file yang mengimplementasikannya.

02

Kepribadian Brand

Berani, blak-blakan, editorial, sedikit konfrontatif. Sistemnya terbaca seperti majalah streetwear yang disilangkan dengan thread hot-take: tipografi besar yang bicara, dekorasi minimal, dan satu warna aksen yang memikul seluruh beban emosional.

Dua register hidup berdampingan dan keduanya harus terasa milik brand yang sama — suara agensi/kultur yang punchy dan meme-adjacent untuk konten opini serta halaman About, dan suara talent/editorial yang bersih dan high-fashion untuk roster serta profil.

03

Palet Warna

Tiga warna, tidak lebih. Aturan inilah yang membuat puluhan post TikTok terbaca sebagai satu sistem, dan aturan yang sama berlaku di web.

  • Latar utama #FFFFFF
    Dominan di hampir seluruh halaman
  • Latar sekunder #000000
    Section break dan CTA full-black
  • Merah aksen #EA1B23
    Wordmark, satu kata dalam headline, label callout

Implementasi Palet Tailwind bawaan diganti total di tailwind.config.ts, sehingga hanya black, white, dan brand-red yang tersedia. Menulis text-red-500 atau bg-gray-100 gagal saat compile — aturannya dipaksa oleh build, bukan oleh review.

04

Tipografi

Headline sengaja berukuran besar relatif terhadap viewport: tipografi adalah elemen grafis, bukan sekadar label. Karena itu skalanya fluid dengan clamp(), bukan langkah tetap. Penekanan dilakukan dengan mewarnai satu kata merah di dalam headline, bukan dengan menambah ukuran atau warna baru.

TokenUkuranPemakaian
wordmarkclamp(4rem, 19vw, 15rem)Nama talent di halaman profil
display-xlclamp(2.75rem, 10.5vw, 9.5rem)Headline hero home
display-lgclamp(2.25rem, 7vw, 6rem)Headline section besar
display-mdclamp(1.75rem, 4.5vw, 3.5rem)Judul section
display-smclamp(1.375rem, 2.6vw, 2rem)Sub-judul dan statement callout
eyebrowclamp(0.75rem, 1vw, 0.875rem)Label kecil uppercase, tracking lebar
leadclamp(1.0625rem, 1.5vw, 1.3125rem)Paragraf pembuka

Catatan Typeface display asli belum diidentifikasi (DESIGN.md §10.2). Build ini memakai Archivo dengan sumbu lebar untuk logotype, dan Figtree untuk wordmark talent serta body. Keduanya di-host sendiri lewat next/font, tanpa request ke origin pihak ketiga.

05

Pola Layout

Sebelas pola berikut menutup seluruh situs. Masing-masing menampilkan aturannya, layar yang dihasilkan, dan file yang membangunnya.

§3 · §4.3 — Hero

Two-tone headline

Hero halaman home: headline WE DON’T FOLLOW TRENDS. berwarna hitam diikuti WE CREATE CONTROVERSY. berwarna merah, dengan navigasi dan tombol Let’s Talk di atasnya

Desain Headline oversized dipecah ke beberapa baris pendek dengan leading rapat, lalu satu kalimat penuh dialihkan ke merah sebagai punchline. Tidak ada foto, tidak ada dekorasi — tipografi memikul seluruh layar.

Implementasi TwoToneHeadline menerima potongan teks dan menandai bagian mana yang beraksen, sehingga pemisahan warna tidak pernah ditulis manual di tiap halaman. Ukurannya memakai token display-xl.

  • components/ui/TwoToneHeadline.tsx
  • components/sections/HomeHero.tsx

Pola situs lama

Stats bar & marquee tagline

Bagian bawah hero home: tombol Start a Campaign, tiga statistik 50+ campaigns, 50M+ views, 30+ brands, lalu strip marquee tagline yang berjalan

Desain Tiga angka pembuktian dipisah garis vertikal tipis, lalu strip tagline berjalan horizontal sebagai jeda ritmis sebelum konten berikutnya — pola yang sudah ada di situs lama dan dibawa maju.

Implementasi MarqueeTicker menggandakan isinya lalu menganimasi translate -50% secara linear tanpa henti, dengan durasi diatur lewat CSS custom property. Animasi berhenti saat hover dan mati total di bawah prefers-reduced-motion.

  • components/ui/MarqueeTicker.tsx
  • app/globals.css

PRD §6.1 — Audience fork

Percabangan dua audiens

Dua panel bersebelahan di halaman home: panel putih berjudul Bikin brand lo jadi bahan omongan untuk brand, dan panel hitam berjudul Jadi trover berikutnya untuk calon talent

Desain Percabangan dua audiens dibuat sebagai dua panel besar yang bisa diklik, bukan sekadar item navigasi. Kontras putih lawan hitam memisahkan keduanya tanpa menambah satu warna pun.

Implementasi Satu grid dua kolom yang menumpuk di mobile. Panel gelap memakai varian onDark pada komponen teksnya, sehingga kontras tetap lolos AA tanpa nilai warna baru.

  • components/sections/AudienceFork.tsx

§4.3 — Numbered content

Grid layanan bernomor

Grid layanan di halaman brands: kartu bernomor 01 Viral Content Strategy, 02 Influencer and Talent Management, 03 Social Media Growth, masing-masing dengan deskripsi dan daftar deliverable berbullet merah

Desain Pola slide bernomor dari carousel TikTok dipindahkan apa adanya: angka besar berwarna merah, judul tebal, paragraf, lalu daftar poin. Sel dipisah garis hitam tipis, bukan kartu dengan shadow.

Implementasi Data lima layanan dibaca dari content/services.json dan divalidasi saat build, jadi menambah layanan cukup mengedit satu file JSON. Satu sel sengaja dibiarkan hitam untuk memutus keteraturan grid.

  • components/sections/ServicesGrid.tsx
  • content/services.json

§4.5 · §4.3

CompareGrid & Kontroversial Take

Section HOW WE WORK di halaman brands: tiga kolom berjudul Base Look, Pop Accent, dan High Contrast, diikuti callout Kontroversial Take berlabel merah

Desain Moodboard tiga kolom dari post “cara ngonten & branding” menjadi komponen perbandingan, lalu ditutup dengan gerakan retoris khas brand: label merah “Kontroversial Take :” diikuti satu kalimat berpendapat.

Implementasi TakeCallout hanya menerima satu baris statement, bukan paragraf — batasan API-nya sengaja memaksa pernyataan tegas, bukan hedge. Varian onDark tersedia untuk pemakaian di section hitam.

  • components/ui/CompareGrid.tsx
  • components/ui/TakeCallout.tsx

§4.1 — Talent card

Portrait + name lockup

Grid roster talent: tiga kartu bersebelahan untuk fadil, iam, dan edhiz, masing-masing berisi portrait full-bleed dengan wordmark nama huruf kecil dan pill statistik follower TikTok serta Instagram

Desain Wordmark nama huruf kecil, portrait cutout dengan latar putih, lalu handle dan jumlah follower pada pill translusen di bawah. Kartu tidak punya rounded corner maupun shadow — hanya garis hitam.

Implementasi Aset yang tersedia adalah kartu sosial jadi: logo, wordmark, dan pill sudah menyatu di piksel. TalentPortrait memotongnya dengan crop berbasis fraksi supaya elemen yang dibangun ulang sebagai HTML tidak muncul dua kali, dan crop tetap benar di semua lebar srcset.

  • components/ui/TalentPortrait.tsx
  • components/ui/StatBadge.tsx
  • components/sections/TalentGrid.tsx

§4.2 — Bio spread

Meet our trover

Halaman profil talent: heading dua baris meet our berwarna hitam dan trover berwarna merah, dua paragraf bio berbahasa Indonesia dengan kata kunci ditebalkan, tag chip di bawahnya, dan portrait di kolom kanan

Desain Layout dua kolom, portrait tidak pernah di tengah. Heading bertumpuk dengan “trover” merah, bio dengan dua sampai empat frasa niche ditebalkan, dan niche yang sama diangkat menjadi chip.

Implementasi TalentBio membaca bio dan daftar niche dari file JSON talent, lalu merender keduanya: tebal di dalam paragraf sekaligus sebagai chip terpisah. Bio tetap berbahasa Indonesia sesuai suara brand — code-switching tidak dipaksa diterjemahkan.

  • components/ui/TalentBio.tsx
  • components/ui/TalentHero.tsx
  • content/talents/*.json

§4.4 — Full-black

Section break & CTA

Blok CTA full-black: teks NOT FOR EVERYONE. berwarna putih di atas FOR THE BRAVE. berwarna merah, dengan tombol putih Start on WhatsApp

Desain Slide hitam berfungsi sebagai palate cleanser di antara section yang padat foto, sekaligus panggung terakhir sebelum CTA. Tidak ada fotografi di sini — hanya teks dan satu tombol.

Implementasi SectionBreakBlack membungkus konten dan menyalakan varian onDark pada komponen anaknya. WhatsApp tetap jalur konversi utama, sesuai perilaku situs yang berjalan sekarang.

  • components/ui/SectionBreakBlack.tsx
  • components/layout/WhatsAppCTA.tsx

PRD §6.2 — Portfolio

Case study & logo wall

Section case studies di halaman brands: judul dua warna, paragraf yang menjelaskan case study sedang disusun, lalu deretan logo klien Bukalapak, Tokopedia, Shopee, Skintific, dan Scarlett dalam kotak bergaris

Desain Klien tanpa case study tertulis tetap tampil sebagai logo saja, bukan kartu palsu yang mengarang metrik. Kejujuran ini bagian dari suara brand, bukan kompromi.

Implementasi clients.json boleh menunjuk caseStudySlug; loader konten memeriksa silang setiap slug ke file case study yang ada dan menggagalkan build kalau salah ketik, sehingga tidak ada tautan mati yang lolos.

  • components/sections/ClientLogos.tsx
  • lib/content.ts
  • content/clients.json

PRD §6.5 — About

Pilar Why Us

Halaman About: marquee tagline di bagian atas, judul WHY US dua warna, lalu pilar bernomor 01 Kami bikin, bukan cuma ngerencanain dan 02 Talent yang kami kenal beneran

Desain Empat pilar dari situs lama dibawa maju dengan penataan ulang, memakai pola bernomor yang sama seperti grid layanan supaya sistemnya konsisten lintas halaman.

Implementasi Komponen kartu bernomor yang sama dipakai ulang — pola yang muncul di tiga halaman berbeda hanya ditulis sekali.

  • components/ui/NumberedInsightCard.tsx
  • app/about/page.tsx

PRD §6.5 · ARCHITECTURE §7

Kontak

Halaman kontak: judul LET’S TALK dua warna, blok WhatsApp first dengan tombol merah, lokasi Jakarta, tautan sosial, dan panel Message us di sebelah kanan

Desain WhatsApp diletakkan sebagai jalur pertama, bukan alternatif, karena itu perilaku yang sudah terbukti di situs sekarang. Form menyusul sebagai jalur kedua.

Implementasi Form hanya tampil bila NEXT_PUBLIC_FORM_ENDPOINT diisi dengan endpoint Web3Forms atau Formspree. Tanpa itu panelnya menampilkan blok WhatsApp beserta catatan setup, sehingga situs tidak pernah menayangkan form yang tidak mengirim ke mana-mana.

  • components/sections/ContactForm.tsx
  • .env.example

06

Komponen yang Dipakai Ulang

Seluruh pola di atas dibangun dari daftar berikut. Kolom terakhir menunjuk bagian DESIGN.md yang melahirkannya.

KomponenFungsiSumber
TwoToneHeadlineHeadline dengan satu kata beraksen merah§3, §4.1, §4.2
TalentHeroPortrait full-bleed, wordmark nama, logo, pill statistik§4.1
TalentBioBio dua kolom dengan niche keyword tebal + tag chip§4.2
TakeCalloutEyebrow merah “Kontroversial Take :” + satu kalimat tegas§4.3
NumberedInsightCardFoto + nomor + judul + body + TakeCallout§4.3
SectionBreakBlackPemisah section full-black tanpa foto§4.4
CompareGridGrid tiga kolom + blok penjelasan di bawahnya§4.5
StatBadgeIkon platform + handle + follower, pill translusen§4.1
MarqueeTickerStrip tagline berjalan horizontalPola situs lama
TalentPortraitGambar responsif + crop terhadap kartu sosial sumber§4.1, §5
RevealReveal singkat saat elemen masuk viewport§7

07

Motion & Interaksi

Motion di sini cepat dan singkat, meniru pergantian slide carousel, bukan parallax sinematik yang membuat situs agensi terdengar seragam. Reveal berdurasi 380ms dengan pergeseran vertikal kecil, dijalankan sekali saat elemen masuk viewport.

Implementasi Reveal memakai IntersectionObserver dan hanya membalik satu atribut data; transisi sesungguhnya hidup di CSS. Marquee berhenti saat hover. Seluruh animasi dimatikan di bawah prefers-reduced-motion, termasuk scroll-behavior.

08

Aksesibilitas

  • Merah dipakai untuk teks berukuran besar atau label uppercase pendek; pada ukuran body, kontrasnya diperiksa sebelum merge.
  • Focus ring merah dengan offset terlihat baik di atas latar putih maupun hitam.
  • Setiap gambar punya alt deskriptif — portrait talent menjelaskan konteks, bukan mengulang nama.
  • Menu mobile memakai elemen <details> bawaan: semantik disclosure benar tanpa JavaScript.
  • Skip link menuju konten utama tersedia di setiap halaman.

09

Do / Don’t

Do

  • Kunci setiap layar ke hitam + putih + satu merah.
  • Biarkan tipografi jadi elemen grafis dominan — besar, percaya diri, sesekali memotong grid.
  • Pakai fotografi cutout full-bleed, bukan gambar berbingkai.
  • Ulang “Kontroversial Take :” sebagai momen tanda tangan brand.

Don’t

  • Menambah warna aksen kedua, gradien, atau nuansa pastel.
  • Memakai display type tipis untuk headline — suara brand ini berat dan blak-blakan.
  • Meratakan tengah body copy panjang.
  • Membiarkan halaman talent jatuh ke template influencer generik: kartu rounded, shadow lembut, gradien pastel.

10

Item Terbuka untuk Handoff

  1. Ambil nilai hex merah persis dari file logo sumber — #EA1B23 masih perkiraan dari DESIGN.md §2.
  2. Identifikasi atau lisensikan typeface display asli pada wordmark talent. Build ini memakai Archivo untuk logotype dan Figtree untuk wordmark serta body sebagai padanan terdekat.
  3. Sediakan portrait talent resolusi tinggi. Aset saat ini adalah kartu sosial jadi, sehingga logo, wordmark, dan pill statistik harus di-crop lewat TalentPortrait.
  4. Putuskan apakah fotografi konten kultur hitam-putih dipakai apa adanya atau diarahkan ulang khusus web.

11

Kontak

Pertanyaan soal sistem desain ini, asetnya, atau implementasinya:

croissantsmoon@gmail.com

Dokumen ini bisa disimpan sebagai PDF lewat dialog cetak peramban.