Inside the app · Form, honestly

The Graphs tab. Trends that won't oversell themselves.

Thirty-two metrics for both sides, mirrored down the page. And a set of sample-size rules strict enough that a perfect record over one match doesn't get a percentage at all — because that's not a trend, it's a match.

AI-powered tab

Instant, and entirely local.

No AI, no server call, no waiting. Every number here is arithmetic over match data the app already has, which is why it renders the moment you swipe to it.

01

Swipe to Graphs

Fourth tab along. It draws immediately — there's nothing to generate and nothing to fetch.

02

Read the standouts

Up to three plain-English sentences at the top, ranked strongest first. If there's nothing solid to say, it says nothing.

03

Open a section

Results, Scoring & Conceding, Total Goals, First Half Goals, Second Half Goals, Goal Trends. Each expands to its rows, and each carries its own venue toggle.

04

Follow the flames

A flame marks a trend that cleared the evidence bar. No flame means the number didn't earn one.

What's inside

Built to underclaim.

Every stats page on the internet will happily tell you a team is on a 100% run across two matches. This one is engineered not to.

01 Thirty-two metrics, mirrored

Both teams, one line each.

Home side on the left, away side on the right, the metric down the middle. Each side shows a hit rate, a bar scaled to it, and a dot per match so you can see whether 60% means three in a row then two misses, or an alternating shrug.

Six collapsible sections, thirty-two rows in total.

ResultsMatch record, won the match, won a half, draw, unbeaten, won by 2+, clean sheet.
Scoring & ConcedingBoth teams scored, scored 1+, scored 2+, conceded 1+, conceded 2+.
Total GoalsOver 0.5, 1.5, 2.5 and 3.5 — and under 0.5, 1.5, 2.5, 3.5 and 4.5.
First / Second Half GoalsOver 0.5, over 1.5, scored 1+, conceded 1+ — each half read on its own.
Goal TrendsGoals per match, first-half goals, second-half goals — scored and conceded, charted.

One design detail worth knowing: a metric that couldn't be derived for some matches shows its own smaller sample count next to the dots, rather than quietly averaging over gaps.

M AC Milan · Hellas Verona V
Graphs
Total Goals9
AllHome/Away
10 matches vs 10 matches
80%
Over 2.5 Goals
70%
60%
Both Teams Scored
50%
40%
Clean Sheet
33%
02 The evidence bar

A rate from one match isn't a rate.

Most stats pages will show you "100%" from a single match without blinking, and your eye reads it as a pattern. It isn't one. So there are rules about what gets printed at all.

0–1No percentage shown. One match cannot produce a rate, and printing one would read as far stronger evidence than a single result deserves.
2–3Rate shown, but muted. Real, and visibly thin.
4+Shown normally.
FlameAt least 5 matches, plus 70% or better on both sides for a match-level stat, or 80% or better on one side for a team-level stat. A stat that already lands in most matches by default — Under 4.5 Goals — needs a spotless record on both sides instead, so it can’t cheapen the flame everywhere else.

That match-versus-team split matters. Over 2.5 goals describes the fixture, so both sides trending the same way reinforces the signal. Clean sheets describe one team — and since the two teams are about to play each other, both being good at it tells you nothing. Only an overwhelming rate on a single side counts.

The flame is computed on whatever data you're currently looking at, so switching the venue filter can light it or put it out. It always describes the numbers on screen.

Same stat, three samples
1 match
won 1
not shown
100%
3 matches
won 3
muted
89%
9 matches
won 8
flamed
03 Fixture-relative venue

One toggle, because there's only one right answer.

The venue filter is a single switch: All or Home/Away. Turn it on and you get the home team's home matches against the away team's away matches — the venue each side will actually occupy on the day.

An earlier version offered three options and let you compare a team's home form against the opponent's home form. That comparison has no meaning for a fixture only one of them is hosting, so it's gone. One toggle, one answer, no way to misread it.

Each of the six sections carries its own, so you can split results by venue while leaving goal totals on the full sample — the ten-match view is often the better read for goals, where venue matters less than it does for winning.

Whatever you choose, a line under the toolbar states plainly how many matches each side is being judged on. If the filter empties a section, it says so and offers to undo it, rather than showing an empty chart.

Results5
AllHome/Away
6 home matches vs 5 away matches
5W 1D 0L
6 matches
Match Results
0W 1D 4L
5 matches
83%
Won the Match
0%
Same fixture, All filter: 7W 2D 1L against 3W 2D 5L. The venue split is doing real work here.
04 What stands out

