MulliganGPS Design system
Navigation

MulliganGPS / Catalog

Design language

Reusable foundations, interface patterns, and course illustrations for MulliganGPS.

In context

A season at a glance

A round overview using the shared patterns below. Sample data; edits stay in this preview.

Rounds played12This season
Average score82.42.1 strokes this month
Best round+5At Tangle Ridge
Latest round Personal best

Saturday at Tangle Ridge

Sep 20 · 18 holes · Member tees. A round worth remembering.

Score
77
To par
+5
Putts
29

Recent rounds

View history
  • Home CourseToday · 9 of 18 holes
    In progress
  • Tangle RidgeSep 20 · 18 holes
    Complete
  • Great MunicipalAug 23 · 18 holes
    Complete

Foundations / 01

Typography

One clear interface family, a distinctive voice for occasional copy, and stable score data.

Typefaces

Each family has one job.

Instrument Sans

Headings, body copy, and interface labels

M PLUS Rounded 1c

Occasional expressive copy and illustration captions

Sono

Distances, scores, and technical data

Type scale

Use the fewest levels needed to make the information hierarchy obvious.

Display48 / 56 · 600

Dozens of rounds played.

H140 / 48 · 600

Fairways are mostly a suggestion.

H232 / 40 · 600

Round summary

H324 / 32 · 600

Hole 7 · Par 4

H420 / 28 · 600

Approach shot

H516 / 24 · 600
Club recommendation
H614 / 20 · 600
Last updated just now

Body text

Instrument Sans keeps body copy, supporting text, and controls consistent. Body text starts at 16px.

Large · 18 / 28

The green sits 164 yards away. The wind says seven iron. Confidence says driver.

Body · 16 / 26

MulliganGPS tracks the round while you focus on golf, weather, and locating the ball you were certain landed beside the fairway.

Small · 14 / 22

Distances are estimates. The confident club selection remains entirely your fault.

Inline styles

Native text elements cover common emphasis without introducing component APIs.

Linked course details

Strong recommendation

Optimistic estimate

Personal best

Penalty-free round

front-nine: 41

Press R to record a shot

Last synced 12 seconds ago

Default text

Secondary text

Round saved

Signal is weak

Score not saved

Unavailable until hole 19

Numbers

Monospaced, tabular figures keep changing distances stable. Headline statistics use Instrument Sans with tabular numerals.

To pin
164 yd
Round
+7
Putts
31
Fairways
9/14

Foundations / 02

Colors

Warm neutral surfaces keep the interface clean. Vivid color communicates hierarchy, interaction, and status.

Color ramps

The outlined swatch is the anchor for each ramp.

slate

Primary

--slate-600
  1. 50
  2. 100
  3. 200
  4. 300
  5. 400
  6. 500
  7. 600
  8. 700
  9. 800
  10. 900

green

Positive and success

--green-500
  1. 50
  2. 100
  3. 200
  4. 300
  5. 400
  6. 500
  7. 600
  8. 700
  9. 800
  10. 900

orange

Accent

--orange-500
  1. 50
  2. 100
  3. 200
  4. 300
  5. 400
  6. 500
  7. 600
  8. 700
  9. 800
  10. 900

sky

Information

--sky-500
  1. 50
  2. 100
  3. 200
  4. 300
  5. 400
  6. 500
  7. 600
  8. 700
  9. 800
  10. 900

amber

Warning

--amber-500
  1. 50
  2. 100
  3. 200
  4. 300
  5. 400
  6. 500
  7. 600
  8. 700
  9. 800
  10. 900

crimson

Danger

--crimson-500
  1. 50
  2. 100
  3. 200
  4. 300
  5. 400
  6. 500
  7. 600
  8. 700
  9. 800
  10. 900

Semantic roles

Use these tokens in product styles instead of selecting colors directly from a ramp.

PrimaryCore action
PositiveSave and confirm
AccentHighlight
SuccessCompleted
InformationHelpful context
WarningNeeds attention
DangerFailure or risk

Interaction states

