About

Hustle & Funk — Creative Design Company

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
–ink: #0a0a0a;
–paper: #f0ede6;
–yellow: #f5e000;
–yellow-dim: #c9b800;
–yellow-glow: rgba(245,224,0,0.1);
–surface: #161616;
–muted: #666560;
–border: rgba(240,237,230,0.1);
}
html { scroll-behavior: smooth; }
body { font-family: ‘DM Sans’, sans-serif; background: var(–ink); color: var(–paper); overflow-x: hidden; }

/* NAV */
nav {
position: fixed; top: 0; left: 0; right: 0; z-index: 100;
display: flex; align-items: center; justify-content: space-between;
padding: 1.25rem 3rem;
background: rgba(10,10,10,0.9); backdrop-filter: blur(20px);
border-bottom: 1px solid var(–border);
}
.nav-logo { font-family: ‘Bebas Neue’, sans-serif; font-size: 1.6rem; letter-spacing: 0.04em; color: var(–paper); text-decoration: none; }
.nav-logo span { color: var(–yellow); }
.nav-links { display: flex; gap: 2.5rem; list-style: none; }
.nav-links a { font-size: 0.78rem; letter-spacing: 0.14em; text-transform: uppercase; text-decoration: none; color: var(–muted); transition: color 0.2s; }
.nav-links a:hover { color: var(–paper); }
.nav-cta { font-size: 0.76rem; letter-spacing: 0.12em; text-transform: uppercase; padding: 0.55rem 1.5rem; background: var(–yellow); color: var(–ink); text-decoration: none; font-weight: 500; transition: background 0.2s; }
.nav-cta:hover { background: var(–yellow-dim); }

/* HERO */
.hero { min-height: 100vh; display: grid; grid-template-columns: 1fr 1fr; padding-top: 5rem; }
.hero-text { display: flex; flex-direction: column; justify-content: center; padding: 5rem 3rem 5rem 4rem; }
.hero-eyebrow { font-size: 0.7rem; letter-spacing: 0.22em; text-transform: uppercase; color: var(–muted); margin-bottom: 1.5rem; display: flex; align-items: center; gap: 1rem; }
.hero-eyebrow::before { content: ”; display: block; width: 2rem; height: 1px; background: var(–yellow); }
h1 { font-family: ‘Bebas Neue’, sans-serif; font-size: clamp(4.5rem, 8.5vw, 7.5rem); line-height: 0.92; letter-spacing: 0.01em; }
h1 em { font-family: ‘Playfair Display’, serif; font-style: italic; color: var(–yellow); }
.hero-sub { font-size: 1rem; font-weight: 300; color: var(–muted); max-width: 380px; line-height: 1.75; margin-top: 2rem; }
.hero-actions { display: flex; gap: 1rem; margin-top: 3rem; align-items: center; }
.btn-primary { padding: 0.9rem 2.5rem; background: var(–yellow); color: var(–ink); font-size: 0.78rem; letter-spacing: 0.14em; text-transform: uppercase; text-decoration: none; font-weight: 500; transition: background 0.2s; }
.btn-primary:hover { background: var(–yellow-dim); }
.btn-ghost { font-size: 0.78rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(–muted); text-decoration: none; display: flex; align-items: center; gap: 0.5rem; transition: color 0.2s; }
.btn-ghost::after { content: ‘→’; transition: transform 0.2s; }
.btn-ghost:hover { color: var(–paper); }
.btn-ghost:hover::after { transform: translateX(4px); }

.hero-visual { position: relative; overflow: hidden; background: var(–surface); border-left: 1px solid var(–border); }
.hero-visual-inner { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; }
.hero-deco { position: absolute; bottom: -0.15em; left: -0.03em; font-family: ‘Bebas Neue’, sans-serif; font-size: 13rem; line-height: 1; color: rgba(240,237,230,0.03); pointer-events: none; user-select: none; white-space: nowrap; }
.hero-badge { position: absolute; bottom: 2.5rem; right: 2.5rem; width: 108px; height: 108px; border-radius: 50%; border: 1px solid rgba(245,224,0,0.25); display: flex; align-items: center; justify-content: center; animation: spin 22s linear infinite; }
.hero-badge svg { position: absolute; width: 100%; height: 100%; }
.hero-badge-dot { width: 8px; height: 8px; border-radius: 50%; background: var(–yellow); }
@keyframes spin { to { transform: rotate(360deg); } }

