WEB DEVELOPER

Danijel Adrinek

Danijel Adrinek

About me

I am a passionate web developer with a keen eye for details.

I transform your designs designs into pixel-perfect web solutions while keeping the websites SEO optimized, easy to use, and written in clean, easily managable code.

Programming languages I have previously used:

NextJs
Shopify
Git
JavaScript
TypeScript
Dart
HTML5
React
JQuery
CSS3
Sass
Bootstrap
Redux
NodeJS
GraphQL
MySQL
Firebase
Flutter
Arduino
Docker
Figma

What I can do for you:

Clean Code

Pixel-perfect web solutions that completely match the design assigned to me

SEO optimized websites that perform well on the web, and rank high on Google

Advanced knowledge of animations and animation libraries like AOS

Mobile first code

Cross browser compatibility

Responsive design

Some examples of my code

 
useAnimations hook:
'use client'; import { useEffect, useState, useRef } from 'react'; import { useLocalStorage } from './useLocalStorage'; import AOS from 'aos'; export function useAnimations(): {areAnimationsEnabled: boolean, setAnimations: (areEnabled: boolean) => void, setIsMobile: (isMobile: boolean) => void, refresh: () => void} { const numOfRenders = useRef(0); const key: string = 'animations'; const initialValue: boolean = true; let [areAnimationsEnabled, setValue] = useLocalStorage(key, initialValue); const [isMobile, _setIsMobileState] = useState(true); // in production the site will render less times than in development, this code checks if we are in production or development, and adjusts the code accordingly process.env.NODE_ENV === 'production' ? numOfRenders.current = 1 : numOfRenders.current = 0; function _enableAnimations() { document.body.classList.remove('animationsDisabled'); AOS.init({ disable: 'mobile', duration: 350, offset: 200, once: false, easing: 'ease-in-out', anchorPlacement: 'top-bottom' }); } function _disableAnimations() {document.body.classList.add('animationsDisabled');} function _handleAnimationStatus(shouldBeEnabled: boolean) { if(shouldBeEnabled && !isMobile) { _enableAnimations(); } else { _disableAnimations(); } } function refresh() {_handleAnimationStatus(areAnimationsEnabled!);} function setIsMobile(isMobile: boolean) {_setIsMobileState(isMobile);} function setAnimations(areEnabled: boolean) { _handleAnimationStatus(areEnabled); setValue(areEnabled); } useEffect(() => { // in production the site will render less times than in development, this code checks if we are in production or development, and adjusts the code accordingly if(numOfRenders.current < 2) { numOfRenders.current = numOfRenders.current + 1; return; } setAnimations(areAnimationsEnabled); }, [areAnimationsEnabled]); useEffect(() => { refresh(); }, [isMobile]) useEffect(() => { _handleAnimationStatus(true); }, []); return {areAnimationsEnabled: areAnimationsEnabled!, setAnimations, setIsMobile, refresh}; }

Statistics

Performance

94

The website has been optimized by using the NextJS native Image tag, the images are all in .webp format because of its superior compression capabilities which allows the immage to be smaller, the image size has been reduced so there isnt unused data, unused css has been removed...

Accessability

100

Made sure all the colors on the page are different enough that they are easily visible for people with impaired vision, made sure the website is easily readable by screen readers.

SEO

100

Using semantic HTML, and some best-pracices, I was able to score 100 on the first try in the SEO realm

Best Practices

100

Scored 100 first try

Contact Me

Necessary fields are marked with a *