✨ "New" landing-page
@@ -40,6 +40,7 @@ specifiers:
|
|||||||
svelte-check: ^2.2.6
|
svelte-check: ^2.2.6
|
||||||
svelte-preprocess: ^4.10.1
|
svelte-preprocess: ^4.10.1
|
||||||
sveltejs-tippy: ^3.0.0
|
sveltejs-tippy: ^3.0.0
|
||||||
|
swiper: ^8.1.0
|
||||||
tailwindcss: ^3.0.12
|
tailwindcss: ^3.0.12
|
||||||
tslib: ^2.3.1
|
tslib: ^2.3.1
|
||||||
typescript: ~4.5.4
|
typescript: ~4.5.4
|
||||||
@@ -87,6 +88,7 @@ devDependencies:
|
|||||||
svelte-check: 2.4.5_bb21b93d557fc716a6ae071c4dce10e1
|
svelte-check: 2.4.5_bb21b93d557fc716a6ae071c4dce10e1
|
||||||
svelte-preprocess: 4.10.4_c54fd0a3479054b5002c3dc2e70c9c9a
|
svelte-preprocess: 4.10.4_c54fd0a3479054b5002c3dc2e70c9c9a
|
||||||
sveltejs-tippy: 3.0.0
|
sveltejs-tippy: 3.0.0
|
||||||
|
swiper: 8.1.0
|
||||||
tailwindcss: 3.0.23_autoprefixer@10.4.2
|
tailwindcss: 3.0.23_autoprefixer@10.4.2
|
||||||
tslib: 2.3.1
|
tslib: 2.3.1
|
||||||
typescript: 4.5.5
|
typescript: 4.5.5
|
||||||
@@ -1378,6 +1380,15 @@ packages:
|
|||||||
esutils: 2.0.3
|
esutils: 2.0.3
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/dom7/4.0.4:
|
||||||
|
resolution:
|
||||||
|
{
|
||||||
|
integrity: sha512-DSSgBzQ4rJWQp1u6o+3FVwMNnT5bzQbMb+o31TjYYeRi05uAcpF8koxdfzeoe5ElzPmua7W7N28YJhF7iEKqIw==
|
||||||
|
}
|
||||||
|
dependencies:
|
||||||
|
ssr-window: 4.0.2
|
||||||
|
dev: true
|
||||||
|
|
||||||
/duplexify/3.7.1:
|
/duplexify/3.7.1:
|
||||||
resolution:
|
resolution:
|
||||||
{
|
{
|
||||||
@@ -3639,6 +3650,13 @@ packages:
|
|||||||
resolution: { integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= }
|
resolution: { integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= }
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/ssr-window/4.0.2:
|
||||||
|
resolution:
|
||||||
|
{
|
||||||
|
integrity: sha512-ISv/Ch+ig7SOtw7G2+qkwfVASzazUnvlDTwypdLoPoySv+6MqlOV10VwPSE6EWkGjhW50lUmghPmpYZXMu/+AQ==
|
||||||
|
}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/standard-as-callback/2.1.0:
|
/standard-as-callback/2.1.0:
|
||||||
resolution:
|
resolution:
|
||||||
{
|
{
|
||||||
@@ -3856,6 +3874,18 @@ packages:
|
|||||||
tippy.js: 6.0.3
|
tippy.js: 6.0.3
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/swiper/8.1.0:
|
||||||
|
resolution:
|
||||||
|
{
|
||||||
|
integrity: sha512-Py2vuk7Nb3xlZMB2e201DQkjslTb6Uaju6wvr4BB7VjWrouSZegA0QjbxDVheJOsbKMUV092iDL3kymPBbuVzw==
|
||||||
|
}
|
||||||
|
engines: { node: '>= 4.7.0' }
|
||||||
|
requiresBuild: true
|
||||||
|
dependencies:
|
||||||
|
dom7: 4.0.4
|
||||||
|
ssr-window: 4.0.2
|
||||||
|
dev: true
|
||||||
|
|
||||||
/table/6.8.0:
|
/table/6.8.0:
|
||||||
resolution:
|
resolution:
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
*.png
|
||||||
|
*.xcf
|
||||||
|
After Width: | Height: | Size: 7.6 KiB |
|
After Width: | Height: | Size: 58 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 47 KiB |
@@ -0,0 +1,110 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
/*
|
||||||
|
import AdminOverviewScreenshot from '$lib/assets/landing/admin_overview.png';
|
||||||
|
import SelectScreenshot from '$lib/assets/landing/select.webp';
|
||||||
|
import ResultsScreenshot from '$lib/assets/landing/results.webp';
|
||||||
|
import SolutionScreenshot from '$lib/assets/landing/solution.webp';
|
||||||
|
*/
|
||||||
|
import SelectMockup from '$lib/assets/landing/select-mockup.webp';
|
||||||
|
import ResultsMockup from '$lib/assets/landing/results-mockup.webp';
|
||||||
|
import SolutionMockup from '$lib/assets/landing/solution-mockup.webp';
|
||||||
|
import ImportSelectMockup from '$lib/assets/landing/import-select-mockup.webp';
|
||||||
|
import OverviewMockup from '$lib/assets/landing/overview-mockup.webp';
|
||||||
|
|
||||||
|
let teacherTab = false;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="grid grid-cols-1 overflow-hidden h-fit">
|
||||||
|
{#if teacherTab}
|
||||||
|
<div class="h-fit">
|
||||||
|
<!-- <h1 class='text-5xl marck-script text-center pt-4'>Teacher</h1>-->
|
||||||
|
|
||||||
|
<div class="grid grid-cols-2 grow pt-4 transition ease-in-out">
|
||||||
|
<h1 class="text-center text-3xl marck-script">1: Create or Import</h1>
|
||||||
|
<h1 class="text-center text-3xl marck-script">2: See all your quizzes</h1>
|
||||||
|
<!-- <h1 class='text-center text-3xl marck-script'>3: See how many were right or wrong</h1>-->
|
||||||
|
|
||||||
|
<div class="flex justify-center">
|
||||||
|
<img src={ImportSelectMockup} class="w-4/6 align-top" alt="Select answer" />
|
||||||
|
</div>
|
||||||
|
<div class="flex justify-center">
|
||||||
|
<img
|
||||||
|
src={OverviewMockup}
|
||||||
|
class="w-4/6 align-top"
|
||||||
|
alt="See right and wrong solutions"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<!-- <div class='flex justify-center'>-->
|
||||||
|
<!-- <img-->
|
||||||
|
<!-- src={ResultsMockup}-->
|
||||||
|
<!-- class='max-h-80 align-top'-->
|
||||||
|
<!-- alt='See results in comparison with other players'-->
|
||||||
|
<!-- />-->
|
||||||
|
<!-- </div>-->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{:else}
|
||||||
|
<div class="h-fit">
|
||||||
|
<!-- <h1 class='text-5xl marck-script text-center pt-4'>Student</h1>-->
|
||||||
|
<div class="grid grid-cols-3 grow pt-4 transition ease-in-out">
|
||||||
|
<h1 class="text-center text-3xl marck-script">1: Answer</h1>
|
||||||
|
<h1 class="text-center text-3xl marck-script">2: See what was right or wrong</h1>
|
||||||
|
<h1 class="text-center text-3xl marck-script">
|
||||||
|
3: See how many were right or wrong
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<div class="flex justify-center">
|
||||||
|
<img src={SelectMockup} class="w-4/6 align-top" alt="Select answer" />
|
||||||
|
</div>
|
||||||
|
<div class="flex justify-center">
|
||||||
|
<img
|
||||||
|
src={SolutionMockup}
|
||||||
|
class="w-4/6 align-top"
|
||||||
|
alt="See right and wrong solutions"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="flex justify-center">
|
||||||
|
<img
|
||||||
|
src={ResultsMockup}
|
||||||
|
class="w-4/6 align-top"
|
||||||
|
alt="See results in comparison with other players"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
<div class="w-full h-fit pt-4">
|
||||||
|
<div class="flex justify-center">
|
||||||
|
<div class="flex justify-evenly lg:w-2/6">
|
||||||
|
{#if teacherTab}
|
||||||
|
<button
|
||||||
|
class="border border-blue-600 p-2 border-2 rounded hover:bg-gray-700 text-2xl"
|
||||||
|
on:click={() => {
|
||||||
|
teacherTab = true;
|
||||||
|
}}
|
||||||
|
>Teacher's site
|
||||||
|
</button>
|
||||||
|
{:else}
|
||||||
|
<button
|
||||||
|
class="border border-black p-2 border-2 rounded hover:bg-gray-700 text-base"
|
||||||
|
class:border-black={!teacherTab}
|
||||||
|
class:text-base={!teacherTab}
|
||||||
|
on:click={() => {
|
||||||
|
teacherTab = true;
|
||||||
|
}}
|
||||||
|
>Teacher's site
|
||||||
|
</button>
|
||||||
|
{/if}
|
||||||
|
<button
|
||||||
|
class="border border-black p-2 border-2 rounded hover:bg-gray-700"
|
||||||
|
class:border-blue-600={!teacherTab}
|
||||||
|
class:text-2xl={!teacherTab}
|
||||||
|
on:click={() => {
|
||||||
|
teacherTab = false;
|
||||||
|
}}
|
||||||
|
>Studen's site
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import { Swiper, SwiperSlide } from 'swiper/svelte';
|
||||||
|
import { Autoplay } from 'swiper';
|
||||||
|
import 'swiper/css';
|
||||||
|
// import 'swiper/css/autoplay';
|
||||||
|
|
||||||
|
const testimotionals = [
|
||||||
|
{
|
||||||
|
quote: 'Great programm!',
|
||||||
|
name: 'John Doe',
|
||||||
|
source: 'https://t.co'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
quote:
|
||||||
|
'The Landscaping Professionals were quick, courteous and very helpful. They\n' +
|
||||||
|
' helped me restore my lawn and gardens completely after putting in my deck.\n' +
|
||||||
|
' I was worried it wouldn’t be done in time for my garden party, but they\n' +
|
||||||
|
' finished the job with time to spare!',
|
||||||
|
name: 'Jane Doe',
|
||||||
|
source: 'https://t.co'
|
||||||
|
}
|
||||||
|
];
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="grid grid-cols-3">
|
||||||
|
<div class="col-start-2">
|
||||||
|
<Swiper
|
||||||
|
centeredSlides={true}
|
||||||
|
modules={[Autoplay]}
|
||||||
|
autoplay={{
|
||||||
|
delay: 3000,
|
||||||
|
disableOnInteraction: false
|
||||||
|
}}
|
||||||
|
loop={true}
|
||||||
|
>
|
||||||
|
{#each testimotionals as testi}
|
||||||
|
<SwiperSlide>
|
||||||
|
<div class="flex justify-center">
|
||||||
|
<div class="max-w-3xl p-4 text-gray-800 rounded-lg text-white">
|
||||||
|
<div class="mb-2">
|
||||||
|
<div class="h-3 text-3xl text-left text-indigo-600">“</div>
|
||||||
|
<p class="px-4 text-center text-gray-200">
|
||||||
|
{testi.quote}
|
||||||
|
</p>
|
||||||
|
<div class="h-3 text-3xl text-right text-indigo-600">”</div>
|
||||||
|
<div class="text-center">
|
||||||
|
<h5 class="font-bold text-indigo-600">{testi.name}</h5>
|
||||||
|
<a class="text-sm text-gray-600" href={testi.source}>Source</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</SwiperSlide>
|
||||||
|
{/each}
|
||||||
|
</Swiper>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
background-size: cover;
|
background-size: cover;
|
||||||
/*background: linear-gradient(-225deg, #231557 0%, #44107A 29%, #FF1361 67%, #FFF800 100%); */
|
/*background: linear-gradient(-225deg, #231557 0%, #44107A 29%, #FF1361 67%, #FFF800 100%); */
|
||||||
/*background: linear-gradient(-225deg, #22E1FF 0%, #1D8FE1 48%, #625EB1 100%); */
|
/*background: linear-gradient(-225deg, #22E1FF 0%, #1D8FE1 48%, #625EB1 100%); */
|
||||||
color: beige;
|
color: black;
|
||||||
|
|
||||||
// background-size: 400% 400%;
|
// background-size: 400% 400%;
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,8 @@
|
|||||||
import { getLocalization } from '$lib/i18n';
|
import { getLocalization } from '$lib/i18n';
|
||||||
import Footer from '$lib/footer.svelte';
|
import Footer from '$lib/footer.svelte';
|
||||||
|
|
||||||
|
import LandingPromo from '$lib/landing/landing-promo.svelte';
|
||||||
|
|
||||||
const { t } = getLocalization();
|
const { t } = getLocalization();
|
||||||
|
|
||||||
navbarVisible.set(true);
|
navbarVisible.set(true);
|
||||||
@@ -54,8 +56,24 @@
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
<section id="features">
|
|
||||||
<div class="text-center pt-24 snap-y">
|
<section class="py-8">
|
||||||
|
<h1 class="sm:text-6xl text-4xl text-center">Screenshots</h1>
|
||||||
|
<div>
|
||||||
|
<LandingPromo />
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
<section>
|
||||||
|
<h1 class='sm:text-6xl text-4xl text-center'>Testimonials</h1>
|
||||||
|
{#await import('$lib/landing/testimonials.svelte') then testimonials}
|
||||||
|
<svelte:component this={testimonials.default} />
|
||||||
|
{/await}
|
||||||
|
</section>
|
||||||
|
-->
|
||||||
|
<section id="features" class='mt-8'>
|
||||||
|
<div class="text-center snap-y">
|
||||||
<h1 class="sm:text-6xl text-4xl">{$t('words.features')}</h1>
|
<h1 class="sm:text-6xl text-4xl">{$t('words.features')}</h1>
|
||||||
<p class="text-xl pt-4">
|
<p class="text-xl pt-4">
|
||||||
{$t('index_page.features_description.1')}
|
{$t('index_page.features_description.1')}
|
||||||
|
|||||||
@@ -17,6 +17,9 @@ const config = {
|
|||||||
precompress: true
|
precompress: true
|
||||||
}),
|
}),
|
||||||
vite: {
|
vite: {
|
||||||
|
optimizeDeps: {
|
||||||
|
include: ['swiper']
|
||||||
|
},
|
||||||
build: {
|
build: {
|
||||||
sourcemap: true
|
sourcemap: true
|
||||||
}
|
}
|
||||||
|
|||||||