# 📅 Calendar
** Calendar** is a responsive, dynamic calendar web application that synchronizes with Google Calendar and provides an interactive user interface for viewing and managing events. Built using FullCalendar.js, Express.js, and the Google Calendar API, it offers real-time integration and a rich UI experience.
---
## 🌟 Features
- 📆 Multiple calendar views: Month, Week, Day, and List
- 🔄 Auto-sync with Google Calendar every 15 seconds
- 📍 Interactive event preview with:
- Title, time range, location (with Google Maps link), description
- Export to Google Calendar or download `.ics` file
- 📱 Responsive layout for desktop and mobile
- 📤 Export-ready for printing or PDF (planned)
- 🧭 Custom navigation and day selector UI
---
## 🛠️ Technologies
- **Frontend:** HTML, CSS, JavaScript, FullCalendar
- **Backend:** Node.js, Express.js
- **External APIs:** Google Calendar API
- **PDF Export:** jsPDF (included, partially implemented)
- **.ICS Export:** [ics-js](https://github.com/nwcell/ics.js)
---
## 🚀 Setup Instructions
### 1. Clone the Repository
```bash
git clone https://github.com/Kalina0502/ict-calendar.git
cd ict-calendarnpm installCreate a .env file inside /backend:
GOOGLE_SERVICE_ACCOUNT_KEY_PATH=credentials.jsonMake sure the JSON file with your Google service account credentials is placed in the /backend folder.
node backend/app.jsThe application will be available at:
http://localhost:3000
This project uses a Google Service Account to fetch events from a specific calendar. To set this up:
- Create a Service Account in Google Cloud Console.
- Share your Google Calendar with the service account email.
- Download the credentials JSON and place it as
credentials.jsonin thebackend/directory. - Set the correct calendar ID in
sync.js.
- Events are fetched via
/eventsroute, auto-refreshed every 15 seconds. - The frontend uses FullCalendar's
interaction,dayGrid,timeGrid, andlistplugins. - The UI includes additional components for smooth UX (glider tabs, mobile navigation, and event previews).
This project is open-source and licensed under the MIT License.
Developed by Kalina0502