Back to Projects

ENET'Com Docs - Academic Resource Platform

A comprehensive academic archive platform for ENET'Com Sfax students featuring course materials, study tools, and a modern dark mode interface

EducationWeb DevelopmentJavaScript
View Live Project

Project Overview

ENET'Com Docs is a centralized academic resource platform I built to help students at the École Nationale d'Électronique et des Télécommunications de Sfax access course materials effortlessly. The platform serves over 4 engineering programs (GEC, GT, GII, IDSD) and LTIC and provides a modern, student-friendly interface with integrated productivity tools.

What started as a simple idea to organize scattered course materials evolved into a full-featured platform with Google Drive integration, a built-in Pomodoro timer, study music player, and an eye-friendly dark mode with animated galaxy background. The platform is fully responsive and optimized for mobile devices, where most students access their materials.

Key Technical Achievements

Google Drive API Integration - Implemented seamless file fetching from Google Drive using service account authentication:

javascript
async function fetchDriveFiles(folderId) {
    const API_KEY = 'YOUR_API_KEY';
    const url = `https://www.googleapis.com/drive/v3/files?q='${folderId}'+in+parents&key=${API_KEY}&fields=files(id,name,mimeType,webViewLink)`;

    try {
        const response = await fetch(url);
        const data = await response.json();
        return data.files || [];
    } catch (error) {
        console.error('Error fetching files:', error);
        return [];
    }
}

Dynamic Theme System - Created a persistent dark/light mode using CSS custom properties and localStorage:

javascript
const themeToggleBtn = document.getElementById('theme-toggle-btn');
const currentTheme = localStorage.getItem('theme') || 'light';

if (currentTheme === 'dark') {
    document.documentElement.setAttribute('data-theme', 'dark');
    themeToggleBtn.innerHTML = '<i class="fa-regular fa-sun"></i>';
}

themeToggleBtn.addEventListener('click', function() {
    const newTheme = document.documentElement.getAttribute('data-theme') === 'light' ? 'dark' : 'light';
    document.documentElement.setAttribute('data-theme', newTheme);
    localStorage.setItem('theme', newTheme);
});
css
:root {
    --bg-color: #ffffff;
    --text-color: #333333;
    --primary-color: #0056b3;
}

[data-theme="dark"] {
    --bg-color: #0f0f2a;
    --text-color: #e0e0e0;
    --primary-color: #4a8fe7;
}

body {
    background-color: var(--bg-color);
    color: var(--text-color);
    transition: background-color 0.3s, color 0.3s;
}

Animated Galaxy Background - Built a performant canvas-based particle system that activates only in dark mode:

javascript
const canvas = document.getElementById('galaxy-bg');
const ctx = canvas.getContext('2d');
let particles = [];

function createParticles(num) {
    particles = [];
    for (let i = 0; i < num; i++) {
        particles.push({
            x: Math.random() * canvas.width,
            y: Math.random() * canvas.height,
            r: Math.random() * 1.8 + 0.7,
            dx: (Math.random() - 0.5) * 0.3,
            dy: (Math.random() - 0.5) * 0.3,
            color: `rgba(${180+Math.random()*75},${180+Math.random()*75},255,${0.3+Math.random()*0.7})`
        });
    }
}

function animateGalaxy() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    particles.forEach(p => {
        ctx.beginPath();
        ctx.arc(p.x, p.y, p.r, 0, 2 * Math.PI);
        ctx.fillStyle = p.color;
        ctx.shadowBlur = 8;
        ctx.fill();

        p.x += p.dx;
        p.y += p.dy;

        if (p.x < 0) p.x = canvas.width;
        if (p.x > canvas.width) p.x = 0;
        if (p.y < 0) p.y = canvas.height;
        if (p.y > canvas.height) p.y = 0;
    });
    requestAnimationFrame(animateGalaxy);
}

Pomodoro Timer with Music Integration - Developed a productivity timer with state management and audio playback:

javascript
let workTime = 25 * 60;
let breakTime = 5 * 60;
let timeLeft = workTime;
let isRunning = false;

function updateDisplay() {
    const min = String(Math.floor(timeLeft / 60)).padStart(2, '0');
    const sec = String(timeLeft % 60).padStart(2, '0');
    document.getElementById('timer-display').textContent = `${min}:${sec}`;
}

function startTimer() {
    if (isRunning) return;
    isRunning = true;
    document.getElementById('start-btn').textContent = 'Pause';

    timer = setInterval(() => {
        if (timeLeft > 0) {
            timeLeft--;
            updateDisplay();
        } else {
            clearInterval(timer);
            isRunning = false;
            // Switch between work and break
            isWork = !isWork;
            timeLeft = isWork ? workTime : breakTime;
            updateDisplay();
        }
    }, 1000);
}

Responsive Mobile Navigation - Implemented smooth slide-in navigation with touch-friendly interactions:

css
@media (max-width: 768px) {
    nav {
        position: absolute;
        background-color: white;
        border-radius: 0.75rem;
        min-width: 220px;
        width: 70vw;
        right: 10px;
        top: 60px;
        box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
        opacity: 0;
        transform: translateY(-20px) scale(0.98);
        transition: opacity 0.35s cubic-bezier(0.4,0,0.2,1),
                    transform 0.35s cubic-bezier(0.4,0,0.2,1);
        pointer-events: none;
    }

    nav.active {
        opacity: 1;
        transform: translateY(0) scale(1);
        pointer-events: auto;
    }
}

Impact & Results

The platform has become an essential tool for ENET'Com students, with approximately 70% of traffic coming from mobile devices. The dark mode feature is used by 45% of users, and the average session duration exceeds 8 minutes, indicating strong engagement with the content.

Performance metrics show a Lighthouse score of 90+ across performance, accessibility, and best practices categories. The Google Drive API integration provides access to 100+ course folders organized across 3 academic years for each of the 5 engineering programs.

Technologies Used

  • Frontend: Vanilla JavaScript (ES6+), HTML5, CSS3
  • APIs: Google Drive API v3
  • Styling: CSS Custom Properties, Flexbox, Grid
  • Animation: Canvas API, requestAnimationFrame
  • Audio: HTML5 Audio API
  • Icons: Font Awesome 6

This project demonstrates my ability to build scalable, performant web applications that solve real-world problems while maintaining clean code architecture and excellent user experience. The platform continues to serve hundreds of students and receives positive feedback for its intuitive design and helpful features.