Hack. Seek. Cultivate. - A modern, responsive landing page for agriculture hackathon events built with Next.js 14 and cutting-edge web technologies.
- Full-screen hero video with smooth autoplay and fallback handling
- Responsive typography using CSS clamp() for optimal scaling
- Smooth animations powered by Framer Motion with reduced-motion support
- Vertical guide lines with subtle parallax effects
- Dark overlay gradients ensuring WCAG color contrast compliance
- Active section detection with IntersectionObserver API
- Smooth scrolling between sections with offset handling
- Accessible side navigation with visual active indicators
- Mobile-friendly drawer menu with focus trapping
- Keyboard navigation throughout the entire interface
- WCAG 2.1 AA compliant color contrast ratios
- Semantic HTML structure with proper heading hierarchy
- ARIA labels and attributes for screen readers
- Focus management with visible focus indicators
- Reduced motion support for users with vestibular disorders
- Next.js 14 with App Router for optimal performance
- Static generation ready for fast deployment
- Tailwind CSS v4 with minimal CSS bundle size
- Optimized video loading with poster images and error handling
- Lighthouse score: 95+ across all metrics
- Node.js 18.17 or later
- npm, yarn, or pnpm package manager
# Clone the repository
git clone https://github.com/yourusername/ezhumi.git
cd ezhumi
# Install dependencies
npm install
# or
yarn install
# or
pnpm install# Start development server
npm run dev
# or
yarn dev
# or
pnpm devOpen http://localhost:3000 in your browser to see the result.
# Build for production
npm run build
npm start
# or
yarn build
yarn startezhumi/
βββ src/
β βββ app/
β β βββ layout.tsx # Root layout with Inter font
β β βββ page.tsx # Main landing page
β β βββ globals.css # Tailwind v4 + custom CSS variables
β βββ components/
β β βββ Hero.tsx # Hero section with video background
β β βββ Navbar.tsx # Top navigation bar
β β βββ SideNav.tsx # Left navigation with active detection
β β βββ MenuDrawer.tsx # Mobile menu drawer
β β βββ VerticalLines.tsx # Grid overlay with parallax
β β βββ Section.tsx # Reusable section wrapper
β βββ hooks/
β βββ useActiveSection.ts # IntersectionObserver hook
β βββ useLockBody.ts # Body scroll lock for modals
βββ public/
β βββ media/
β βββ hero.mp4 # Main hero background video
β βββ hero-poster.jpg # Video poster/fallback image
βββ package.json
βββ tailwind.config.ts # Tailwind CSS configuration
βββ tsconfig.json # TypeScript configuration
βββ next.config.js # Next.js configuration
Place your video assets in the public/media/ directory:
public/media/
βββ hero.mp4 # Main background video (required)
βββ hero-poster.jpg # Poster image for video (recommended)
βββ hero-poster.webp # Optional WebP version for better compression
- Format: MP4 (H.264 codec) for maximum browser compatibility
- Resolution: 1920Γ1080 (Full HD) or higher for crisp display
- Duration: 10-30 seconds for seamless looping
- File Size: 2-5MB optimized for fast loading
- Audio: Remove audio track (videos are muted by default)
# Using FFmpeg to optimize your video
ffmpeg -i input.mp4 -c:v libx264 -crf 28 -preset slow -vf "scale=1920:1080" -an hero.mp4
# Extract poster frame
ffmpeg -i hero.mp4 -ss 00:00:02 -vframes 1 hero-poster.jpgEdit src/app/globals.css to customize the design system:
@theme inline {
/* Typography */
--font-size-hero: clamp(2.75rem, 6vw, 7rem);
--line-height-hero: 0.95;
--font-size-tagline: clamp(1rem, 2vw, 1.5rem);
--line-height-tagline: 1.4;
/* Colors */
--color-overlay: rgba(0, 0, 0, 0.35);
--color-overlay-strong: rgba(0, 0, 0, 0.6);
}Update the main content in src/app/page.tsx:
- Event details in the About section
- Challenge themes in the Themes section
- Timeline dates in the Timeline section
- FAQs in the FAQ section
- Logo: Update
Ezhumitext insrc/components/Navbar.tsx - Colors: Modify Tailwind theme in
tailwind.config.ts - Fonts: Change font family in
src/app/layout.tsx
| Technology | Purpose | Version |
|---|---|---|
| Next.js | React framework with App Router | 14.x |
| TypeScript | Type-safe JavaScript | 5.x |
| Tailwind CSS | Utility-first CSS framework | 4.x |
| Framer Motion | Animation library | 11.x |
| Lucide React | Icon library | Latest |
| Inter Font | Typography via Google Fonts | Latest |
| Breakpoint | Width | Layout Changes |
|---|---|---|
| Mobile | < 768px | Stacked layout, drawer navigation |
| Tablet | 768px - 1024px | Hybrid layout, visible side nav |
| Desktop | > 1024px | Full grid layout, all elements visible |
- β Keyboard Navigation: Tab through all interactive elements
- β Screen Reader Support: Semantic HTML and ARIA labels
- β Color Contrast: WCAG AA compliant text/background ratios
- β Focus Management: Visible focus indicators and logical tab order
- β
Motion Reduction: Respects
prefers-reduced-motionsetting - β Alternative Text: Descriptive alt text for images and videos
# Install Vercel CLI
npm i -g vercel
# Deploy to Vercel
vercel
# For production deployment
vercel --prod# Build the project
npm run build
# Deploy the 'out' folder to Netlify
# Enable static export in next.config.js if needed# Build for production
npm run build
# Start production server
npm start- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow TypeScript best practices
- Use semantic commit messages
- Ensure accessibility compliance
- Test on multiple devices and browsers
- Maintain performance scores above 90
This project is licensed under the MIT License - see the LICENSE file for details.
- Design Inspiration: Modern agriculture and farming communities
- Typography: Inter font family by Rasmus Andersson
- Icons: Lucide icon library
- Animations: Framer Motion animation library
- Documentation: Next.js Docs
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Built with β€οΈ for agriculture innovation
View Demo β’ Report Bug β’ Request Feature