Merge pull request #95 from prototypa/astro2
Create landing pages and minimal design details
This commit is contained in:
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"css.customData": ["./vscode/css-custom-data.json"],
|
"css.customData": ["./vscode.tailwind.json"],
|
||||||
"eslint.validate": [
|
"eslint.validate": [
|
||||||
"javascript",
|
"javascript",
|
||||||
"javascriptreact",
|
"javascriptreact",
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
@apply bg-slate-900;
|
@apply bg-slate-900;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.btn {
|
.btn {
|
||||||
@apply inline-flex items-center justify-center rounded-full shadow-md border-gray-400 border bg-transparent font-medium text-center text-base text-page leading-snug transition py-3.5 px-6 md:px-8 ease-in duration-200 focus:ring-blue-500 focus:ring-offset-blue-200 focus:ring-2 focus:ring-offset-2 hover:bg-gray-100 hover:border-gray-600 dark:text-slate-300 dark:border-slate-500 dark:hover:bg-slate-800 dark:hover:border-slate-800;
|
@apply inline-flex items-center justify-center rounded-full shadow-md border-gray-400 border bg-transparent font-medium text-center text-base text-page leading-snug transition py-3.5 px-6 md:px-8 ease-in duration-200 focus:ring-blue-500 focus:ring-offset-blue-200 focus:ring-2 focus:ring-offset-2 hover:bg-gray-100 hover:border-gray-600 dark:text-slate-300 dark:border-slate-500 dark:hover:bg-slate-800 dark:hover:border-slate-800;
|
||||||
}
|
}
|
||||||
|
@ -5,13 +5,11 @@ import '@fontsource/inter/variable.css';
|
|||||||
// Dosis
|
// Dosis
|
||||||
---
|
---
|
||||||
|
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;500;700&display=swap" rel="stylesheet" />
|
|
||||||
|
|
||||||
<style is:inline is:global>
|
<style is:inline is:global>
|
||||||
:root {
|
:root {
|
||||||
--aw-font-sans: 'InterVariable';
|
--aw-font-sans: 'InterVariable';
|
||||||
--aw-font-serif: var(--aw-font-sans);
|
--aw-font-serif: var(--aw-font-sans);
|
||||||
--aw-font-heading: 'Nunito'; /* var(--aw-font-sans); */
|
--aw-font-heading: var(--aw-font-sans);
|
||||||
|
|
||||||
--aw-color-primary: rgb(30 64 175);
|
--aw-color-primary: rgb(30 64 175);
|
||||||
--aw-color-secondary: rgb(30 58 138);
|
--aw-color-secondary: rgb(30 58 138);
|
@ -8,7 +8,7 @@ import { MetaSEO } from '~/types';
|
|||||||
import { getCanonical, getAsset } from '~/utils/permalinks';
|
import { getCanonical, getAsset } from '~/utils/permalinks';
|
||||||
import { getRelativeUrlByFilePath } from '~/utils/directories';
|
import { getRelativeUrlByFilePath } from '~/utils/directories';
|
||||||
|
|
||||||
import CustomStyles from '~/components/common/CustomStyles.astro';
|
import CustomStyles from '~/components/CustomStyles.astro';
|
||||||
import SplitbeeAnalytics from './SplitbeeAnalytics.astro';
|
import SplitbeeAnalytics from './SplitbeeAnalytics.astro';
|
||||||
|
|
||||||
export interface Props extends MetaSEO {
|
export interface Props extends MetaSEO {
|
||||||
|
@ -31,7 +31,7 @@ const {
|
|||||||
} = Astro.props;
|
} = Astro.props;
|
||||||
---
|
---
|
||||||
|
|
||||||
<section class={`bg-blue-50 dark:bg-slate-800 py-16 md:py-20 ${isAfterContent ? 'pt-0 md:pt-0' : ''}`}>
|
<section class:list={[{ 'pt-0 md:pt-0': isAfterContent }, 'bg-blue-50 dark:bg-slate-800 py-16 md:py-20']}>
|
||||||
<div class="max-w-xl sm:mx-auto lg:max-w-2xl">
|
<div class="max-w-xl sm:mx-auto lg:max-w-2xl">
|
||||||
{
|
{
|
||||||
(title || subtitle || highlight) && (
|
(title || subtitle || highlight) && (
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
import { Icon } from 'astro-icon';
|
import { Icon } from 'astro-icon';
|
||||||
import Logo from '~/components/common/Logo.astro';
|
import Logo from '~/components/Logo.astro';
|
||||||
import ToggleTheme from '~/components/common/ToggleTheme.astro';
|
import ToggleTheme from '~/components/common/ToggleTheme.astro';
|
||||||
import ToggleMenu from '~/components/common/ToggleMenu.astro';
|
import ToggleMenu from '~/components/common/ToggleMenu.astro';
|
||||||
|
|
||||||
@ -24,14 +24,19 @@ interface MenuLink extends Link {
|
|||||||
export interface Props {
|
export interface Props {
|
||||||
links?: Array<MenuLink>;
|
links?: Array<MenuLink>;
|
||||||
actions?: Array<ActionLink>;
|
actions?: Array<ActionLink>;
|
||||||
isFixed?: boolean;
|
isSticky?: boolean;
|
||||||
|
showToggleTheme?: boolean;
|
||||||
|
showRssFeed?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const { links = [], actions = [], isFixed = false } = Astro.props;
|
const { links = [], actions = [], isSticky = false, showToggleTheme = false, showRssFeed = false } = Astro.props;
|
||||||
---
|
---
|
||||||
|
|
||||||
<header
|
<header
|
||||||
class:list={[{ sticky: isFixed }, 'top-0 z-40 flex-none mx-auto w-full transition-all ease-in duration-100']}
|
class:list={[
|
||||||
|
{ sticky: isSticky, relative: !isSticky },
|
||||||
|
'top-0 z-40 flex-none mx-auto w-full transition-all ease-in duration-100',
|
||||||
|
]}
|
||||||
id="header"
|
id="header"
|
||||||
>
|
>
|
||||||
<div class="py-3 px-3 md:py-3.5 md:px-4 mx-auto w-full md:flex md:justify-between max-w-screen-xl">
|
<div class="py-3 px-3 md:py-3.5 md:px-4 mx-auto w-full md:flex md:justify-between max-w-screen-xl">
|
||||||
@ -85,8 +90,10 @@ const { links = [], actions = [], isFixed = false } = Astro.props;
|
|||||||
</nav>
|
</nav>
|
||||||
<div class="md:self-center flex items-center md:mb-0">
|
<div class="md:self-center flex items-center md:mb-0">
|
||||||
<div class="hidden items-center md:flex">
|
<div class="hidden items-center md:flex">
|
||||||
<ToggleTheme iconClass="w-5 h-5" />
|
{showToggleTheme && <ToggleTheme iconClass="w-5 h-5" />}
|
||||||
|
|
||||||
|
{
|
||||||
|
showRssFeed && (
|
||||||
<a
|
<a
|
||||||
class="text-muted dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 focus:outline-none focus:ring-4 focus:ring-gray-200 dark:focus:ring-gray-700 rounded-lg text-sm p-2.5 inline-flex items-center"
|
class="text-muted dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 focus:outline-none focus:ring-4 focus:ring-gray-200 dark:focus:ring-gray-700 rounded-lg text-sm p-2.5 inline-flex items-center"
|
||||||
aria-label="RSS Feed"
|
aria-label="RSS Feed"
|
||||||
@ -94,6 +101,8 @@ const { links = [], actions = [], isFixed = false } = Astro.props;
|
|||||||
>
|
>
|
||||||
<Icon name="tabler:rss" class="w-5 h-5" />
|
<Icon name="tabler:rss" class="w-5 h-5" />
|
||||||
</a>
|
</a>
|
||||||
|
)
|
||||||
|
}
|
||||||
{
|
{
|
||||||
actions?.length ? (
|
actions?.length ? (
|
||||||
<span class="ml-4">
|
<span class="ml-4">
|
||||||
|
@ -29,7 +29,7 @@ const {
|
|||||||
<section class="relative md:-mt-[76px]">
|
<section class="relative md:-mt-[76px]">
|
||||||
<div class="absolute inset-0 pointer-events-none" aria-hidden="true"></div>
|
<div class="absolute inset-0 pointer-events-none" aria-hidden="true"></div>
|
||||||
<div class="relative max-w-screen-xl mx-auto px-4 sm:px-6">
|
<div class="relative max-w-screen-xl mx-auto px-4 sm:px-6">
|
||||||
<div class="pt-0 md:pt-[76px]"></div>
|
<div class="pt-0 md:pt-[76px] pointer-events-none"></div>
|
||||||
<div class="py-12 md:py-20">
|
<div class="py-12 md:py-20">
|
||||||
<div class="text-center pb-10 md:pb-16 max-w-screen-lg mx-auto">
|
<div class="text-center pb-10 md:pb-16 max-w-screen-lg mx-auto">
|
||||||
{
|
{
|
||||||
|
110
src/components/widgets/Hero2.astro
Normal file
110
src/components/widgets/Hero2.astro
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
---
|
||||||
|
import { Icon } from 'astro-icon';
|
||||||
|
import { Picture } from '@astrojs/image/components';
|
||||||
|
|
||||||
|
interface CallToAction {
|
||||||
|
text: string;
|
||||||
|
href: string;
|
||||||
|
icon?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Props {
|
||||||
|
title?: string;
|
||||||
|
subtitle?: string;
|
||||||
|
callToAction?: string | CallToAction;
|
||||||
|
callToAction2?: string | CallToAction;
|
||||||
|
image?: string | any; // TODO: find HTMLElementProps
|
||||||
|
}
|
||||||
|
|
||||||
|
const {
|
||||||
|
title = await Astro.slots.render('title'),
|
||||||
|
subtitle = await Astro.slots.render('subtitle'),
|
||||||
|
content = await Astro.slots.render('content'),
|
||||||
|
callToAction = await Astro.slots.render('callToAction'),
|
||||||
|
callToAction2 = await Astro.slots.render('callToAction2'),
|
||||||
|
image = await Astro.slots.render('image'),
|
||||||
|
} = Astro.props;
|
||||||
|
---
|
||||||
|
|
||||||
|
<section class="relative md:-mt-[76px]">
|
||||||
|
<div class="absolute inset-0 pointer-events-none" aria-hidden="true"></div>
|
||||||
|
<div class="relative max-w-screen-xl mx-auto px-4 sm:px-6">
|
||||||
|
<div class="pt-0 md:pt-[76px] pointer-events-none"></div>
|
||||||
|
<div class="py-12 md:py-20 lg:py-0 lg:flex lg:items-center lg:h-screen lg:gap-8">
|
||||||
|
<div class="basis-1/2 text-center lg:text-left pb-10 md:pb-16 mx-auto">
|
||||||
|
{
|
||||||
|
title && (
|
||||||
|
<h1
|
||||||
|
class="text-5xl md:text-6xl font-bold leading-tighter tracking-tighter mb-4 font-heading dark:text-gray-200"
|
||||||
|
set:html={title}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
<div class="max-w-3xl mx-auto lg:max-w-none">
|
||||||
|
{subtitle && <p class="text-xl text-muted mb-6 dark:text-slate-300" set:html={subtitle} />}
|
||||||
|
<div class="max-w-xs sm:max-w-md m-auto flex flex-nowrap flex-col sm:flex-row sm:justify-center gap-4 lg:justify-start lg:m-0 lg:max-w-screen-xl">
|
||||||
|
{
|
||||||
|
callToAction && (
|
||||||
|
<div class="flex w-full sm:w-auto">
|
||||||
|
{typeof callToAction === 'string' ? (
|
||||||
|
<Fragment set:html={callToAction} />
|
||||||
|
) : (
|
||||||
|
<a class="btn btn-primary sm:mb-0 w-full" href={callToAction?.href} target="_blank" rel="noopener">
|
||||||
|
{callToAction?.icon && (
|
||||||
|
<>
|
||||||
|
<Icon name={callToAction.icon} class="w-5 h-5 mr-1 -ml-1.5" />{' '}
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
{callToAction?.text}
|
||||||
|
</a>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
{
|
||||||
|
callToAction2 && (
|
||||||
|
<div class="flex w-full sm:w-auto">
|
||||||
|
{typeof callToAction2 === 'string' ? (
|
||||||
|
<Fragment set:html={callToAction2} />
|
||||||
|
) : (
|
||||||
|
<a class="btn w-full" href={callToAction2?.href}>
|
||||||
|
{callToAction2?.icon && (
|
||||||
|
<>
|
||||||
|
<Icon name={callToAction2.icon} class="w-5 h-5 mr-1 -ml-1.5" />{' '}
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
{callToAction2.text}
|
||||||
|
</a>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{content && <Fragment set:html={content} />}
|
||||||
|
</div>
|
||||||
|
<div class="basis-1/2">
|
||||||
|
{
|
||||||
|
image && (
|
||||||
|
<div class="relative m-auto max-w-5xl">
|
||||||
|
{typeof image === 'string' ? (
|
||||||
|
<Fragment set:html={image} />
|
||||||
|
) : (
|
||||||
|
<Picture
|
||||||
|
class="mx-auto rounded-md w-full"
|
||||||
|
widths={[400, 768, 1024, 2040]}
|
||||||
|
sizes="(max-width: 767px) 400px, (max-width: 1023px) 768px, (max-width: 2039px) 1024px, 2040px"
|
||||||
|
aspectRatio={600 / 600}
|
||||||
|
loading="eager"
|
||||||
|
width={600}
|
||||||
|
height={600}
|
||||||
|
{...image}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
@ -64,7 +64,7 @@ const {
|
|||||||
---
|
---
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
<div class="max-w-6xl mx-auto px-4 sm:px-6 overflow-hidden">
|
<div class="max-w-screen-xl mx-auto px-4 sm:px-6 overflow-hidden">
|
||||||
<div class="py-12 md:py-20">
|
<div class="py-12 md:py-20">
|
||||||
<div class="py-4 sm:py-6 lg:py-8">
|
<div class="py-4 sm:py-6 lg:py-8">
|
||||||
<div class="flex flex-wrap md:-mx-8">
|
<div class="flex flex-wrap md:-mx-8">
|
||||||
|
@ -9,7 +9,7 @@ tags:
|
|||||||
- Astro
|
- Astro
|
||||||
---
|
---
|
||||||
|
|
||||||
import Logo from '~/components/common/Logo.astro';
|
import Logo from '~/components/Logo.astro';
|
||||||
|
|
||||||
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
|
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
|
||||||
|
|
||||||
@ -176,7 +176,7 @@ Reprehenderit non eu quis in ad elit esse qui aute id [incididunt](#!) dolore ci
|
|||||||
publishDate: 'Aug 02 2022'
|
publishDate: 'Aug 02 2022'
|
||||||
title: 'Markdown elements demo post'
|
title: 'Markdown elements demo post'
|
||||||
---
|
---
|
||||||
import Logo from "~/components/atoms/Logo.astro";
|
import Logo from "~/components/Logo.astro";
|
||||||
|
|
||||||
## MDX
|
## MDX
|
||||||
|
|
||||||
|
10
src/data.js
10
src/data.js
@ -7,15 +7,15 @@ export const headerData = {
|
|||||||
links: [
|
links: [
|
||||||
{
|
{
|
||||||
text: 'Sass',
|
text: 'Sass',
|
||||||
href: '#',
|
href: getPermalink('/landing/saas'),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: 'Startup',
|
text: 'Startup',
|
||||||
href: '#',
|
href: getPermalink('/landing/startup'),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: 'Mobile App',
|
text: 'Mobile App',
|
||||||
href: '#',
|
href: getPermalink('/landing/mobile-app'),
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@ -56,10 +56,6 @@ export const headerData = {
|
|||||||
text: 'Blog',
|
text: 'Blog',
|
||||||
href: getBlogPermalink(),
|
href: getBlogPermalink(),
|
||||||
},
|
},
|
||||||
{
|
|
||||||
text: 'About',
|
|
||||||
href: '#',
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
actions: [
|
actions: [
|
||||||
{ type: 'button', text: 'Download', href: 'https://github.com/onwidget/astrowind' }
|
{ type: 'button', text: 'Download', href: 'https://github.com/onwidget/astrowind' }
|
||||||
|
@ -16,10 +16,16 @@ const { meta } = Astro.props;
|
|||||||
---
|
---
|
||||||
|
|
||||||
<Layout {meta}>
|
<Layout {meta}>
|
||||||
|
<slot name="announcement">
|
||||||
<Announcement />
|
<Announcement />
|
||||||
<Header {...headerData} isFixed />
|
</slot>
|
||||||
|
<slot name="header">
|
||||||
|
<Header {...headerData} isSticky showRssFeed showToggleTheme />
|
||||||
|
</slot>
|
||||||
<main>
|
<main>
|
||||||
<slot />
|
<slot />
|
||||||
</main>
|
</main>
|
||||||
|
<slot name="footer">
|
||||||
<Footer {...footerData} />
|
<Footer {...footerData} />
|
||||||
|
</slot>
|
||||||
</Layout>
|
</Layout>
|
||||||
|
73
src/pages/landing/mobile-app.astro
Normal file
73
src/pages/landing/mobile-app.astro
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
---
|
||||||
|
import Layout from '~/layouts/PageLayout.astro';
|
||||||
|
|
||||||
|
import Header from '~/components/widgets/Header.astro';
|
||||||
|
import Hero2 from '~/components/widgets/Hero2.astro';
|
||||||
|
import CallToAction from '~/components/widgets/CallToAction.astro';
|
||||||
|
|
||||||
|
const meta = {
|
||||||
|
title: "Mobile App Landing Page",
|
||||||
|
};
|
||||||
|
---
|
||||||
|
|
||||||
|
<Layout {meta}>
|
||||||
|
<Fragment slot="announcement"></Fragment>
|
||||||
|
<Fragment slot="header">
|
||||||
|
<Header
|
||||||
|
links={[]}
|
||||||
|
actions={[
|
||||||
|
{
|
||||||
|
type: "ghost",
|
||||||
|
text: 'Login',
|
||||||
|
href: '#',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "primary",
|
||||||
|
text: 'Sign Up',
|
||||||
|
href: '#',
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
</Fragment>
|
||||||
|
|
||||||
|
<!-- Hero2 Widget ******************* -->
|
||||||
|
|
||||||
|
<Hero2
|
||||||
|
callToAction={{ text: 'Get template', href: 'https://github.com/onwidget/astrowind', icon: 'tabler:download' }}
|
||||||
|
callToAction2={{ text: 'Learn more', href: '#features' }}
|
||||||
|
image={{ src: import('~/assets/images/hero.png'), alt: 'AstroWind Hero Image' }}
|
||||||
|
>
|
||||||
|
<Fragment slot="title">
|
||||||
|
Free template for <span class="hidden lg:inline">create your website <br />with</span>
|
||||||
|
<span class="text-accent dark:text-white highlight"> Astro v2</span> + Tailwind CSS
|
||||||
|
</Fragment>
|
||||||
|
|
||||||
|
<Fragment slot="subtitle">
|
||||||
|
<span class="hidden sm:inline">
|
||||||
|
<span class="font-semibold">AstroWind</span> is a free, customizable and production-ready template for Astro 2 +
|
||||||
|
Tailwind CSS.</span
|
||||||
|
>
|
||||||
|
<span class="block mb-1 sm:hidden font-bold text-blue-600">AstroWind: Production-ready.</span> Suitable for Startups,
|
||||||
|
Small Business, Sass Websites, Professional Portfolios, Marketing Websites, Landing Pages & Blogs.
|
||||||
|
</Fragment>
|
||||||
|
</Hero2>
|
||||||
|
|
||||||
|
<!-- CallToAction Widget *********** -->
|
||||||
|
|
||||||
|
<CallToAction
|
||||||
|
callToAction={{
|
||||||
|
text: 'Get template',
|
||||||
|
href: 'https://github.com/onwidget/astrowind',
|
||||||
|
icon: 'tabler:download',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Fragment slot="title">
|
||||||
|
Astro + <br class="block sm:hidden" /><span class="sm:whitespace-nowrap">Tailwind CSS</span>
|
||||||
|
</Fragment>
|
||||||
|
|
||||||
|
<Fragment slot="subtitle">
|
||||||
|
Be very surprised by these huge fake numbers you are seeing on this page. <br class="hidden md:inline" />Don't
|
||||||
|
waste more time! :P
|
||||||
|
</Fragment>
|
||||||
|
</CallToAction>
|
||||||
|
</Layout>
|
203
src/pages/landing/saas.astro
Normal file
203
src/pages/landing/saas.astro
Normal file
@ -0,0 +1,203 @@
|
|||||||
|
---
|
||||||
|
import Layout from '~/layouts/PageLayout.astro';
|
||||||
|
|
||||||
|
import Header from '~/components/widgets/Header.astro';
|
||||||
|
import Hero2 from '~/components/widgets/Hero2.astro';
|
||||||
|
import Steps2 from '~/components/widgets/Steps2.astro';
|
||||||
|
import Content from '~/components/widgets/Content.astro';
|
||||||
|
import CallToAction from '~/components/widgets/CallToAction.astro';
|
||||||
|
|
||||||
|
import { headerData } from '~/data';
|
||||||
|
|
||||||
|
const meta = {
|
||||||
|
title: 'Saas Landing Page',
|
||||||
|
};
|
||||||
|
---
|
||||||
|
|
||||||
|
<Layout {meta}>
|
||||||
|
<Fragment slot="header">
|
||||||
|
<Header
|
||||||
|
{...headerData}
|
||||||
|
actions={[
|
||||||
|
{
|
||||||
|
type: "ghost",
|
||||||
|
text: 'Login',
|
||||||
|
href: '#',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "primary",
|
||||||
|
text: 'Sign Up',
|
||||||
|
href: '#',
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
</Fragment>
|
||||||
|
|
||||||
|
<!-- Hero2 Widget ******************* -->
|
||||||
|
|
||||||
|
<Hero2
|
||||||
|
callToAction={{ text: 'Get template', href: 'https://github.com/onwidget/astrowind', icon: 'tabler:download' }}
|
||||||
|
callToAction2={{ text: 'Learn more', href: '#features' }}
|
||||||
|
image={{ src: import('~/assets/images/hero.png'), alt: 'AstroWind Hero Image' }}
|
||||||
|
>
|
||||||
|
<Fragment slot="title">
|
||||||
|
Free template for <br />
|
||||||
|
<span class="text-accent dark:text-white highlight"> Astro v2</span> + Tailwind CSS
|
||||||
|
</Fragment>
|
||||||
|
|
||||||
|
<Fragment slot="subtitle">
|
||||||
|
<span class="hidden sm:inline">
|
||||||
|
<span class="font-semibold">AstroWind</span> is a free, customizable and production-ready template for Astro 2 +
|
||||||
|
Tailwind CSS.</span
|
||||||
|
>
|
||||||
|
<span class="block mb-1 sm:hidden font-bold text-blue-600">AstroWind: Production-ready.</span> Suitable for Startups,
|
||||||
|
Small Business, Sass Websites, Professional Portfolios, Marketing Websites, Landing Pages & Blogs.
|
||||||
|
</Fragment>
|
||||||
|
</Hero2>
|
||||||
|
|
||||||
|
<!-- Content Widget **************** -->
|
||||||
|
|
||||||
|
<Content
|
||||||
|
isReversed
|
||||||
|
items={[
|
||||||
|
{
|
||||||
|
title: 'Per ei quaeque sensibus',
|
||||||
|
description:
|
||||||
|
'Ex usu illum iudico molestie. Pro ne agam facete mediocritatem, ridens labore facete mea ei. Pro id apeirian dignissim.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Cu imperdiet posidonium sed',
|
||||||
|
description:
|
||||||
|
'Amet utinam aliquando ut mea, malis admodum ocurreret nec et, elit tibique cu nec. Nec ex maluisset inciderint, ex quis.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Nulla omittam sadipscing mel ne',
|
||||||
|
description:
|
||||||
|
'At sed possim oporteat probatus, justo graece ne nec, minim commodo legimus ut vix. Ut eos iudico quando soleat, nam modus.',
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
image={{
|
||||||
|
src: import('~/assets/images/caos.jpg'),
|
||||||
|
alt: 'Colorful Image',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Fragment slot="content">
|
||||||
|
<h3 class="text-2xl font-bold tracking-tight dark:text-white sm:text-3xl mb-2">Ad vix debet docendi</h3>
|
||||||
|
Ne dicta praesent ocurreret has, diam theophrastus at pro. Eos etiam regione ut, persius eripuit quo id. Sit te euismod
|
||||||
|
tacimates.
|
||||||
|
</Fragment>
|
||||||
|
</Content>
|
||||||
|
|
||||||
|
<!-- Content Widget **************** -->
|
||||||
|
|
||||||
|
<Content
|
||||||
|
items={[
|
||||||
|
{
|
||||||
|
title: 'Per ei quaeque sensibus',
|
||||||
|
description:
|
||||||
|
'Ex usu illum iudico molestie. Pro ne agam facete mediocritatem, ridens labore facete mea ei. Pro id apeirian dignissim.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Cu imperdiet posidonium sed',
|
||||||
|
description:
|
||||||
|
'Amet utinam aliquando ut mea, malis admodum ocurreret nec et, elit tibique cu nec. Nec ex maluisset inciderint, ex quis.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Nulla omittam sadipscing mel ne',
|
||||||
|
description:
|
||||||
|
'At sed possim oporteat probatus, justo graece ne nec, minim commodo legimus ut vix. Ut eos iudico quando soleat, nam modus.',
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
image={{
|
||||||
|
src: import('~/assets/images/caos.jpg'),
|
||||||
|
alt: 'Colorful Image',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Fragment slot="content">
|
||||||
|
<h3 class="text-2xl font-bold tracking-tight dark:text-white sm:text-3xl mb-2">Ad vix debet docendi</h3>
|
||||||
|
Ne dicta praesent ocurreret has, diam theophrastus at pro. Eos etiam regione ut, persius eripuit quo id. Sit te euismod
|
||||||
|
tacimates.
|
||||||
|
</Fragment>
|
||||||
|
</Content>
|
||||||
|
|
||||||
|
<!-- Content Widget **************** -->
|
||||||
|
|
||||||
|
<Content
|
||||||
|
isReversed
|
||||||
|
items={[
|
||||||
|
{
|
||||||
|
title: 'Per ei quaeque sensibus',
|
||||||
|
description:
|
||||||
|
'Ex usu illum iudico molestie. Pro ne agam facete mediocritatem, ridens labore facete mea ei. Pro id apeirian dignissim.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Cu imperdiet posidonium sed',
|
||||||
|
description:
|
||||||
|
'Amet utinam aliquando ut mea, malis admodum ocurreret nec et, elit tibique cu nec. Nec ex maluisset inciderint, ex quis.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Nulla omittam sadipscing mel ne',
|
||||||
|
description:
|
||||||
|
'At sed possim oporteat probatus, justo graece ne nec, minim commodo legimus ut vix. Ut eos iudico quando soleat, nam modus.',
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
image={{
|
||||||
|
src: import('~/assets/images/caos.jpg'),
|
||||||
|
alt: 'Colorful Image',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Fragment slot="content">
|
||||||
|
<h3 class="text-2xl font-bold tracking-tight dark:text-white sm:text-3xl mb-2">Ad vix debet docendi</h3>
|
||||||
|
Ne dicta praesent ocurreret has, diam theophrastus at pro. Eos etiam regione ut, persius eripuit quo id. Sit te euismod
|
||||||
|
tacimates.
|
||||||
|
</Fragment>
|
||||||
|
</Content>
|
||||||
|
|
||||||
|
<!-- Steps2 Widget ****************** -->
|
||||||
|
|
||||||
|
<Steps2
|
||||||
|
title="Sed ac magna sit amet risus tristique interdum, at vel velit in hac habitasse platea dictumst."
|
||||||
|
subtitle="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi sagittis, quam nec venenatis lobortis, mi risus tempus nulla, sed porttitor est nibh at nulla. Praesent placerat enim ut ex tincidunt vehicula. Fusce sit amet dui tellus."
|
||||||
|
callToAction={{
|
||||||
|
text: 'Get template',
|
||||||
|
href: 'https://github.com/onwidget/astrowind',
|
||||||
|
icon: 'tabler:download',
|
||||||
|
}}
|
||||||
|
items={[
|
||||||
|
{
|
||||||
|
title: 'Responsive Elements',
|
||||||
|
description:
|
||||||
|
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi sagittis, quam nec venenatis lobortis, mi risus tempus nulla.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Flexible Team',
|
||||||
|
description:
|
||||||
|
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi sagittis, quam nec venenatis lobortis, mi risus tempus nulla.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Ecologic Software',
|
||||||
|
description:
|
||||||
|
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi sagittis, quam nec venenatis lobortis, mi risus tempus nulla.',
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<!-- CallToAction Widget *********** -->
|
||||||
|
|
||||||
|
<CallToAction
|
||||||
|
callToAction={{
|
||||||
|
text: 'Get template',
|
||||||
|
href: 'https://github.com/onwidget/astrowind',
|
||||||
|
icon: 'tabler:download',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Fragment slot="title">
|
||||||
|
Astro + <br class="block sm:hidden" /><span class="sm:whitespace-nowrap">Tailwind CSS</span>
|
||||||
|
</Fragment>
|
||||||
|
|
||||||
|
<Fragment slot="subtitle">
|
||||||
|
Be very surprised by these huge fake numbers you are seeing on this page. <br class="hidden md:inline" />Don't
|
||||||
|
waste more time! :P
|
||||||
|
</Fragment>
|
||||||
|
</CallToAction>
|
||||||
|
</Layout>
|
56
src/pages/landing/startup.astro
Normal file
56
src/pages/landing/startup.astro
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
---
|
||||||
|
import Layout from '~/layouts/PageLayout.astro';
|
||||||
|
|
||||||
|
import Hero from '~/components/widgets/Hero.astro';
|
||||||
|
import CallToAction from '~/components/widgets/CallToAction.astro';
|
||||||
|
|
||||||
|
const meta = {
|
||||||
|
title: "Startup Landing Page",
|
||||||
|
};
|
||||||
|
---
|
||||||
|
|
||||||
|
<Layout {meta}>
|
||||||
|
<!-- Hero2 Widget ******************* -->
|
||||||
|
|
||||||
|
<Hero
|
||||||
|
callToAction={{ text: 'Get template', href: 'https://github.com/onwidget/astrowind', icon: 'tabler:download' }}
|
||||||
|
callToAction2={{ text: 'Learn more', href: '#features' }}
|
||||||
|
>
|
||||||
|
<Fragment slot="title">
|
||||||
|
Free template for <span class="hidden lg:inline">create your website <br />with</span>
|
||||||
|
<span class="text-accent dark:text-white highlight"> Astro v2</span> + Tailwind CSS
|
||||||
|
</Fragment>
|
||||||
|
|
||||||
|
<Fragment slot="subtitle">
|
||||||
|
<span class="hidden sm:inline">
|
||||||
|
<span class="font-semibold">AstroWind</span> is a free, customizable and production-ready template for Astro 2 +
|
||||||
|
Tailwind CSS.</span
|
||||||
|
>
|
||||||
|
<span class="block mb-1 sm:hidden font-bold text-blue-600">AstroWind: Production-ready.</span> Suitable for Startups,
|
||||||
|
Small Business, Sass Websites, Professional Portfolios, Marketing Websites, Landing Pages & Blogs.
|
||||||
|
</Fragment>
|
||||||
|
|
||||||
|
<Fragment slot="image">
|
||||||
|
<iframe width="560" height="315" src="https://www.youtube.com/embed/dsTXcSeAZq8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen style="width:100%"></iframe>
|
||||||
|
</Fragment>
|
||||||
|
</Hero>
|
||||||
|
|
||||||
|
<!-- CallToAction Widget *********** -->
|
||||||
|
|
||||||
|
<CallToAction
|
||||||
|
callToAction={{
|
||||||
|
text: 'Get template',
|
||||||
|
href: 'https://github.com/onwidget/astrowind',
|
||||||
|
icon: 'tabler:download',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Fragment slot="title">
|
||||||
|
Astro + <br class="block sm:hidden" /><span class="sm:whitespace-nowrap">Tailwind CSS</span>
|
||||||
|
</Fragment>
|
||||||
|
|
||||||
|
<Fragment slot="subtitle">
|
||||||
|
Be very surprised by these huge fake numbers you are seeing on this page. <br class="hidden md:inline" />Don't
|
||||||
|
waste more time! :P
|
||||||
|
</Fragment>
|
||||||
|
</CallToAction>
|
||||||
|
</Layout>
|
Reference in New Issue
Block a user