Soft backgrounds support selection; darker steps communicate hover and active states.

Primary

Soft100
Default600
Hover700
Active800

Positive

Soft100
Default500
Hover600
Active700

Accent

Soft100
Default500
Hover600
Active700

Surfaces

Three warm-neutral levels create separation before shadows are introduced.

Canvas100 / 200 mix
Sunkenneutral-100
Panelneutral-50

Text hierarchy

Use opacity-free neutral tokens so contrast remains predictable.

PrimaryScores and essential labels

SecondaryDescriptions and metadata

MutedSupplementary information

DisabledUnavailable actions

Feedback pairings

Tinted surfaces carry status without turning the entire interface into a scoreboard.

Foundations / 03

Shape & elevation

Compact radii, clear borders, and shallow shadows separate content without making it float away from the interface.

Corner radius

Use the smallest radius that suits the size of the element.

Small4px
Medium6px
Large8px

Borders

One-pixel neutral borders do most of the structural work.

Subtleneutral-200
Defaultneutral-300
Strongneutral-400

Elevation

Three levels cover static content, raised controls, and temporary floating UI.

FlatDefault content
none
RaisedInteractive surfaces
0 1px 2px
FloatingMenus and overlays
0 3px 6px

Cards

Cards are CSS patterns applied to the semantic element that matches their behavior.

Upcoming round Great Municipal Golf Course

Saturday at 8:10 AM. Attendance remains technically possible.

Normal card
Continue round Hole 7 · Par 4

164 yards to the pin and several excuses already prepared.

Interactive card
Round status Scorecard saved

Every shot is safely recorded, including the regrettable ones.

Success status
Round summary
Score
+7
Putts
31
Fairways
9/14
Data card

Footer actions

Keep actions together at the bottom edge and preserve one obvious next step.

Saturday · 8:10 AM Upcoming round

Great Municipal Golf Course, assuming the alarm clock participates.

Course details Home Course

18 holes, 6,412 yards, and one golfer listed as both member and public.

Round management Tuesday practice

Deleting this round requires confirmation and selective memory.

Components / 01

Buttons

Native buttons with clear hierarchy, compact geometry, and enough physical feedback to feel responsive without becoming glossy.

Hierarchy

Use one primary action per context. Color variants communicate meaning, not decoration.

Primary.button-primary
Secondary.button-secondary
Positive.button-positive
Danger.button-danger
Text.button-text

Sizes

Three shared control heights will carry directly into form fields.

Small.button-small
Default.button
Large.button-large

States

Static specimens mirror the real pointer, keyboard, pressed, and disabled states.

Default600
Hover700
Active800
Focussky-500
Disabledneutral

Icons & content

Icon-only controls remain rounded squares and always require an accessible name.

Icon only.button-icon-only
With contentgrid-auto-flow: column

Components / 02

Form elements

Compact native controls for courses, rounds, scores, and settings. Labels and feedback remain visible instead of relying on placeholders.

Inputs

Text-like controls share the 32px default height established by buttons.

Combobox

Type in the field, then select a match. Arrow keys browse; Enter selects; Escape dismisses.

Selected course ID: None

Simulated remote search. Type “error” to preview a failed request.

Multi-select

A field that opens a list. Clicking an option toggles it and keeps the list open; arrow keys browse, Space or Enter toggles, and Escape closes.

Chosen: stroke, match

Disabled, so the list can't open.

Field states

Validation uses borders, text, and focus treatment without shifting control geometry.

Selection controls

Checkboxes remain square, radio controls remain circular, and switches do not become pills.

Checkbox
Radio
Switch

Components / 03

Badges, tags, and avatars

Compact status and identity patterns with visible corners. Static tags describe data; anything selectable or removable becomes a real control later.

Status badges

Color supports the label but never carries the meaning alone.

Draft In progress Complete Needs review Score disputed

Static tags

Low-emphasis metadata, not miniature buttons wearing a fake mustache.

18 holes Member tees Walking Home course Personal best

Count badges

Short counts stay square; larger values grow without becoming pills.