Three sentences, and a higher bar than the flame.

At the top of the tab, up to three plain-English sentences about what the numbers actually say. No AI, no server call — it's arithmetic over the same match data the charts draw from, which is why it's instant.

The bar for a sentence is deliberately stricter than the bar for a flame. A flame is a "look here" cue. A sentence is a claim, so it needs eight or more matches at 80%+, or a perfect record across at least four. The reasoning is in the code: on a coin-flip statistic, four from five comes up by chance about one time in five. That's not a trend, and it shouldn't be written down as one.

They're ranked, too — both teams agreeing on a match-level stat first, then active streaks, then venue-relevant rates, then overall. And one sentence per metric family per team, so you never get the same observation phrased three ways.

If nothing clears the bar, the section is simply empty. Silence is a result.

What stands out
Over 2.5 Goals hit in 8 of AC Milan's last 10 and 7 of Hellas Verona's last 10 matches.
AC Milan have won their last 5 matches in a row.
Hellas Verona failed to win in 9 of their last 10 away matches.
Based on recent form — a guide, not a guarantee.
05 Goals, half by half

When the goals actually arrive.

Three line charts per team: goals per match, first-half goals, second-half goals — each one plotting scored against conceded across the recent run.

The split is the point. A side averaging two goals a game that scores nearly all of them after the break is a completely different proposition for a first-half goals market than a side with the same average that starts fast. The season total hides that entirely; two charts side by side make it obvious in a second.

It pairs directly with the half-specific markets in the Picks tab — first-half and second-half goals are separate markets there, and this is where you find out which one to take.

1st Half Goals · AC Milan Scored Conceded
10 agomost recent
2nd Half Goals · AC Milan Scored Conceded
10 agomost recent
Same team, same ten matches. Nearly everything arrives after the break.
Why it's built this way

Small samples lie confidently.

Every rule on this page exists because the alternative — printing whatever the arithmetic returns — makes noise look exactly like signal, and costs you points.

SILENT

Nothing under two

One match never produces a percentage. There's no honest way to render it, so it isn't rendered.

MUTED

Thin stays visibly thin

Two or three matches show a rate in a dimmer treatment, so you read it as the fragment it is.

STRICTER

Claims cost more than cues

A flame needs five matches. A written sentence needs eight at 80%, or a perfect four.

LOCAL

No model in the loop

Deterministic arithmetic on data already loaded. Same input, same output, every time, instantly.

Questions, answered.

What does the Graphs tab show?

Thirty-two form metrics for both teams side by side, in six sections. Results covers wins, winning a half, draws, unbeaten runs, winning by two or more and clean sheets. Scoring & Conceding covers both teams scoring, scoring once or twice and conceding once or twice. Total Goals runs the full over and under ladder from 0.5 to 4.5. First Half Goals and Second Half Goals repeat the key lines for each half on its own. Goal Trends charts goals scored and conceded per match and for each half separately.

Every row shows a hit rate, a bar, and a dot per individual match.

Why do some percentages not appear at all?

Because a rate from one match isn't a rate. Below two matches no percentage is shown, and at two or three it appears muted to mark it as thin evidence. "100%" across a single match reads as far stronger than a single win deserves, so the app declines to print it.

What does the flame mean?

A genuinely strong trend. A match-level metric like over 2.5 goals needs at least five matches and 70% or better on both sides. A team-level metric like clean sheets needs at least five matches and 80% or better on one side — because the two teams oppose each other, so both being good at it tells you nothing.

What does the Home/Away filter do?

It's fixture-relative: the home team's home matches against the away team's away matches — the venue each side will actually occupy in this match.

It's one toggle rather than three venue options, and each section carries its own, so you can split results by venue while leaving goal totals on the full sample.

Is "What stands out" AI-generated?

No. It's deterministic client-side arithmetic over the same match data the graphs render — no AI, no server call, no waiting. The sentences are held to a stricter bar than the flame: eight or more matches at 80%+, or a perfect record across at least four. On a coin-flip statistic, four from five happens by chance roughly one time in five, which is why the small-sample route requires perfection.

How many matches does it look at?

The recent run available for each side, most recent first, with friendlies excluded. When a specific metric can't be derived for some of those matches, the row shows its own smaller count next to the dots rather than quietly averaging across the gaps.

Read the trend.
Or read that there isn't one.

Free, forever. No money in, no money out — just your record against everyone else's.