Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
ba0c631
feat(147): update hero section
xyzelena Apr 29, 2026
6c090fd
fix(147): format section element
xyzelena Apr 29, 2026
a5ebec3
feat(147): update styles
xyzelena Apr 29, 2026
fb4803d
feat(147): update hero content and images
xyzelena May 4, 2026
b879db4
feat(147): enhance hero section layout and update button links
xyzelena May 6, 2026
307788d
feat(147): refine hero section styles and improve image handling
xyzelena May 6, 2026
ad239b3
feat(147): add HeroInfiniteSlider component and update hero content s…
xyzelena May 6, 2026
2f97d2a
fix(147): adjust padding for improved layout
xyzelena May 6, 2026
4295638
Merge pull request #90 from xi-effect/147
unknownproperty May 14, 2026
e6c31c6
feat: update Hero
unknownproperty May 14, 2026
1b3e5da
ы верfeat: update Header
unknownproperty May 15, 2026
03147a3
feat: add new CapabilitiesBlock
unknownproperty May 15, 2026
58cc98a
feat: add TutorIdeas block
unknownproperty May 15, 2026
b39f66a
feat: add Devices block
unknownproperty May 16, 2026
ecf2033
feat: add NeverMind font
unknownproperty May 16, 2026
672bcc8
feat: add Manrope font
unknownproperty May 16, 2026
8a6ec0a
feat: add Community block
unknownproperty May 16, 2026
f0ab098
feat: update Messages
unknownproperty May 16, 2026
c424b21
feat: update indigo to brand
unknownproperty May 16, 2026
3b3f07b
fix: images for main
unknownproperty May 16, 2026
246dff3
fix: buttons in header
unknownproperty May 16, 2026
09b6992
fix: try to build
unknownproperty May 16, 2026
3b0b971
feat: update text styles
unknownproperty May 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions apps/xi.land/app/(withhero)/page.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
import dynamic from 'next/dynamic';
import { FeaturesBlock, Text, MessagesBlock } from 'components/main';
import {
CapabilitiesBlock,
CommunityBlock,
DevicesBlock,
MessagesBlock,
TutorIdeasBlock,
} from 'components/main';

import { Metadata } from 'next';
import Script from 'next/script';

// Ниже первого экрана — выносим в отдельные чанки, чтобы не раздувать основной бандл
const Benefits = dynamic(() => import('components/main').then((m) => m.Benefits), { ssr: true });
const Faq = dynamic(() => import('components/main').then((m) => m.Faq), { ssr: true });
const Telegram = dynamic(() => import('components/main').then((m) => m.Telegram), { ssr: true });

