Skip to content

Commit

Permalink
add hero section
Browse files Browse the repository at this point in the history
  • Loading branch information
thejackshelton committed Jan 15, 2025
1 parent 1204837 commit 5398b39
Show file tree
Hide file tree
Showing 3 changed files with 173 additions and 165 deletions.
168 changes: 168 additions & 0 deletions apps/website/src/layouts/home/Hero.astro
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
---
import heroImage from "@assets/q-astro-hero.png";
import { Image } from "astro:assets";
import { Icon } from "astro-icon/components";
import { LucidePlanet } from "@icons/lucide-planet";
import { Background } from "@components/home/background/background";
import { CLICopy } from "@components/home/cli-copy/cli-copy";
import { Spotlight } from "@components/home/spotlight/spotlight";
import { Squiggle } from "@components/home/squiggle/squiggle";
---

<Background />
<div class="grid-line" aria-hidden="true"></div>
<div class="intro">

<Spotlight>
<Image loading="eager" class="hero-image" src={heroImage} alt="Qwik + Astro" />
</Spotlight>

<h1>
<span>
{"QWIK".split("").map((letter, i) => (
<span
class="letter"
style={`animation-delay: ${i * 0.15}s;`}
>
{letter}
</span>
))}
</span>
<span>
{"ASTRO".split("").map((letter, i) => (
<span
class="letter"
style={`animation-delay: ${(i + 5) * 0.15}s;`}
>
{letter}
</span>
))}
</span>
</h1>

<span
class="subtitle"
>Zero hydration. Zero compromise. The only
<span class="squiggle-container">
<span>instantly interactive</span>
<Squiggle />
</span> UI
framework that's HTML and server-first, just like
<span class="squiggle-container">
<span>Astro</span>
<Squiggle stroke="var(--rose-500)" stroke-width="12" style={{ transform: 'translateY(-2px)' }} />
</span>.
</span>

<div class="navigation">
<CLICopy>
<span data-copy-icon><Icon name="lucide:clipboard" /></span>
<span data-copy-success><Icon name="lucide:check" /></span>
</CLICopy>
<a href="/docs">
<LucidePlanet />
<span>Explore the docs</span>
</a>
</div>
</div>
</main>

<div class="grid-line" aria-hidden="true"></div>

<style>
.hero-image {
object-fit: cover;
height: 250px;
border-radius: 8px;
}

h1 {
margin-block: var(--space-m);
display: flex;
flex-wrap: wrap;
gap: var(--space-xs);
line-height: 1;
}

a {
text-decoration: none;
border: var(--space-4xs) solid var(--neutral-800);
padding: var(--space-3xs);
transition: background-color 0.35s;
transition-timing-function: var(--qa-hover);
display: flex;
align-items: center;
gap: var(--space-3xs);
}

a:hover {
background-color: var(--neutral-950);
}

.grid-line {
width: 100%;
height: 1px;
background-color: var(--neutral-950);
}

.intro {
margin: 0 auto;
max-width: 1240px;
border-inline: 1px solid var(--neutral-950);
padding: var(--space-m);
}

.intro h1 span {
font-size: var(--step-5);
display: flex;
}

.intro h1 {
display: flex;
flex-wrap: wrap;
}

.intro > span {
font-size: var(--step-1);
margin-block: var(--space-m);
display: block;
animation: fade-in 0.5s forwards;
animation-delay: 2s;
opacity: 0;
}

.navigation {
display: flex;
flex-wrap: wrap;
gap: var(--space-xs);
}

.letter {
display: inline-block;
opacity: 0;
animation: fade-in 0.5s forwards;
animation-timing-function: var(--qa-fade);
}

.squiggle-container {
display: inline-block;
position: relative;
}

.subtitle {
line-height: 1.7;
}

