01Problem
Rank 1 248 is not a reason to come back
The Global board ranks everyone against everyone. It motivates the people near the top, while most learners see a number too far away to matter.
Teng zarbalar bir xil o‘rinda turadi
Reyting har kuni zarbalar bo‘yicha yangilanadi. Bugun ham tinglab, zarbangni uzaytir.
Interactive prototype
The phone runs the real Uzbek copy and the full state model: create, invite, accept, rank, manage and leave. Jump to any screen, or trigger the events a real league would see.
Sening o‘rning
Standard 390 × 844 · Sample data, not real Tingla users
Overview
Tingla already rewards consistency with a daily streak and a Global leaderboard. Friends Leaderboard keeps both exactly as they are and adds the one thing they lack: people you actually know.
01Problem
The Global board ranks everyone against everyone. It motivates the people near the top, while most learners see a number too far away to matter.
02Hypothesis
Seeing a friend's streak next to yours creates small, personal stakes. A private league turns a solo habit into a shared one, online and off.
03Approach
Reuse the streak, the leaderboard screen and the navigation people already know. Build only what it takes to create a league, invite friends and manage it.
Metrics are proposals for the product team, measured against users who are not in a league.
Kept out on purpose so the first release proves the core loop: create, invite, compare, come back tomorrow.
Information architecture
Friends lives next to Global on the screen people already use. Everything else is reached from inside the league, so the app's navigation does not grow.
End-to-end user flow
The creator's path is short on purpose: two screens to a live league. The invited friend's path handles every way an invitation can arrive, fail or wait.
Opens the Leaderboard
Global looks exactly as before. The Do‘stlar tab carries a small dot until the first visit.
Switches to Do‘stlar
The tab explains the feature in one sentence and three short promises.
Decision: Already in a league?
Names the league
One field, quick picks and a plain privacy note. Private is the default, not a setting.
Invites friends
Search Tingla or share the link. Keyinroq skips ahead; the league already exists.
League goes live
Open podium spots and pending invitations show progress while friends respond.
Friends join, the race starts
Ranking by current streak. The creator's own row stays visible wherever they scroll.
Manages the league
Rename, invite more people, remove members, all from one settings screen.
Leaves with one confirmation
Admin rights move to the longest-standing member. The Global streak is untouched.
Gets an invitation
A notification for in-app invitations, or a link in Telegram or any other messenger.
Decision: Has a Tingla account?
Sees who invited them and to what
Inviter, league name, members, the longest streak and a privacy promise.
Decision: Is the invitation still usable?
Decision: Join now?
Appears in the ranking
The inviter gets a quiet confirmation. Nobody is ever told about a decline.
High-fidelity screens
Each screen below is the live prototype frozen in place, with the same components, copy and data. Open any of them to keep clicking from that point.
Sening o‘rning
Reyting · Umumiy
Shaxsiy liga yarat va do‘stlaringni taklif qil. Har kim o‘z zarbasi bilan reytingda joy oladi.
Do‘stlar · bo‘sh holat
Yangi liga
“Kitob klubi” ligasi
Havola orqali istalgan do‘sting qo‘shila oladi, u hali Tinglada bo‘lmasa ham.
tingla.ai/l/KLB5R3
Do‘stlarni taklif qilish
Liga taklifi
Do‘stlaring bilan har kuni zarbangni solishtir va birga izchil o‘rgan.
Qo‘shilsang ham umumiy zarbang va global reytingdagi o‘rning o‘zgarmaydi.
Liga taklifi
Teng zarbalar bir xil o‘rinda turadi
Reyting har kuni zarbalar bo‘yicha yangilanadi. Bugun ham tinglab, zarbangni uzaytir.
Liga reytingi
11 a’zoYopiq liga
Liga a’zoligi umumiy zarbaga ta’sir qilmaydi.
Liga sozlamalari
Hozircha faqat sensan. Do‘stlaring qo‘shilgach, raqobat boshlanadi.
Chekka holatlar
Responsive layouts
The Friends leaderboard at three common widths, shown at the same scale. The layout adapts; the type scale and touch targets do not shrink.
Every screen stretches to the device width. Only touch targets and avatars have fixed sizes.
Buttons, rows and icon buttons are at least 44 by 44 points at every size.
Content clears the status bar, camera and home indicator on every frame.
When space runs out, names truncate first, usernames second, streaks never.
Design system
Everything in the prototype is built from this kit. It extends Tingla's minimal style with one orange accent, warm neutrals and a single flame mark for streaks.
4-point spacing grid. Inputs 16, cards 22, sheets and dialogs 28, avatars and chips round. Touch targets 44 or more.
Live components, not pictures. The tabs, search and field below respond to input.
Global and Friends. A sliding white pill marks the active tab; arrow keys switch tabs.
Primary, secondary, ghost and destructive, with loading and disabled states. 56 point primary height.
Kamida 3 ta belgi bo‘lsin
Label above, counter and message below. Errors use color, an icon and text, never color alone.
Search by name or username. The whole row is the checkbox, so the target is the full width.
Photo or initials on a soft tint, the same size grid everywhere. Members without a photo never look broken.
12 kunlik zarba
One flame for every streak. Active streaks burn orange; a zero streak turns calm grey, never red.
Default, current user and pinned. Rank, avatar, name, username and streak in a fixed order.
The top three with medal rings, a crown for first place and soft pedestals. Equal streaks share a rank.
Invitation statuses carry an icon and a word. Declined is neutral grey on purpose.
Toast for quiet success, inline alert for recoverable errors, skeletons while loading.
The invitation notification, plus the soft 3D tiles used for empty, error and confirmation states.
Empty, loading, error, success and confirmation states
Every state listed in the brief, plus the ones a real league runs into. Each card is a live screen you can continue in the prototype.
A league is never presented as a failure, even with one member.
Hozircha faqat sensan. Do‘stlaring qo‘shilgach, raqobat boshlanadi.
Open podium spots become invite buttons.
Reyting har kuni zarbalar bo‘yicha yangilanadi. Bugun ham tinglab, zarbangni uzaytir.
Who joined and who has not answered yet.
Reyting har kuni zarbalar bo‘yicha yangilanadi. Bugun ham tinglab, zarbangni uzaytir.
A quiet toast and your row lights up briefly.
Reyting har kuni zarbalar bo‘yicha yangilanadi. Bugun ham tinglab, zarbangni uzaytir.
Back to your next league, streak reassurance included.
Every dead end offers a next step. No error is a red wall of text.
Inline, specific and fixable in place.
“Kitobxonlar” ligasi
Havola orqali istalgan do‘sting qo‘shila oladi, u hali Tinglada bo‘lmasa ham.
tingla.ai/l/KTB7Q2
Yozilishini tekshir. Do‘sting hali Tinglada bo‘lmasa, unga havolani yubor.
Points to the link, which reaches friends not on Tingla.
Muddati tugagan yoki bekor qilingan. Do‘stingdan yangi havola so‘ra.
One calm way back to the leaderboard.
“Kitobxonlar” ligasida 9-o‘rindasan.
Opens the league instead of showing an error.
Bu ligada a’zolar soni chegaraga yetgan. Joy bo‘shaganda qayta urinib ko‘r yoki o‘z ligangni yarat.
No invented number, an alternative instead.
Aloqani tekshirib, qayta urinib ko‘r.
The same pattern everywhere, with one retry.
Feedback for every wait, and confirmation only where an action cannot be undone.
Skeletons match the final layout, so nothing jumps.
Teng zarbalar bir xil o‘rinda turadi
Reyting har kuni zarbalar bo‘yicha yangilanadi. Bugun ham tinglab, zarbangni uzaytir.
Pull down to refresh, with a short confirmation after.
11 a’zoYopiq liga
Liga a’zoligi umumiy zarbaga ta’sir qilmaydi.
“Kitobxonlar” reytingini endi ko‘rmaysan. Umumiy zarbang saqlanib qoladi. Qaytish uchun yangi taklif kerak bo‘ladi.
Adminlik Dilnozaga o‘tadi.
One confirmation that spells out the consequences.
11 a’zoYopiq liga
Liga a’zoligi umumiy zarbaga ta’sir qilmaydi.
U bu liga reytingini boshqa ko‘rmaydi. Uning umumiy zarbasi saqlanib qoladi.
Admin only. The removed person keeps their streak.
11 a’zoYopiq liga
Liga a’zoligi umumiy zarbaga ta’sir qilmaydi.
Initials on a soft tint, never a broken image.
Senga taklif bor
Dilnoza Rahimova seni “Ertalabki tinglovchilar” ligasiga taklif qildi
Shaxsiy liga yarat va do‘stlaringni taklif qil. Har kim o‘z zarbasi bilan reytingda joy oladi.
Tap to open the invitation from anywhere.
Secondary tasks open in place and close with the close button, a tap outside or Escape.
Teng zarbalar bir xil o‘rinda turadi
Reyting har kuni zarbalar bo‘yicha yangilanadi. Bugun ham tinglab, zarbangni uzaytir.
All your leagues, your rank in each, and room for more.
Senga taklif bor
Dilnoza Rahimova seni “Ertalabki tinglovchilar” ligasiga taklif qildi
Shaxsiy liga yarat va do‘stlaringni taklif qil. Har kim o‘z zarbasi bilan reytingda joy oladi.
Do‘sting yuborgan havolani och yoki shu yerga joylashtir.
Invitations you received and a field to paste a link.
“Kitob klubi” ligasi
Havola orqali istalgan do‘sting qo‘shila oladi, u hali Tinglada bo‘lmasa ham.
tingla.ai/l/KLB5R3
Do‘stingni ismi yoki foydalanuvchi nomi orqali top
Kitob klubi
tingla.ai/l/KLB5R3
Tinglada “Kitob klubi” ligamga qo‘shil! Birga tinglaymiz va zarbalarimizni solishtiramiz.
A ready-made message in Uzbek for any messenger.
11 a’zoYopiq liga
Liga a’zoligi umumiy zarbaga ta’sir qilmaydi.
Same rules as creating, saved with one tap.
Uzbek UI copy
197 strings across 15 groups, each with its English meaning. The prototype reads from this exact deck, so what you see here is what the screens say.
One idea per sentence. Buttons say exactly what happens: Liga yaratish, Taklif yuborish, Ligaga qo‘shilish.
No “last place”, no red for low ranks, and nobody is ever told that a friend declined.
o‘ and g‘ use ‘, the tutuq belgisi uses ’, quotes are “ ”, and thousands are grouped with a space: 1 248.
The brief's headline uses the informal sen. Tingla's current screens use siz. Both are written; the product team picks one.
| Element | Uzbek | English meaning |
|---|---|---|
| Headline | Do‘stlaring bilan raqobatlashsiz Do‘stlaringiz bilan raqobatlashing | Compete with your friends |
| Supporting text | Shaxsiy liga yarat va do‘stlaringni taklif qil. Har kim o‘z zarbasi bilan reytingda joy oladi.siz Shaxsiy liga yarating va do‘stlaringizni taklif qiling. Har kim o‘z zarbasi bilan reytingda joy oladi. | Create a private league and invite your friends. Everyone is ranked by their own streak. |
| Benefit 1 | Faqat taklif qilinganlar ko‘ra oladi | Only invited people can see it |
| Benefit 2 | Reyting zarbalar asosida tuziladi | The ranking is based on streaks |
| Benefit 3 | Umumiy zarbang o‘zgarmaydisiz Umumiy zarbangiz o‘zgarmaydi | Your overall streak stays the same |
| Primary CTA | Liga yaratish | Create a league |
| Secondary action | Taklif orqali qo‘shilish | Join with an invitation |
Product rules
The brief's rules are built in as stated. Everything the brief left open is handled in the prototype by a clearly labelled assumption, never by an invented final limit.
| Action | Admin | Member |
|---|---|---|
| See the league ranking | Allowed | Allowed |
| Invite friends and share the linkAssumption | Allowed | Allowed |
| Track the invitations they sent | Allowed | Allowed |
| See every invitation in the league | Allowed | Not allowed |
| Rename the league | Allowed | Not allowed |
| Remove members | Allowed | Not allowed |
| Leave the league | Allowed | Allowed |
Key UX decisions
Each one trades a little feature surface for clarity, so creating a league, inviting friends and coming back tomorrow all stay effortless.
Friends sits beside Global on the screen people already open. Nothing new to find in navigation, and the Global experience stays exactly as it is.
Leagues rank by the same current streak as Global. No points to explain, no new backend logic, and the two boards can never disagree.
Name it, then invite. The league exists after the first step, so skipping invitations with Keyinroq never throws work away.
The link works in Telegram or any messenger, before install and through sign-up. Search covers friends already on Tingla. No permission prompt, ever.
When your row scrolls away, a copy pins to that edge of the screen. One tap brings the real row back into view.
Low ranks stay neutral, ties share a rank, a zero streak is grey rather than red, and declines are never announced. The copy talks about your streak, not your position.
Medal rings, a small crown and soft pedestals reward the leaders without turning the list into a scoreboard.
Hozir emas keeps the invitation in the Friends tab. Declining is a separate, deliberate tap, and it comes with an undo.
Leaving and removing a member ask once, with the consequences spelled out. Renaming, inviting and declining never interrupt.
Private is the default, explained on the create screen and repeated on the invitation instead of hiding in settings.
AA contrast for all text, 44 point touch targets, rank never shown by color alone, and every ranking row read aloud as one clear sentence.
White surfaces, one orange, warm neutrals and rounded cards. Soft 3D appears only where it explains something: the empty state and state icons.
After the MVP
The structure leaves space for these without redesigning anything: each one adds to the league screen rather than changing it.
Seasons that reset every week give people with short streaks a fresh chance to lead.
Needs the MVP's retention signal first.
Badges or trophies for league winners and streak milestones, shown on profiles.
Needs a rewards inventory and moderation rules.
A quick cheer, or a gentle nudge when a friend's streak is at risk, with strict frequency caps.
Needs a notification budget per person.
Streak history, best streak and listening time, compared within the league.
Needs historical streak data per day.