BASCORRO
Development

Design System

Panduan lengkap sistem desain BASCORRO - warna, tipografi, spacing, dan komponen

Design System

Panduan komprehensif untuk menjaga konsistensi visual di seluruh project BASCORRO. Sistem desain ini berdasarkan landing page dan diterapkan ke seluruh dokumentasi serta materi tim.

Kenapa Design System penting? Konsistensi visual membangun brand recognition dan profesionalisme - penting untuk sponsor, judges RoboCup, dan identitas tim.


Quick Reference

/* Brand Colors */
--color-undip-blue: #002060;
--color-accent-yellow: #F4B400;
--color-tech-grey: #f3f4f6;

/* Fonts */
--font-display: 'Space Grotesk', sans-serif;
--font-serif: 'Cinzel', serif;
--font-body: 'Inter', sans-serif;

Color Palette

Brand Colors

UNDIP Blue
#002060
Primary brand color
Accent Yellow
#F4B400
Highlights & accents
Tech Grey
#f3f4f6
Backgrounds

Color Usage

ColorHexTailwindUse Case
UNDIP Blue#002060bg-undip-bluePrimary buttons, headings, links
Accent Yellow#F4B400bg-accent-yellowHighlights, hover states, decorative
Tech Grey#f3f4f6bg-tech-greyPage backgrounds, cards
Dark#1a1a1abg-[#1a1a1a]Footer, dark sections
White#ffffffbg-whiteCards, content areas

Neutral Grays (Tailwind)

TokenHexClassUsage
Gray 100#f3f4f6gray-100Light backgrounds
Gray 200#e5e7ebgray-200Borders, dividers
Gray 300#d1d5dbgray-300Disabled states
Gray 400#9ca3afgray-400Placeholder text, muted icons
Gray 500#6b7280gray-500Secondary text
Gray 600#4b5563gray-600Body text
Gray 900#111827gray-900Headings, primary text

Semantic Colors

PurposeColorHexUsage
SuccessGreen#10b981Successful actions, active status
WarningAmber#f59e0bWarnings, caution states
ErrorRed#ef4444Errors, destructive actions
InfoBlue#3b82f6Information, neutral alerts

Accessibility

Contrast Ratios - Pastikan text memiliki contrast ratio minimal 4.5:1 untuk normal text dan 3:1 untuk large text (WCAG AA).

CombinationRatioStatus
UNDIP Blue on White12.6:1Pass AAA
White on UNDIP Blue12.6:1Pass AAA
Gray 600 on White5.0:1Pass AA
UNDIP Blue on Yellow6.8:1Pass AA

Typography

Font Families

// layout.tsx - Font loading
import { Inter, Space_Grotesk, Cinzel } from 'next/font/google';

const inter = Inter({ subsets: ['latin'] });
const spaceGrotesk = Space_Grotesk({ subsets: ['latin'], weight: ['400', '700'] });
const cinzel = Cinzel({ subsets: ['latin'], weight: ['400', '700'] });

Font Roles

RoleFontCSS VariableUsage
DisplaySpace Groteskfont-displayHeadlines, brand text, section titles
SerifCinzelfont-serifQuotes, accents, decorative text
BodyInterfont-sansBody text, UI elements, paragraphs

Live Font Preview

Display Font — Space Grotesk

BASCORRO

Humanoid Robosoccer Team

The quick brown fox jumps over the lazy dog

Serif Font — Cinzel

"Engineering Excellence"

Shaping the future of autonomous humanoid soccer

The quick brown fox jumps over the lazy dog

Body Font — Inter

Primary body text for documentation and content

Inter is optimized for screen readability with excellent legibility at small sizes. Perfect for technical documentation, UI elements, and long-form content.

The quick brown fox jumps over the lazy dog — 0123456789

Type Scale

ClassSizeLine HeightUsage
text-xs12px / 0.75rem1.5Labels, tags, metadata, footnotes
text-sm14px / 0.875rem1.5Secondary text, descriptions
text-base16px / 1rem1.5Body text, paragraphs
text-lg18px / 1.125rem1.75Lead paragraphs
text-xl20px / 1.25rem1.75Subheadings, card titles
text-2xl24px / 1.5rem1.33Section subheadings
text-3xl30px / 1.875rem1.33Small page titles
text-4xl36px / 2.25rem1.25Section headers
text-5xl48px / 3rem1.1Page titles
text-6xl60px / 3.75rem1Large titles
text-7xl+72px+0.9Hero headlines