1 12 99+ 0
3

Avatar types

Initials are the useful default; the fallback covers missing profile data.

JV MG NA

Avatar sizes

Three compact sizes cover dense tables, navigation, and account surfaces.

24px
32px
40px

Components / 04

Data tables

Native tables keep dense round history readable. Text stays left aligned, numbers line up on the right, and narrow screens scroll without disguising rows as cards.

Recent rounds

Compact rows use neutral separators, restrained hover, and a visible selected state.

Recent golf rounds
CourseHolesScoreTo parStatusActions
Great Municipal1881+9Complete
Lakeside1878+6Complete
Home Course939+3In progress
Expensive Hot Dogs1885+13Needs review

Empty state

Keep the table context visible and provide one obvious next action.

Empty recent rounds table
PlayedCourseScoreStatus
No rounds yet The scorecard is suspiciously clean.

Components / 05

Feedback and loading

Static feedback uses semantic HTML and complete borders. Animation is reserved for loading indicators and respects reduced-motion preferences.

Alerts

Inline messages remain in the document flow; dismissible alerts come later.

Course updated

Distances were refreshed from the latest data.

Round saved

All eighteen holes survived the upload.

Location is imprecise

Yardages may be ambitious by a few feet.

Round not saved

Check your connection and try saving again.

Progress and meters

Use progress for completion and meter for a measured value within a known range.

Loading states

Skeletons mirror the expected layout; spinners cover brief indeterminate work.

Loading round summary
Loading round rows
Finding the pin…

Components / 06

Data display

Small display patterns organize course and round information without introducing behavior or a component API prematurely.

Statistics

Tabular figures and short labels keep changing values stable and scannable.

Rounds played12This year
Average score82.4Trending down
Best round+5Almost suspicious
Putts per round31.2Last five rounds

Description list

Label-value details for a course or completed round.

Course
Great Municipal
Tees
Member · 6,214 yd
Played
Weather
84° · Breezy enough

Action list

Structured rows for related records and lightweight actions.

  • Great MunicipalLast played Aug 23
    Home
  • LakesideLast played Aug 16
  • Expensive Hot DogsLast played Aug 2
    Review

Empty state

A general pattern for an empty collection or search result.

No saved courses

Save one now and pretend this was always the plan.

Thumbnails and placeholders

Images crop consistently; missing imagery remains intentional.

No course photo
16:9
No hole photo
4:3
No avatar photo
1:1

Components / 09

Dialogs

A focused task or a handy reference. Close or press Escape when you’re done.

Saturday at Tangle Ridge

No round notes yet.

Changes here are preview only.

Delete this round?

This removes the round and its scores. This action cannot be undone.

This is a preview. No saved round will be deleted.

Edit round

Give this round a name and save any notes you want to keep.

Scoring reference

Keep this open while you review a round. The page is still available.

Birdie
One under par
Par
Right on schedule
Bogey
One over par
Double bogey
Two over par

Components / 10

Content utilities

Low-level content styling for separation, instructions, quotations, and technical text.

Dividers

Use spacing first; dividers clarify boundaries when spacing is not enough.



Keyboard hints

Hints document shortcuts without pretending they are buttons.

Press G to open GPS.

Press R then N to start a new round.

Press Esc to reconsider your choices.

Golf is a game where the ball usually knows exactly what you were trying to avoid.

Round notes, probably
score.total = strokes + penalties;
score.explanation = 'wind';

Course illustration

Construction paper

Fine paper fibers, carefully cut edges, and just enough depth. A material study for our own course geometry.

A little more feel.Hole 07 · Par 4 · Illustrated study
A golf hole assembled from layered construction paperA sweeping fairway, pale green, sand bunkers and rounded tree canopies. A light blue shoreline has an interior cut away to reveal a darker sheet below. Magnification focuses on the green and lake.164 yd
07
Paper, from tee to green.

One shoreline. Two sheets of water.

Switch to 2× or 3× to inspect the fibers and the recessed water edge. The narrow inlet loses its deep-water layer as the shallow band widens.