A modern, responsive school academic calendar portal built with React, featuring calendar views for academic events, special assemblies, holidays, and vacations.
- 📅 Interactive Calendar View - Monthly calendar with event filtering
- 🎯 Event Categories - Academic events, holidays, special assemblies, and vacations
- 📱 Responsive Design - Works perfectly on desktop, tablet, and mobile
- 🎨 Modern UI - Clean, professional design with Tailwind CSS
- 🔍 Event Details - Detailed modal views for each event
- 📋 Upcoming Events - Sidebar showing next upcoming events
- 🏷️ Event Filtering - Filter by event type for focused viewing
- Frontend: React 18
- Calendar: React Big Calendar with Moment.js
- Styling: Tailwind CSS
- Icons: Lucide React
- Build Tool: Create React App
- Deployment: Netlify
- Node.js (version 14 or higher)
- npm or yarn
- Clone the repository:
git clone <repository-url>
cd school-calendar- Install dependencies:
npm install- Start the development server:
npm start- Open http://localhost:3000 to view it in the browser.
npm start- Runs the app in development modenpm run build- Builds the app for productionnpm test- Launches the test runnernpm run eject- Ejects from Create React App (one-way operation)
This project is configured for easy deployment on Netlify:
- Build the project:
npm run build- Deploy to Netlify:
- Connect your Git repository to Netlify
- Set build command:
npm run build - Set publish directory:
build - Deploy!
The netlify.toml file is already configured with the necessary settings.
Edit the src/data/sampleData.js file to add new events:
{
title: 'New Event',
start: new Date(2025, 5, 15), // June 15, 2025
end: new Date(2025, 5, 15),
type: 'academic', // 'academic', 'holiday', 'assembly', 'vacation'
time: '9:00 AM - 11:00 AM',
location: 'School Auditorium',
description: 'Event description...',
participants: 'Who should attend',
notes: 'Additional notes'
}academic- Academic events (blue)holiday- Holidays (red)assembly- Special assemblies (green)vacation- Vacation periods (orange)
The project uses Tailwind CSS for styling. Customize colors and styles in:
tailwind.config.js- Tailwind configurationsrc/index.css- Global styles and calendar customizations
src/
├── components/
│ ├── Header.js # Top navigation header
│ ├── EventModal.js # Event details modal
│ └── EventList.js # Upcoming events sidebar
├── data/
│ └── sampleData.js # Sample calendar events
├── App.js # Main application component
├── index.js # Application entry point
└── index.css # Global styles
- Fork the repository
- Create a feature branch (
git checkout -b feature/new-feature) - Commit your changes (
git commit -am 'Add new feature') - Push to the branch (
git push origin feature/new-feature) - Create a Pull Request
This project is licensed under the MIT License.
For support or questions, please open an issue in the repository.
This portal includes Google Analytics 4 (GA4) integration for tracking user engagement and usage patterns.
-
Create a Google Analytics Account:
- Go to Google Analytics
- Sign in with your Google account
- Create a new property for your school calendar
-
Get Your Measurement ID:
- In your GA4 property, go to Admin > Property Settings > Data Streams
- Create a new Web stream for your domain
- Copy the Measurement ID (format: G-XXXXXXXXXX)
-
Configure Environment Variables:
Create a
.envfile in the root directory:cp .env.example .env
Edit
.envand add your Measurement ID:REACT_APP_GA_MEASUREMENT_ID=G-XXXXXXXXXX -
For Netlify Deployment:
- In your Netlify dashboard, go to Site Settings > Environment Variables
- Add:
REACT_APP_GA_MEASUREMENT_IDwith your GA4 Measurement ID
The portal automatically tracks the following user interactions:
- Page Views: Initial page load and navigation
- Event Interactions: When users click on calendar events
- Filter Usage: When users filter events by category
- Dashboard Views: When users toggle the dashboard
- Calendar Navigation: Date and view changes (month/week/day)
- Search Usage: When users search for events
- Export Actions: When users export calendar data
- View Mode Changes: Switching between calendar and sections view
- Academic Engagement: Event modal views and duration
- Analytics are only active when a valid Measurement ID is configured
- No personally identifiable information is collected
- All tracking follows Google Analytics data protection standards
- Consider adding a privacy policy to your website