WELCOME
freelance design
consulting & development
portfolio
edition © 2023

turning

potential

into

potency

let's scroll
lukascroll

I create tailor-made digital assets to help

ambitious businesses leverage the power

of strategic design, delight customers

and build lasting value.

I create tailor-made digital assets to help ambitious businesses leverage the power of strategic design, delight customers and build lasting value.

let's meet - let's meet - let's meet -
core services
Branding & Strategy

I help organisations identify key challenges and extract solutions that drive performance & growth through smart design choices. As a multidisciplinary designer, I adapt to the unique goals of your project, while bringing in fresh & impactful creative power.

Bespoke design

Giving an appropriate shape, style and feeling to a brand is the cornerstone of any successful website and a foundation of all digital marketing activities. From pixel-perfect logos, to immersive user experience design, I create a unique & powerful visual language that enhances your brand’s story and gets your voice heard.

development

Tailor-made websites that fully align with strategic goals and core business needs. I build in Webflow to deliver dynamic, responsive & exceptional sites as a standard.

100% unique blend of
strategy & creativity
fine digital assets
vol. 12.1 - edition 22

Identity

Spirit

Branding

Webflow

Strategy

Animation

Identity

Spirit

Branding

Webflow

Strategy

Animation

Identity

Spirit

Branding

Webflow

Strategy

Animation

SEO

Content

Character

UX/UI

Drink

Development

SEO

Content

Character

UX/UI

Drink

Development

SEO

Content

Character

UX/UI

Drink

Development

strategy

Carefully blended to achieve a perfect balance between functionality and aesthetics

+

creativity

Forgettable brands dominate today's digital landscape. Lost in the noise, dull and diluted, they become the great average. Excellence is hard and like with all good things in life, great brands require a lot of time, love and utmost care in every detail that only few dare to pursue.

I believe in the power of ideas and never settle for the ordinary. I team up with forward-thinking businesses to help express their unique story by crafting superior digital experiences — beautiful as well as functional. Strong but smooth. Delightful and unexpected. Premium, without pretentious.

Simply too good to ignore.

Always Open-minded · Usually Sober ·
scroll · scroll · scroll · scroll · scroll · scroll · scroll · scroll · scroll · scroll · scroll · scroll ·
Bacchus — Jan van Dalen 1648 — Unfortunately, this is not me — Unfortunately, this is not me —
scroll more — scroll more —
scroll more — scroll more —
about me - about me
about me
Still scrolling? We should have a chat.
Still scrolling? We should have a chat.
Still scrolling? We should have a chat.
Still scrolling? We should have a chat.
Still scrolling? We should have a chat.
Still scrolling? We should have a chat.
Still scrolling? We should have a chat.
Still scrolling? We should have a chat.
Still scrolling? We should have a chat.
Still scrolling? We should have a chat.
Still scrolling? We should have a chat.
Still scrolling? We should have a chat.
Still scrolling? We should have a chat.
Still scrolling? We should have a chat.
Still scrolling? We should have a chat.
Still scrolling? We should have a chat.
Still scrolling? We should have a chat.
Still scrolling? We should have a chat.
Still scrolling? We should have a chat.
Still scrolling? We should have a chat.
Still scrolling? We should have a chat.
let direction = 1; // 1 = forward, -1 = backward scroll const roll1 = roll(".marquee-track", {duration: 30}), roll2 = roll(".marquee-track-2", {duration: 40}, true), scroll = ScrollTrigger.create({ onUpdate(self) { if (self.direction !== direction) { direction *= -1; gsap.to([roll1, roll2], {timeScale: direction, overwrite: true}); } } }); // helper function that clones the targets, places them next to the original, then animates the xPercent in a loop to make it appear to roll across the screen in a seamless loop. function roll(targets, vars, reverse) { vars = vars || {}; vars.ease || (vars.ease = "none"); const tl = gsap.timeline({ repeat: -1, onReverseComplete() { this.totalTime(this.rawTime() + this.duration() * 10); // otherwise when the playhead gets back to the beginning, it'd stop. So push the playhead forward 10 iterations (it could be any number) } }), elements = gsap.utils.toArray(targets), clones = elements.map(el => { let clone = el.cloneNode(true); el.parentNode.appendChild(clone); return clone; }), positionClones = () => elements.forEach((el, i) => gsap.set(clones[i], {position: "absolute", overwrite: false, top: el.offsetTop, left: el.offsetLeft + (reverse ? -el.offsetWidth : el.offsetWidth)})); positionClones(); elements.forEach((el, i) => tl.to([el, clones[i]], {xPercent: reverse ? 100 : -100, ...vars}, 0)); window.addEventListener("resize", () => { let time = tl.totalTime(); // record the current time tl.totalTime(0); // rewind and clear out the timeline positionClones(); // reposition tl.totalTime(time); // jump back to the proper time }); return tl; }