Font Weights

WeightClassUsage
Regular (400)font-normalBody text, descriptions
Medium (500)font-mediumLabels, navigation
Semi-bold (600)font-semiboldSubheadings
Bold (700)font-boldHeadings, CTAs
Black (900)font-blackHero text, brand

Typography Examples

{/* Hero headline */}
<h1 className="font-display font-black text-7xl md:text-8xl tracking-tighter text-gray-900">
  BASCORRO
</h1>

{/* Section header */}
<h2 className="font-display font-bold text-4xl md:text-5xl uppercase tracking-tight">
  Our Machines
</h2>

{/* Quote/accent text */}
<p className="font-serif text-xl italic text-gray-600 border-l-4 border-accent-yellow pl-6">
  "Shaping the future of autonomous humanoid soccer"
</p>

{/* Body text */}
<p className="text-base text-gray-600 leading-relaxed">
  Regular paragraph content...
</p>

{/* Label/tag */}
<span className="text-xs font-bold uppercase tracking-widest text-gray-500">
  Engineering
</span>

Spacing & Layout

Spacing Scale

Menggunakan 4px base unit (Tailwind default).

ClassSizePixelsUsage
p-10.25rem4pxMinimal padding
p-20.5rem8pxTight padding
p-30.75rem12pxCompact elements
p-41rem16pxStandard padding
p-61.5rem24pxCard padding
p-82rem32pxSection padding (mobile)
p-123rem48pxLarge spacing
p-164rem64pxSection padding (desktop)
p-246rem96pxMajor sections

Common Patterns

{/* Section container */}
<section className="px-8 py-24 md:px-16">
  <div className="max-w-7xl mx-auto">
    {/* Content */}
  </div>
</section>

{/* Card padding */}
<div className="p-8 rounded-2xl">

{/* Button padding */}
<button className="px-8 py-4">

{/* Tag/pill padding */}
<span className="px-3 py-1">

Responsive Breakpoints

BreakpointMin WidthUsage
sm640pxSmall devices
md768pxTablets
lg1024pxLaptops
xl1280pxDesktops
2xl1536pxLarge screens

Container Widths

ClassMax WidthUsage
max-w-lg32rem (512px)Narrow content
max-w-2xl42rem (672px)Text-heavy content
max-w-4xl56rem (896px)Medium content
max-w-7xl80rem (1280px)Full-width sections

Border Radius

ElementClassRadius
Buttons (pill)rounded-full9999px
Cardsrounded-2xl16px
Large cardsrounded-3xl24px
Tags/pillsrounded-full or rounded-mdvaries
Input fieldsrounded-xl12px
Icon containersrounded-xl or rounded-2xl12-16px
Small elementsrounded4px
Medium elementsrounded-lg8px

Shadows

TypeClassUsage
Noneshadow-noneFlat elements
Subtleshadow-smCards at rest, subtle depth
DefaultshadowStandard elevation
Mediumshadow-mdDropdowns, popovers
Largeshadow-xlHover states, elevated cards
Extra largeshadow-2xlMain containers, modals

Shadow Examples

{/* Card with hover shadow */}
<div className="shadow-sm hover:shadow-xl transition-shadow">

{/* Main container */}
<div className="shadow-2xl">

Components

Buttons

Primary Button

<button className="px-8 py-4 bg-undip-blue text-white font-bold rounded-full hover:bg-gray-900 transition-colors">
  Primary Action
</button>

Secondary Button

<button className="px-8 py-4 border border-gray-300 text-gray-900 font-bold rounded-full hover:bg-white transition-colors">
  Secondary Action
</button>

Accent Button

<button className="px-8 py-4 bg-accent-yellow text-black font-bold rounded-full hover:bg-yellow-400 transition-colors">
  Accent Action
</button>

Small Button

<button className="px-4 py-2 text-xs font-bold bg-undip-blue text-white rounded-full">
  Small Button
</button>

Live Button Examples

Button Variants
Button States

Cards

Standard Card

<div className="bg-white rounded-2xl p-8 border border-gray-100 shadow-sm hover:shadow-xl transition-all">
  <h3 className="font-bold text-xl mb-2">Card Title</h3>
  <p className="text-sm text-gray-600">Card description...</p>
</div>

Feature Card (with image)

