I specialise in fashioning exquisitly tailored websites and webapps for the discerning enterprise executive.
+ I fashion exquisitly tailored web experiences for discerning enterprises and their audiences.
My Services
Hire Simon
@@ -93,15 +94,15 @@
Visual Design
-
With years in the craft, I've mastered the art of designing websites, user interfaces, illustrations, house styles, and everything betwixt.
+
I'm also a seasoned designer, sculpting communication that's wickedly nice, full of jaw-dropping surprises, and utterly delightful.
- I create products that help great companies reach their audiences.
+ I work as a free agent. Both companies and noble causes can enlist my services for a reasonable wage.
@@ -165,12 +166,29 @@
.design-illu {
position:relative;
left: 0;
- width: 40%;
+ width: 60%;
margin: 0 auto;
text-align: center;
display: block;
margin-bottom: -1em;
z-index: -2;
+
+ @media screen and (min-width: 768px) {
+ width: 40%;
+ }
+ }
+ .more {
+ @media screen and (min-width: 768px) {
+ max-width: 95vw;
+ }
+ }
+ .more h2 {
+ margin-top: -2em;
+ margin-bottom: 1em;
+ @media screen and (min-width: 768px) {
+ margin-bottom: 0.5em;
+ margin-top: 0;
+ }
}
h1, h2 {
line-height: 1.1;
@@ -183,19 +201,14 @@
user-select: none;
}
h1 {
- line-height: 1;
- font-size: 11vw;
+ line-height: .9;
+ font-size: 13.25vw;
margin-top: -.5em;
- letter-spacing: -0.05em;
+ letter-spacing: -0.02em;
opacity: 0;
@media screen and (min-width: 768px) {
font-size: 9vw;
- line-height: .9;
- }
- & em {
- color: var(--color-highlight);
- font-style: normal;
}
}
h2 {
@@ -203,11 +216,6 @@
letter-spacing: -0.033em;
margin-bottom: 0;
line-height: .9;
-
- & em {
- color: var(--color-highlight);
- font-style: normal;
- }
}
.toCanvas {
visibility: hidden;
diff --git a/src/routes/contact/+page.svelte b/src/routes/contact/+page.svelte
new file mode 100644
index 0000000..2a381a6
--- /dev/null
+++ b/src/routes/contact/+page.svelte
@@ -0,0 +1,214 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/routes/service/+page.svelte b/src/routes/service/+page.svelte
index 6215c42..4199acd 100644
--- a/src/routes/service/+page.svelte
+++ b/src/routes/service/+page.svelte
@@ -2,24 +2,37 @@
import { onMount } from 'svelte';
import gsap from 'gsap';
import ScrollTrigger from 'gsap/dist/ScrollTrigger';
+ import SplitText from 'gsap/dist/SplitText';
import Faq from '$lib/components/Faq.svelte';
import ServiceCanvas from './ServiceCanvas.svelte';
onMount( () => {
- gsap.registerPlugin( ScrollTrigger );
+ gsap.registerPlugin( ScrollTrigger, SplitText );
+
+ let split = new SplitText('h1', { type: 'words', wordsClass: 'wordChildren' });
let introTl = gsap.timeline({
paused: true,
});
- introTl.fromTo('h1', {
- opacity: 0, yPercent: 200
+ introTl.fromTo(split.words, {
+ opacity: 0, scaleY: 0, yPercent: 100
},{
- opacity: 1, yPercent: 0,
- duration: .75, ease: 'back.out(.75)'
- }, 0.1)
+ opacity: 1, scaleY: 1, yPercent: 0,
+ transformOrigin: '50% 100%',
+ duration: 1, ease: 'elastic.out(.75, .33)',
+ stagger: 0.01,
+ }, 1)
introTl.play();
+ // let trigger = ScrollTrigger.create({
+ // trigger: 'article',
+ // start: 'top top',
+ // end: '200px top',
+ // scrub: true,
+ // // markers: true,
+ // })
+
gsap.to('.services', {
autoAlpha: 1,
scrollTrigger: {
@@ -27,7 +40,16 @@
start: 'top top',
end: '200px top',
scrub: true,
- // markers: true,
+ }
+ })
+ gsap.to('h1 em', {
+ autoAlpha: 0,
+ yPercent: -100,
+ scrollTrigger: {
+ trigger: 'article',
+ start: 'top top',
+ end: '200px top',
+ scrub: true,
}
})
@@ -45,7 +67,7 @@
- What I will (and won't) do to earn a living
+ What I will do to earn a living
↓ Scroll down
Web Development
@@ -54,11 +76,13 @@
Consultation on the best technology solutions for your situation (eg CMS, frontend frameworks, etc)
Advice on how to enhance the user experience through savvy use of technology
Development in HTML/JS/CSS and/or whichever framework is best suited to your project
+ Get a quote
-
+
FAQs
- In frontend work, I blend professionalism and creativity. My aim is simple: bring your ideas to life. Projects include:
+ I blend professionalism and creativity. My aim is simple: bring your ideas to life. My websites are often fun and bold and full of interesting interaction.
+ Projects include:
- Marketing websites
- E-commerce websites
@@ -70,13 +94,13 @@
I center on crafting interfaces that dazzle visually and deliver an instinctive user journey. The essence is to make your users feel at home in the interaction with your content.
Should your venture demand a backend touch, like managing databases or Content Management, I'm well-versed in leveraging existing open source solutions. I advocate for savvy fixes, seamlessly tailored to harmonize with your project.
-
+
As a frontend developer, I'm not your guy for the intricate machinery that powers colossal enterprise web applications. Put simply, I can't whip up an Amazon or a TikTok from the ground up.
Moreover, my moral code is steadfast. Requests involving, but not confined to, promoting weapons manufacturers or propagating conspiracy theories won't find a home with me. I must politely decline such propositions.
- A web browser grasps just HTML, CSS, and Javascript. Mastery of these is the bedrock for crafting top-notch web applications.
- Yet, I've treaded diverse coding landscapes, navigating the realms of PHP, Perl, and Python. Among the myriad frameworks danced with, names like React, Svelte, Eleventy, Astro, and the esteemed Ruby on Rails echo.
+ A web browser understands only HTML, CSS, and Javascript. Mastery of these is the bedrock for crafting top-notch web applications.
+ Further, I've treaded diverse coding landscapes, navigating the realms of PHP, Perl, and Python. Among the myriad frameworks danced with, names like React, Svelte, Eleventy, Astro, and the esteemed Ruby on Rails echo.
I serve as your counsel, steering you toward the optimal solution tailored to your project's idiosyncrasies.
Should you possess a standing website, yearning for expansion, toss me the code, and we'll unravel the possibilities together. Not encountered a site I couldn't tame, so far.
And, sometimes, the most fitting scaffold is none at all. I crafted some elegant, straightforward websites in the raw embrace of HTML, CSS, and JS.
@@ -86,9 +110,9 @@
I've tinkered with various Content Management Systems — the likes of WordPress, Strapi, Builder, Magento, and Shopify. Each carries its own set of virtues and vices.
Let's talk about the folks responsible for constructing and upkeeping your content. Only then can we jointly discern the optimal solution.
-
+
UX/Visual Design
@@ -99,7 +123,7 @@
Illustration & animation to bring your ideas to life
Data visualisation to aid crucial information cross the seas of abstraction
-
+
FAQs
Primarily, I craft beautiful web experiences for my clients, aiming to seize their audience's imagination.
@@ -118,6 +142,14 @@
+
@@ -125,22 +157,36 @@
article {
margin: auto;
max-width: 1200px;
- padding: calc(50vh - var(--spacing-outer) - 35vw) var(--spacing-outer) var(--spacing-outer) var(--spacing-outer);
+ padding: calc(50vh - var(--spacing-outer) - 10vw) var(--spacing-outer) var(--spacing-outer) var(--spacing-outer);
@media screen and (min-width: 768px) {
- padding: calc(50vh - var(--spacing-outer) - 12vw) var(--spacing-outer) var(--spacing-outer) var(--spacing-outer);
+ padding: calc(50vh - var(--spacing-outer) - 6vw) var(--spacing-outer) var(--spacing-outer) var(--spacing-outer);
}
}
h1 {
+ position: relative;
+ z-index: 3;
+ font-size: 10vw;
+ line-height: 1;
- font-size: 14vw;
+ & em {
+ position: absolute;
+ top: 120%;
+ font-size: .4em;
+ letter-spacing: -0.02em;
+ font-style: normal;
+ font-weight: 400;
+ color: var(--color-text);
+ }
+
@media screen and (min-width: 768px) {
- font-size: 8vw;
+ font-size: 6vw;
letter-spacing: -0.045em;
}
}
.services {
opacity: 0; //changed in ServiceCanvas
+ padding-bottom: calc( 2 * var(--spacing-outer));
}
.service-content {
@@ -153,13 +199,35 @@
flex: 0 0 40%;
}
.service-content > *,
- .service-content > * > :first-child{
- margin-top: 0;
- padding-top: 0;
+ .service-content > * > :first-child {
+ @media screen and (min-width: 768px) {
+ margin-top: 0;
+ padding-top: 0;
+
+ }
+ }
+ .faqs {
+ margin-top: 2em;
+
+ @media screen and (min-width: 768px) {
+ margin-top: 0;
+ }
}
h2 {
border-bottom: 1px solid;
padding-bottom: .5em;
+ font-size: 1.5em;
+
+ @media screen and (min-width: 768px) {
+ font-size: 1.5em;
+ }
+ }
+ h3 {
+ font-size: 1.25em;
+
+ @media screen and (min-width: 768px) {
+ font-size: 1.5em;
+ }
}
em {
font-weight: 800;
@@ -170,7 +238,7 @@
line-height: 1.25;
}
li, p {
- font-size: 1.15em;
+ font-size: 1em;
}
diff --git a/src/routes/service/ServiceCanvas.svelte b/src/routes/service/ServiceCanvas.svelte
index e9fe5fd..0a8ac10 100644
--- a/src/routes/service/ServiceCanvas.svelte
+++ b/src/routes/service/ServiceCanvas.svelte
@@ -110,8 +110,8 @@
let textgroupIn = gsap.to(textgroup, {
y: is_landscape ? textRows[0][0].height * 0.4 : textRows[0][0].height * 0.15,
alpha: 1,
- duration: 1.5,
- ease: 'power4.out',
+ duration: 1,
+ ease: 'power2.inOut',
overwrite: true,
onComplete: () => {
introDone = true;
@@ -157,7 +157,7 @@
scrollTrigger: {
trigger: 'article',
start: 'top top',
- end: '200px top',
+ end: 'top -50%',
scrub: true,
// markers: true,
}
@@ -183,7 +183,7 @@
left: 0;
width: 100vw;
height: 100vh;
- /* z-index: 2; */
+ z-index: 2;
pointer-events: none;
}
\ No newline at end of file
diff --git a/src/routes/success/+page.svelte b/src/routes/success/+page.svelte
new file mode 100644
index 0000000..d437498
--- /dev/null
+++ b/src/routes/success/+page.svelte
@@ -0,0 +1,3 @@
+
+ Yee-ha!
+
\ No newline at end of file