A modern, responsive web platform for university students to discover upcoming and past events organized by student clubs.
- Overview
- Features
- Tech Stack
- Project Structure
- Setup & Installation
- Usage
- Pages & Components
- Data Structure
- Contributing
INSATivity is a university event management platform designed for INSAT (Institut National des Sciences AppliquΓ©es et de la Technologie) students and clubs. It enables students to:
- Discover upcoming campus events
- View events by category (Technology, Sports, Culture, etc.)
- Manage their calendar
- Connect with student clubs
- Participate in club activities
- University students (18β25)
- Student club members & organizers
- Event moderators
- Event Discovery: Browse, search, and filter upcoming events
- Advanced Search: Filter by date, tags, club, and event type
- Calendar Integration: View events in a monthly calendar view
- Event Details: Access full event information including images, description, and organizer details
- Club Directory: Discover all student clubs with profiles
- User Authentication: Secure login and registration system
- Club Dashboard: Create and manage events
- Event Approval Workflow: Track event status (pending, approved, rejected)
- Media Management: Upload event images and related media
- Event Editing: Update event details and information
- Tag Management: Categorize events with relevant tags
- HTML5 - Semantic markup
- CSS3 - Responsive styling with custom properties (CSS variables)
- JavaScript (ES6+) - Interactive functionality
- Fonts: Google Fonts (Inter family)
- PHP 8+ - Server-side logic
- Supabase Postgres (PDO) - Persistent data storage for users/clubs/events
- Local filesystem - Upload storage at
assets/uploads/
- Fetch API - Asynchronous HTTP requests
- Event Listeners - DOM interactivity
Web-Dev-Project/
βββ README.md # This file
βββ pages/ # HTML pages
β βββ index.html # Homepage / Events feed
β βββ calendar.html # Calendar view
β βββ clubs.html # Clubs directory
β βββ club-dashboard.html # Club management dashboard
β βββ event.html # Event details page
β βββ login.html # Login page
β βββ register.html # Registration page
βββ backend/ # PHP backend logic
β βββ events.php # Event API endpoints
β βββ EventManager.php # Event management class
β βββ clubs.php # Clubs API endpoints
β βββ ClubManager.php # Club management class
β βββ media.php # Media handling
β βββ MediaManager.php # Media management class
β βββ login.php # Login handler
β βββ register.php # Registration handler
βββ scripts/ # JavaScript files
β βββ events.js # Event page logic
β βββ calendar.js # Calendar functionality
β βββ clubs.js # Clubs page logic
β βββ club-dashboard.js # Dashboard logic
β βββ club-dashboard/ # Dashboard module exports
β βββ api.js # API communication
β βββ constants.js # Configuration constants
β βββ render.js # Rendering functions
β βββ utils.js # Utility functions
βββ styles/ # CSS stylesheets
β βββ base.css # Base styles & CSS variables
β βββ layout.css # Layout & grid system
β βββ components.css # Reusable components
β βββ homepage.css # Homepage specific styles
β βββ club-dashboard.css # Dashboard specific styles
β βββ event.css # Event details page styles
β βββ page.css # General page styles
βββ assets/ # Static assets
βββ images/ # Event and club images
β βββ 3zero/ # 3zero club images
β βββ acm/ # ACM club images
β βββ aerobotix/ # Aerobotix club images
β βββ android/ # Android-related images
β βββ cine_radio/ # CinΓ© Radio images
β βββ genesis_labs/ # Genesis Labs images
β βββ ieee/ # IEEE club images
β βββ insat_press/ # INSAT Press images
β βββ jci/ # JCI club images
β βββ junior/ # Junior team images
β βββ securinets/ # Securinets club images
β βββ theatro/ # Theatro club images
βββ icons/ # UI icons and symbols
βββ uploads/ # User-uploaded media
- PHP 8.1 or higher
- Composer (PHP dependency manager)
- Web server (Apache, Nginx, or built-in PHP server)
- Modern web browser (Chrome, Firefox, Safari, Edge)
-
Clone or download the project
cd Web-Dev-Project -
Install PHP dependencies
composer install
This installs phpdotenv for secure environment variable loading.
-
Ensure proper file permissions
chmod -R 755 backend/ chmod -R 755 assets/uploads/
-
Configure Supabase Postgres connection
- Copy
.env.exampleto.env - Fill
DATABASE_*values from Supabase Project Settings > Database - Keep
SUPABASE_DB_SSLMODE=require(or set explicitly) - Run
backend/supabase_auth_schema.sqlto createpublic.users - Run
backend/supabase_content_schema_and_seed.sqlto create/seedpublic.clubsandpublic.events
- Copy
-
Start a local server
Using PHP built-in server:
php -S localhost:8000
Or configure with Apache/Nginx
-
Access the application
- Open
http://localhost:8000in your browser - Navigate to the homepage
- Open
-
Browsing Events
- Navigate to the Events page (homepage)
- Use search and filters to find events
- Click on an event to view full details
-
Viewing Calendar
- Go to Calendar page
- View events organized by date
- Click on dates to see event details
-
Discovering Clubs
- Visit the Clubs page
- Browse all student clubs
- Click on a club to learn more
-
User Account
- Click the profile icon to log in
- New users can register via the Sign Up link
- Login to access personalized features
-
Access Club Dashboard
- Log in with club credentials
- Navigate to Club Dashboard
-
Create New Event
- Fill out the event creation form
- Upload event images
- Add relevant tags and category
- Submit for approval
-
Manage Events
- View all club events and their status
- Edit pending/approved events
- Upload media for events
- Track event moderation status
- Search bar with filters (date, tags, club, event type)
- Hero section with tagline
- Featured Events carousel displaying approved events
- Upcoming Events feed with event cards
- Color-coded categories (technology, sports, culture, etc.)
- Navigation header with logo and menu links
- Monthly calendar view with date navigation
- Color-coded event categories on calendar dates
- Empty state messaging for dates without events
- Event list view for selected date
- Large banner image
- Full event description and metadata
- Event organizer (club) information
- Media gallery (images and videos)
- Tags and category badges
- Add-to-calendar functionality
- Share event buttons
- Event creation and editing form
- Media upload interface
- Tag and category selection
- Event status indicator (pending, approved, rejected)
- Club member management
- Event analytics dashboard
- Grid layout of all student clubs
- Club cards displaying:
- Club logo/icon
- Club name
- Category
- Short bio/description
- Links to individual club profiles
- Search/filter functionality
- Email/username input with clear labels
- Password input with show/hide toggle
- Login button and error messaging
- Link to registration page
- Helper text for form validation
- Student information form
- Email and password validation
- Club selection/affiliation
User registration and login are backed by Supabase PostgreSQL. See docs/SUPABASE_AUTH.md for:
- Architecture and implementation details
- Database schema and setup
- API endpoints and validation rules
- Security practices and troubleshooting
- Terms acceptance checkbox
- Form submission and confirmation
Stores information about all student clubs:
{
"id": "string",
"name": "string",
"category": "string",
"banner": "string (path to banner image)",
"description": "string"
}Each club has a dedicated events file (e.g., acm_events.json) with the following structure:
{
"id": "number",
"title": "string",
"club": "string (club name)",
"clubLogo": "string (path to club logo)",
"image": "string (path to event image)",
"date": "string (YYYY-MM-DD format)",
"time": "string (HH:MM format)",
"location": "string",
"description": "string",
"participants": "number (current attendees)",
"maxParticipants": "number (capacity)",
"featured": "boolean (whether event is featured on homepage)"
}- EventManager: Handles event CRUD operations
- ClubManager: Manages club data and relationships
- MediaManager: Processes and stores media files
- events.js: Main event listing and filtering logic
- calendar.js: Calendar view and date navigation
- clubs.js: Clubs directory management
- club-dashboard/api.js: API communication from dashboard
- club-dashboard/utils.js: Utility functions for dashboard
- club-dashboard/render.js: DOM rendering functions
- club-dashboard/constants.js: Configuration and constants
The project uses a modular CSS architecture:
- base.css: CSS custom properties (variables), reset styles
- layout.css: Grid system and layout utilities
- components.css: Reusable UI components
- Specific page stylesheets: page-specific custom styles
- Primary: Deep Red (--deep-red)
- Accessible color-coded categories for event types
- Clear visual distinction between approved vs pending events
- Smooth transitions and hover states
- Clear empty states messaging
- Responsive design for mobile, tablet, and desktop
- Accessible color contrasts and semantic HTML
When contributing to this project:
-
Follow the existing code structure
- Maintain separation of concerns (HTML, CSS, JS, PHP)
- Use meaningful variable and function names
-
Data Guidelines
- Keep JSON data files in consistent format
- Update club and event data in respective files
-
Styling
- Use CSS custom properties for theming
- Maintain responsive design principles
-
Testing
- Test new features across different browsers
- Verify responsive design on mobile devices
This project is part of the INSAT university initiative.
For issues or questions regarding INSATivity, contact the development team or your club's administrator.