.starburst { width: 260px; height: 260px; background: var(–yellow); clip-path: polygon(50% 0%,61% 35%,98% 35%,68% 57%,79% 91%,50% 70%,21% 91%,32% 57%,2% 35%,39% 35%); animation: pulse 4s ease-in-out infinite; }
.ring-y { position: absolute; width: 320px; height: 320px; border-radius: 50%; border: 1px solid rgba(245,224,0,0.2); animation: pulse 3s ease-in-out infinite; }
.ring-y-lg { position: absolute; width: 460px; height: 460px; border-radius: 50%; border: 1px solid rgba(245,224,0,0.07); }
@keyframes pulse { 0%,100% { transform: scale(1); opacity: 0.7; } 50% { transform: scale(1.06); opacity: 1; } }

/* TICKER */
.ticker { background: var(–yellow); overflow: hidden; padding: 0.65rem 0; }
.ticker-track { display: flex; gap: 3rem; animation: ticker 22s linear infinite; white-space: nowrap; }
.ticker-track span { font-family: ‘Bebas Neue’, sans-serif; font-size: 1rem; letter-spacing: 0.14em; color: var(–ink); }
.ticker-track span.sep { color: rgba(10,10,10,0.3); }
@keyframes ticker { from { transform: translateX(0); } to { transform: translateX(-50%); } }

/* ABOUT */
.about-strip { display: grid; grid-template-columns: 1fr 1.6fr; border-top: 1px solid var(–border); }
.about-left { padding: 5rem 3rem 5rem 4rem; border-right: 1px solid var(–border); }
.section-label { font-size: 0.68rem; letter-spacing: 0.22em; text-transform: uppercase; color: var(–muted); margin-bottom: 2rem; display: flex; align-items: center; gap: 0.75rem; }
.section-label::before { content: ”; display: block; width: 1.2rem; height: 1px; background: var(–yellow); }
.about-stat-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 2.5rem; margin-top: 3rem; }
.stat-num { font-family: ‘Bebas Neue’, sans-serif; font-size: 3.5rem; line-height: 1; }
.stat-num span { color: var(–yellow); }
.stat-label { font-size: 0.7rem; letter-spacing: 0.12em; text-transform: uppercase; color: var(–muted); margin-top: 0.3rem; }
.about-right { padding: 5rem 4rem; display: flex; flex-direction: column; justify-content: center; }
h2 { font-family: ‘Bebas Neue’, sans-serif; font-size: clamp(2.2rem, 3.5vw, 3.2rem); line-height: 1.05; letter-spacing: 0.02em; }
h2 em { font-family: ‘Playfair Display’, serif; font-style: italic; color: var(–yellow); }
.about-body { font-size: 1rem; font-weight: 300; color: var(–muted); line-height: 1.8; margin-top: 1.5rem; max-width: 460px; }

