Opportune is a student opportunity discovery platform built for Pakistan and global learners.
It is designed to solve a real problem: students are currently forced to rely on random WhatsApp groups, scattered LinkedIn posts, emails, and social media pages to find hackathons, scholarships, internships, competitions, events, and announcements. At the same time, organizations struggle to market opportunities in one trusted place.
Opportune brings all of that into a single platform so students can discover what matters, follow organizations, and never miss an opportunity again.
Students and young professionals in Pakistan often miss valuable opportunities because information is fragmented across multiple channels:
- WhatsApp groups and forwarded messages
- LinkedIn posts that are easy to miss
- scattered university newsletters
- social media pages with inconsistent updates
- random event announcements across multiple communities
This makes opportunity discovery slow, unreliable, and unfair.
Organizations also face a challenge:
- their announcements are spread across too many channels
- event visibility is inconsistent
- they do not have one central place for students to discover and act on opportunities
Opportune solves this by creating a central, searchable, organized, and student-first platform for discovery.
Opportune is a centralized feed and community platform where students can:
- discover hackathons, scholarships, internships, events, and announcements
- follow universities, communities, organizations, and student groups
- browse opportunity posts from trusted sources
- get personalized updates through a social feed
- use an AI assistant to search for relevant opportunities faster
- stay informed without bouncing between multiple platforms
It is not just a static event listing. It is a live student opportunity ecosystem.
A student should not have to spend hours searching for the right opportunity. They should be able to open one app and immediately see:
- what is happening now
- what is upcoming
- what is relevant to their field or interest
- which organizations are active and trustworthy
This is the idea behind Opportune.
- Global opportunity feed with posts and updates
- Post categories for hackathons, scholarships, internships, announcements, and events
- Followable societies and organizations
- Student profiles and personalization
- Notifications for new updates and announcements
- AI-powered assistant for opportunity discovery
- Admin and super-admin tools to manage communities and content
- Organization-driven content publishing for events and opportunities
Visit the site: https://opportune-pk.vercel.app
This project was recognized through the Google AI Seekho 2026 initiative in collaboration with Pakistan’s Ministry of IT & Telecom, Telenor Pakistan, and Innovista.
Opportune was built as a platform to help students find opportunities faster using a modern feed experience and AI assistance.
Google AI Seekho 2026 swags |
Recognition email |
- Next.js
- TypeScript
- Firebase Authentication
- Firestore
- Gemini AI
- Cloudinary
- Tailwind CSS
This project uses Firebase for:
- Google Sign-In / authentication
- Firestore database
- Cloudinary for media uploads
- live feed and user data management
The Firebase web config is located in src/lib/firebase.ts.
Firestore rules are defined in
firestore.rules.
Opportune/
├── .github/
│ ├── dependabot.yml
│ └── workflows/
│ └── ci.yml
├── public/
│ ├── logo.png
│ ├── logo_bg.png
│ └── animations/
│ └── loading.json
├── src/
│ ├── app/
│ │ ├── (app)/
│ │ │ ├── ai/
│ │ │ │ ├── _components/
│ │ │ │ │ └── AIMessageContent.tsx
│ │ │ │ └── page.tsx
│ │ │ ├── create-society/
│ │ │ │ ├── _components/
│ │ │ │ │ ├── ImageUploadField.tsx
│ │ │ │ │ └── SocietyFormSections.tsx
│ │ │ │ └── page.tsx
│ │ │ ├── feed/
│ │ │ │ ├── _components/
│ │ │ │ │ ├── FeedSkeleton.tsx
│ │ │ │ │ ├── PostCard.tsx
│ │ │ │ │ └── SocietyAboutDialog.tsx
│ │ │ │ └── page.tsx
│ │ │ ├── my-society/
│ │ │ │ ├── _components/
│ │ │ │ │ ├── AboutTab.tsx
│ │ │ │ │ ├── AttachmentPreview.tsx
│ │ │ │ │ ├── NoSocietyState.tsx
│ │ │ │ │ ├── PostComposer.tsx
│ │ │ │ │ ├── SocietyHeader.tsx
│ │ │ │ │ └── SocietyPostCard.tsx
│ │ │ │ └── page.tsx
│ │ │ ├── notifications/
│ │ │ │ └── page.tsx
│ │ │ ├── settings/
│ │ │ │ ├── _components/
│ │ │ │ │ └── DeleteAccountModal.tsx
│ │ │ │ └── page.tsx
│ │ │ ├── super-admin/
│ │ │ │ ├── _components/
│ │ │ │ │ ├── ConfirmDeleteModal.tsx
│ │ │ │ │ └── SocietyRow.tsx
│ │ │ │ └── page.tsx
│ │ │ └── layout.tsx
│ │ ├── api/
│ │ │ ├── ai/
│ │ │ │ └── route.ts
│ │ │ └── cloudinary/
│ │ │ └── delete/
│ │ │ └── route.ts
│ │ ├── globals.css
│ │ └── layout.tsx
│ ├── components/
│ │ ├── CommentThread.tsx
│ │ ├── Loader.tsx
│ │ ├── OpportunityCard.tsx
│ │ └── OpportunityMetaFields.tsx
│ ├── contexts/
│ │ └── AuthContext.tsx
│ ├── hooks/
│ │ └── useTheme.ts
│ ├── lib/
│ │ ├── firebase.ts
│ │ ├── firestore.ts
│ │ ├── gemini.ts
│ │ ├── postHelpers.ts
│ │ └── utils.ts
│ └── types/
│ └── index.ts
├── .env.example
├── .gitignore
├── firebase.json
├── firestore.indexes.json
├── firestore.rules
├── next.config.ts
├── package-lock.json
├── package.json
├── postcss.config.mjs
├── README.md
├── tsconfig.json
└── vercel.json
- Node.js 18+
- npm
- Gemini API key
- Firebase project
- Cloudinary account
npm installCopy .env.example to .env.local and fill in the required values.
copy .env.example .env.localRequired environment variables include:
| Variable | Description |
|---|---|
EDU_AI_KEY |
Gemini API key |
NEXT_PUBLIC_FIREBASE_PROJECT_ID |
Firebase project ID |
NEXT_PUBLIC_FIREBASE_APP_ID |
Firebase app ID |
NEXT_PUBLIC_FIREBASE_API_KEY |
Firebase web API key |
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN |
Firebase auth domain |
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID |
Firebase sender ID |
NEXT_PUBLIC_FIREBASE_DATABASE_ID |
Firestore database ID |
NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME |
Cloudinary cloud name |
NEXT_PUBLIC_CLOUDINARY_UPLOAD_PRESET |
Cloudinary unsigned preset |
CLOUDINARY_API_KEY |
Cloudinary API key |
CLOUDINARY_API_SECRET |
Cloudinary API secret |
FIREBASE_PROJECT_ID |
Firebase admin project ID |
FIREBASE_CLIENT_EMAIL |
Firebase service account email |
FIREBASE_PRIVATE_KEY |
Firebase private key |
npm run devOpen the app at:
http://localhost:3000
npm run dev
npm run build
npm run start
npm run lintOpportune aims to become the go-to discovery platform for students in Pakistan and beyond — a trusted place where opportunities are visible, searchable, timely, and community-driven.
The goal is simple:
No more scattered groups. No more missed deadlines. Just one platform where students can discover what is next.
Built for the AI Seekho 2026 initiative and designed to serve student opportunity discovery at scale.

