Skip to content

Commit 08c71fe

Browse files
committed
update banner and logos
1 parent 9e06a34 commit 08c71fe

File tree

4 files changed

+58
-19
lines changed

4 files changed

+58
-19
lines changed

src/client/landing-page/LandingPage.tsx

Lines changed: 57 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
import { useState } from 'react';
1+
import { useState, useEffect } from 'react';
22
import { Dialog } from '@headlessui/react';
33
import { AiFillCheckCircle, AiFillCloseCircle } from 'react-icons/ai';
44
import { HiBars3 } from 'react-icons/hi2';
55
import { BiLogIn } from 'react-icons/bi';
66
import { Link } from '@wasp/router';
77
import logo from '../static/logo.png';
88
import daBoi from '../static/da-boi.png';
9-
import openSaasBanner from '../static/open-saas-banner-gr.png';
9+
import openSaasBanner from '../static/open-saas-banner.png';
10+
// import openSaasBanner from '../static/open-saas-alt-banner.p ng';
1011
import { features, navigation, tiers, faqs, footerNavigation } from './contentSections';
1112
import useAuth from '@wasp/auth/useAuth';
1213
import DropdownUser from '../components/DropdownUser';
@@ -18,11 +19,24 @@ import { UserMenuItems } from '../components/UserMenuItems';
1819
export default function LandingPage() {
1920
const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
2021
const [isStripePaymentLoading, setIsStripePaymentLoading] = useState<boolean | string>(false);
22+
const [isDemoInfoVisible, setIsDemoInfoVisible] = useState(false);
2123

2224
const { data: user, isLoading: isUserLoading } = useAuth();
2325

2426
const history = useHistory();
2527

28+
useEffect(() => {
29+
try {
30+
if (localStorage.getItem('isDemoInfoVisible') === 'false') {
31+
// do nothing
32+
} else {
33+
setIsDemoInfoVisible(true);
34+
}
35+
} catch (error) {
36+
console.error(error);
37+
}
38+
}, []);
39+
2640
async function handleBuyNowClick(tierId: string) {
2741
if (!user) {
2842
history.push('/login');
@@ -42,16 +56,40 @@ export default function LandingPage() {
4256
}
4357
}
4458

59+
const handleDemoInfoClose = () => {
60+
try {
61+
localStorage.setItem('isDemoInfoVisible', 'false');
62+
setIsDemoInfoVisible(false);
63+
} catch (error) {
64+
console.error(error);
65+
}
66+
};
67+
4568
const NavLogo = () => <img className='h-8 w-8' src={logo} alt='Open SaaS App' />;
4669

4770
return (
4871
<div className='bg-white'>
72+
{/* Floating Demo Announcement */}
73+
{isDemoInfoVisible && <div className='fixed z-999 bottom-0 mb-2 left-1/2 -translate-x-1/2 lg:mb-4 bg-gray-700 rounded-full px-3.5 py-2 text-sm text-white duration-300 ease-in-out hover:bg-gray-800 focus-visible:outline focus-visible:outline-2 focus-visible:outline-indigo-600'>
74+
<div className='px-4 flex flex-row gap-2 items-center my-1'>
75+
<span className='text-gray-100'>
76+
This demo app <span className='italic'>is</span> the SaaS template. Feel free to play around!
77+
</span>
78+
<button className=' pl-2.5 text-gray-400 text-xl font-bold' onClick={() => handleDemoInfoClose()}>
79+
X
80+
</button>
81+
</div>
82+
</div>}
4983
{/* Header */}
5084
<header className='absolute inset-x-0 top-0 z-50'>
5185
<nav className='flex items-center justify-between p-6 lg:px-8' aria-label='Global'>
52-
<div className='flex lg:flex-1'>
53-
<a href='/' className='-m-1.5 p-1.5'>
86+
<div className='flex items-center lg:flex-1'>
87+
<a
88+
href='/'
89+
className='flex items-center -m-1.5 p-1.5 text-gray-900 duration-300 ease-in-out hover:text-yellow-500'
90+
>
5491
<NavLogo />
92+
<span className='ml-2 text-sm font-semibold leading-6 '>Open Saas</span>
5593
</a>
5694
</div>
5795
<div className='flex lg:hidden'>
@@ -163,31 +201,28 @@ export default function LandingPage() {
163201
</div>
164202
<div className='py-24 sm:py-32'>
165203
<div className='mx-auto max-w-8xl px-6 lg:px-8'>
166-
<div className='lg:mb-18 mx-auto max-w-2xl text-center'>
204+
<div className='lg:mb-18 mx-auto max-w-3xl text-center'>
167205
<h1 className='text-4xl font-bold tracking-tight text-gray-900 sm:text-6xl'>
168206
The <span className='italic'>free</span> SaaS template with superpowers
169207
</h1>
170-
<p className='mt-6 text-lg leading-8 text-gray-600'>
171-
An open-source, feature-rich template, engineered with Wasp—the only full-stack React + NodeJS
172-
framework that manages features for you.
208+
<p className='mt-6 mx-auto max-w-2xl text-lg leading-8 text-gray-600'>
209+
An open-source, feature-rich, full-stack React + NodeJS template that manages features for you.
173210
</p>
174211
<div className='mt-10 flex items-center justify-center gap-x-6'>
175-
<a
212+
{/* <a
176213
href='https://github.com/wasp-lang/open-saas'
177214
className='rounded-md bg-yellow-500 px-3.5 py-2.5 text-sm font-semibold text-white hover:text-white shadow-sm hover:bg-yellow-400 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600'
178-
>
179-
Get Started <span aria-hidden='true'></span>
180-
</a>
215+
></a> */}
181216
<a
182217
href={DOCS_URL}
183218
className='rounded-md px-3.5 py-2.5 text-sm font-semibold text-gray-700 ring-1 ring-inset ring-gray-200 hover:ring-2 hover:ring-purple-200 shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600'
184219
>
185-
Read the Docs
220+
Get Started <span aria-hidden='true'></span>
186221
</a>
187222
</div>
188223
</div>
189224
<div className='mt-14 flow-root sm:mt-14 '>
190-
<div className='-m-2 rounded-xl bg-gray-900/5 p-2 ring-1 ring-inset ring-gray-900/10 lg:-m-4 lg:rounded-2xl lg:p-4'>
225+
<div className='-m-2 rounded-xl lg:-m-4 lg:rounded-2xl lg:p-4'>
191226
<img
192227
src={openSaasBanner}
193228
alt='App screenshot'
@@ -206,7 +241,7 @@ export default function LandingPage() {
206241
<div className='mt-12 mx-auto max-w-7xl px-6 lg:px-8 flex flex-col items-between gap-y-6'>
207242
<h2 className='mb-6 text-center font-semibold tracking-wide text-gray-500'>Built and Ships with</h2>
208243

209-
<div className='mx-auto grid max-w-lg grid-cols-2 items-center gap-x-8 gap-y-12 sm:max-w-xl md:grid-cols-5 sm:gap-x-10 sm:gap-y-14 lg:mx-0 lg:max-w-none lg:grid-cols-5'>
244+
<div className='mx-auto grid max-w-lg grid-cols-2 items-center gap-x-8 gap-y-12 sm:max-w-xl md:grid-cols-6 sm:gap-x-10 sm:gap-y-14 lg:mx-0 lg:max-w-none'>
210245
<img
211246
className=' col-span-1 max-h-12 w-full object-contain grayscale opacity-100'
212247
src='https://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/React-icon.svg/512px-React-icon.svg.png'
@@ -220,11 +255,14 @@ export default function LandingPage() {
220255
height={48}
221256
/>
222257
<img
223-
className='col-span-2 md:col-span-1 max-h-12 w-full object-contain grayscale opacity-80 '
258+
className='col-span-1 max-h-12 w-full object-contain grayscale opacity-80 '
224259
src={logo}
225260
alt='Wasp'
226261
height={48}
227262
/>
263+
<div className='flex justify-center col-span-1 max-h-12 w-full object-contain grayscale opacity-80'>
264+
<svg width={48} height={48} viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><title>file_type_prisma</title><path fill="#545454" d="M25.21,24.21,12.739,27.928a.525.525,0,0,1-.667-.606L16.528,5.811a.43.43,0,0,1,.809-.094l8.249,17.661A.6.6,0,0,1,25.21,24.21Zm2.139-.878L17.8,2.883h0A1.531,1.531,0,0,0,16.491,2a1.513,1.513,0,0,0-1.4.729L4.736,19.648a1.592,1.592,0,0,0,.018,1.7l5.064,7.909a1.628,1.628,0,0,0,1.83.678l14.7-4.383a1.6,1.6,0,0,0,1-2.218Z" /></svg>
265+
</div>
228266
<img
229267
className=' col-span-1 max-h-12 w-full object-contain grayscale '
230268
src='https://upload.wikimedia.org/wikipedia/commons/thumb/d/d5/Tailwind_CSS_Logo.svg/512px-Tailwind_CSS_Logo.svg.png'
@@ -249,7 +287,7 @@ export default function LandingPage() {
249287
<p className='mt-6 text-lg leading-8 text-gray-600'>
250288
We've pre-built the important stuff.
251289
<br /> Wasp does all the boring stuff.
252-
<br /> You get all the credit.
290+
<br /> You get to do the fun stuff.
253291
</p>
254292
</div>
255293
<div className='mx-auto mt-16 max-w-2xl sm:mt-20 lg:mt-24 lg:max-w-4xl'>
@@ -341,8 +379,8 @@ export default function LandingPage() {
341379
</h2>
342380
</div>
343381
<p className='mx-auto mt-6 max-w-2xl text-center text-lg leading-8 text-gray-600'>
344-
Secure Stripe webhooks, and a complete subscription management system are built-in. Just add your Stripe
345-
Product IDs and you're good to go!
382+
Stripe subscriptions and secure webhooks are built-in. Just add your Stripe
383+
Product IDs! Go it a try with credit card number{' '}<span className='px-2 py-1 bg-gray-100 rounded-md text-gray-500'>4242 4242 4242 4242 4242</span>
346384
</p>
347385
<div className='isolate mx-auto mt-16 grid max-w-md grid-cols-1 gap-y-8 lg:gap-x-8 sm:mt-20 lg:mx-0 lg:max-w-none lg:grid-cols-3'>
348386
{tiers.map((tier) => (
229 KB
Loading
844 KB
Loading

tailwind.config.cjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ module.exports = {
77
theme: {
88
extend: {
99
fontFamily: {
10+
'sans': ['ui-monospace', 'Liberation Mono', 'Menlo', 'monospace'],
1011
satoshi: ['Satoshi', 'sans-serif'],
1112
},
1213
colors: {

0 commit comments

Comments
 (0)