# Squiggleverse Landing Page Design Document / Spec Sheet
## 1. Project Summary
**Project:** Squiggleverse landing page
**Primary goal:** Present Squiggleverse as a whimsical, polished, education-through-play platform using a simple, high-performing homepage structure.
**Recommended layout:**
1. Logo / hero branding
2. Embedded or self-hosted promo video
3. Short explanatory text
4. Optional CTA row: “Watch Demo,” “Join Mailing List,” “Contact Us”
**Core positioning text:**
> Squiggleverse is a modular, multi-platform, game-based “stealth” learning system that teaches grammar, usage, and style through innovative gameplay, whimsical characters, and creative narratives co-authored by the player.
The page should feel like a lightweight marketing splash page rather than a heavy SaaS homepage.
---
## 2. Recommended Web Stack
### Framework
Use **SvelteKit** as the primary framework.
SvelteKit is appropriate here because the landing page can be statically rendered, very fast, SEO-friendly, and simple to deploy. SvelteKit supports prerendering/static generation and server-side rendering options per route, which is ideal for a marketing page that may later grow into a larger app or dashboard.
### Suggested stack
```txt
SvelteKit
TypeScript
Vite
CSS / SCSS / PostCSS
Static adapter or platform adapter
PNPM
ESLint + Prettier
```
### Deployment targets
Good options:
```txt
Cloudflare Pages
Netlify
Vercel
Static hosting behind nginx/Caddy
CapRover container deployment
```
For this page, **static generation is preferred** unless the site needs dynamic personalization, server-side forms, authentication, or CMS previews.
Recommended SvelteKit page config:
```ts
// src/routes/+page.ts
export const prerender = true;
export const ssr = true;
```
For a landing page, keep SSR/prerendering enabled so the logo, text, metadata, and canonical content are present in the initial HTML.
---
## 3. Page Structure
### Route
```txt
/
```
### File layout
```txt
src/
lib/
assets/
squiggleverse-logo.webp
squiggleverse-bg.webp
squiggleverse-poster.webp
squiggleverse-demo.mp4
components/
HeroLogo.svelte
VideoCard.svelte
IntroText.svelte
CTAButtons.svelte
StarBackground.svelte
routes/
+layout.svelte
+layout.ts
+page.svelte
+page.ts
+error.svelte
app.html
app.css
static/
favicon.svg
robots.txt
site.webmanifest
og-image.webp
```
---
## 4. Visual Design Direction
### Overall style
The landing page should use:
```txt
Whimsical
Space-themed
Purple/violet palette
Soft glow effects
Rounded cards
Centered single-column layout
Large readable text
Minimal navigation
```
### Layout wireframe
```txt
┌─────────────────────────────────────┐
│ │
│ Logo │
│ │
│ ┌───────────────────┐ │
│ │ │ │
│ │ Video │ │
│ │ │ │
│ └───────────────────┘ │
│ │
│ Short description text │
│ │
│ [ Watch Demo ] [ Contact ] │
│ │
└─────────────────────────────────────┘
```
### Responsive behavior
#### Desktop
```txt
Max content width: 960–1100px
Logo width: 520–720px
Video width: 800–960px
Text width: 680–820px
```
#### Tablet
```txt
Content width: 90vw
Logo width: 70–80vw
Video width: 90vw
Text width: 80–90vw
```
#### Mobile
```txt
Single column
Logo width: 86vw
Video width: 92vw
Text centered or slightly left-aligned if readability suffers
Font size reduced carefully
```
---
## 5. Color System
Use a constrained purple palette.
```css
:root {
--color-bg-deep: #070014;
--color-bg-space: #160030;
--color-purple-dark: #2a0f56;
--color-purple: #6b3fb3;
--color-purple-light: #b58cff;
--color-lavender: #f1e7ff;
--color-white: #ffffff;
--color-cyan-accent: #43d8ff;
--glow-purple: 0 0 32px rgba(159, 95, 255, 0.45);
--border-purple: rgba(190, 143, 255, 0.38);
}
```
### Background
Use the provided starry background as a fullscreen visual layer.
Recommended CSS:
```css
.page {
min-height: 100svh;
background:
linear-gradient(
to bottom,
rgba(7, 0, 20, 0.2),
rgba(54, 0, 95, 0.35)
),
url('/assets/squiggleverse-bg.webp');
background-size: cover;
background-position: center top;
background-attachment: fixed;
}
```
For mobile, avoid `background-attachment: fixed` because it can cause jank.
```css
@media (max-width: 768px) {
.page {
background-attachment: scroll;
}
}
```
---
## 6. Typography
### Primary recommendation
Use a highly readable sans-serif for body copy.
Good options:
```txt
Atkinson Hyperlegible
Nunito Sans
Inter
Lexend
Source Sans 3
```
For an educational product, **Atkinson Hyperlegible** or **Lexend** would fit well because they emphasize readability.
### Font loading
Prefer self-hosted fonts using `@font-face`.
```css
@font-face {
font-family: 'Atkinson Hyperlegible';
src: url('/fonts/AtkinsonHyperlegible-Regular.woff2') format('woff2');
font-weight: 400;
font-display: swap;
}
```
Use `font-display: swap` to avoid invisible text during load.
---
## 7. Component Specification
### `HeroLogo.svelte`
Purpose:
```txt
Displays the Squiggleverse logo centered at the top.
```
Requirements:
```txt
Use actual provided logo asset.
Do not recreate the logo in text.
Use responsive sizing.
Include alt text.
Avoid layout shift by declaring width/height or aspect ratio.
```
Example:
```svelte
```
CSS:
```css
.hero-logo {
display: flex;
justify-content: center;
margin-inline: auto;
}
.hero-logo img {
width: min(720px, 88vw);
height: auto;
filter: drop-shadow(0 0 28px rgba(159, 95, 255, 0.45));
}
```
---
### `VideoCard.svelte`
Purpose:
```txt
Displays the main Squiggleverse video or poster/video preview.
```
Preferred implementation:
```txt
Use native