← All work
KN
Consumer app · GCC & the Arab world

KooraNow

● Live

An Arabic-first football product for the Gulf and the wider Arab world: live scores, fixtures, standings, editorial and an interactive prediction game — with Gulf and Arab leagues covered at the same depth as Europe.

Category
Consumer app
Market
GCC & the Arab world
Surfaces
iOS · Android · Web
Status
Live in production

Every Arabic football app treats the Gulf as an afterthought.

The established Arabic football apps cover European football properly and then hand the Gulf leagues a thin fixture list. Player and team names read like machine translation, because that is often what they are.

Covering Gulf and Arab competitions at European depth, in correct Arabic football idiom, is the entire product thesis — not a feature on a roadmap.

Every surface, by us.

Mobile app
Flutter on iOS and Android, offline-first with stale-while-revalidate so the app renders instantly from cache and updates behind the user.
Public web
Next.js App Router, server-rendered because search is a primary acquisition channel for a scores product.
API and workers
Fastify on Node and TypeScript, with Redis-backed job queues handling ingest and fan-out.
Editorial
A native-Arabic editorial partner reviews naming and copy. Nothing ships machine-translated.

We measured the latency instead of arguing about it.

A live-scores product whose competitive claim is speed has to treat latency as a measurement, not an opinion.

// 01

The region was chosen from numbers, not habit

The original deployment sat in Frankfurt for operational convenience. Measured from Dubai, Mumbai answered in 71ms against Frankfurt's 152ms — and cost less for the same instance. Cold p95 fell from 612ms to 211ms and warm from 134ms to 46ms. The infrastructure moved.

// 02

Cache-first, with the CDN in front of the API

CloudFront sits in front of the API and not merely in front of object storage, so TLS terminates near the user and cacheable responses never reach the origin. Fixtures, standings and profiles carry cache headers by design.

// 03

Short TTLs on live data, never zero

A five-second edge TTL on a live match endpoint absorbs the thundering herd of a derby without any user perceiving staleness. Zero would have meant every phone in the Gulf hitting the origin on the same goal.

// 04

Goal alerts do not cross the region

Push notifications deliver through the provider's own edge, so the most latency-sensitive thing the product does never traverses the origin region at all.

// 05

Deliberately boring, deliberately cheap

One ARM instance runs the API, the workers and Redis under Docker Compose. No Kubernetes, no microservices, no serverless — a constraint that has held since the first deployment.

What it runs on.

Flutter Next.js Fastify TypeScript Prisma PostgreSQL 16 Redis BullMQ CloudFront AWS ap-south-1

We build these for ourselves. We build them for clients too.

Everything on this page was designed, built, deployed and is operated by the same small senior team. If you have a product that needs the same treatment, start with a conversation.