/* SLIDER */
.work-section { border-top: 1px solid var(–border); padding: 5rem 0 0; }
.work-header { display: flex; align-items: flex-end; justify-content: space-between; padding: 0 4rem 3rem; }
.slider-controls { display: flex; gap: 0.75rem; }
.slider-btn { width: 48px; height: 48px; border-radius: 50%; border: 1px solid var(–border); background: transparent; cursor: pointer; display: flex; align-items: center; justify-content: center; font-size: 1.1rem; color: var(–paper); transition: all 0.2s; }
.slider-btn:hover { background: var(–yellow); color: var(–ink); border-color: var(–yellow); }
.slider-wrapper { position: relative; overflow: hidden; padding-left: 4rem; }
.slider-track { display: flex; gap: 1.5rem; transition: transform 0.6s cubic-bezier(0.77,0,0.175,1); }
.slide-card { flex-shrink: 0; width: calc(40vw – 2rem); min-width: 340px; cursor: pointer; }
.slide-image { width: 100%; aspect-ratio: 4/3; position: relative; overflow: hidden; background: var(–surface); }
.slide-image-inner { position: absolute; inset: 0; transition: transform 0.5s ease; }
.slide-card:hover .slide-image-inner { transform: scale(1.04); }
.slide-tag { position: absolute; top: 1.25rem; left: 1.25rem; z-index: 2; font-size: 0.66rem; letter-spacing: 0.15em; text-transform: uppercase; padding: 0.3rem 0.75rem; background: var(–yellow); color: var(–ink); font-weight: 500; }
.slide-meta { padding: 1.25rem 0; display: flex; justify-content: space-between; align-items: flex-end; border-bottom: 1px solid var(–border); }
.slide-title { font-family: ‘Bebas Neue’, sans-serif; font-size: 1.4rem; letter-spacing: 0.03em; line-height: 1.1; }
.slide-year { font-size: 0.75rem; color: var(–muted); }
.slide-desc { font-size: 0.82rem; font-weight: 300; color: var(–muted); line-height: 1.65; margin-top: 0.75rem; }
.slide-yt { background: #0f0f0f; }
.slide-b { background: linear-gradient(150deg,#0d1a12 40%,#1a3d25 100%); }
.slide-c { background: linear-gradient(150deg,#110e00 40%,#2e2400 100%); }
.slide-d { background: linear-gradient(150deg,#0a0a18 40%,#1a1640 100%); }
.slide-e { background: linear-gradient(150deg,#140a0a 40%,#2e1010 100%); }
.slide-art { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; pointer-events: none; }
.slider-dots { display: flex; gap: 0.5rem; padding: 2rem 4rem; align-items: center; }
.dot { width: 6px; height: 6px; border-radius: 50%; background: var(–border); cursor: pointer; transition: all 0.3s; }
.dot.active { background: var(–yellow); width: 24px; border-radius: 3px; }

/* SERVICES */
.services { border-top: 1px solid var(–border); padding: 5rem 4rem; }
.services-grid { display: grid; grid-template-columns: repeat(3,1fr); margin-top: 3rem; border: 1px solid var(–border); }
.service-item { padding: 2.5rem 2rem; border-right: 1px solid var(–border); transition: background 0.25s; }
.service-item:last-child { border-right: none; }
.service-item:hover { background: var(–yellow-glow); }
.service-num { font-family: ‘Bebas Neue’, sans-serif; font-size: 0.85rem; letter-spacing: 0.14em; color: var(–yellow); margin-bottom: 1.5rem; }
.service-name { font-family: ‘Bebas Neue’, sans-serif; font-size: 1.8rem; letter-spacing: 0.02em; line-height: 1.05; margin-bottom: 1rem; }
.service-desc { font-size: 0.84rem; font-weight: 300; color: var(–muted); line-height: 1.75; }

/* CONTACT */
.contact-section { border-top: 1px solid var(–border); display: grid; grid-template-columns: 1fr 1.4fr; }
.contact-left { padding: 5rem 3rem 5rem 4rem; border-right: 1px solid var(–border); display: flex; flex-direction: column; justify-content: space-between; }
.contact-details { margin-top: 2.5rem; }
.contact-detail { padding: 1.5rem 0; border-bottom: 1px solid var(–border); }
.contact-detail:first-child { border-top: 1px solid var(–border); }
.detail-label { font-size: 0.66rem; letter-spacing: 0.2em; text-transform: uppercase; color: var(–muted); margin-bottom: 0.4rem; }
.detail-value { font-size: 0.95rem; font-weight: 300; }
.contact-right { padding: 5rem 4rem; }
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 1.25rem; margin-bottom: 1.25rem; }
.form-group { display: flex; flex-direction: column; gap: 0.5rem; }
.form-group.full { grid-column: 1/-1; }
label { font-size: 0.68rem; letter-spacing: 0.16em; text-transform: uppercase; color: var(–muted); }
input[type=”text”], input[type=”email”], textarea, select {
background: var(–surface); border: 1px solid var(–border); color: var(–paper);
font-family: ‘DM Sans’, sans-serif; font-size: 0.92rem; font-weight: 300;
padding: 0.85rem 1rem; outline: none; width: 100%;
transition: border-color 0.2s; appearance: none; border-radius: 0;
}
input::placeholder, textarea::placeholder { color: var(–muted); }
input:focus, textarea:focus, select:focus { border-color: var(–yellow); }
textarea { resize: vertical; min-height: 140px; }
select {
background-image: url(“data:image/svg+xml,%3Csvg xmlns=’http://www.w3.org/2000/svg’ width=’12’ height=’8′ viewBox=’0 0 12 8’%3E%3Cpath d=’M1 1l5 5 5-5′ stroke=’%23666560′ stroke-width=’1.5′ fill=’none’ stroke-linecap=’round’/%3E%3C/svg%3E”);
background-repeat: no-repeat; background-position: right 1rem center; padding-right: 2.5rem;
}
select option { background: var(–surface); color: var(–paper); }
.btn-submit { width: 100%; padding: 1rem 2.5rem; background: var(–yellow); color: var(–ink); font-family: ‘DM Sans’, sans-serif; font-size: 0.78rem; letter-spacing: 0.14em; text-transform: uppercase; font-weight: 500; border: none; cursor: pointer; transition: background 0.2s; margin-top: 2rem; display: block; }
.btn-submit:hover { background: var(–yellow-dim); }
.form-note { font-size: 0.75rem; color: var(–muted); margin-top: 1rem; line-height: 1.6; }
.form-success { display: none; padding: 1rem 1.25rem; background: rgba(245,224,0,0.08); border: 1px solid rgba(245,224,0,0.25); color: var(–yellow); font-size: 0.85rem; font-weight: 300; margin-top: 1.25rem; line-height: 1.6; }

/* FOOTER */
footer { border-top: 1px solid var(–border); padding: 2.5rem 4rem; display: flex; align-items: center; justify-content: space-between; font-size: 0.76rem; color: var(–muted); }
.footer-logo { font-family: ‘Bebas Neue’, sans-serif; font-size: 1.2rem; color: var(–paper); text-decoration: none; }
.footer-logo span { color: var(–yellow); }

/* REVEAL */
.reveal { opacity: 0; transform: translateY(22px); transition: opacity 0.7s ease, transform 0.7s ease; }
.reveal.visible { opacity: 1; transform: translateY(0); }

/* RESPONSIVE */
@media (max-width: 900px) {
nav { padding: 1rem 1.5rem; }
.nav-links { display: none; }
.hero { grid-template-columns: 1fr; }
.hero-visual { height: 55vw; min-height: 280px; }
.hero-text { padding: 4rem 1.5rem 2rem; }
.about-strip { grid-template-columns: 1fr; }
.about-left { border-right: none; padding: 3rem 1.5rem; }
.about-right { padding: 2rem 1.5rem 4rem; }
.work-header { padding: 0 1.5rem 2rem; }
.slider-wrapper { padding-left: 1.5rem; }
.slide-card { width: 82vw; }
.slider-dots { padding: 1.5rem; }
.services { padding: 3rem 1.5rem; }
.services-grid { grid-template-columns: 1fr; }
.service-item { border-right: none; border-bottom: 1px solid var(–border); }
.contact-section { grid-template-columns: 1fr; }
.contact-left { border-right: none; padding: 3rem 1.5rem; }
.contact-right { padding: 2rem 1.5rem 4rem; }
.form-row { grid-template-columns: 1fr; }
footer { padding: 2rem 1.5rem; flex-direction: column; gap: 1rem; text-align: center; }
}

Start a Project

Creative Design Company · Eswatini

We make
culture
visible.

Hustle & Funk is a creative design studio crafting bold identities, illustrations, and digital experiences for brands that mean something.

Brand IdentityIllustration
Motion DesignWeb & Digital
PackagingArt Direction
Brand IdentityIllustration
Motion DesignWeb & Digital
PackagingArt Direction

120+
Projects Delivered
8+
Years of Hustle
40+
Happy Clients
3×
Industry Awards

We are the creative force behind brands that lead.

Hustle & Funk is a creative design company built on the belief that great design isn’t decoration — it’s strategy. We partner with ambitious brands to craft identities, illustrations, and campaigns that cut through the noise and leave a lasting mark.

Projects that speak
for themselves.


AFRICA

Illustration

YouTube Africa
2024

Original illustration series commissioned by YouTube Africa — celebrating African creators, culture, and community across the continent.

ZULU

Brand Identity

Zulu Roots Apparel
2024

Full brand identity for a heritage streetwear label — logo system, lookbook design, and retail packaging with traditional motif integration.

WEB EXPERIENCE

Web Design

Eswatini Tourism Board
2023

Redesigned digital presence for the national tourism authority — editorial layouts, destination guides, and a mobile-first booking experience.

BEAT CULTURE

Motion & Branding

Beat Culture Festival
2023

Visual identity, stage graphics, and social motion content for a Southern African music & arts festival drawing 15,000+ attendees.

PACKAGING

Packaging

Ngwane Naturals
2022

Packaging system for a homegrown botanical wellness brand — hand-lettered labels, colour-coded SKU system, and retail display design.

01
Brand Identity

Logos, visual systems, tone of voice, and brand guidelines that give your company a coherent, confident face to the world.

02
Illustration

Custom illustration — editorial, character, surface design, and campaign artwork with a distinctly African perspective and voice.

03
Web & Motion

Websites, digital campaigns, and motion graphics that move fast without looking cheap — designed and built in-house.

Let’s build something worth talking about.

Tell us about your project. We work with brands big and small — what matters is the ambition.

Email
hello@hustleandfunk.com

Based in
Manzini, Eswatini · Africa

Availability
Open for new projects — 2025

First Name

Last Name

Email Address

Company / Brand

Type of Project

Select a service
Brand Identity
Illustration
Web Design
Packaging
Motion & Campaign
Not sure yet

Tell us about your project

We typically respond within 1–2 business days. All enquiries are confidential.

✦  Message received — we’ll be in touch shortly. Thank you for reaching out.


© 2025 Hustle & Funk Creative Design Company
Manzini · Eswatini · Africa

const track = document.getElementById(‘sliderTrack’);
const slides = track.querySelectorAll(‘.slide-card’);
const dotsEl = document.getElementById(‘sliderDots’);
let cur = 0;

slides.forEach((_,i) => {
const d = document.createElement(‘div’);
d.className = ‘dot’+(i===0?’ active’:”);
d.addEventListener(‘click’,()=>goTo(i));
dotsEl.appendChild(d);
});

function vis(){ return window.innerWidthd.classList.toggle(‘active’,i===cur)); }
function goTo(i){
const max=slides.length-vis();
cur=Math.max(0,Math.min(i,max));
track.style.transform=`translateX(-${cur*(slides[0].offsetWidth+24)}px)`;
updateDots();
}

document.getElementById(‘prevBtn’).addEventListener(‘click’,()=>goTo(cur-1));
document.getElementById(‘nextBtn’).addEventListener(‘click’,()=>goTo(cur+1));
window.addEventListener(‘resize’,()=>goTo(cur));

const obs=new IntersectionObserver(es=>es.forEach(e=>{ if(e.isIntersecting) e.target.classList.add(‘visible’); }),{threshold:0.12});
document.querySelectorAll(‘.reveal’).forEach(el=>obs.observe(el));

document.getElementById(‘contactForm’).addEventListener(‘submit’,function(e){
e.preventDefault();
const btn=this.querySelector(‘.btn-submit’);
btn.textContent=’Sending…’; btn.disabled=true;
setTimeout(()=>{
btn.textContent=’Sent ✦’;
document.getElementById(‘formSuccess’).style.display=’block’;
this.querySelectorAll(‘input,textarea,select’).forEach(f=>f.disabled=true);
},1200);
});