Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
Play as an anti-corruption agent in Lagos, collecting evidence and making choices in a fictional investigation
Translation pending
AI summary · website content
GamesHTML · JavaScriptGitHub @cokobah16-creatorOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
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 ↗A modern, full-featured streaming platform for Nollywood films with comprehensive admin CMS, user authentication, and content management.
git clone <your-repo-url>
cd nollywood-media
npm install
.env file with your Supabase credentials:VITE_SUPABASE_URL=your_supabase_url
VITE_SUPABASE_ANON_KEY=your_anon_key
Run database migrations
The migrations in supabase/migrations/ will be automatically applied. Ensure your Supabase project is set up.
Start the development server
npm run dev
After signing up through the UI, grant admin access via SQL:
INSERT INTO user_roles (user_id, role)
VALUES ('YOUR_USER_ID', 'admin')
ON CONFLICT (user_id) DO UPDATE SET role = 'admin';
/admin/admin): Overview with key metrics/admin/films): Manage film catalog/admin/users): Manage user roles/admin/analytics): View platform metrics/admin/settings): Configure platformnpm run dev - Start development servernpm run build - Build for productionnpm run preview - Preview production buildnpm run lint - Run ESLintnpm run typecheck - Run TypeScript type checkingsrc/
├── components/ # Reusable UI components
│ ├── AuthModal.tsx # Login/signup modal
│ ├── Header.tsx # Main navigation
│ ├── ProtectedRoute.tsx # Route protection
│ └── ...
├── context/ # React contexts
│ ├── AuthContext.tsx # Authentication state
│ └── CatalogProvider.tsx # Film catalog state
├── pages/ # Page components
│ ├── admin/ # Admin dashboard pages
│ │ ├── AdminLayout.tsx
│ │ ├── Dashboard.tsx
│ │ ├── Films.tsx
│ │ ├── FilmEditor.tsx
│ │ ├── Users.tsx
│ │ └── ...
│ ├── Home.tsx
│ ├── WatchPage.tsx
│ └── ...
├── lib/ # Utilities and helpers
│ ├── supabase.ts # Supabase client
│ └── catalog.ts # Catalog filtering logic
└── types/ # TypeScript type definitions
All tables have RLS enabled with the following policies:
The Supabase client is initialized in src/lib/supabase.ts and used throughout the app:
import { supabase } from '../lib/supabase';
// Query films
const { data, error } = await supabase
.from('films')
.select('*')
.order('created_at', { ascending: false });
// Add to watchlist
const { error } = await supabase
.from('user_watchlist')
.insert({ user_id: user.id, film_id: filmId });
Planned features for future releases:
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)This project is licensed under the MIT License.
For issues and questions: