myspoti
Native Android client for Spotify, built with Jetpack Compose
Stream films in Uganda and beyond. Watch free with ads, or subscribe with mobile money or card.
MediaTypeScript · PLpgSQLGitHub @abdulssekabiraOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗By Gamers Loft Entertainment. Code folders and packages keep the cinewave name; everything viewers see says GLE Movies.
Movie streaming platform built for Uganda (open to viewers worldwide) — website + Android app on one shared backend. Prices in UGX; payments planned via MTN MoMo, Airtel Money and cards.
cinewave/
├─ apps/
│ ├─ web/ Next.js 16 website (catalogue, title pages, accounts, plans)
│ └─ mobile/ Expo (React Native) Android app
├─ packages/
│ └─ shared/ Types, data access and business rules used by BOTH apps
└─ supabase/
├─ migrations/ Database schema, access rules (RLS), storage bucket
├─ seed.sql Sample plans, genres, 9 placeholder titles + 2 partner films
└─ tests/ Access-rule checks
| Website | Android app | |
|---|---|---|
| Look | Cinematic, poster-led (CineStream reference) | Rounded cards, bottom tabs (mobile reference) |
| Accent | Red #e5192e — --accent in apps/web/app/globals.css | Orange #ff7a2f — colors.accent in apps/mobile/lib/theme.ts |
| Fonts | Bebas Neue (titles) + Inter, self-hosted | Plus Jakarta Sans |
| Home | Rotating hero with Play / More Info, rows with page dots | Greeting, swipeable hero cards, Continue Watching, rows |
| Title | Full-bleed art, chips, cast, details | Full-bleed art, chips, synopsis, cast, Watch Now bar |
| Player | Overlay player: title, rating, synopsis, seek bar, volume, settings, full screen, keyboard shortcuts | Phase 3 |
Posters without a wide backdrop are shown as blurred fill + sharp key art on the right (desktop) or full-bleed (phone). Upload a 16:9 backdrop for the best hero.
| Area | Web | Android |
|---|---|---|
| Home: featured hero + Trending, Recently Added, Free to Watch, curated rows | ✅ | ✅ |
| Continue Watching row (from saved progress) | ✅ | ✅ |
| Title page: details, genres, languages, related titles | ✅ | ✅ |
| Browse/search with genre, access and sort filters | ✅ | ✅ (search + genre) |
| Sign up, sign in, sign out, email confirmation, password reset | ✅ | ✅ (no reset yet) |
| My List (watchlist), synced across devices | ✅ | ✅ |
| Account: plan status, profile, country | ✅ | ✅ (plan status) |
| Plans page (UGX, weekly and monthly, from database) | ✅ | ✅ |
| Play / Download buttons decided by server-side entitlement | ✅ | ✅ |
| Video playback | Phase 3 | Phase 3 |
| Checkout / Google Play billing | Phase 4 | Phase 4 |
| Offline downloads | — | Phase 5 |
Admin dashboard (/admin) | ✅ | — |
The database decides what each person can see and play — the apps only display the result.
playback_entitlement(title, country) returns can_play, can_download and a reason:
ok, sign_in_required, upgrade_required, not_available_in_region, not_found.The seed data includes deliberate test cases: a draft title and an expired licence (both hidden), and a title licensed only in AE, UG, KE.
Create a new project at https://supabase.com (separate from the trainer app).
Open SQL Editor and run these files in order, one at a time:
supabase/migrations/20261027000000_init.sqlsupabase/migrations/20261027000100_storage.sqlsupabase/migrations/20261027000200_ratings.sqlsupabase/migrations/20261028000000_admin_uganda.sqlsupabase/migrations/20261028000100_security_hardening.sqlsupabase/seed.sqlThe live CineWave project (
bugmkghovzdgncspjvwy, Frankfurt) already has all of these applied.
Authentication → URL Configuration
http://localhost:3000http://localhost:3000/auth/confirmProject Settings → API: copy the Project URL and anon public key.
Prefer the command line? With the Supabase CLI:
supabase linkthensupabase db push, then runseed.sql.
npm install # from the cinewave folder, installs everything
copy apps\web\.env.example apps\web\.env.local # then paste your URL and anon key
npm run web # http://localhost:3000
copy apps\mobile\.env.example apps\mobile\.env # same URL and anon key
# EXPO_PUBLIC_SITE_URL lets the app load sample posters from the website:
# emulator → http://10.0.2.2:3000 phone → http://YOUR-PC-IP:3000
npm run android # opens in the emulator
# or: npm run mobile, then scan the QR code with Expo Go on your phone
Sign up on the website, then run this once in the SQL Editor:
insert into public.user_roles (user_id, role)
select id, 'admin' from auth.users where email = '[email protected]';
Refresh the site — an Admin button appears in the header (on phones: Account → Open admin dashboard).
For staff who should manage films but not rights, partners or users, use role 'editor' instead.
This is the beginning of the README. Read the rest at the original. Read the full README ↗