Skills

  • HTML5
  • CSS3
  • JavaScript
  • PHP
  • Node.js
  • Express
  • React
  • React Native
  • Unity
  • C#
  • Godot, GDScript
  • MySQL
  • MongoDB, Mongoose
  • WordPress
  • AmoCRM
  • Bitrix24
  • Git
  • Visual Studio Code
  • Adobe Photoshop
  • Adobe Illustrator
  • Figma

Languages

  • Ukrainian: Native speaker
  • Russian: Native speaker
  • English: C2 Proficient (reading, understanding and listening) EF Set Test Results

About me

I started learning front-end development in 2017 and soon after began working as a freelancer. Throughout my freelance career, I've gained experience as a full-stack developer (PHP and Node.js), a WordPress developer, and in several other roles, including creating extensions for various CRM systems. I've also worked on Gamedev projects, developed applications using Node.js, and built a mobile application using React.

I've now realized that I want to focus on front-end development. At this stage, my main goal is to refresh my existing knowledge and learn new things.

I need to improve my English grammar, speaking, and writing skills, so in addition to this front-end course, I'm also working on enhancing my English proficiency.

Education and courses

Education

Bachelor of Computer Science (National Aviation University of Ukraine)

Courses

Projects

Code Example

A function that formats a duration, given as a number of seconds, into a human-friendly format. The function accepts a non-negative integer. If the integer is zero, it returns "now". Otherwise, the duration is expressed as a combination of years, days, hours, minutes, and seconds.

  
    function formatDuration (seconds) {
      if (seconds === 0) return 'now';

      const formulas = {
        "year": 365 * 24 * 60 * 60,
        "day": 24 * 60 * 60,
        "hour": 60 * 60,
        "minute": 60,
        "second": 1
      };

      let time = [];

      for (const timeUnit in formulas) {
        if (seconds >= formulas[timeUnit]) {
          const timeAmount = Math.floor(seconds / formulas[timeUnit]);
          let timeUnitStrEnd = timeAmount > 1 ? "s" : "";
          let str = `${timeAmount} ${timeUnit}${timeUnitStrEnd}`;
          time.push(str);
          seconds %= formulas[timeUnit];
        }
      }

      if (time.length > 1) {
        const lastItem = time.pop();
        return `${time.join(', ')} and ${lastItem}`;
      } else {
        return time[0];
      }
    }