Kopi&Co

Design Guidelines

Every concept you learned in Week 1 lives somewhere in this website. This document shows you where each one is, and how it was applied.

Week 1 Practice Website
About this website

A fictional coffee roastery to rebuild

Kopi & Co is a fictional specialty coffee roastery in Braamfontein, Johannesburg. You will rebuild this website in Elementor this week as your practice exercise.

The website has three sections plus a navigation bar and footer:

Every design concept from Week 1 is applied somewhere in this site. This document is your map.

How to use this

Read the guideline before you start rebuilding. Then keep it open while you work. When you are not sure why a value is what it is, come back here. If you finish rebuilding early, experiment. Try breaking a rule on purpose and see what happens. That is how you really learn.

Chapter 1

Typography

The Font Pairing

Kopi & Co uses exactly two font families. No more.

Serif | For Headings
Playfair Display
Coffee with a story
Regular 400 Bold 700 Black 900

Used for all headings, the logo, prices, and key values. A serif gives the brand a crafted, editorial, slightly luxurious feel. Coffee roasting is an old craft. A serif signals tradition and attention to detail.

Sans-serif | For Body
Inter
Used for all body text, navigation links, buttons, labels, and small captions. Clean, modern, and easy to read at small sizes. Serifs tire the eye in long blocks of body text, which is why body copy always uses the sans-serif.
Light 300 Regular 400 Medium 500 Semibold 600 Bold 700
Applied
Two font families rule

Where: Every text element on the page uses either Playfair Display or Inter. Nothing else.

How: Headings and brand elements get the serif. Everything functional gets the sans-serif. This gives you visual variety while keeping the site cohesive.

Serif, Sans-serif, and Display

Serif (Playfair Display)

The letters have little feet at their ends. You can see it clearly in the main headline "Coffee with a story in every cup." on the hero section. The word story is italicised and coloured brown to add emphasis without changing the font.

Sans-serif (Inter)

The letters have clean, simple ends with no feet. You can see it in the subheading paragraph below the hero headline, in every button, and in every price unit (R285 / 250g).

Display (Playfair Display at 900 weight)

Display typography means very large, attention-grabbing headlines used for impact. The hero headline uses Playfair Display at 72 px with weight 900 (the heaviest available). This is the display treatment. At this size and weight, the font behaves differently than when used at smaller sizes.

Line-height

Line-height is the vertical space between lines of text. It is one of the most important typographic decisions you will make.

Applied
Line-height on body text

Where: All body paragraphs on the site.

How: Set to 1.7 for comfortable reading. Airy spacing between lines stops the eye getting tired. You can see this in the hero subheading paragraph and in the coffee card descriptions.

Applied
Line-height on headings

Where: All H1, H2, and H3 headings.

How: Set to 1.15 for tight, strong headings. Tight line-height makes headings feel decisive and grouped. Airy line-height on a heading looks disconnected.

Applied
Line-height on display (hero headline)

Where: The main hero headline.

How: Set to 1.05, even tighter. At display sizes, line-height must shrink or the headline falls apart visually.

Letter-spacing

Letter-spacing (also called tracking) controls the space between individual letters.

Applied
Letter-spacing on large serif headings

Where: The hero headline and other large H1 and H2 headings.

How: Set to -0.01em to -0.02em (slightly negative). At large sizes, serif letters can feel loose. A small negative value tightens them visually without making them cramped.

Applied
Letter-spacing on uppercase labels

Where: Every overline label on the site: ROASTED IN BRAAMFONTEIN, SINGLE ORIGIN, THE ROASTERY, ETHIOPIA | YIRGACHEFFE.

How: Set to 0.12em (positive and generous). Capital letters are wider than lowercase, so they feel cramped at default spacing. Adding space between them makes them readable and elegant.

Applied
Letter-spacing on body text

Where: Regular paragraphs.

How: Left at default (0). Adding letter-spacing to body text hurts readability. Never do it.

Word-spacing

Word-spacing is the space between entire words. This is rarely adjusted in web design, but knowing it exists matters.

Applied
Word-spacing on paragraphs

Where: All body paragraphs.

How: Set to a tiny 0.02em positive value. This gives prose a bit more breathing room without being noticeable. If you set it much higher, text starts looking strange.

Default word-spacing works for 95 percent of cases. Only touch it if text feels cramped and line-height adjustments have not fixed it.

Font Contrast

Font contrast is how you make some text feel important and other text feel secondary. You create contrast four ways.

1. Size contrast

The hero headline is 72 px. The subheading below it is 20 px. That is a 3.6x difference. The eye immediately knows the headline is the most important thing.

2. Weight contrast

The hero headline is weight 900 (black). The subheading is weight 400 (regular). Same family, same colour, but the weight difference creates hierarchy.

3. Colour contrast

