Progress Counter is an interactive, animated web application built to visually track the 10-day training progression of an Artificial Intelligence model.
Created during an exciting challenge in the Web Development Course at iSchool, this project highlights how complex timeline transitions, state changes, and celestial day/night cycles can be built entirely using pure HTML, CSS, and Vanilla JavaScriptβwithout heavy external frameworks.
"π I just completed an exciting challenge during a session of the Web Development course at iSchool! π"
"π― The task was to create a 10-day progress tracker for an AI model using only HTML, CSS, and JavaScript. I aimed for a unique and innovative approach. π»"
"β This experience truly deepened my skills in animating with CSS keyframes. β¨"
"π§ͺ It enriched my understanding of animations, timelines, and interactive design in the browser. π"
β Adel Noufal β’ Check it out on LinkedIn π
- π Dynamic Celestial Sky Box: 360Β° orbital rotation system with realistic sun & moon movement that smoothly transitions the entire application between Day and Night modes as you advance.
- π¨ 10 Handcrafted SVG Character Animations: Each day features a distinct vector character performing a custom CSS keyframe animation reflecting that phase of AI development.
- β‘ Pure Vanilla Architecture: 100% framework-free HTML5, CSS3, and ES6+ JavaScript for 60 FPS performance and zero bundle bloat.
- π Celebratory Confetti Explosion: Integrates Canvas Confetti API to deliver a celebratory reward animation when the AI model reaches 100% completion (Day 10).
- π± Modern Glassmorphism Design System: Built with CSS custom variables, smooth easing functions, responsive card layouts, and sleek typography.
| Day | Training Milestone | SVG Avatar Activity | Keyframe Animation Mechanics | Celestial Mode |
|---|---|---|---|---|
| Day 1 | Initializing Neural Weights | π» Typing on Laptop | Arm rotation on laptop keyboard | βοΈ Day |
| Day 2 | Code Structure & Syntax Learning | βοΈ Writing Documentation | Hand writing keyframe oscillation | π Night |
| Day 3 | User Interaction Pattern Training | π Phone Consultation | Arm tilt to ear | βοΈ Day |
| Day 4 | Speech & Audio Processing | π Reading Documentation | Floating book translation | π Night |
| Day 5 | Vision Transformer Dataset Training | π Presenting Charts | Arm elevation & pointer presentation | βοΈ Day |
| Day 6 | Creative Text & NLP Generation | π€ Deep Thinking | Head rotation & tilt | π Night |
| Day 7 | Refining Context & Semantics | π Stretching Arms | Shoulder & arm expansion | βοΈ Day |
| Day 8 | Simulating Real-world Conversations | π§ Listening to Music | Rhythm head nodding | π Night |
| Day 9 | Evaluating Test Cases & Edge Cases | π€¦ Facepalm / Debugging | Hand to forehead transform | βοΈ Day |
| Day 10 | Model Fully Trained & Deployed! | π Celebrating Milestone | Dual arm celebration & confetti blast | π Night |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PROGRESS COUNTER β
βββββββββββββββββββ¬ββββββββββββββββββββ¬ββββββββββββββββββββ€
β Frontend β Animations β State Engine β
βββββββββββββββββββΌββββββββββββββββββββΌββββββββββββββββββββ€
β β’ HTML5 β β’ CSS Keyframes β β’ ES6 JavaScript β
β β’ CSS3 Variablesβ β’ Orbital Math β β’ DOM API β
β β’ Google Fonts β β’ SVG Vector Propsβ β’ Confetti API β
βββββββββββββββββββ΄ββββββββββββββββββββ΄ββββββββββββββββββββ
Each SVG character state leverages precise transform-origin positioning and smooth @keyframes curves. For example, the Day 10 celebration animation uses dual arm rotation keyframes with alternating direction loops:
.person.day10 .arm-left {
animation: celebrate 0.7s infinite alternate ease-in-out;
transform-origin: 40px 90px;
}
.person.day10 .arm-right {
animation: celebrate 0.7s infinite alternate-reverse ease-in-out;
transform-origin: 80px 90px;
}
@keyframes celebrate {
0% { transform: rotate(0deg); }
100% { transform: rotate(-55deg); }
}Rather than abrupt background changes, the celestial engine calculates sun and moon positions along a circular orbit path via JavaScript requestAnimationFrame:
function setOrbitPositions(sunDeg, moonDeg) {
sunOrbit.style.transform = `rotate(${sunDeg}deg)`;
moonOrbit.style.transform = `rotate(${moonDeg}deg)`;
const isNight = (sunDeg % 360) >= 180;
sky.classList.toggle("night", isNight);
document.body.classList.toggle("night-mode", isNight);
}Progress-Counter/
βββ .github/
β βββ ISSUE_TEMPLATE/
β βββ bug_report.md # Standardized bug reporting format
β βββ feature_request.md # Template for suggesting features
βββ .gitignore # Clean git ignore configuration
βββ CONTRIBUTING.md # Community contribution guidelines
βββ LICENSE # MIT License
βββ README.md # Project documentation & overview
βββ Style.css # Modular stylesheet, themes & keyframes
βββ index.html # Semantic markup & SVG character states
βββ script.js # Orbital physics, DOM controller & state engine
No build tools or installation dependencies required! Simply open the project in any web browser.
- Clone this repository:
git clone https://github.com/adel-noufal/Progress-Counter.git
- Open
index.htmlin your favorite web browser.
If using VS Code, launch using the Live Server Extension or run:
npx serve .- CSS Timeline Control: Gained deep hands-on mastery over
@keyframes,transform-origin, bezier easing curves, and CSS variables. - SVG Animation Dynamics: Learned how to manipulate individual SVG child nodes (
<rect>,<ellipse>,<path>) dynamically via CSS classes. - Interactive UI Architecture: Implemented smooth state transitions, audio-visual feedback loops, and dynamic day/night theme synchronizations.
Distributed under the MIT License. See LICENSE for more details.
Created with β€οΈ by Adel Noufal during the iSchool Web Development Course
If you found this project creative or helpful, give it a β on GitHub!