Popzify

UI/UX · Product design

Correct Score Pro — the app.

A football predictions app for iOS and Android: AI predictions, live scores and a monthly prediction league. Five tabs, one component kit, designed to be read in a second on a phone held in one hand.

Stefan PopovićCreative designer · Popzify

Stefan Popović

Role

Product design — UX and UI

Platform

iOS and Android

Status

In review on the App Store and Google Play

Also

Web platform live in four languages

Context

Correct Score Pro began as a web platform and a Telegram community of over 7,000 members, publishing predictions and odds every day. The app had to carry that daily habit onto a phone: open it, see what is on today, read one prediction, make a pick. It is used in the evening, mostly one-handed, often in a dark room with a bright screen — so the interface is dark by default, and the one saturated colour in it is reserved for what the user is meant to touch.

01 / 05

Home — answering one question

Everything above the fold answers “what is worth looking at today”. The hero carries the date and what the day holds; the three tiles are product proof rather than decoration. Directly under them the date strip and the filter chips let the user re-scope the feed without leaving the screen, and a live ticker runs between the filters and the list so the page keeps moving while it is being read.

  • Information hierarchy
  • Filtering
  • Live data

02 / 05

The feed — grouped by competition

Matches group by competition, each group collapsible with a count and a favourite star, so a user who follows two leagues experiences a two-league app. Every card carries the same furniture in the same order: status pill, kick-off, venue, the 1/X/2 row, one primary action. Nothing on the card competes with that action.

  • Progressive disclosure
  • Card pattern
  • One primary action

03 / 05

League — the gamified layer

A monthly competition with points, a leaderboard and prizes, carrying the sponsor inside the card rather than stuck on top of it. The pick control is a stepper on each side instead of a text field: two taps set a scoreline, there is nothing to type and nothing to validate. The lock countdown sits in the same card as the decision, and the saved pick stays visible next to the button that changes it.

  • Gamification
  • Custom input
  • Deadline state
  • Sponsor integration

04 / 05

Favourites — the same control, a different state

Three segments with live counts. The outcome row is the same 1/X/2 triple used for odds in the feed, here in its result state: the winning outcome outlined in green, the other two stepped back. Reusing the control instead of drawing a result table means a user already knows how to read it the first time they see it.

  • Component reuse
  • States
  • Segmented navigation

05 / 05

Settings — two row types, nothing more

Grouped rows on the same card and divider used across the app. There are only two row types in the whole screen — a toggle and a disclosure — so every future setting has an obvious home and the screen cannot drift. Section labels sit outside the card, which keeps the groups readable without adding a single line.

  • Design system
  • Scalability
  • Grouping

The same system, with room

The product also runs on the web at correctscore.pro. The desktop build is not the phone stretched: the same parts are re-laid for the space there is. The date strip grows from six days to a fortnight, the match stack becomes a three-column grid, and a top bar carries the navigation the tab bar carries on the phone. What stays identical is the card, the status pill, the accent rules and the reading order inside every card.

Dashboard

The same hierarchy as the phone home screen — proof tiles, date strip, filters, then the feed. With the width available the feed becomes a three-column grid and the strip shows a fortnight instead of a week, so a desktop user plans further ahead without reaching for a second control.

Analysis

An editorial layer that only exists where there is room to read it. Match of the day takes a wide card with its own image area; the rest of the day's analyses sit underneath and filter by league.

Match page

The depth the phone card links out to: form over the last seven, head-to-head, venue and the players who are unavailable. On the phone this is a destination; here it is the page itself.

Predictions and tables

Where the width earns itself. Four prediction tiles each with its vote split, then standings and an expected-goals table side by side — a comparison the phone would have to turn into a scroll nobody finishes.

One kit across five tabs

The app is built from a small set of parts rather than five designed screens. What repeats is a card, a section header, a status pill, a row with a trailing control, a 1/X/2 triple and a fixed tab bar.

The system underneath

The app is not styled screen by screen. Colour, type, spacing and radius live in one token file that the whole product reads from, and the rules for using them are written next to the values. Below is that file, rendered — the same values now also exist as a Figma library so a team can work from them.

Open the Figma library — foundations, components and the user flow ↗

Elevation ladder

Each step up is lighter and reads as closer to the viewer. Never skip a step for emphasis — the ladder is what tells the eye how the screen is layered. The neutrals carry a blue cast rather than being pure grey: pure grey on OLED reads flat, and the cool cast makes the orange feel warmer by contrast.

  • surface/base#0A0B0F · app floor
  • surface/raised#14161F · cards, rows
  • surface/elevated#1E212D · cards on cards
  • surface/overlay#272B3A · sheets, menus

Text contrast ladder

primary and secondary both clear WCAG AA on surface/raised. tertiary is AA for large text only. quaternary is decorative — placeholders and disabled states, never information the user actually needs.

  • text/primary#FFFFFF · AA
  • text/secondary#A8AEBF · AA
  • text/tertiary#767D91 · AA, large only
  • text/quaternary#4E5566 · decorative

Brand ramp

500 is the brand. The ramp exists so hover, pressed and disabled states are picked from a related family rather than eyeballed per component. Orange is the only saturated colour on most screens.

  • brand/300#FF8F65
  • brand/400#FF6E3D
  • brand/500#FF5722 · brand
  • brand/600#F04A18 · pressed
  • brand/700#D13C10

Status and market

Live deliberately differs from the danger red even though both are red: one is a status, the other an alert, and reusing a single red trains users to ignore the alert. Home, draw and away have fixed colours so the 1/X/2 columns read the same on every screen.

  • status/won#3DDC84
  • status/pending#FFB020
  • status/lost#FF5A5A
  • status/live#FF3B3B · status, not alert
  • market/home#4D9FFF
  • market/draw#A8AEBF
  • market/away#C77DFF

Type scale

Sora carries headings and figures; Inter is the workhorse, drawn for screen UI at small sizes. The number styles use tabular figures so odds and scores stay aligned in a column and do not jitter when they tick live.

  • Display32 / 38Sora ExtraBold
  • Heading / H126 / 32Sora Bold
  • Heading / H221 / 27Sora Bold
  • Heading / H317 / 23Sora SemiBold
  • Body / Large16 / 24Inter Regular
  • Body / Base14 / 21Inter Regular
  • Caption12 / 17Inter Medium
  • Overline11 / 14Inter Bold, uppercase
  • Number / Large24 / 29Inter ExtraBold, tabular
  • Number / Base16 / 21Inter Bold, tabular

Spacing runs on a 4pt grid — every margin, padding and gap is one of ten steps. Radii are a fixed set, and the card radius is constant across every card in the app, which is a large part of why the UI reads as one system.

From open to a locked pick

The league is designed around one path: open, narrow the day, enter the league, set a scoreline, save it, and come back before it locks. The flow is documented step by step in the Figma file — each step naming what the user does and what the interface owes them back, because the second half is where the decisions sit. The one branch is the deadline: before it the pick is editable, after it the card settles to read-only and the pick becomes a record. Nothing disappears, because removing it would make the user doubt it was ever saved.

Constraints the design had to carry

Let's talk

One campaign or an ongoing feed — tell me what you publish and how often, and you get a plan and a price within 24 hours.