diff --git a/.eslintrc.json b/.eslintrc.json index 84dca71..1d3d157 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -86,7 +86,8 @@ "rules": { "prettier/prettier": "error", - "react/no-unknown-property": "off" + "react/no-unknown-property": "off", + "react/jsx-key": "off" }, "globals": { diff --git a/src/components/sections/about.astro b/src/components/sections/about.astro new file mode 100644 index 0000000..611dea1 --- /dev/null +++ b/src/components/sections/about.astro @@ -0,0 +1,62 @@ +--- +import { Container } from '@/components/container'; +import { count as soundCount } from '@/lib/sounds'; + +const count = soundCount(); +--- + +
+ +
+

What is Moodist?

+
+
+

+ Welcome to Moodist – your free, open-source ambient sound generator. With {count} curated sounds, effortlessly create your custom mix for focus or relaxation. No + accounts, no hassle – just pure tranquility. Explore nature's calm + and urban rhythms. Elevate your ambiance with Moodist, where simplicity + meets serenity. +

+
+
+ + diff --git a/src/components/sections/about/about.module.css b/src/components/sections/about/about.module.css deleted file mode 100644 index c4f8968..0000000 --- a/src/components/sections/about/about.module.css +++ /dev/null @@ -1,32 +0,0 @@ -.about { - padding: 80px 0; - - & .titleWrapper { - display: flex; - align-items: center; - column-gap: 12px; - - & .title { - margin-bottom: 12px; - font-family: var(--font-display); - font-size: var(--font-lg); - font-weight: 600; - } - - & .line { - height: 1px; - flex-grow: 1; - background: linear-gradient(90deg, var(--color-neutral-300), transparent); - transform: translateY(-0.25rem); - } - } - - & .desc { - color: var(--color-foreground-subtle); - line-height: 1.7; - - & span { - color: var(--color-foreground); - } - } -} diff --git a/src/components/sections/about/about.tsx b/src/components/sections/about/about.tsx deleted file mode 100644 index 4d71371..0000000 --- a/src/components/sections/about/about.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { useMemo } from 'react'; - -import { Container } from '@/components/container'; -import { count as soundCount } from '@/lib/sounds'; - -import styles from './about.module.css'; - -export function About() { - const count = useMemo(soundCount, []); - - return ( -
- -
-

What is Moodist?

-
-
-

- Welcome to Moodist – your free, open-source ambient sound generator. - With {count} curated sounds, effortlessly create your - custom mix for focus or relaxation. No accounts, no hassle – just pure - tranquility. Explore nature's calm and urban rhythms. Elevate - your ambiance with Moodist, where simplicity meets serenity. -

- -
- ); -} diff --git a/src/components/sections/about/index.ts b/src/components/sections/about/index.ts deleted file mode 100644 index 4629637..0000000 --- a/src/components/sections/about/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { About } from './about'; diff --git a/src/components/sections/index.ts b/src/components/sections/index.ts deleted file mode 100644 index da878a0..0000000 --- a/src/components/sections/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { About as AboutSection } from './about'; -export { Why as WhySection } from './why'; -export { Ready as ReadySection } from './ready'; diff --git a/src/components/sections/ready.astro b/src/components/sections/ready.astro new file mode 100644 index 0000000..cd1df21 --- /dev/null +++ b/src/components/sections/ready.astro @@ -0,0 +1,119 @@ +--- +import { RiSparkling2Line } from 'react-icons/ri/index'; + +import { Container } from '@/components/container'; +--- + +
+ +
+
+
+
+ +
+
+ +

Are you ready?

+

Create your calm oasis in seconds!

+ +
+
+
+ + + + diff --git a/src/components/sections/ready/index.ts b/src/components/sections/ready/index.ts deleted file mode 100644 index ffb272e..0000000 --- a/src/components/sections/ready/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { Ready } from './ready'; diff --git a/src/components/sections/ready/ready.module.css b/src/components/sections/ready/ready.module.css deleted file mode 100644 index 97afa25..0000000 --- a/src/components/sections/ready/ready.module.css +++ /dev/null @@ -1,84 +0,0 @@ -.ready { - & .wrapper { - position: relative; - padding: 0 20px 40px; - border-radius: 0 0 20px 20px; - background: linear-gradient(transparent, var(--color-neutral-100)); - - &::after { - position: absolute; - bottom: 0; - left: 50%; - width: 70%; - height: 1px; - background: linear-gradient( - 90deg, - transparent, - var(--color-neutral-300), - transparent - ); - content: ''; - transform: translateX(-50%); - } - } - - & .iconContainer { - display: flex; - flex-direction: column; - align-items: center; - margin-bottom: 15px; - - & .tail { - width: 1px; - height: 75px; - background: linear-gradient(transparent, var(--color-neutral-300)); - } - - & .icon { - display: flex; - width: 45px; - height: 45px; - align-items: center; - justify-content: center; - border: 1px solid var(--color-neutral-300); - border-radius: 50%; - background-color: var(--color-neutral-100); - color: #fbbf24; - font-size: var(--font-md); - } - } - - & .title { - margin-bottom: 12px; - font-family: var(--font-display); - font-size: var(--font-lg); - font-weight: 600; - text-align: center; - } - - & .desc { - color: var(--color-foreground-subtle); - text-align: center; - } - - & .button { - display: flex; - width: 120px; - height: 40px; - align-items: center; - justify-content: center; - border: none; - border-radius: 100px; - border-top: 2px solid var(--color-neutral-950); - border-bottom: 3px solid var(--color-neutral-600); - margin: 24px auto 0; - background-color: var(--color-neutral-700); - color: var(--color-neutral-200); - cursor: pointer; - font-family: var(--font-heading); - font-size: var(--font-sm); - line-height: 0; - outline: none; - text-decoration: none; - } -} diff --git a/src/components/sections/ready/ready.tsx b/src/components/sections/ready/ready.tsx deleted file mode 100644 index 6591f86..0000000 --- a/src/components/sections/ready/ready.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { RiSparkling2Line } from 'react-icons/ri/index'; - -import { Container } from '@/components/container'; - -import styles from './ready.module.css'; - -export function Ready() { - const handleClick = () => { - const app = document.getElementById('app'); - - app?.scrollIntoView(true); - }; - - return ( -
- -
-
-
-
- -
-
- -

Are you ready?

-

Create your calm oasis in seconds!

- -
- -
- ); -} diff --git a/src/components/sections/why.astro b/src/components/sections/why.astro new file mode 100644 index 0000000..758d7eb --- /dev/null +++ b/src/components/sections/why.astro @@ -0,0 +1,157 @@ +--- +import { BiMoney, BiUserCircle, BiLogoGithub } from 'react-icons/bi/index'; +import { BsSoundwave, BsStars } from 'react-icons/bs/index'; +import { RxMixerHorizontal } from 'react-icons/rx/index'; + +import { Balancer } from 'react-wrap-balancer'; + +import { Container } from '@/components/container'; +import { count as soundCount } from '@/lib/sounds'; + +const count = soundCount(); + +const reasons = [ + { + Icon: BiMoney, + body: "Immerse yourself in Moodist's ambient world without spending a dime. All features are accessible to everyone, ensuring a cost-free auditory journey.", + id: 'free-access', + label: 'Free Access', + }, + { + Icon: BiUserCircle, + body: 'Embrace simplicity – Moodist skips the registration process. No accounts, no hassle; just click, play, and enjoy the serenity.', + id: 'no-registration', + label: 'No Registration', + }, + { + Icon: BsSoundwave, + body: `With a curated collection of ${count} sounds, Moodist offers a spectrum of auditory experiences. From the tranquility of nature to the beat of urban life, find the perfect backdrop for your mood.`, + id: 'diverse-sounds', + label: 'Diverse Sounds', + }, + { + Icon: RxMixerHorizontal, + body: 'Tailor your ambiance effortlessly. Moodist allows you to create personalized mixes, adjusting the blend of sounds to suit your focus or relaxation needs.', + id: 'customizable-mixes', + label: 'Customizable Mixes', + }, + { + Icon: BiLogoGithub, + body: 'Trust in transparency. Moodist is open-source, fostering collaboration and providing users with a platform they can explore and understand.', + id: 'open-source', + label: 'Open-Source', + link: { + label: 'Source Code', + url: 'https://github.com/remvze/moodist', + }, + }, + { + Icon: BsStars, + body: 'Navigate with ease. Moodist provides a user-friendly interface, ensuring a smooth and hassle-free experience as you explore the diverse soundscape of calm and rhythm.', + id: 'seamless-experience', + label: 'Seamless Experience', + }, +]; +--- + +
+ +
+

Why use Moodist?

+
+
+ +
+ { + reasons.map(reason => ( +
+
+ +
+

{reason.label}

+

+ {reason.body} +

+ {reason.link && ( + + {reason.link.label} → + + )} +
+ )) + } +
+
+
+ + diff --git a/src/components/sections/why/index.ts b/src/components/sections/why/index.ts deleted file mode 100644 index a7ce364..0000000 --- a/src/components/sections/why/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { Why } from './why'; diff --git a/src/components/sections/why/why.module.css b/src/components/sections/why/why.module.css deleted file mode 100644 index b40c3ec..0000000 --- a/src/components/sections/why/why.module.css +++ /dev/null @@ -1,65 +0,0 @@ -.why { - padding-bottom: 80px; - - & .titleWrapper { - display: flex; - align-items: center; - column-gap: 12px; - - & .title { - margin-bottom: 12px; - font-family: var(--font-display); - font-size: var(--font-lg); - font-weight: 600; - } - - & .line { - height: 1px; - flex-grow: 1; - background: linear-gradient(90deg, var(--color-neutral-300), transparent); - transform: translateY(-0.25rem); - } - } - - & .reasons { - display: grid; - margin-top: 24px; - column-gap: 20px; - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); - row-gap: 28px; - - & .icon { - display: flex; - width: 40px; - height: 40px; - align-items: center; - justify-content: center; - border: 1px solid var(--color-neutral-200); - border-radius: 12px; - margin-bottom: 12px; - background: linear-gradient(var(--color-neutral-100), transparent); - color: #34d399; - font-size: var(--font-md); - } - - & .label { - margin-bottom: 8px; - font-family: var(--font-heading); - font-weight: 600; - } - - & .body { - color: var(--color-foreground-subtle); - line-height: 1.6; - } - - & .link { - display: block; - margin-top: 8px; - color: var(--color-foreground); - font-size: var(--font-sm); - font-weight: 500; - text-decoration: none; - } - } -} diff --git a/src/components/sections/why/why.tsx b/src/components/sections/why/why.tsx deleted file mode 100644 index 450286c..0000000 --- a/src/components/sections/why/why.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import { useMemo } from 'react'; -import { BiMoney, BiUserCircle, BiLogoGithub } from 'react-icons/bi/index'; -import { BsSoundwave, BsStars } from 'react-icons/bs/index'; -import { RxMixerHorizontal } from 'react-icons/rx/index'; - -import { Balancer } from 'react-wrap-balancer'; - -import { Container } from '@/components/container'; -import { count as soundCount } from '@/lib/sounds'; - -import styles from './why.module.css'; - -export function Why() { - const count = useMemo(soundCount, []); - - const reasons = [ - { - body: "Immerse yourself in Moodist's ambient world without spending a dime. All features are accessible to everyone, ensuring a cost-free auditory journey.", - icon: , - id: 'free-access', - label: 'Free Access', - }, - { - body: 'Embrace simplicity – Moodist skips the registration process. No accounts, no hassle; just click, play, and enjoy the serenity.', - icon: , - id: 'no-registration', - label: 'No Registration', - }, - { - body: `With a curated collection of ${count} sounds, Moodist offers a spectrum of auditory experiences. From the tranquility of nature to the beat of urban life, find the perfect backdrop for your mood.`, - icon: , - id: 'diverse-sounds', - label: 'Diverse Sounds', - }, - { - body: 'Tailor your ambiance effortlessly. Moodist allows you to create personalized mixes, adjusting the blend of sounds to suit your focus or relaxation needs.', - icon: , - id: 'customizable-mixes', - label: 'Customizable Mixes', - }, - { - body: 'Trust in transparency. Moodist is open-source, fostering collaboration and providing users with a platform they can explore and understand.', - icon: , - id: 'open-source', - label: 'Open-Source', - link: { - label: 'Source Code', - url: 'https://github.com/remvze/moodist', - }, - }, - { - body: 'Navigate with ease. Moodist provides a user-friendly interface, ensuring a smooth and hassle-free experience as you explore the diverse soundscape of calm and rhythm.', - icon: , - id: 'seamless-experience', - label: 'Seamless Experience', - }, - ]; - - return ( -
- -
-

Why use Moodist?

-
-
- -
- {reasons.map(reason => ( -
-
{reason.icon}
-

{reason.label}

-

- {reason.body} -

- {reason.link && ( - - {reason.link.label} → - - )} -
- ))} -
- -
- ); -} diff --git a/src/pages/index.astro b/src/pages/index.astro index aaba44b..02de497 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,11 +1,12 @@ --- import Layout from '@/layouts/layout.astro'; +import Footer from '@/components/footer.astro'; +import AboutSection from '@/components/sections/about.astro'; +import WhySection from '@/components/sections/why.astro'; +import ReadySection from '@/components/sections/ready.astro'; import { Hero } from '@/components/hero'; import { App } from '@/components/app'; -import { AboutSection, WhySection, ReadySection } from '@/components/sections'; - -import Footer from '@/components/footer.astro'; --- @@ -13,6 +14,6 @@ import Footer from '@/components/footer.astro'; - +