A modern, open-source web platform for ultimate frisbee clubs. Built for the Melbourne University Ultimate communityβready for your team!
Try it now: https://melb-uni-ultimate.vercel.app (Or deploy your own in minutes!)
- Beautiful, modern UI with Tailwind, shadcn/ui, and Lucide icons
- All-in-one club management: events, announcements, roster, alumni, tournaments, and more
- Admin dashboard for easy content and user management
- Feature-based architecture with clean, maintainable code organization
- Open source, MIT licensed β ready for your club or team!
- Easy deploy to Vercel (or your own server)
- Active development & welcoming to contributors
- Trusted by the Melbourne University Ultimate community
| Home Page | Admin Dashboard | Events Calendar | Video Management |
|---|---|---|---|
![]() |
![]() |
![]() |
Video features coming soon! |
- Melbourne University Ultimate Frisbee Club
- Your club here! [Open a PR to add yours!]
- Home: Club intro, quick links, and highlights
- About: Club history, values, and leadership
- Announcements: News, updates, and important info
- Events: Practice, tournament, and social event calendar
- Videos: Training videos, game highlights, and educational content
- Roster: Public team roster with gender/role badges and filters
- Alumni: Connect with past members
- Contact: Easy contact form for inquiries
- Profile: Secure member profiles
- Admin Dashboard: Manage announcements, events, videos, players, alumni, and tournaments in one place
- Video Management: Upload, edit, and organize YouTube videos with role-based access control
- CRUD: Create, edit, and delete content with confirmation dialogs and notifications
- Role-based access: NextAuth.js with admin/member/public roles
- Modern UI/UX: Responsive, accessible, and mobile-friendly
- Next.js 15 (App Router, SSR, API routes)
- TypeScript (strict types everywhere)
- Tailwind CSS + shadcn/ui (customizable, beautiful components)
- MongoDB + Mongoose (robust data models)
- NextAuth.js (secure authentication)
- Lucide React (iconography)
- Jest (unit tests)
- ESLint, Prettier, Husky (code quality)
git clone https://github.com/your-username/melb-uni-ultimate.git
cd melb-uni-ultimate
npm install
cp docs/env.template .env.local # or set up your own env vars
npm run dev- Visit http://localhost:3000
- Sign up as a new user, or log in as admin (see docs/DEPLOYMENT_READY.md for admin setup)
melb-uni-ultimate/
βββ src/
β βββ app/ # Next.js App Router
β β βββ (admin)/ # Admin pages (dashboard, update-role)
β β βββ (auth)/ # Authentication pages (login, signup, unauthorized)
β β βββ (dev)/ # Development pages (debug-session)
β β βββ (protected)/ # Protected member pages (profile)
β β βββ (public)/ # Public pages (about, announcements, events, videos, etc.)
β β βββ api/ # API routes
β β β βββ (admin)/ # Admin API routes (dashboard, debug, seed)
β β β βββ (auth)/ # Auth API routes (refresh, signup, update-role)
β β β βββ (protected)/ # Protected API routes (players, tournaments, user)
β β β βββ (public)/ # Public API routes (alumni, announcements, events, roster, videos)
β β β βββ auth/ # NextAuth.js routes
β β βββ layout.tsx # Root layout
β β βββ page.tsx # Home page
β β βββ providers.tsx # App providers
β βββ features/ # Feature-based components and logic
β β βββ about/ # About page components
β β βββ admin/ # Admin dashboard components
β β βββ alumni/ # Alumni management components
β β βββ announcements/ # Announcements components
β β βββ events/ # Events components
β β βββ roster/ # Roster management components
β β βββ tournaments/ # Tournament management components
β β βββ videos/ # Video management components
β βββ shared/ # Shared utilities and components
β β βββ components/ # Reusable UI components
β β βββ context/ # React contexts
β β βββ data/ # Static data
β β βββ hooks/ # Custom React hooks
β β βββ lib/ # Database, auth, and utility libraries
β β βββ types/ # TypeScript type definitions
β βββ styles/ # Global styles
β βββ middleware.ts # Next.js middleware
βββ public/ # Static assets
βββ docs/ # Documentation and deployment guides
βββ package.json # Dependencies and scripts
- Feature-based organization: Each feature (alumni, events, videos, etc.) has its own directory with components, hooks, and utilities
- Route groups: Next.js route groups
()organize pages by access level without affecting URLs - API organization: API routes grouped by access level for better security and organization
- Shared resources: Common components, hooks, and utilities in
shared/directory - Type safety: Comprehensive TypeScript types for all data models and components
- YouTube Integration: Seamlessly embed and manage YouTube videos
- Role-based Access: Control video visibility (public, user, admin)
- Smart URL Parsing: Automatically extract YouTube IDs from URLs
- Preview System: Instant video previews in admin interface
- Search & Filtering: Find videos by title, description, or tags
- Mobile Responsive: Optimized viewing experience on all devices
- Dashboard Integration: Manage videos alongside other content in admin tabs
- Public: Anyone can view public pages
- Member: Authenticated users get access to protected features
- Admin: Full access to dashboard and management tools
- Push to GitHub
- Connect repo to Vercel
- Set environment variables (see template)
- Deploy!
npm run build
npm startUltimate Frisbee is a fast-growing, inclusive sport that builds teamwork, spirit, and fitness. This project aims to empower clubs and communities worldwide with modern toolsβjoin us and help grow the sport!
We welcome contributions! To get started:
- Fork this repo
- Create a feature branch (
git checkout -b feature/your-feature) - Commit and push your changes
- Open a Pull Request
Please read docs/DEPLOYMENT_READY.md for workflow and code standards.
- Feature branches: All development happens on feature branches
- Merge to develop: Features are merged into the develop branch first
- Merge to main: After testing, develop is merged into main for production
- Backup strategy: Main branch backups are created before major merges
- Contact page for club questions
- GitHub Issues for bugs/feature requests
- Vercel Discussion for deployment help
Q: Can I use this for my own club? A: Yes! It's open source and easy to customize.
Q: Is it free? A: 100% MIT licensed.
Q: How do I get admin access? A: See docs/DEPLOYMENT_READY.md.
Q: What's the new src/ directory structure? A: We've reorganized the codebase for better maintainability with feature-based architecture and clear separation of concerns.
Sponsor this project and help us grow Ultimate! Become a sponsor
MIT License. See LICENSE.
If you like this project, please star it on GitHub and share it with your club or team. Your support helps us grow the Ultimate community!
Go Ultimate! π₯