<div className="bg-white rounded-3xl overflow-hidden shadow-sm hover:shadow-xl transition-all border border-gray-200">
  <div className="h-64 bg-gray-200">
    {/* Image */}
  </div>
  <div className="p-8">
    <h3 className="text-2xl font-bold font-display mb-2">Title</h3>
    <p className="text-gray-600 text-sm">Description...</p>
  </div>
</div>

Spec Card (dark variant)

<div className="border border-white/10 p-6 rounded-2xl hover:bg-white/5 transition-colors">
  <h4 className="font-bold text-lg mb-2 text-white">Title</h4>
  <p className="text-sm text-gray-400">Description...</p>
</div>

Live Card Examples

🤖

Standard Card

This is a standard card with icon, title, and description. Uses rounded-2xl corners and subtle shadow.
Image Area

Feature Card

Card with image header. Uses rounded-3xl for larger radius.
Dark Variant

Computer Vision

Real-time ball detection using YOLO and custom algorithms.

Locomotion

Stable walking gaits with inverse kinematics.

Tags & Badges

Status Tag

<span className="bg-white/10 backdrop-blur-md px-3 py-1 rounded text-xs font-mono text-white border border-white/20">
  STATUS: ACTIVE
</span>

Category Label

<span className="text-xs font-bold uppercase tracking-widest text-gray-500">
  Engineering
</span>

Spec Tag

<span className="bg-gray-50 px-3 py-2 rounded border border-gray-100 text-xs font-mono text-gray-700">
  Height: 510mm
</span>

Role Tag

<span className="text-[10px] font-medium bg-white border border-gray-200 px-2 py-1 rounded-md text-gray-500 hover:text-undip-blue transition-colors">
  Lead Programmer
</span>

Live Tag Examples

Tags & Badges
Category Labels
EngineeringSoftwareActive
Spec Tags
Height: 510mmWeight: 3.5kgDOF: 20OS: ROS 2
Role Tags
Lead ProgrammerVision SpecialistTeam Captain
Status Badges
ActiveIn ProgressDevelopmentInactive

Section Headers

Pattern yang konsisten untuk section headers:

const SectionHeader = ({ title, subtitle }) => (
  <div className="mb-12 md:mb-20">
    <div className="flex items-center gap-4 mb-4">
      <div className="h-px w-8 bg-accent-yellow"></div>
      <span className="text-xs font-bold uppercase tracking-widest text-gray-500">
        {subtitle}
      </span>
    </div>
    <h2 className="font-display font-bold text-4xl md:text-5xl text-gray-900 uppercase tracking-tight">
      {title}
    </h2>
  </div>
);

Live Section Header Example

Engineering

Our Machines

↑ This is the standard section header pattern used throughout the landing page

Form Elements

Search Input

<button className="w-full max-w-md flex items-center gap-3 px-4 py-3 bg-white border border-gray-200 rounded-xl text-left hover:border-gray-300 hover:shadow-sm transition-all">
  <Search className="w-5 h-5 text-gray-400" />
  <span className="flex-1 text-gray-400 text-sm">Search documentation...</span>
  <kbd className="px-2 py-1 text-xs font-mono bg-gray-100 rounded border border-gray-200 text-gray-400">
    ⌘K
  </kbd>
</button>
<a className="text-sm font-medium text-gray-600 hover:text-undip-blue hover:underline decoration-accent-yellow decoration-2 underline-offset-4 transition-all">
  Link Text
</a>
<a className="flex items-center gap-2 text-xs font-bold bg-undip-blue text-white px-4 py-2 rounded-full hover:bg-accent-yellow hover:text-black transition-all duration-300">
  JOIN US <ArrowRight className="w-3 h-3" />
</a>

Motion & Animation

Transitions

TypeClassDuration
Colors onlytransition-colors150ms
All propertiestransition-all150ms
Transformtransition-transform150ms
Slowduration-500500ms
Very slowduration-10001000ms

Common Patterns

{/* Color transition */}
<button className="transition-colors hover:bg-gray-900">

{/* Shadow + transform */}
<div className="transition-all hover:shadow-xl hover:-translate-y-1">

{/* Scale on hover */}
<img className="hover:scale-105 transition-transform duration-1000">

Framer Motion Patterns

// Fade in + slide up
<motion.div
  initial={{ opacity: 0, y: 30 }}
  animate={{ opacity: 1, y: 0 }}
  transition={{ duration: 0.8, delay: 0.4 }}