@keyframes fade-in {
from {
opacity: 0;
transform: translateY(var(--space-xs));
filter: blur(8px);
}
to {
opacity: 1;
transform: translateY(0);
filter: blur(0);
}
}
</style>
167 changes: 3 additions & 164 deletions apps/website/src/pages/index.astro
Original file line number Diff line number Diff line change
@@ -1,171 +1,10 @@
---
import { Image } from "astro:assets";
import { Background } from "@components/home/background/background";
import { CLICopy } from "@components/home/cli-copy/cli-copy";
import { Spotlight } from "@components/home/spotlight/spotlight";
import { Icon } from "astro-icon/components";
import Layout from "src/layouts/Layout.astro";
import heroImage from "../assets/q-astro-hero.png";
import { Squiggle } from "@components/home/squiggle/squiggle";
import { LucidePlanet } from "@icons/lucide-planet";
import Hero from "src/layouts/home/Hero.astro";
---

<Layout title="Qwik + Astro">
<main>
<Background />
<div class="grid-line" aria-hidden="true"></div>
<div class="intro">

<Spotlight>
<Image class="hero-image" src={heroImage} alt="Qwik + Astro" />
</Spotlight>

<h1>
<span>
{"QWIK".split("").map((letter, i) => (
<span
class="letter"
style={`animation-delay: ${i * 0.15}s;`}
>
{letter}
</span>
))}
</span>
<span>
{"ASTRO".split("").map((letter, i) => (
<span
class="letter"
style={`animation-delay: ${(i + 5) * 0.15}s;`}
>
{letter}
</span>
))}
</span>
</h1>

<span
class="subtitle"
>Zero hydration. Zero compromise. The only
<span class="squiggle-container">
<span>instantly interactive</span>
<Squiggle />
</span> UI
framework that's HTML and server-first, just like
<span class="squiggle-container">
<span>Astro</span>
<Squiggle stroke="var(--rose-500)" stroke-width="12" style={{ transform: 'translateY(-2px)' }} />
</span>.
</span>

<div class="navigation">
<CLICopy>
<span data-copy-icon><Icon name="lucide:clipboard" /></span>
<span data-copy-success><Icon name="lucide:check" /></span>
</CLICopy>
<a href="/docs">
<LucidePlanet />
<span>Explore the docs</span>
</a>
</div>
</div>
<Hero />
</main>
<div class="grid-line" aria-hidden="true"></div>
</Layout>

<style>
.hero-image {
object-fit: cover;
height: 250px;
border-radius: 8px;
}

h1 {
margin-block: var(--space-m);
display: flex;
flex-wrap: wrap;
gap: var(--space-xs);
line-height: 1;
}

a {
text-decoration: none;
border: var(--space-4xs) solid var(--neutral-800);
padding: var(--space-3xs);
transition: background-color 0.35s;
transition-timing-function: var(--qa-hover);
display: flex;
align-items: center;
gap: var(--space-3xs);
}

a:hover {
background-color: var(--neutral-950);
}

.grid-line {
width: 100%;
height: 1px;
background-color: var(--neutral-950);
}

.intro {
margin: 0 auto;
max-width: 1240px;
border-inline: 1px solid var(--neutral-950);
padding: var(--space-m);
}

.intro h1 span {
font-size: var(--step-5);
display: flex;
}

.intro h1 {
display: flex;
flex-wrap: wrap;
}

.intro > span {
font-size: var(--step-1);
margin-block: var(--space-m);
display: block;
animation: fade-in 0.5s forwards;
animation-delay: 2s;
opacity: 0;
}

.navigation {
display: flex;
flex-wrap: wrap;
gap: var(--space-xs);
}

.letter {
display: inline-block;
opacity: 0;
animation: fade-in 0.5s forwards;
animation-timing-function: var(--qa-fade);
}

.squiggle-container {
display: inline-block;
position: relative;
}

.subtitle {
line-height: 1.7;
}

@keyframes fade-in {
from {
opacity: 0;
transform: translateY(var(--space-xs));
filter: blur(8px);
}
to {
opacity: 1;
transform: translateY(0);
filter: blur(0);
}
}
</style>
</Layout>
3 changes: 2 additions & 1 deletion apps/website/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
"baseUrl": ".",
"paths": {
"@components/*": ["./src/components/*"],
"@icons/*": ["./src/icons/*"]
"@icons/*": ["./src/icons/*"],
"@assets/*": ["./src/assets/*"]
},

"jsx": "react-jsx",
Expand Down

0 comments on commit 5398b39

Please sign in to comment.