export const metadata: Metadata = {
title: 'Проводите уроки онлайн. Платформа для репетиторов sovlium',
Expand Down Expand Up @@ -91,16 +95,12 @@ export default function MainPage() {
dangerouslySetInnerHTML={{ __html: JSON.stringify(structuredData) }}
/>
<main>
<CapabilitiesBlock />
<TutorIdeasBlock />
<DevicesBlock />
<MessagesBlock />
<Text
className="text-balance text-center"
theme="light"
text="Поэтому мы создали sovlium — платформу для репетиторов, которая помогает оптимизировать процессы"
/>
<FeaturesBlock />
<Benefits />
<CommunityBlock />
<Faq />
<Telegram />
<section className="sr-only">
<h2>Расписание всегда под контролем</h2>
<p>Планируйте работу на день, неделю, месяц и год вперёд вместе с sovlium</p>
Expand Down
2 changes: 0 additions & 2 deletions apps/xi.land/app/head.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
export default function Head() {
return (
<>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossOrigin="anonymous" />
<link rel="dns-prefetch" href="https://mc.yandex.ru" />
<link rel="dns-prefetch" href="https://www.google-analytics.com" />

Expand Down
41 changes: 36 additions & 5 deletions apps/xi.land/app/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Metadata } from 'next';
import { Inter } from 'next/font/google';
import { Manrope } from 'next/font/google';
import localFont from 'next/font/local';

import { Header } from 'components/Header';
Expand Down Expand Up @@ -99,17 +99,48 @@ const markerHand = localFont({
fallback: ['cursive'],
});

const inter = Inter({
const manrope = Manrope({
weight: ['400', '500', '600', '700'],
style: ['normal'],
subsets: ['latin', 'cyrillic'],
display: 'swap',
variable: '--font-inter',
variable: '--font-manrope',
});

const neverMind = localFont({
src: [
{
path: '../public/fonts/NeverMind-Regular.ttf',
weight: '400',
style: 'normal',
},
{
path: '../public/fonts/NeverMind-Medium.ttf',
weight: '500',
style: 'normal',
},
{
path: '../public/fonts/NeverMind-DemiBold.ttf',
weight: '600',
style: 'normal',
},
{
path: '../public/fonts/NeverMind-Bold.ttf',
weight: '700',
style: 'normal',
},
],
display: 'swap',
variable: '--font-never-mind',
fallback: ['ui-sans-serif', 'system-ui', 'sans-serif'],
});

export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="ru" suppressHydrationWarning className={`${inter.variable} ${markerHand.variable}`}>
<html
lang="ru"
suppressHydrationWarning
className={`${neverMind.variable} ${markerHand.variable} ${manrope.variable}`}
>
<body>
{process.env.NODE_ENV === 'development' ? (
<></>
Expand Down
123 changes: 70 additions & 53 deletions apps/xi.land/components/Header.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { motion } from 'motion/react';
import { cn } from '@xipkg/utils';
import { useMediaQuery } from '@xipkg/utils';
import { Button } from '@xipkg/button';
import { ArrowRight } from '@xipkg/icons';
import { MobileNavigation, Navigation } from './navigation';

const HIDE_AFTER_DOWN = 80; // прячем хедер, если прокрутили вниз дальше 80 px
Expand Down Expand Up @@ -59,65 +60,81 @@ export const Header = () => {

return (
<header
data-theme="white"
className={cn(
'bg-gray-0 dark:bg-gray-100 fixed top-0 z-40 flex w-full justify-center transition-all duration-700 ease-in-out',
'fixed top-0 z-40 w-full bg-transparent transition-all duration-700 ease-in-out',
isShowHeader ? 'translate-y-0' : '-translate-y-full',
)}
>
<div className="bg-transparent z-10 py-6 pl-6 pr-6 justify-between w-full flex gap-0 xl:gap-12 relative items-center max-w-400 md:mx-auto">
{isDesktop ? (
<motion.div
initial={{ opacity: 0, x: -20 }}
animate={{ opacity: 1, x: 0 }}
transition={{ duration: 0.6, ease: 'easeOut' }}
className="h-16 flex items-center"
>
<Link
href="/"
className="w-54 md:w-38 lg:w-45 xl:w-54 h-16 md:h-12 lg:h-14 xl:h-16 relative inline-flex items-center gap-4"
>
<Image
src="/logoforwhite.svg"
alt="logo"
width={216}
height={48}
className="block transition-opacity duration-500 ease-in-out"
/>
</Link>
</motion.div>
) : (
<div className="h-16 flex items-center">
<Link
href="/"
className="w-54 md:w-38 lg:w-45 xl:w-54 h-16 md:h-12 lg:h-14 xl:h-16 relative inline-flex items-center gap-4"
>
<Image
src="/logoforwhite.svg"
alt="logo"
width={216}
height={48}
className="block transition-opacity duration-500 ease-in-out"
/>
</Link>
</div>
)}
<Navigation />
<div className="relative z-10 mx-auto w-full max-w-[1360px] px-4 pt-3 md:px-6 md:pt-4">
<div
data-theme="white"
className={cn(
'rounded-[20px] bg-gray-0 p-4 shadow-[0_8px_32px_rgba(15,15,17,0.06)] ring-1 ring-gray-10/70 dark:bg-gray-90 dark:ring-gray-20/80 md:p-5',
)}
>
<div className="mx-auto flex w-full max-w-[1320px] items-center justify-between gap-3 md:gap-6">
<div className="flex min-w-0 items-center gap-1.5">
{isDesktop ? (
<motion.div
initial={{ opacity: 0, x: -20 }}
animate={{ opacity: 1, x: 0 }}
transition={{ duration: 0.6, ease: 'easeOut' }}
className="flex h-12 shrink-0 items-center"
>
<Link href="/" className="relative inline-flex h-12 w-40 items-center">
<Image
src="/logoforwhite.svg"
alt="logo"
width={216}
height={48}
className="block h-auto max-h-12 w-auto max-w-[160px] transition-opacity duration-500 ease-in-out"
/>
</Link>
</motion.div>
) : (
<div className="flex h-12 shrink-0 items-center">
<Link href="/" className="relative inline-flex h-12 w-40 items-center">
<Image
src="/logoforwhite.svg"
alt="logo"
width={216}
height={48}
className="block h-auto max-h-12 w-auto max-w-[160px] transition-opacity duration-500 ease-in-out"
/>
</Link>
</div>
)}
</div>

<div className="hidden md:flex items-center gap-1.5 lg:gap-2.5 xl:gap-4">
<Button
asChild
variant="secondary"
className="text-sm lg:text-m-base md:px-3 lg:px-auto xl:w-53.5 bg-brand-0 bg-brand-0 dark:text-brand-80 hover:bg-brand-80 hover:text-brand-0 dark:hover:bg-brand-80 active:bg-brand-20 dark:active:bg-brand-20 focus:bg-brand-20 dark:focus:bg-brand-20"
>
<Link href="https://app.sovlium.ru/signup">Зарегистрироваться</Link>
</Button>
<Button asChild className="text-sm lg:text-m-base md:px-3 lg:px-auto xl:w-24">
<Link href="https://app.sovlium.ru/signin">Войти</Link>
</Button>
</div>
<div className="hidden min-h-0 flex-1 items-center justify-center md:flex">
<Navigation />
</div>

<MobileNavigation />
<div className="flex shrink-0 items-center justify-end gap-3">
<Button
asChild
variant="secondary"
className="min-w-[96px] hidden rounded-xl border-0 bg-brand-0 px-4 py-2.5 text-sm text-brand-100 hover:text-gray-0 hover:bg-brand-60 md:inline-flex lg:text-m-base"
>
<Link href="https://app.sovlium.ru/signin">Войти</Link>
</Button>
<Button
asChild
variant="primary"
className="hidden rounded-xl border-0 px-4 py-2.5 text-sm md:inline-flex lg:text-m-base"
>
<Link
href="https://app.sovlium.ru/signup"
className="flex items-center justify-center gap-2"
>
Зарегистрироваться
<ArrowRight className="size-4 shrink-0 fill-gray-0" aria-hidden />
</Link>
</Button>
<MobileNavigation />
</div>
</div>
</div>
</div>
</header>
);
Expand Down
66 changes: 0 additions & 66 deletions apps/xi.land/components/main/Benefits/Benefits.tsx

This file was deleted.

44 changes: 0 additions & 44 deletions apps/xi.land/components/main/Benefits/Sticker.tsx

This file was deleted.

Loading
Loading