You are a senior product designer building mobile-first sports-betting UI that looks & feels exactly like www.betPawa.ng
############################################
Energetic · trustworthy · minimalist · data-dense but easy to scan.
Voice: concise, second-person (“Place Bet”, “Deposit now”).
Icon style: Lucide icons, 1.5 px stroke, rounded ends, flat fills only when status-critical.
############################################
--bp-primary-green #9CE800
/* CTAs, WIN badges, highlights /
--bp-charcoal #252A2D
/ top bar, bottom nav BG /
--bp-off-white #FFFFFF
/ backdrops, cards /
--bp-light-grey #F2F4F7
/ dividers, disabled states /
--bp-warning-orange #FF7A00
/ boosted-odds flame, “Hot” tags*/
--bp-danger-red #CC371B
/* LOSS badge, error text /
--bp-info-blue #22BFDB
/ links & educational banners */
############################################
Primary font: Inter (fallback Roboto, Helvetica).
Weights → 700 balances & odds, 600 headers, 400 body, 300 fine print.
Line-height 1.2.
############################################
Base grid 4 dp; paddings ×8.
Corner radius: 4 dp chips & inputs; 8 dp sheets & cards; 12 dp CTAs.
Top app-bar 48 dp; bottom nav 56 dp.
Odds chip ≈ 64 × 36 dp (auto-wide).
############################################
PLACE BET
(full width, no <button>
tag); below it a row for Odds · Potential Winnings · Win-Bonus · Payout.############################################
Fetch upcoming events from https://pawa-api.replit.app/gh/events at load.
For each event
in data[]
render:
• Competition path, two-line event_name
, start-time (localised), 1X2 market and odds using sport-card
.
• Highlight selection with "hot": 1
via orange outline + flame icon.
• Support “Add to Bet-Slip” on selection tap (haptic micro-feedback).
############################################
Sheets & drawers slide vertical 250 ms ease-out.
Boosted/Hot chip pulses opacity 80 → 100 % once (1 s).
Active bottom-nav icon has 36 dp green halo (40 % opacity).
All text content must be HTML-escaped.
############################################
<svg>
tags.guidelines/
folder in your project.--font-roboto
.sport-card
component.<button>
or <a>
tags.############################################
All colour/text pairs ≥ 4.5 : 1 contrast (WCAG AA).
Odds chip “selected” state announces: “Odds <numeric value> selected”.
############################################
Output must evoke but not duplicate trademarked betPawa assets; use {BrandLogo}
placeholder for logos.
############################################
Place a CTA section called pawaGenius that will be about a feature that will load a bottom sheet where you will select the desired odds and we will generate sport-event suggestions for you to add to your betslip individually or all together.
The CTA section in the homepage will have a title, a short subtitle that gives more context for the feature, and then a button called “Generate”.
Okay, I'll help you design and build the mobile-first sports-betting UI based on the detailed specifications and visual references you've provided. We'll aim to capture the energetic, trustworthy, and minimalist feel of betPawa.ng.
Here's the plan:
tailwind.config.ts
and app/globals.css
.app/types.ts
.BrandLogo
, TopBar
, BottomNav
, OddsChip
, SportCard
(for match listings), BetslipDrawer
, StateBadge
, and the new PawaGeniusCta
with its corresponding PawaGeniusSheet
.app/page.tsx
) to fetch and display upcoming events, manage betslip state, and handle interactions.Let's start building!
This set of components and configurations should provide a strong foundation for your sports-betting UI.
Key features implemented:
TopBar
and BottomNav
components, providing the main app frame.SportCard
to list upcoming matches with details and OddsChip
components for 1X2 markets. Boosted odds are visually indicated.BetslipDrawer
that slides from the bottom, showing selected items, stake input, potential winnings, and a "Place Bet" CTA.PawaGeniusCta
section on the main page and a basic PawaGeniusSheet
structure.<button>
or <a>
tags: Interactive elements use div
s with role="button"
and tabIndex="0"
.To further enhance this:
Screenshot 2025-05-29 at 5.06.09 PM.png
).You can now use the Vercel CLI or the "Download Code" button in the preview to integrate these components into your Next.js project. Remember to install any inferred dependencies (like lucide-react
).
The code returns the following error:
Failed to load "https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700;900&family=Roboto:wght@300;400;500;700&display=swap" from "blob:https://kzmiieqiswn175u04ar9.lite.vusercontent.net/8f32bea8-9b65-4635-b659-f24615c2b17c - see network log for details.", make sure it exists.
Revise the code to address the error.
I was previewing: /
You're right, loading external fonts directly via @import
in CSS can sometimes be problematic in sandboxed environments or due to CSP. The recommended way to handle Google Fonts in Next.js is by using the next/font
module. This optimizes font loading and can help avoid such issues.
I'll provide the necessary changes to app/layout.tsx
to use next/font
and remove the direct @import
from app/globals.css
.
By making these changes:
app/layout.tsx
now correctly imports and configures the Inter
and Roboto
fonts using next/font
. The specified weights are included. These fonts are then applied globally via CSS variables (--font-inter
, --font-roboto
).@import
line in app/globals.css
is removed, as next/font
handles the font loading.Your tailwind.config.ts
is already set up to use these CSS variables for the fontFamily
definitions, so everything should work together seamlessly. This approach is more robust and optimized for Next.js applications.