A production-grade sports betting landing page built as a frontend technical assessment for Solami — Kenya's emerging sportsbook platform.
Live demo: https://solami-sportsbook-landing.vercel.app
Assessment brief: Build a responsive landing page from an Adobe XD design using the provided games.json data file.
| Layer | Choice |
|---|---|
| Framework | SvelteKit 2 + Svelte 5 (Runes mode) |
| Language | TypeScript 6 |
| Styling | Tailwind CSS v4 |
| Build tool | Vite 8 |
| Icons | Lucide Svelte |
| Date handling | date-fns |
| Deployment | Vercel (adapter-auto) |
0712 345 678), M-PESA field, password show/hide, loading state, animated success screentracking.ts stub layer — trackCTA, trackOddsClick, trackBetPlaced, trackSignupIntent, trackAuthModalOpensrc/
├── lib/
│ ├── components/
│ │ ├── sections/ # Landing conversion blocks
│ │ │ ├── HeroSection.svelte
│ │ │ └── TrustSection.svelte
│ │ ├── features/ # Sportsbook realism engine
│ │ │ ├── BetSlip.svelte # Mobile bottom-sheet
│ │ │ ├── BetSlipPanel.svelte # Desktop panel
│ │ │ ├── MatchRow.svelte # Inline match row
│ │ │ └── OddsGrid.svelte # Featured match hero
│ │ ├── layout/ # Structural shell
│ │ │ ├── Header.svelte
│ │ │ ├── LeftSidebar.svelte
│ │ │ ├── PromoBanner.svelte
│ │ │ └── SportsNav.svelte
│ │ └── ui/ # Base elements
│ │ ├── AuthModal.svelte
│ │ ├── Badge.svelte
│ │ ├── MarketButton.svelte
│ │ ├── TeamBadge.svelte
│ │ └── Toast.svelte
│ ├── stores/
│ │ ├── betslip.ts # Selections, tax breakdown, stake, payout
│ │ └── toast.ts # Notification store
│ ├── utils/
│ │ ├── formatters.ts # Date, currency, phone, countdown
│ │ ├── odds-logic.ts # Direction, acca math, Kenya tax (KRA)
│ │ ├── teams.ts # Badge CDN URLs, colours, initials
│ │ └── tracking.ts # Analytics stub (GA4 / PostHog / Meta Pixel)
│ └── types.ts # Game, Market, OddsItem, BetSelection
├── data/
│ └── games.json # Match and odds data (provided by Solami)
└── routes/
├── +layout.svelte # Header + AuthModal + Toast
├── +page.svelte # Main landing page
└── waitlist/
└── +page.svelte # Phone capture / waitlist page
npm install
npm run dev
Opens at http://localhost:5173
npm run build # Production build
npm run preview # Preview production build locally
Built against the Adobe XD design provided by Solami, implementing the specified 3-column shell (left sidebar · match feed · betslip panel) with inline match rows showing all market columns simultaneously.
Original enhancements added beyond the brief:
/waitlist route for pre-launch lead captureThis project was submitted for the Frontend Developer (Svelte / SvelteKit) position at Solami. The brief asked for a responsive landing page; this implementation treats the page as a marketing system first and a sportsbook UI second — prioritising conversion signals (hero CTA, trust badges, auth flow) alongside the functional odds display.
© 2026 Richard Kabue Karoki — Assessment submission for Solami Ltd.