DevEvent is a high-performance, visually stunning event management and discovery platform built from the ground up for developers. It serves as a unified catalog for hackathons, technical meetups, and conferences, allowing users to discover events, RSVP instantly, and enable organizers to publish new events with cloud media integration.
Technological events, hackathons, and developer meetups are typically scattered across disparate websites (e.g., Meetup, Eventbrite, Devpost, Discord channels). This fragmentation makes it hard for developers to find relevant learning and networking opportunities, and equally challenging for event hosts to reach their target technical audience.
DevEvent centralizes developer-focused events in a single, blazing-fast web portal. Organizers can seamlessly create events complete with custom poster banners, detailed agendas, and target audience segments. Developers can explore these events in a highly immersive UI, check schedules, and RSVP with a simple, secure one-click booking workflow.
- Software Developers & Engineers searching for hackathons and tech meetups.
- Tech Event Organizers seeking to host, manage, and promote conferences or local developer groups.
- Sponsors and Recruiters looking to connect with technical talent at localized events.
- π¨ Immersive Canvas Shaders: Premium WebGL-rendered background glow using
LightRaysshader canvas elements via the OGL library for an interactive, modern user experience. - π Dynamic Event Directory: Real-time listing of events with search capabilities, tags, event modes (online, offline, hybrid), and timing details.
- β‘ One-Click Instant booking: Quick RSVP validation ensuring each developer (unique email address) can claim only one ticket per event, complete with instant server-side double-booking protection.
- π€ Cloud-Integrated Creator Hub: Fully controlled creation form allowing organizers to upload banner images directly to Cloudinary and structure event agendas on a modular timeline.
- π Privacy-First Event Telemetry: Integrated PostHog tracking configured through a local server-side reverse proxy (
/ingest) to route events safely without adblocker interference. - π± Responsive Layout & Micro-Animations: Built with mobile-first layout design using React 19, Tailwind CSS v4, custom-compiled component hooks, and smooth animation transitions.
- Framework: Next.js 16.2.6 (App Router)
- Library: React 19.2.4
- Styling: Tailwind CSS v4 with
@tailwindcss/postcss - Components: Custom build using Shadcn UI primitives, Radix UI, and Lucide React icons.
- Graphics: OGL 1.0.11 (Ultra-light WebGL engine for custom shaders).
- Notifications: Sonner (Toast notices).
- Server: Next.js Server Actions & API Route Handlers
- Database: MongoDB via Mongoose 9.6.2 (ODM)
- Media Uploads: Cloudinary API (Secure cloud hosting for event images)
- Analytics Platform: PostHog JS integrated client-side via Next.js instrumentation and custom rewrites.
The architecture leverages Next.js App Router hybrid rendering strategies combined with serverless MongoDB configurations.
ββββββββββββββββββββββββββ
β Next.js Client β
β (React 19 Frontend) β
βββββββ¬βββββββββββββ¬ββββββ
β β
(Server Actions) (API Endpoints)
createBooking() GET/POST /api/events
β β
βΌ βΌ
ββββββββββββββββββββββββββ
β Next.js Server β
ββββββββββββββ¬ββββββββββββ€
β Cloudinary β PostHog β
β Media API β Ingest px β
βββββββ¬βββββββ΄ββββββ¬ββββββ
β β
(Media Storage) (Analytics Ingestion)
β β
βΌ βΌ
ββββββββββββββββββββββββββ
β Database β
β (MongoDB Atlas) β
ββββββββββββββββββββββββββ
- User RSVP Form: The user submits their email on an event detail card.
- Server Action Validation: The server invokes
createBooking()which automatically connects to the database via Mongoose. - Database Guardrails: A compound index constraints (
eventId+email) prevents duplicate registration. - Analytics Funnel: On successful booking, PostHog logs
event_card_clickedwith payload tags to build user conversion stats.
- Node.js v20.x or above
- npm, yarn, or pnpm installed
- A running MongoDB instance (or free MongoDB Atlas cluster)
- A Cloudinary Account for media hosting
- A PostHog Project for behavioral analytics
-
Clone the Repository
git clone https://github.com/Pranjal-Sahu21/nextjs-project.git cd nextjs-project -
Install Dependencies
npm install
-
Configure Environment Variables Create a
.env.localfile in the root directory. Copy the structure from below and fill in your credentials.
To run the application, define these environment variables in your .env.local file:
# Database Connection String
MONGODB_URI=mongodb+srv://<db_user>:<db_password>@<cluster_address>/?retryWrites=true&w=majority
# Cloudinary Credentials for Banner Uploads
CLOUDINARY_URL=cloudinary://<api_key>:<api_secret>@<cloud_name>
# Application URL configurations
NEXT_PUBLIC_BASE_URL=http://localhost:3000
# PostHog Analytics Configurations
NEXT_PUBLIC_POSTHOG_PROJECT_TOKEN=phc_your_posthog_project_token_here
NEXT_PUBLIC_POSTHOG_HOST=https://eu.i.posthog.comNote
The CLOUDINARY_URL is parsed by the Cloudinary SDK directly. Do not expose your private secret keys to client-side bundles (do not prefix with NEXT_PUBLIC_).
Run these commands inside your project root directory:
| Script | Command | Purpose |
|---|---|---|
| Development | npm run dev |
Runs the app on http://localhost:3000 with hot-reloading |
| Production Build | npm run build |
Compiles and optimizes the project for production |
| Start Production | npm run start |
Runs the compiled build in server mode |
| Linting | npm run lint |
Checks typescript, eslint rules, and code styles |
import { createBooking } from "@/lib/actions/booking.actions";
const handleRegister = async (email: string, eventId: string, slug: string) => {
const response = await createBooking({ eventId, slug, email });
if (response.success) {
console.log("Successfully registered!");
} else {
console.error("Booking error:", response.error); // Handles duplicate email validations
}
};import { getSimilarEventsBySlug } from "@/lib/actions/event.actions";
// Returns a list of events sharing tags with the current event, excluding itself
const related = await getSimilarEventsBySlug("react-nexus-2026");
console.log(related);- Endpoint:
GET /api/events - Query Parameters:
limit(number, optional): Max number of events to return.
- Success Response (200 OK):
{ "message": "Events fetched successfully", "events": [ { "_id": "67f81a7b...", "title": "React Nexus 2026", "slug": "react-nexus-2026", "date": "2026-06-15", "venue": "Grand Hall, SF", "image": "https://res.cloudinary.com/..." } ] }
- Endpoint:
GET /api/events/[slug] - Success Response (200 OK):
{ "message": "Event fetched successfully", "event": { "title": "React Nexus 2026", "slug": "react-nexus-2026", "description": "Deep dive into React 19 and Next.js 16 compiler features...", "overview": "React 19 updates, Server components, compiler diagnostics.", "tags": ["react", "frontend", "nextjs"], "agenda": ["09:00 AM - Registration", "10:00 AM - React 19 Deep Dive"] } }
- Endpoint:
POST /api/events - Content-Type:
multipart/form-data - Payload Structure:
image(File, required): Poster banner file.tags(stringified JSON array, required): e.g.,["react", "nextjs"]agenda(stringified JSON array, required): e.g.,["09:00 - Welcome", "10:00 - Keynote"]- Extra text fields:
title,description,overview,venue,location,date,time,mode,audience,organizer.
The code follows the standardized Next.js App Router design layout:
βββ app/
β βββ api/
β β βββ events/
β β βββ [slug]/route.ts # Fetch specific event details
β β βββ route.ts # List & create events API endpoints
β βββ create-event/
β β βββ loading.tsx # Form loading skeleton state
β β βββ page.tsx # Event publishing form
β βββ events/
β β βββ [slug]/
β β β βββ loading.tsx # Detail page skeletons
β β β βββ page.tsx # Single event visual display
β β βββ loading.tsx # Directory loading fallback
β β βββ page.tsx # Grid view of all events
β βββ globals.css # Core styling tokens
β βββ layout.tsx # Master page templates
β βββ page.tsx # Home hero & featured event list
βββ components/
β βββ ui/ # Shadcn UI primitives & shaders
β β βββ LightRays.tsx # Custom WebGL OGL Canvas shader
β β βββ LightRays.css # Canvas specific overlays
β βββ BookEvent.tsx # RSVP interactive registration
β βββ CreateEventForm.tsx # Controlled multi-part form
β βββ EventCard.tsx # Event preview wrapper cards
β βββ EventDetails.tsx # Full screen view content
β βββ Navbar.tsx & Footer.tsx # Global site layouts
βββ database/
β βββ booking.model.ts # Mongoose Booking schema & hooks
β βββ event.model.ts # Mongoose Event validation, slugs & dates
β βββ index.ts # Unified model exports
βββ lib/
β βββ actions/ # Next.js Server Actions
β β βββ booking.actions.ts # Database writes for booking events
β β βββ event.actions.ts # Query logic for matching events
β βββ mongodb.ts # Mongoose global connection pooler
β βββ utils.ts # Layout utility functions
βββ next.config.ts # Turbopack & rewrite configurations
βββ package.json # Dependencies configuration
βββ tsconfig.json # TypeScript strict definitions
- Install Vercel CLI or log in to the Vercel Dashboard.
- Link your GitHub repository hosting the code.
- In Settings -> Environment Variables, configure your production MongoDB URI and Cloudinary credentials.
- Set the Build Command to
npm run buildand Output Directory to.next. - Deploy! Vercel automatically sets up edge serverless functions to run API routes.
This project incorporates strict static type enforcement and code quality standards:
To inspect structural code layout, run the automated linting checks:
npm run lintEnsure database instances are properly verified. You can test your remote MongoDB configuration directly by querying the endpoint:
curl http://localhost:3000/api/events