Headings are near-black (#1a1a1a). Body text is medium grey (#6b6b6b). Captions are lighter grey (#9a9a9a). The darker the text, the more important it feels.

4. Font family contrast

Serif for headings, sans-serif for body. The visual difference between the two families creates a secondary layer of hierarchy.

Applied
All four contrasts combined

Where: The hero section.

How: The hero headline uses the biggest size, heaviest weight, darkest colour, AND the serif family. Four different kinds of contrast stacked on the same element. That is why your eye goes there first.

Chapter 2

Spacing and the 4px Grid

The 4px Rule

Every spacing value on the site comes from multiples of 4:

4   8   12   16   20   24   32   40   48   64   80   96   128

Nowhere on this site will you find a spacing value of 7, 13, 22, or 35. Every single number comes from the scale above.

This is implemented as CSS variables at the top of the stylesheet. You can see them named space-1 through space-32. Each one corresponds to a value on the grid.

Padding Applied

Applied
Section padding (vertical)

Where: The Our Coffee section and the Visit Us section.

How: Padded 96 px top and 96 px bottom. Major page sections get generous breathing room so the content feels important and separate from what came before.

Applied
Container padding (horizontal)

Where: The main container that holds all content.

How: Padded 24 px left and right on mobile, 32 px on tablet and up. This stops content from touching the edge of the screen.

Applied
Button padding

Where: The primary "Shop Our Coffee" button.

How: Padded 16 px vertical and 32 px horizontal. Wider horizontal padding gives buttons their characteristic pill shape and makes them easy to tap on mobile.

Applied
Card padding

Where: Each coffee product card.

How: Padded 32 px inside. Big enough to give the text breathing room, not so big that the card feels empty.

Applied
Hero badge padding

Where: The "Est. Since 2019" badge sitting on the hero image.

How: Padded 16 px vertical and 20 px horizontal. Just enough to surround the text with colour without feeling bloated.

Margin Applied

Applied
Margin below the hero overline

Where: The "ROASTED IN BRAAMFONTEIN" label at the top of the hero.

How: Has 20 px of margin below it. This creates visible but tight proximity between the label and the headline that follows.

Applied
Margin below the hero headline

Where: The main hero headline.

How: Has 24 px of margin below it, connecting it to the subheading paragraph.

Applied
Margin below the subheading paragraph

Where: The hero subheading.

How: Has 40 px of margin below it, creating distance before the buttons. The bigger gap signals a change in purpose (from explaining to asking for action).

Applied
Margin below section headers

Where: Below the "This month's selections" title.

How: Has 64 px of margin below it. Bigger margin because a major section transition is happening.

Gap (for Flexbox and Grid)

Gap is the modern way to add space between children in a flex or grid layout. It replaces the old habit of adding margin to every child.

Applied
Gap between coffee cards

Where: The three-card grid in the Our Coffee section.

How: Set to 32 px. The cards breathe apart without looking disconnected.

Applied
Gap between hero columns

Where: Between the hero text and the hero image on desktop.

How: Set to 64 px. Generous gap so the two sides feel like separate compositions rather than competing for space.

Applied
Gap between navigation links

Where: The three menu items at the top.

How: Set to 32 px between each link. Enough that they do not feel clumped, not so much that the menu sprawls.

Chapter 3

CSS Units

rem (Used for Typography and Spacing)

Every font size on the site uses rem. Every padding and margin value uses rem (through the CSS variables). This means users who adjust their browser font size for accessibility see the whole site scale with their preference.

Applied
rem on the hero display

Where: Hero headline font size.

How: Set to 4.5rem, which equals 72 px at the default root size of 16 px. If a user sets their browser font size to 20 px, this headline becomes 90 px automatically. Accessibility respected.

Applied
rem on H1, H2, H3

Where: All section headings.

How: H1 at 3rem (48 px), H2 at 2.25rem (36 px), H3 at 1.5rem (24 px). Clear size hierarchy with each step down.

Applied
rem on body text

Where: All paragraphs.

How: Set to 1rem (16 px). Never smaller. This is the mobile minimum rule applied everywhere.

px (Used for Borders and Fine Details)

Applied
px on borders

Where: The thin separator lines between sections and inside cards.

How: Set to 1px solid. Borders should stay exactly 1 pixel regardless of browser settings. This is what px is for.

Applied
px on base root

Where: The html element.

How: Set to 16px. This anchors every rem calculation on the site. Change this one value and everything built with rem scales.

vh (Used for Viewport-based Height)

Applied
vh on the hero section

Where: The hero section height.

How: Set to 90vh (minimum). The hero fills 90 percent of the viewport height on any screen size. This makes it feel cinematic and immersive without touching the very top of the fold.

% (Used for Proportional Widths)

Percent is used implicitly through the CSS Grid system. When the coffee grid shows three columns, each card takes roughly 33% of the container width. The browser handles this calculation.

Chapter 4

Colour Palette

The palette follows the 60-30-10 rule with five defined colours plus three text variants.

The Swatches

Background
#faf7f2
60% dominant. Warm off-white on the main page.
Surface
#ffffff
Pure white used for card backgrounds to create elevation.
Primary
#8b4513
30% brand. Coffee brown for key CTAs and labels.
Primary Dark
#5c2e0d
Hover state for primary. Darker for feedback.
Accent
#c9a961
10% accent. Warm gold, used sparingly.
Text
#1a1a1a
Primary text. Near-black, softer than pure black.
Text Muted
#6b6b6b
Secondary text. Grey for body paragraphs.
Text Light
#9a9a9a
Tertiary text. Captions and small labels.
Border
#e8e2d6
Subtle border. Warm, not cold grey.

The 60-30-10 Rule in Action

Applied
60% Background

Where: Almost everything you see on the page.

How: The warm off-white fills the page background. Most of what your eye sees is this colour, which is why adjusting it (for example, to dark mode) would transform the whole feel.

Applied
30% Primary (coffee brown)

Where: The CTA button, overline labels, hover states, and accents.

How: The brown appears on maybe 10 to 15 percent of the actual page pixels. That is still the biggest coloured presence after the neutral background.

Applied
10% Accent (warm gold)

Where: The ampersand in the footer logo, the underline on the secondary button.

How: Used only a handful of times across the whole site. Because it is rare, when it does appear, the eye notices.

No Pure Black, No Pure White on Text

Body text is dark grey (#6b6b6b), not black. Headings are near-black (#1a1a1a), not pure black. Backgrounds are warm off-white (#faf7f2), not pure white.

The difference is subtle on screen but your eyes feel it over time. Pure black on pure white vibrates and causes screen fatigue.

Chapter 5

The Four Design Principles in Action

Alignment

Applied
Left edge alignment on the hero

Where: The overline, headline, subheading, and buttons.

How: All four elements share the same left edge. Trace a finger down the screen and you will see one straight invisible line running through all of them.

Applied
Grid alignment on the coffee cards

Where: The three product cards.

How: All three cards are identical in width. All three images start at the same vertical position. All three prices sit at the same height at the bottom. This alignment is what makes the grid feel ordered.

Contrast

Applied
Size contrast on the hero

Where: Headline vs subheading.

How: 72 px headline vs 20 px subheading. 3.6x size difference. Your eye knows exactly what to read first.

Applied
Colour contrast on buttons

Where: Primary CTA vs secondary link.

How: Primary button is coffee brown with white text (heavy contrast). Secondary is a text link with a gold underline (subtle contrast). The primary wins your attention instantly, which is exactly what we want.

Proximity

Applied
Tight proximity within related elements

Where: Every coffee card's origin label, product name, and tasting notes.

How: The origin label is 12 px above the name. The name is 12 px above the notes. These three items are tightly grouped because they all describe the same product.

Applied
Loose proximity between sections

Where: Between the hero and the coffee section.

How: 96 px of padding separates them. That big gap tells the eye these are two different things. You are done with the introduction. Now we are talking about products.

Repetition

Applied
Identical card styling

Where: All three coffee cards.

How: Same aspect ratio, same padding, same typography, same button style, same border radius. When the user learns how one card works, they know all three work the same way.

Applied
Consistent overline label style

Where: ROASTED IN BRAAMFONTEIN, SINGLE ORIGIN, THE ROASTERY.

How: Every overline uses the same font, size, weight, letter-spacing, and coffee-brown colour. When you see that style anywhere on the page, you know it is introducing a new section.

Chapter 6

Your Task: Rebuild It in Elementor

This week you will rebuild Kopi & Co in Elementor. The exact same sections. The exact same spacing. The exact same colours. The exact same typography.

Recommended Build Order

What You Should Notice

As you rebuild, you will start noticing things you did not notice in the original:

Write these observations down as you work. Bring your notes to next Saturday.

The Rules While You Build

Common Mistakes to Avoid

Chapter 7

Design Tokens Quick Reference

Use these values when you configure Elementor's Site Settings.

Colours

TokenHexUse For
Background#faf7f2Page background
Surface#ffffffCard backgrounds
Primary#8b4513CTAs, labels, brand
Primary Dark#5c2e0dHover on primary
Accent#c9a961Special details
Text#1a1a1aHeadings, dark text
Text Muted#6b6b6bBody paragraphs
Text Light#9a9a9aCaptions, small text
Border#e8e2d6Dividers, borders

Typography Scale

ElementSizeWeightFamily
Display (hero)72 px900Playfair Display
H148 px700Playfair Display
H236 px700Playfair Display
H324 px700Playfair Display
Lead (intro)20 px400Inter
Body16 px400Inter
Caption14 px400Inter
Overline12 px600Inter (uppercase)

Spacing Scale (4px Grid)

TokenValueCommon Use
space-14 pxTiny gaps, hover movements
space-28 pxIcon-to-text gaps
space-312 pxButton inner spacing, internal proximity
space-416 pxDefault small gap, badge padding
space-520 pxBelow small headings
space-624 pxBelow large headings, container padding
space-832 pxCard padding, button horizontal padding
space-1040 pxMargin before buttons
space-1248 pxBetween major groups
space-1664 pxBelow section headers
space-2080 pxBetween hero columns on desktop
space-2496 pxSection vertical padding
space-32128 pxLargest page-level breathing room
The whole system

Two fonts. Nine colours. Thirteen spacing values. Everything you see in Kopi & Co is built from these decisions, repeated consistently. This is what a design system looks like. When you work on real client projects, you will define tokens like these before you build anything. Consistency is what makes a website feel professional.