{"id":10089,"date":"2020-10-12T12:00:45","date_gmt":"2020-10-12T16:00:45","guid":{"rendered":"http:\/\/www.theartofretouching.com\/blog\/?p=10089"},"modified":"2024-03-31T00:38:35","modified_gmt":"2024-03-31T04:38:35","slug":"freelancer-success-pt3","status":"publish","type":"post","link":"https:\/\/www.theartofretouching.com\/blog\/freelancer-success-pt3\/","title":{"rendered":"How to Succeed as a Freelancer | Self Employment for Beginners"},"content":{"rendered":"\r\n<h2><strong>How to Succeed as a Freelancer | Self Employment for Beginners<\/strong><\/h2>\r\n<p><em>This video is available <strong>with Free For All<\/strong>.<\/em><br \/><em><strong>Running Time<\/strong>: 10 minutes<\/em><\/p>\r\n<p>Unlock the keys to Self Employment for Beginners! Your Freelancer Success is finally here. This video is part 3 in the series of How To Succeed as a Freelancer. If you take the time to watch them all, I will have given you every freelancer trick that I can think of to help you thrive. From finding Clients, to keeping them coming back. Success truly is within your reach.<\/p>\r\n<p><!--more--><br \/>\r\n<div style=\"position: relative; top: -20px;\">\r\n\r\n\r\n<style>\r\n    \r\n\/* FOLLOWING TWO SHOULD HAVE SAME COLOR - videoControlBarColor *\/\r\n\/* Background color of control bar and big play button *\/\r\n#video1 .vjs-big-play-button {\r\n    border-color: #efefef  !important;\r\n    background-color: #333333 !important;\r\n    font-size: 20px !important;\r\n    opacity: .7;\r\n     }\r\n    \r\n    \r\n\r\n\/* Color of control bar *\/\r\n#videocontent1 .vjs-control-bar button {\r\n    background: unset !important;\r\n}    \r\n\r\n\r\n#videocontent1 .vjs-matrix .vjs-control-bar {\r\n    background: #333333 !important;\r\n    opacity: 1.0 !important;\r\n} \r\n\r\n\/* FOLLOWING TWO SHOULD HAVE SAME COLOR - videoMainColor *\/\r\n\/* Color of all text, icons and \"play\" triangle *\/\r\n#videocontent1 .vjs-default-skin {\r\n    color: #efefef !important; \r\n    overflow: hidden !important;\r\n            font-size: 10px !important;\r\n    }\r\n    \r\n\/* Change the color of various \"bars\" text: Scrubber and Volume - make it same as bg color of big play button*\/\r\n#videocontent1 .vjs-matrix .vjs-volume-level,\r\n#videocontent1 .vjs-matrix .vjs-play-progress,\r\n#videocontent1 .vjs-matrix .vjs-slider-bar\r\n{\r\n    background: #efefef !important;\r\n}\r\n    \r\ndiv#videocontent1 {\r\n    display: block !important;\r\n}    \r\n\r\n    \r\n                    \r\n\r\n\r\n\/* Style inner div to center button *\/\r\n.inner {\r\n    left: 50%;\r\n    top: 10%;\r\n    transform: translate(-50%, -50%);\r\n    position: absolute;\r\n}    \r\n    \r\n    \r\n\r\n        \/* hide the captions settings item from the captions menu *\/\r\n        .video1.vjs-texttrack-settings {\r\n            display: none;\r\n        }\r\n        \r\n    #videocontent1 .vjs-menu-button-popup .vjs-menu .vjs-menu-content {\r\n        background-color: #333333 !important;\r\n        color: #efefef !important;\r\n        padding: 0px !important;\r\n        margin: 0px !important;\r\n        max-height: none !important;\r\n    }\r\n    \r\n    #videocontent1 .vjs-menu-content li {\r\n        list-style: none !important;\r\n    }\r\n    \r\n    #videocontent1 li.vjs-menu-item {\r\n        margin-bottom: 0px !important;\r\n        margin: 0px !important;\r\n    }\r\n    \r\n    #videocontent1 .vjs-control .vjs-button {\r\n        padding-left: 0px !important;\r\n        padding-right: 0px !important;\r\n        margin-left: 0px !important;\r\n        padding:0px !important;\r\n    }\r\n    \r\n    #videocontent1 .vjs-playback-rate-value {\r\n        margin-right: 0em;\r\n    }\r\n    \r\n    #videocontent1 .vjs-playback-rate {\r\n        margin-right: 0em;\r\n    }\r\n        \r\n\r\n    \r\n#videocontent1 .vjs-user-inactive .vjs-control-bar {\r\n    display: none !important;\r\n    visibility: hidden !important;\r\n    opacity: 0 !important;\r\n    cursor: none !important;\r\n}\r\n    \r\n\/**\r\n#videocontent1 .vjs-big-play-button {\r\n    border: 0px !important;\r\n}\r\n*\/\r\n    \r\n#videocontent1 .vjs-play-control {\r\n    border: 0px !important;\r\n}\r\n    \r\n#videocontent1 .vjs-mute-control {\r\n    border: 0px !important;\r\n}\r\n\r\n#videocontent1 .vjs-control {\r\n    border: 0px !important;\r\n}\r\n\r\n#videocontent1 .vjs-button {\r\n    padding: 0px !important;\r\n    border: 0px !important;\r\n}    \r\n    \r\n#videocontent1 .vjs-picture-in-picture-control {\r\n    display: none !important;\r\n    visibility: hidden !important;\r\n    opacity: 0 !important;\r\n    cursor: none !important;\r\n}\r\n    \r\n    \r\n\r\n.video-js-dimensions.vjs-fluid { \r\n    padding-top: 56.25%;\r\n }\r\n.video-js { padding-top: 56.25%; }\r\n    \r\n    \r\n    \r\n<\/style>\r\n\r\n<script>\r\n\r\n    var watermarkCounter = 1;\r\n    \r\n    function setCookie(name, value, daysToExpire) {\r\n        \/\/console.log(\"setCookie\");\r\n        var expires = \"\";\r\n        if (daysToExpire) {\r\n            var date = new Date();\r\n            date.setTime(date.getTime() + (daysToExpire * 24 * 60 * 60 * 1000));\r\n            expires = \"; expires=\" + date.toUTCString();\r\n        }\r\n        document.cookie = name + \"=\" + value + expires + \"; path=\/\";\r\n    }\r\n    \r\n    function getCookie(cookieName) {\r\n        const cookies = document.cookie.split(';');\r\n\r\n        for (const cookie of cookies) {\r\n            const [name, value] = cookie.trim().split('=');\r\n            if (name === cookieName) {\r\n                return decodeURIComponent(value);\r\n            }\r\n        }\r\n\r\n        return null; \/\/ Cookie not found\r\n    }\r\n\r\n<\/script>\r\n\r\n\r\n        <!-- <link href=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/plugins\/S3MediaVaultPro\/includes\/css\/video-js-2.min.css\" rel=\"stylesheet\"> -->\r\n        <link href=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/plugins\/S3MediaVaultPro\/includes\/css\/videojs.watermark.css\" rel=\"stylesheet\">\r\n        \r\n        <!-- <script src=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/plugins\/S3MediaVaultPro\/includes\/javascript\/video-2.js\"><\/script> -->\r\n        <script src=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/plugins\/S3MediaVaultPro\/includes\/javascript\/videojs.watermark.js\"><\/script>\r\n        \r\n        <div id=\"videoparent1\">\r\n            <div id=\"videocontent1\" class=\"video-wrap\">\r\n                                    <video N id=\"video1\"  oncontextmenu=\"return false;\" class=\"vjs-matrix video-js-responsive-container video-js  vjs-16-9  vjs-default-skin vjs-big-play-centered\"  controls  preload=\"metadata\"  width=\"800\" height=\"450\"   poster=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/maxresdefault.jpg\"  data-setup='{\"fluid\": true   ,\"playbackRates\": [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]  }' playsinline>\r\n                        <source src=\"https:\/\/aor-public.s3.amazonaws.com\/Succeed_as_a_Freelancer\/videos\/Aor002_Succeed_As_A_Freelancer_C_LR.mp4?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIATFRWUZAOT3CJXS7C%2F20261024%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20261024T204623Z&X-Amz-SignedHeaders=host&X-Amz-Expires=1000&X-Amz-Signature=a4ced3f48b0f65b8b58e67d6ac72b38683d4b0927d9a101813a419e164d37459\" type=\"video\/mp4\" \/>\r\n                                            <\/video>\r\n                                                 <\/div>\r\n    <\/div>\r\n\r\n        \r\n                \r\n        <style>\r\n    \r\n    .vjs-fullscreen { padding-top: 0px }\r\n\r\n        \r\n    .buttonClass {\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        vertical-align: baseline;\r\n        padding: 0px;\r\n    }\r\n\r\n                div1.vjs-watermark {\r\n                bottom: 30px !important;\r\n                top: unset !important;\r\n                right: 0 !important;\r\n                left: unset !important;\r\n            }\r\n         \r\n<\/style>\r\n\r\n<!-- JavaScript Start -->\r\n<script>\r\n    \r\n\/* <![CDATA[ *\/\r\nvar threshold1;\r\nvar ajaxurl = \"https:\/\/www.theartofretouching.com\/blog\/wp-admin\/admin-ajax.php\";\r\nvar promise;\r\n\r\nvar player1 = videojs('video1',{\r\n  width: \"800\",\r\n  height: \"450\"\r\n});\r\n\t\r\nplayer1.bigPlayButton.on('click', function(){\r\n\tif (player1.paused()) {\r\n\t\tplayer1.play();\r\n\t} \r\n\t\t\r\n});\r\n    \r\nvar div1;\r\n\r\n\r\n\r\nvar hasBeenClosed = false;\r\n       \r\n        function closePIP() {\r\n            var $videoWrap = jQuery('.video-wrap');\r\n            var $video = jQuery('.video');\r\n            var $closeButton = jQuery('.closeButton')\r\n\r\n            $videoWrap.height('auto');\r\n            $video.removeClass('stuck');\r\n            $closeButton.removeClass('closeShowing');\r\n            $closeButton.addClass('closeHidden');\r\n\r\n            hasBeenClosed = true;\r\n            player1.pause();\r\n            videojs('video1', { inactivityTimeout: 0 });\r\n            player1.bigPlayButton.show();\r\n\r\n        }\r\n    \r\njQuery(document).ready(function($) {\r\n    \r\n    jQuery(\"#closeButton\").hide();\r\n    var $window = jQuery(window);\r\n    var $videoWrap = jQuery('.video-wrap');\r\n    var $video = jQuery('.video');\r\n    var videoHeight = $video.outerHeight();\r\n    var $closeButton = jQuery('.closeButton')\r\n\r\n    $window.on('scroll',  function() {\r\n        var windowScrollTop = $window.scrollTop();\r\n        var videoBottom = videoHeight + $videoWrap.offset().top;\r\n\r\n        if ( (windowScrollTop > videoBottom) && !hasBeenClosed ) {\r\n            $videoWrap.height(videoHeight);\r\n            $video.addClass('stuck');\r\n            \/\/$closeButton.removeClass('closeHidden');\r\n            \/\/$closeButton.removeClass('closeHidden');\r\n            \/\/$closeButton.addClass('closeShowing');\r\n            \/\/$closeButton.display('block');                            \r\n            jQuery(\"#closeButton\").show();\r\n        } else {\r\n            $videoWrap.height('auto');\r\n            $video.removeClass('stuck');\r\n            jQuery(\"#closeButton\").hide();\r\n        }\r\n\r\n        \/\/console.log(\"videoHeight: \" + videoHeight + \", windowScrollTop: \" + windowScrollTop + \", videoBottom: \" + videoBottom);\r\n\r\n    });\r\n\r\n\/\/hideWatermarkOnLoad1();\r\n    \/\/alert(jQuery(window).width() + \", \" + jQuery(window).height());\r\n    div = document.getElementsByClassName(\"vjs-watermark\")[1-1];\r\n    if (div) {\r\n        \/\/div.style.display = \"none\";\r\n    }\r\n\r\n        \r\n        if(jQuery(window).width() >= 500) {\r\n            var skipBehindButton1 = player1.controlBar.addChild(\"button\", {}, 2);\r\n            var skipBehindButtonDom1 = skipBehindButton1.el();\r\n            skipBehindButtonDom1.innerHTML = \"<<\";\r\n            skipBehindButtonDom1.title = \"Rewind 15 Seconds\";\r\n            skipBehindButton1.addClass(\"buttonClass\");\r\n            skipBehindButtonDom1.onclick = function(){\r\n                skipS3MV1(-15);\r\n            }  \r\n\r\n            var skipAheadButton1 = player1.controlBar.addChild(\"button\", {}, 3);\r\n            var skipAheadButtonDom1 = skipAheadButton1.el();\r\n            skipAheadButtonDom1.innerHTML = \">>\";\r\n            skipAheadButtonDom1.title = \"Fast-Forward 15 Seconds\";\r\n            skipAheadButton1.addClass(\"buttonClass\");\r\n            skipAheadButtonDom1.onclick = function() {\r\n                skipS3MV1(15);\r\n            }  \r\n        }\r\n    \r\n        \r\n}); \/\/End jQuery(document).ready\r\n    \r\n\r\nfunction skipS3MV1(skipBy) {\r\n    player1.currentTime(player1.currentTime() + skipBy);\r\n}\r\n\r\n\r\nfunction getDomainName(hostName) {\r\n    return hostName.substring(hostName.lastIndexOf(\".\", hostName.lastIndexOf(\".\") - 1) + 1);\r\n}\r\n\r\n    \r\nfunction unmuteAndPlayFromStart2() {\r\n    var player1;\r\n    if(player1 == null) {\r\n        player1 = videojs(\"video1\");\r\n    }\r\n\r\n    if( (player1.muted()) && (timesMuted == 1) ) {\r\n        player1.watermark({\r\n          file: '',\r\n          xpos: 1,\r\n          ypos: 0,\r\n          xrepeat: 0,\r\n          opacity: 0,\r\n          url: '',\r\n          clickable: false,\r\n          text: false,\r\n          textContent: '',\r\n          fontSize: 0,\r\n          fontColor: '',\r\n          fontBGColor: ''\r\n        });    \r\n\r\n                player1.currentTime(0);\r\n        player1.muted(false);\r\n        player1.play();\r\n    }\r\n    timesMuted++;\r\n}\r\n\r\n\r\nfunction unmuteAndPlayFromStart1(player1) {\r\n    \/\/var player1;\r\n    if(player1 == null) {\r\n        player1 = videojs(\"video1\");\r\n    }\r\n    \/\/alert(timesMuted);\r\n        player1.currentTime(0);\r\n    player1.muted(false);\r\n    player1.play();\r\n}\r\n\r\n    \r\nfunction roundUpToAny(n,x=15) {\r\n    return Math.round((n+x\/2)\/x)*x;\r\n}\r\n            \r\n    \r\nvideojs(\"video1\").ready(function() {\r\n    \/\/console.log(\"Videojs Ready - should be called only once\");\r\n\tvar player1 = videojs(\"video1\");\r\n    var userIdAnon = 0;\r\n    var videoId = 79;\r\n    var anonTracking = \"N\";\r\n    var captions = localStorage.getItem('captions');\r\n    \/\/console.log(\"captions on load: \" + captions);\r\n    \r\n    if(captions === null) captions = \"on\";\r\n    \r\n    \r\n    var preferredLang = localStorage.getItem('caption-language');\r\n    let tracks = player1.textTracks();\r\n    var trackList = Array.prototype.slice.call(tracks);\r\n    var activeTrack = Array.from(tracks).find(track => track.mode === 'showing');\r\n    \/\/localStorage.setItem('caption-language', activeTrack.language);  \r\n    \/\/console.log(\"currently active language: \" + activeTrack.language);\r\n    \/\/console.log(\"preferredLang on load: \" + preferredLang);\r\n    var preferredLangIsSet = false;\r\n    \r\n    \/\/tracks.addEventListener('change', storeLanguageChoice);\r\n    \/\/var initialTrackLanguageChange = true;\r\n    \r\n    \/\/var videoEl1 = player1.el();\r\n\r\n    \r\n    var savedSpeed = localStorage.getItem('videoSpeed');\r\n    \/\/console.log(\"savedSpeed on load: \" + savedSpeed);\r\n    \r\n    if (savedSpeed) {\r\n        this.playbackRate(savedSpeed);\r\n    }\r\n    \r\n    \r\n    \/\/activeTrack = Array.from(tracks).find(track => track.mode === 'showing');\r\n    \/\/console.log(\"currently active language: \" + activeTrack.language);\r\n    \r\n    function setupTextTracks() {\r\n        \/\/console.log(\"in setupTextTracks\");\r\n        \/\/ If preferredLang found, get track and enable it\r\n        if( preferredLang && (captions === \"on\") ) {\r\n            \/\/console.log(\"preferredLang is set: \" + preferredLang);\r\n            tracks = player1.textTracks();\r\n            \/\/var targetTrack = Array.from(tracks).find(track => track.language === preferredLang);\r\n            \r\n            \/\/console.log(\"targetTrack mode: \" + targetTrack.mode);\r\n            \r\n            for (var i = 0; i < tracks.length; i++) {\r\n                var track = tracks[i];\r\n\r\n                \/\/ Check if the track is a captions track and if the language is German ('de')\r\n                if (track.kind === 'captions' && track.language === preferredLang) {\r\n                    \/\/console.log(\"Yes, match found\");\r\n                    track.mode = 'showing'; \/\/ Show the German captions\r\n                } else {\r\n                    track.mode = 'disabled'; \/\/ Hide other caption tracks\r\n                }\r\n            }\r\n            \r\n            preferredLangIsSet = true;\r\n        } \r\n    }\r\n    \r\n    \r\n    \/\/Can be moved to end??\r\n    \/\/Remembering Captions Settings on User Change\r\n    player1.textTracks().addEventListener('change', function() {\r\n        \/\/console.log(\"User changed captions settings\");\r\n\r\n        var tracks = player1.textTracks(); \r\n        \r\n        \/\/ Convert to array\r\n        var trackList = Array.prototype.slice.call(tracks);\r\n\r\n        \/\/ Check if captions are disabled \r\n        \/\/ I.e. no tracks in 'showing' mode\r\n        var disabled = !trackList.some(function(track) {\r\n            return track.mode === 'showing';  \r\n        });\r\n\r\n        if(disabled) {\r\n            \/\/ Captions were just set to off \r\n            localStorage.setItem('captions', 'off');\r\n            \/\/console.log('Captions disabled');\r\n        } else {\r\n            localStorage.setItem('captions', 'on');\r\n            \/\/console.log('Captions ENABLED');\r\n        }\r\n        \r\n        \r\n        if( captions === \"on\" ) {\r\n            trackList = Array.prototype.slice.call(tracks);\r\n            activeTrack = Array.from(tracks).find(track => track.mode === 'showing');\r\n            \/\/console.log(\"in User changed captions settings: active language: \" + activeTrack.language);\r\n            localStorage.setItem('caption-language', activeTrack.language);  \r\n        }\r\n\r\n    });\r\n    \r\n        \r\n    timesMuted = 0;\r\n    var button = document.createElement(\"button\");\r\n    button.setAttribute(\"id\", \"muteButton\");\r\n    var buttonRemoved = false;\r\n    var endTime = 0;\r\n\tvar restartedOnce = false;\r\n    \r\n    \/\/Disable full screen zand remove full screen on double click\r\n        \r\n\tthis.on('volumechange', function(){\r\n\t\ttimesMuted++;\r\n        \/\/alert(\"volume change \" + timesMuted);\r\n        if( !buttonRemoved && (timesMuted == 10000) ) {\r\n\t\t   \t\/\/alert(\"inside\");\r\n\t\t\tvideo1.removeChild(button);\r\n\t\t\t\/\/document.getElementById(\"muteButton\").remove();\r\n\t\t\tbuttonRemoved = true;\r\n\t\t   \tif(restartedOnce == false) {\r\n\t\t\t\tunmuteAndPlayFromStart1(player1);\r\n\t\t\t\trestartedOnce = true;\r\n\t\t\t}\r\n        }        \r\n    });\r\n    \r\n        \r\n    \r\n\r\n    \r\n    this.on('click', function(evt) {\r\n        \/\/console.log(\"video clicked, \" + evt.target.tagName);\r\n        if (evt.target.tagName === 'VIDEO') {\r\n            \/\/alert(\"after click unmuteAndPlayFromStart1(player1)\");\r\n            \/\/document.getElementsByTagName.removeChild(button);\r\n            if(!buttonRemoved) {\r\n                if(document.getElementById(\"muteButton\")) {\r\n                    document.getElementById(\"muteButton\").remove();\r\n                    buttonRemoved = true;\r\n                    if(restartedOnce == false) {\r\n\t\t\t\t\t\tunmuteAndPlayFromStart1(player1);\r\n\t\t\t\t\t\trestartedOnce = true;\r\n\t\t\t\t\t}\r\n                }\r\n            }\r\n        }\r\n        \r\n        \r\n    });\r\n    \r\n    this.on('pause', function() {\r\n        div = document.getElementsByClassName(\"vjs-watermark\")[1-1];\r\n        if (div) {\r\n            div.style.display = \"none\";\r\n        }\r\n        jQuery('#video1 .vjs-big-play-button').css('display', 'block');\r\n    });\r\n    \r\n        \r\n\tvar threshold1 = 15;\r\n\tvar counter1 = threshold1;\r\n    var duration1 = 556;\r\n    \r\n    \/\/Track loading time\r\n    \/\/console.log(\"ping 1: trackLoads\");\r\n\tvar data = {\r\n\t\t'action': 'trackLoads',\r\n\t\t'videoId': 79,\r\n\t\t'playTime': 0,\r\n        'event': 'load',\r\n        'postId': 10089\t};\r\n    \r\n\tjQuery.post(ajaxurl, data, function(response) { });\r\n    \r\n    st1 = -1;\r\n    et1 = 99999;\r\n    \/\/alert(\"st1: \" + st1 + \", et1: \" + et1);\r\n    playTime1 = 0;\r\n    playTimeCurrent1 = 0;\r\n    \r\n    if( (userIdAnon == 0) && (anonTracking == \"Y\") && (videoId == getCookie(\"videoIdAnon\")) ) {\r\n        playTimeAnon = getCookie(\"playTimeAnon\");\r\n        \/\/console.log(\"playTimeAnon from getCookie: \" + playTimeAnon); \r\n        \/\/console.log(\"videoId: \" + videoId);\r\n        playTimeCurrent1 = playTimeAnon;\r\n    }\r\n    \r\n    \/\/console.log(\"playTime1: \" + playTime1);\r\n    \/\/console.log(\"playTimeCurrent1: \" + playTimeCurrent1);\r\n    \r\n    \/\/console.log(parseInt(st1));\r\n    if(parseInt(st1) >= 0 ) {\r\n        playTimeCurrent1 = parseInt(st1);\r\n    }\r\n    this.currentTime(playTimeCurrent1);\r\n    if( (this.currentTime() + threshold1) > counter1 ) {\r\n        \/\/console.log(\"this.currentTime: \" + this.currentTime() + \", counter1: \" + counter1);\r\n        \/\/counter1 = this.currentTime() + threshold1;\r\n        counter1 = this.currentTime();\r\n        \/\/console.log(\"new this.currentTime: \" + this.currentTime() + \", counter1: \" + counter1);\r\n    }\r\n    \/\/console.log(\"playTime: \" + playTime);\r\n\tvar gotDuration1 = false;\r\n    \r\n    player1.ready(function(){\r\n        this.on('loadedmetadata', function(){ \r\n            \/\/console.log(\"this.duration: \" + this.duration());\r\n            duration1 = this.duration();\r\n            \/\/if (this.currentTime() <= duration1 -1)\r\n        })\r\n    });\r\n\r\n    this.on(\"seeked\", function(){\r\n        \/\/console.log(\"seeked: ------------------------Seeking\");\r\n        \r\n        cuepoint = 0;\r\n                \r\n        \r\n        ct = this.currentTime();\r\n        roundUpHowMuch = 1;\r\n        roundUp = roundUpToAny(ct,roundUpHowMuch);\r\n        \/\/diff = roundUp - counter1;\r\n        diff = ct - playTimeCurrent1;\r\n        diffRoundup = roundUpToAny(diff,roundUpHowMuch) - 30;\r\n        \/\/playTime1 = diffRoundup;\r\n        \/\/console.log(\"playTimeCurrent1: \" + playTimeCurrent1 + \", ct: \" + ct + \", roundUp: \" + roundUp + \", diff: \" + diff + \", diffRoundup: \" + diffRoundup);\r\n        \/\/console.log(\"seeked: currentTime \" + ct + \", old counter1: \" + counter1 + \", roundUp: \" + roundUp + \", diff: \" + diff);\r\n        counter1 = roundUp;\r\n        \/\/console.log(\"New counter1: \" + counter1);\r\n        \r\n        if( (diffRoundup > roundUpHowMuch) || (diffRoundup < -roundUpHowMuch) ) {\r\n            \/\/console.log(\"seeked: Yes, diff > roundUpHowMuch or < -roundUpHowMuch: \" + diffRoundup);\r\n            \/\/console.log(\"ping 2: seeked\");\r\n            var data = {\r\n                'action': 'trackViews',\r\n                'playTime': this.currentTime(),\r\n                'videoId': 79,\r\n                'duration': this.duration(),\r\n                'threshold': threshold1,\r\n                'event': 'seek',\r\n                'diff': diffRoundup,\r\n                'postId': 10089            };\r\n            jQuery.post(ajaxurl, data, function(response) { });\r\n        }\r\n        \r\n        playTimeCurrent1 = this.currentTime();\r\n        \/\/console.log(\"playTimeCurrent1: \" + playTimeCurrent1);\r\n\r\n        \/\/if(ct > roundUp) {\r\n            \/\/console.log(\"DO SOMETHING IMPORTANT HERE!!!!!!!!\");\r\n        \/\/}\r\n    });\r\n    \r\n    this.on(\"timeupdate\", function(){\r\n        \/\/console.log(\"in timeupdate\");\r\n        if (this.currentTime() >= et1) {\r\n            this.pause();\r\n        }\r\n        \r\n        \/\/if( (this.currentTime() + threshold1) > counter1 ) {\r\n            \/\/counter1 = this.currentTime() + threshold1;\r\n            \/\/console.log(\"this.currentTime: \" + this.currentTime() + \", counter1: \" + counter1);\r\n        \/\/}\r\n        \r\n        \/**\r\n        if (this.currentTime() <= duration1 -1) {\r\n            \/\/alert(\"here\");\r\n            playTime1 = 0;\r\n            playTimeCurrent1 = 0;\r\n        } else {\r\n            playTime1 = this.currentTime();\r\n            playTimeCurrent1 = this.currentTime();\r\n        }\r\n        \r\n        if( (this.currentTime() + threshold1) < counter1 ) {\r\n            console.log(\"this.currentTime: \" + this.currentTime() + \", counter1: \" + counter1);\r\n            counter1 = this.currentTime() + threshold1;\r\n            console.log(\"new this.currentTime: \" + this.currentTime() + \", counter1: \" + counter1);\r\n        }\r\n        *\/\r\n\t\t\r\n        \/\/console.log(\"timeupdate: ---> this.currentTime: \" + this.currentTime() + \", counter1: \" + counter1);\r\n        \r\n        if (this.currentTime() >= counter1) {\r\n            \/\/console.log(\"timeupdate: currentTime() >= counter1\");\r\n\r\n\t\t\t\/\/set a timer for threshold seconds\r\n            \/\/console.log(\"this.currentTime: \" + this.currentTime() + \", counter1: \" + counter1 + \", threshold1: \" + threshold1);\r\n\t\t\tsetInterval(function() {\r\n\t\t\t\t\/\/do nothing\r\n\t\t\t}, threshold1 * 1000);\r\n\t\t\t\/\/alert (counter1 + \" seconds up\");\r\n\t\t\t\r\n\t\t\tcounter1 += threshold1;\r\n\r\n\t\t\tif(!gotDuration1) {\r\n\t\t\t\tduration1 = this.duration();\r\n\t\t\t\tgotDuration1 = true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t\/\/Track play time\r\n            if( !this.paused() ) {\r\n                \/\/console.log(\"ping 3: timeupdate\");\r\n                var data = {\r\n                    'action': 'trackViews',\r\n                    'playTime': this.currentTime(),\r\n                    'videoId': 79,\r\n                    'duration': this.duration(),\r\n                    'threshold': threshold1,\r\n                    'event': 'play',\r\n                    'postId': 10089                };\r\n                jQuery.post(ajaxurl, data, function(response) { });\r\n                \r\n                if(userIdAnon == 0) { \/\/Anonymous user\r\n                    \/\/setCookie(\"userIdAnon\", \"0\", 30);\r\n                    setCookie(\"videoIdAnon\", \"79\", 30);\r\n                    setCookie(\"playTimeAnon\", this.currentTime(), 30);\r\n                    \/\/console.log(\"playTimeAnon: \" + this.currentTime());\r\n                }\r\n            }\r\n\r\n\t\t}\r\n        \r\n\t});\r\n\t\r\n    this.on(\"play\", function(){\r\n        \/\/this.playbackRate(1.5);\r\n        \/**\r\n        if(this.currentTime() < playTimeCurrent1) {\r\n            console.log(\"play: this.currentTime() < playTimeCurrent1\");\r\n            if(this.currentTime() < this.duration()) {\r\n                this.currentTime(playTimeCurrent1);\r\n            } else {\r\n                this.currentTime(0);\r\n            }\r\n            \/\/alert(this.currentTime() + \", \" + playTime);\r\n        }\r\n        *\/\r\n        \r\n                \r\n        \/**\r\n        var data = {\r\n            'action': 'trackLoads',\r\n            'videoId': 79,\r\n            'playTime': 0,\r\n            'event': 'start',\r\n            'postId': 10089        };\r\n    \r\n\t    jQuery.post(ajaxurl, data, function(response) { });        \r\n        \r\n        *\/\r\n        \r\n        jQuery('#video1 .vjs-big-play-button').css('display', 'none');\r\n        \r\n                    div = document.getElementsByClassName(\"vjs-watermark\")[1-1];\r\n            if (div) {\r\n                div.style.display = \"block\";\r\n            }\r\n                    });\r\n\r\n    \r\n    this.on(\"fullscreenchange\", function(){\r\n\t\tjQuery('.vjs-loading-spinner').remove();\r\n\t\tthis.loadingSpinner.hide();\r\n\t});\r\n\t\r\n    this.on('ended', function() {\r\n        \/\/console.log(\"ping 4: ended\");\r\n        var data = {\r\n\t\t\t'action': 'trackViews',\r\n\t\t\t'playTime': this.currentTime(),\r\n\t\t\t'videoId': 79,\r\n            'duration': this.duration(),\r\n            'threshold': threshold1,\r\n            'event': 'end',\r\n            'postId': 10089\t\t};\r\n        \/\/this.currentTime(st);\r\n        \/\/alert(\"starting time: \" + st);\r\n\t\tjQuery.post(ajaxurl, data, function(response) { });\r\n        \/\/console.log('ended: ' + this.duration());\r\n        \r\n        endTime1 = this.currentTime();\r\n\t\t\/\/Track play time\r\n\t\t\/\/console.log(\"event: end firing\");\r\n        counter1 = st1;\r\n        playTime1 = 0;\r\n        playTimeCurrent1 = 0;\r\n        this.currentTime(0);\r\n        threshold1 = 15;\r\n        \/\/console.log(\"ended: ping 2\");\r\n        \r\n  \t});\r\n    \r\n    \r\n    this.on('ratechange', function() {\r\n        var currentSpeed = this.playbackRate();\r\n        \/\/console.log(\"currentSpeed: \" + currentSpeed);\r\n        localStorage.setItem('videoSpeed', currentSpeed);\r\n    });\r\n    \r\n    \r\n        \r\n    \r\n        \r\n        \r\n    \r\n    \r\n    jQuery.fn.isInViewport = function() {\r\n        var elementTop = jQuery(this).offset().top;\r\n        var elementBottom = elementTop + jQuery(this).outerHeight();\r\n\r\n        var viewportTop = jQuery(window).scrollTop();\r\n        var viewportBottom = viewportTop + jQuery(window).height();\r\n\r\n        return elementBottom > viewportTop && elementTop < viewportBottom;\r\n    };\r\n    \r\n    \r\n    \r\n    \r\n        \r\nsetupTextTracks();\r\n    \r\n}); \/\/End videojs player ready\r\n\r\nvar promise;\r\n    \r\n\/\/localStorage.removeItem('captions');\r\n\/\/delete localStorage.captions;\r\n\/\/localStorage.clear();\r\n    \r\n\/* ]]> *\/\r\n<\/script>\r\n\r\n\r\n\r\n\r\n\r\n<\/div>\r\n<div style=\"position: relative; top: 0px;\">\r\n\r\n<p>Beyond the basics of Photoshop, I&#8217;ll delve into the business aspects of freelancing, offering real-world skills for managing clients, navigating stylistic challenges, and maintaining sanity. From effective time management to setting boundaries, discover the essential elements that contribute to a thriving freelance career. Whether you&#8217;re a seasoned freelancer or just starting, this video provides practical advice to help you on your journey to <strong>freelancer success<\/strong>. Subscribe now for actionable tips and stay ahead in the competitive freelancing landscape.<\/p>\r\n&nbsp;\r\n<h4><b>Limit information intake<\/b><\/h4>\r\n<p>I have a client that loves to plan for everything. He often wants to talk about a task for 30 minutes on the phone. I do it, because it makes him feel like we accomplished something. However, my usual take-away is that he could have condensed the key elements and sent me a text message.<img loading=\"lazy\" decoding=\"async\" class=\"alignright wp-image-10129\" src=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/man-65049_1920-2-768x576.jpg\" alt=\"Limit information intake\" width=\"252\" height=\"189\" srcset=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/man-65049_1920-2-768x576.jpg 768w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/man-65049_1920-2-224x168.jpg 224w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/man-65049_1920-2-112x84.jpg 112w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/man-65049_1920-2-1536x1152.jpg 1536w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/man-65049_1920-2.jpg 1920w\" sizes=\"auto, (max-width: 252px) 100vw, 252px\" \/><\/p>\r\n<p>I often say \u201cMake a plan. Execute the plan. The plan goes off the rails. Make a new plan.\u201d, but this can be difficult with clients that like to micro-manage, and plan for so long, you eventually just forget to actually do anything about it. Basically, discussing it long enough, so that it\u2019s no longer relevant. This is the \u201cReady, Aim, Aim, Aim\u201d mentality, and it\u2019s the exact opposite of how I work, which is closer to \u201cReady, Fire, Aim\u201d, and simply adjust course as we go.<\/p>\r\n<p>I prefer to limit the amount of distractions. I can\u2019t be producing work (and getting paid) if I spend all my time planning for it. I often tell my clients, especially when there\u2019s something they need as soon as possible, that I can\u2019t work if I\u2019m on the phone talking about what needs to get done. Send me an email.<\/p>\r\n&nbsp;\r\n<h4><b>Practice Saying No<\/b><\/h4>\r\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignright wp-image-10130\" src=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/no-1532840_1920-260x168.jpg\" alt=\"Practice Saying No for Freelancer Success\" width=\"252\" height=\"163\" srcset=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/no-1532840_1920-260x168.jpg 260w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/no-1532840_1920-891x576.jpg 891w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/no-1532840_1920-130x84.jpg 130w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/no-1532840_1920-768x496.jpg 768w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/no-1532840_1920-1536x993.jpg 1536w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/no-1532840_1920.jpg 1920w\" sizes=\"auto, (max-width: 252px) 100vw, 252px\" \/><\/p>\r\n<p>I say no to clients all the time. There is no point to taking on new work, if you don\u2019t have time to do the old work. For those clients that get a bit more demanding, explain that you can only take on new work starting a week or two from now. This can be a good way of working anyway. It sets you up for future work, and helps manage your time today without them asking \u201cIs it done yet?\u201d for the next week.<\/p>\r\n&nbsp;\r\n<h4><b>New Clients<\/b><\/h4>\r\n<p>If you ARE in the market for new clients, make sure you don\u2019t spend all of your energy and time wooing them. Potential clients are exactly that\u2014potential. They\u2019re not real clients just yet, so try your best to set an automatic workflow during that initial stage of seeing whether or not you\u2019re both a good fit to work together.<img loading=\"lazy\" decoding=\"async\" class=\"wp-image-10131 size-medium alignright\" src=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/austin-distel-jpHw8ndwJ_Q-unsplash-252x168.jpg\" alt=\"New Clients\" width=\"252\" height=\"168\" srcset=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/austin-distel-jpHw8ndwJ_Q-unsplash-252x168.jpg 252w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/austin-distel-jpHw8ndwJ_Q-unsplash-864x576.jpg 864w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/austin-distel-jpHw8ndwJ_Q-unsplash-126x84.jpg 126w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/austin-distel-jpHw8ndwJ_Q-unsplash-768x512.jpg 768w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/austin-distel-jpHw8ndwJ_Q-unsplash-1536x1024.jpg 1536w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/austin-distel-jpHw8ndwJ_Q-unsplash-2048x1365.jpg 2048w\" sizes=\"auto, (max-width: 252px) 100vw, 252px\" \/><\/p>\r\n<p>The reason this is important is because as a freelancer, your time is everything. Think about it: you\u2019re already dedicating hours upon hours of your day working for your existing clients. You definitely don\u2019t want to give up your free time for those who are just not worth it.<\/p>\r\n<p>Set aside \u201cwork time\u201d for running your business<\/p>\r\n<p>As a business owner, you are not only responsible for the actual work, but also all the administrative, financial, research, development, sales, and marketing tasks.<\/p>\r\n<p>Be sure that you schedule time in your work day to seek out future job opportunities, maintain client relationships, manage the finances, schedule social media posts, maintain your website, and all those other tasks that are now yours to deal with. Schedule time for all these activities during the hours you want to be working, not during your \u201coff-hours.\u201d<\/p>\r\n&nbsp;\r\n<h4><b>People Pay for Your Results<\/b><\/h4>\r\n<p>Clients will not be interested in what it takes to do what you do. They will only be interested in the results you give them. Was it worth their money? You better make sure that it is, or they will hire someone else next time. The sooner you accept it, the sooner you can succeed.<\/p>\r\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-10132 size-medium alignright\" src=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/result-3236285_1920-252x168.jpg\" alt=\"People Pay for Your Results\" width=\"252\" height=\"168\" srcset=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/result-3236285_1920-252x168.jpg 252w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/result-3236285_1920-864x576.jpg 864w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/result-3236285_1920-126x84.jpg 126w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/result-3236285_1920-768x512.jpg 768w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/result-3236285_1920-1536x1024.jpg 1536w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/result-3236285_1920.jpg 1920w\" sizes=\"auto, (max-width: 252px) 100vw, 252px\" \/><\/p>\r\n<p>It\u2019s also important to manage expectations early on before you even begin working for that client, just so you can avoid any finger-pointing when something doesn\u2019t go as planned. People love to play the Blame Game, and no matter how nice and cooperative a client may seem at first glance, they can do a complete one-eighty when things go horribly wrong.<\/p>\r\n<p>From the get-go, make sure that you set clear deliverables and deadlines so that you\u2019re both well aware of what\u2019s happening throughout the whole process. If you\u2019re going to be taking on a huge project, try to break it up in chunks so that your client can check to see if you\u2019re on the right track every so often. Plenty of mistakes can be easily avoided if you keep the communication lines open between yourself and your client at all times.<\/p>\r\n&nbsp;\r\n<h4><b>Everyone Hates Excuses<\/b><\/h4>\r\n<p>It&#8217;s natural to mess up\u2014nobody is perfect. Your clients will understand if you own up to your mistakes and do your best to redeem yourself. What they will not understand is you making excuses. Don&#8217;t waste your time explaining to your client why it\u2019s not quite right.. Just admit it, learn from it, and fix it. Your time and energy should be spent on trying to correct your mistake rather than on coming up with lame reasons why something didn\u2019t turn out the way you meant it to.<\/p>\r\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-10133 alignright\" src=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/result-3236280_1920-768x576.jpg\" alt=\"Everyone Hates Excuses\" width=\"252\" height=\"189\" srcset=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/result-3236280_1920-768x576.jpg 768w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/result-3236280_1920-224x168.jpg 224w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/result-3236280_1920-112x84.jpg 112w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/result-3236280_1920-1536x1152.jpg 1536w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/result-3236280_1920.jpg 1920w\" sizes=\"auto, (max-width: 252px) 100vw, 252px\" \/><\/p>\r\n<p>Here\u2019s a quick story: [Hey John, my husband is an architect and he once questioned a contractor as to why they didn\u2019t include the roof as part of their quotation. I mean, they submitted a quotation for a whole house, but sneakily didn\u2019t include the costs for the roof. When confronted about the oversight, the contractor stared at his own quotation, scratched his head, and told my husband it was his fault for asking them to submit the quotation on Valentine\u2019s Day. LOL the excuses people will come up with]<\/p>\r\n<p>This is also where good communication comes in handy. When you hit a bump in the road that you feel your client should know about, alert them about the issue right away before things get out of hand. Don\u2019t just shrug and hope for the best.<\/p>\r\n&nbsp;\r\n<h4><strong>Quality not Quantity<\/strong><\/h4>\r\n<p>It&#8217;s all about quality. Your priority should be to produce the best output for your client so that he will keep hiring you or even recommend you to someone else. This will eventually provide you with a steady circle of clients who love what you do, and if you keep providing them with top-notch work, more and more clients will be clamoring for your expertise. Who wouldn&#8217;t want that?<\/p>\r\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-10134 size-medium alignright\" src=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/approved-1049259_1920-253x168.png\" alt=\"Quality not Quantity\" width=\"253\" height=\"168\" srcset=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/approved-1049259_1920-253x168.png 253w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/approved-1049259_1920-867x576.png 867w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/approved-1049259_1920-126x84.png 126w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/approved-1049259_1920-768x510.png 768w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/approved-1049259_1920-1536x1021.png 1536w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/approved-1049259_1920.png 1920w\" sizes=\"auto, (max-width: 253px) 100vw, 253px\" \/><\/p>\r\n<p>I should also mention that quality is better than quantity when it comes to your clients, too. A handful of really good ones who provide you with a steady stream of income and whom you\u2019re comfortable working with is way better than tons and tons of crappy ones. Besides, not all of them will fall absolutely in love with your work and your style, so don\u2019t stress yourself out trying to please everyone.<\/p>\r\n&nbsp;\r\n<h4><strong>Treat freelancing as a job for Freelancer Success<\/strong><\/h4>\r\n<p>In this \u201calways connected\u201d world we live in, maintaining a work-life balance has become increasingly more difficult. When working from home, the lines between work and life are even more blurred. While the freelance lifestyle affords you the freedom to work for yourself, anytime and from anywhere you choose, this lack of boundaries can quickly make freelance work an overwhelming presence in your life.<\/p>\r\n<p>One of the most difficult things a freelancer often struggles with is to keep that work-life balance, well, balanced. Because you\u2019re not bound by a regular time clock where you log in and log out at the end of each day, your schedule tends to spiral out of control, and days and nights can bleed into each other without you realizing it.<\/p>\r\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-10135 size-medium alignright\" src=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/tie-690084_1920-252x168.jpg\" alt=\"Treat freelancing as a job for Freelancer Success\" width=\"252\" height=\"168\" srcset=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/tie-690084_1920-252x168.jpg 252w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/tie-690084_1920-863x576.jpg 863w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/tie-690084_1920-126x84.jpg 126w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/tie-690084_1920-768x512.jpg 768w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/tie-690084_1920-1536x1025.jpg 1536w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/tie-690084_1920.jpg 1920w\" sizes=\"auto, (max-width: 252px) 100vw, 252px\" \/><\/p>\r\n<p>My family life has suffered at times because I had a really hard time \u201cleaving\u201d work. Because I work from home, my clients often think their hours are my hours. Additionally, I find that I\u2019m always on call, day and night. A better way of working is to set up office hours with your clients, and stick with it.<\/p>\r\n<p>Personally, I don\u2019t schedule any work for Fridays. Ever. That\u2019s more of a catch-up day for me. Business, personal, or just bike riding. I\u2019ll schedule some work during the weekends, but Fridays for me are no commitments.<\/p>\r\n<p>If you keep working like a dog day in and day out, with no regard for personal time and weekends with your loved ones, you might just wake up one day and realize you\u2019ve overworked yourself, taken the fun out of freelancing, and forgotten why you\u2019re even doing what you\u2019re doing in the first place.<\/p>\r\n<p>A good client will know how to respect your boundaries and requirements just as they expect you to respect theirs. Again, this is one of the important things you ought to look for when you\u2019re building that coveted circle of trusted clients\u2014pick the ones you really want to work with, and those who really want to work with you. Then, once you\u2019ve got that relationship built, maintain it and give it the TLC it deserves.<\/p>\r\n&nbsp;\r\n<h4><strong>Don\u2019t Screw Up Relationships<\/strong><\/h4>\r\n<p>I had a great client, and he gave me a ton of work. So much, that I had to hire not one, but two retouching assistants. At some point, he started complaining about the color. I kept saying it was fine, and he kept saying everything is orange. After a ton of back and forth for 2 months, I ended up losing 100% of that work.<\/p>\r\n<p>It wasn\u2019t until the very end that I finally drove for hours to his location to see what he was complaining about. Sure enough, everyone looked bright yellow and nuclear orange. It made no sense.<\/p>\r\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-10136 alignright\" src=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/entrepreneur-593362_1920-870x576.jpg\" alt=\"Don\u2019t Screw Up Relationships\" width=\"252\" height=\"167\" srcset=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/entrepreneur-593362_1920-870x576.jpg 870w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/entrepreneur-593362_1920-254x168.jpg 254w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/entrepreneur-593362_1920-127x84.jpg 127w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/entrepreneur-593362_1920-768x508.jpg 768w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/entrepreneur-593362_1920-1536x1017.jpg 1536w, https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/10\/entrepreneur-593362_1920.jpg 1920w\" sizes=\"auto, (max-width: 252px) 100vw, 252px\" \/><\/p>\r\n<p>Eventually, I figured out that my high-end monitor was failing, and no longer showing me anything even close to true color. I bought a new monitor, and was back in business.<br \/>Unfortunately, his partners said I couldn\u2019t do any more retouching work for them.<\/p>\r\n<p>This is when I lost A LOT in my personal life. You can go to my other YouTube Channel Finance on a Budget to learn more about what happened in my life at this point.<br \/>I had to wait a year, doing smaller projects, but eventually I gained that trust back. But if I was diligent, I should have stopped, and addressed the issue LONG before I actually did. I really could have lost my biggest client. Dont let that happen to you.<\/p>\r\n<p>&#8230;<\/p>\r\n<p>Mastering the art of freelancing requires a holistic approach, and John Ross, through his insightful video at The Art of Retouching Studio, guides you on the path to <strong>freelancer success<\/strong>. Beyond the technicalities of Photoshop, Ross emphasizes the critical business strategies that set successful freelancers apart. From adeptly handling   client demands to navigating through conflicting retouching styles, this video equips you with real-world skills. Remember, achieving <strong>freelancer success<\/strong> is not just about delivering impeccable work but also about smart time management, effective communication, and setting boundaries.<\/p>\r\n<\/div>\r\n&nbsp;\r\n<p><strong>Other Suggested Videos:<\/strong><\/p>\r\n<P><a href=\"https:\/\/www.theartofretouching.com\/blog\/freelancer-success-pt2\/\" title=\"How to Succeed as a Freelancer | Self-Employment Strategies\" target=\"_self\" rel=\"noopener\">How to Succeed as a Freelancer | Self-Employment Strategies<\/a><\/P>\r\n<p><a href=\"https:\/\/www.theartofretouching.com\/blog\/freelancer-success-1\/\" title=\"How to Succeed as a Freelancer | Freelancing Strategies\" target=\"_self\" rel=\"noopener\">How to Succeed as a Freelancer | Freelancing Strategies<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Unlock the keys to Self Employment for Beginners! Your Freelancer Success is finally here. This video is part 3 in the series of How To Succeed as a Freelancer. If you take the time to watch them all, I will have given you every freelancer trick that I can think of to help you thrive. From finding Clients, to keeping them coming back. Success truly is within your reach.<\/p>\n<p>Beyond the basics of Photoshop, I&#8217;ll delve into the business aspects of freelancing, offering real-world skills for managing clients, navigating stylistic challenges, and maintaining sanity. From effective time management to setting boundaries, discover the essential elements that contribute to a thriving freelance career. Whether you&#8217;re a seasoned freelancer or just starting, this video provides practical advice to help you on your journey to <strong>freelancer success<\/strong>. Subscribe now for actionable tips and stay ahead in the competitive freelancing landscape.<\/p>\n","protected":false},"author":1,"featured_media":10091,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_sitemap_exclude":false,"_sitemap_priority":"","_sitemap_frequency":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[29],"tags":[1065,1067,1066,1023,648,1064,1063],"class_list":["post-10089","post","type-post","status-publish","format-standard","has-post-thumbnail","category-articles","tag-clients","tag-find-clients","tag-find-work","tag-freelance","tag-freelancer","tag-self-employed","tag-self-employment","entry","override"],"_links":{"self":[{"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/posts\/10089","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/comments?post=10089"}],"version-history":[{"count":33,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/posts\/10089\/revisions"}],"predecessor-version":[{"id":11590,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/posts\/10089\/revisions\/11590"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/media\/10091"}],"wp:attachment":[{"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/media?parent=10089"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/categories?post=10089"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/tags?post=10089"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}