6+ YEARS PROGRAMMER: LUA, HTML, PYTHON

Hi, I'm Jouska, I |
const phrases = [ "optimise games", "code games", "teach scripting", "work long term", "work short term" ]; const typewriter = document.getElementById('typewriter'); let phraseIndex = 0; let letterIndex = 0; let isDeleting = false; let speed = 100; function type() { const currentPhrase = phrases[phraseIndex]; if (isDeleting) { letterIndex--; } else { letterIndex++; } typewriter.innerText = currentPhrase.substring(0, letterIndex); if (!isDeleting && letterIndex === currentPhrase.length) { setTimeout(() => isDeleting = true, 1000); } else if (isDeleting && letterIndex === 0) { isDeleting = false; phraseIndex = (phraseIndex + 1) % phrases.length; } setTimeout(type, isDeleting ? 50 : 100); } document.addEventListener("DOMContentLoaded", () => { setTimeout(type, 500); });
Lua
HTML LEARNING
Python LEARNING
function isInViewport(el) { const rect = el.getBoundingClientRect(); return rect.top <= (window.innerHeight || document.documentElement.clientHeight) && rect.bottom >= 0; } function animateSkills(){ document.querySelectorAll('.skill').forEach(skill => { if (!skill.classList.contains('animated') && isInViewport(skill)) { skill.classList.add('animated'); const fill = skill.querySelector('.progress-fill'); const percentLabel = skill.querySelector('.percent'); const percent = parseFloat(fill.getAttribute('data-percent')); fill.style.width = percent + '%'; let count = 0; const increment = percent / 50; function update(){ if(count < percent){ count += increment; if(count > percent) count = percent; percentLabel.textContent = count.toFixed(1) + '%'; requestAnimationFrame(update); } else { percentLabel.textContent = percent + '%'; } } update(); } }); } window.addEventListener('scroll', animateSkills); window.addEventListener('load', animateSkills);
Lua
HTML LEARNING
Python LEARNING
function isInViewport(element) { const rect = element.getBoundingClientRect(); return ( rect.top <= (window.innerHeight || document.documentElement.clientHeight) && rect.bottom >= 0 ); } function animateSkills() { const skills = document.querySelectorAll('.skill'); skills.forEach(skill => { if (!skill.classList.contains('animated') && isInViewport(skill)) { skill.classList.add('animated'); const fill = skill.querySelector('.progress-fill'); const percentLabel = skill.querySelector('.percent'); const percent = parseFloat(fill.getAttribute('data-percent')); fill.style.width = percent + '%'; let count = 0; const increment = percent / 50; function updateCount() { if (count < percent) { count += increment; if (count > percent) count = percent; percentLabel.textContent = count.toFixed(1) + '%'; requestAnimationFrame(updateCount); } else { percentLabel.textContent = percent + '%'; } } updateCount(); } }); } window.addEventListener('scroll', animateSkills); window.addEventListener('load', animateSkills);
The username is blurred for security precautions; my alt account holds all my creations
Loading status...
async function fetchStatus() { try { const response = await fetch("https://gist.githubusercontent.com/JSghub9/3d02c3735a587acd0ea3188f48192691/raw/status.txt?cb=" + Date.now()); const text = await response.text(); document.getElementById("status-text").textContent = text.trim(); } catch (e) { console.error("Error fetching status:", e); document.getElementById("status-text").textContent = "Unable to load status."; } } fetchStatus(); setInterval(fetchStatus, 60000); // Every 60s

This site uses recaptcha

This site uses recaptcha

My Way