>

// Staggered children
<motion.div
  initial={{ opacity: 0, y: 20 }}
  whileInView={{ opacity: 1, y: 0 }}
  viewport={{ once: true, margin: "-50px" }}
  transition={{ delay: index * 0.1, duration: 0.5 }}
>

// Scale container
<motion.div
  initial={{ scale: 0.95, opacity: 0 }}
  animate={{ scale: 1, opacity: 1 }}
  transition={{ duration: 0.8, ease: [0.22, 1, 0.36, 1] }}
>

Custom Animations

/* global.css */
@theme {
  --animate-spin-slow: spin 20s linear infinite;
}
<div className="animate-spin-slow">
  {/* Rotating element */}
</div>

Iconography

Icon Library

Menggunakan Lucide React sebagai standard icon library.

pnpm add lucide-react

Common Icons

IconComponentUsage
Bot<Bot />Logo, robotics
Eye<Eye />Vision, view
Activity<Activity />Status, motion
Brain<Brain />AI, strategy
Monitor<Monitor />Simulation
Code<Code />Software
Wrench<Wrench />Mechanical
Zap<Zap />Electronics
Users<Users />Team, management
Search<Search />Search
ArrowRight<ArrowRight />Navigation, CTA
ChevronDown<ChevronDown />Scroll indicator

Icon Sizes

SizeClassPixelsUsage
XSw-3 h-312pxInline with small text
SMw-4 h-416pxNavigation, buttons
MDw-5 h-520pxDefault size
LGw-6 h-624pxCard icons
XLw-8 h-832pxFeature icons

Icon Containers

{/* Standard icon container */}
<div className="w-12 h-12 bg-white rounded-xl border border-gray-200 flex items-center justify-center text-gray-400">
  <Icon size={24} />
</div>

{/* Dark variant */}
<div className="w-12 h-12 bg-undip-blue/20 rounded-xl flex items-center justify-center text-accent-yellow">
  <Icon />
</div>

CSS Variables Reference

Custom Properties (global.css)

@theme {
  /* Colors */
  --color-undip-blue: #002060;
  --color-accent-yellow: #F4B400;
  --color-tech-grey: #f3f4f6;

  /* Fonts */
  --font-display: 'Space Grotesk', sans-serif;
  --font-serif: 'Cinzel', serif;

  /* Animation */
  --animate-spin-slow: spin 20s linear infinite;
}

Using Custom Properties

{/* In Tailwind classes */}
<div className="bg-undip-blue text-accent-yellow font-display">

{/* In inline styles */}
<div style={{ backgroundColor: 'var(--color-undip-blue)' }}>

Best Practices

Do's

  • Gunakan UNDIP Blue sebagai primary color untuk brand consistency
  • Gunakan Accent Yellow untuk highlight dan call-to-action
  • Maintain proper contrast ratios (4.5:1 minimal)
  • Gunakan font-display untuk headlines
  • Konsisten dengan border-radius (rounded-2xl untuk cards)
  • Tambahkan hover states untuk interactive elements
  • Gunakan transitions untuk smooth interactions

Don'ts

  • Jangan mix terlalu banyak warna dalam satu section
  • Jangan gunakan font weights yang tidak terdefinisi
  • Jangan abaikan responsive design
  • Jangan gunakan hardcoded pixel values jika bisa pakai Tailwind classes
  • Jangan lupakan focus states untuk accessibility
  • Jangan gunakan shadows berlebihan

Accessibility Checklist

  • Text contrast ratio minimal 4.5:1
  • Focus indicators visible
  • Alt text untuk images
  • Semantic HTML structure
  • Keyboard navigable
  • Color tidak jadi satu-satunya indicator

Complete Design Showcase

Preview of how all design elements work together:

🤖BASCORRO
AboutRobotsTeam

EST. 2017 // UNDIP ROBOTICS

BASCORRO

"Shaping the future of autonomous humanoid soccer through intelligent design."

About Us
20+
Members
2
Robots
4
Divisions
2026
RoboCup Target
👁

Computer Vision

Ball detection using YOLO and custom color segmentation.
OpenCVYOLO
🦿

Locomotion

Stable walking gaits with inverse kinematics.
IKPID

Core Intelligence

Powered by ROS 2 and advanced computer vision.
ActiveROS 2 Humble
© 2017 BASCORRO TEAM

Resources

On this page