Initial Commit

This commit is contained in:
openhands
2025-10-05 19:30:16 +00:00
commit 0eec6fa2e4
20 changed files with 4922 additions and 0 deletions

25
.gitignore vendored Normal file
View File

@@ -0,0 +1,25 @@
node_modules
.browser_screenshots
.vscode
# Output
.output
.vercel
.netlify
.wrangler
/.svelte-kit
/build
# OS
.DS_Store
Thumbs.db
# Env
.env
.env.*
!.env.example
!.env.test
# Vite
vite.config.js.timestamp-*
vite.config.ts.timestamp-*

1
.npmrc Normal file
View File

@@ -0,0 +1 @@
engine-strict=true

243
README.md Normal file
View File

@@ -0,0 +1,243 @@
# Responsive Grid Skeleton
A clean, minimal skeleton framework for building responsive, grid-based websites with SvelteKit, TailwindCSS, and DaisyUI.
## 🚀 Features
- **Mobile-First Design**: All layouts start with mobile and scale up
- **Responsive Grid System**: Flexible CSS Grid and Flexbox layouts
- **Modern Tech Stack**: SvelteKit 2.0, TailwindCSS 3.4, DaisyUI 5.1
- **Comprehensive Documentation**: Detailed comments explaining every pattern
- **Accessibility Ready**: ARIA labels, keyboard navigation, screen reader support
- **Performance Optimized**: Minimal bundle size and fast loading times
- **TypeScript Support**: Full type safety out of the box
## 📱 Responsive Breakpoints
The framework uses TailwindCSS's responsive breakpoints:
- **Mobile**: Default (0px+) - Single column layouts, stacked content
- **Small**: `sm:` 640px+ - Small tablets, 2-column layouts
- **Medium**: `md:` 768px+ - Tablets, 2-3 column layouts
- **Large**: `lg:` 1024px+ - Laptops, multi-column layouts
- **Extra Large**: `xl:` 1280px+ - Desktops, maximum columns
- **2X Large**: `2xl:` 1536px+ - Large desktops, spacious layouts
## 🎯 Grid Layout Patterns
### Basic Responsive Grid
```html
<!-- 1 column on mobile, 2 on tablet, 3 on desktop -->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
```
### Asymmetric Layout (2:1 Ratio)
```html
<!-- Main content + sidebar layout -->
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
<div class="lg:col-span-2">Main Content</div>
<div class="lg:col-span-1">Sidebar</div>
</div>
```
### Mixed Column Spans
```html
<!-- Complex layouts with different column spans -->
<div class="grid grid-cols-1 md:grid-cols-4 gap-6">
<div class="md:col-span-4">Full Width Header</div>
<div class="md:col-span-3">Main Area</div>
<div class="md:col-span-1">Sidebar</div>
<div class="md:col-span-2">Half Width</div>
<div class="md:col-span-2">Half Width</div>
</div>
```
## 🏗️ Project Structure
```
src/
├── routes/
│ ├── +layout.svelte # Main layout with navigation
│ ├── +page.svelte # Homepage with grid examples
│ ├── about/
│ │ └── +page.svelte # About page (content layout example)
│ └── contact/
│ └── +page.svelte # Contact page (form layout example)
├── app.css # Global styles and custom CSS
└── app.html # HTML template
```
## 🎨 Container Patterns
### Centered Container
```html
<!-- Standard centered container with responsive padding -->
<div class="container mx-auto px-4">
<!-- Content -->
</div>
```
### Custom Max-Width
```html
<!-- Custom max-width container -->
<div class="max-w-7xl mx-auto px-4">
<!-- Content -->
</div>
```
### Full Width
```html
<!-- Full width within parent -->
<div class="w-full">
<!-- Content -->
</div>
```
## 📏 Spacing Patterns
### Responsive Grid Gaps
```html
<!-- Responsive spacing between grid items -->
<div class="grid gap-4 md:gap-6 lg:gap-8">
<!-- Items -->
</div>
```
### Responsive Padding
```html
<!-- Responsive padding -->
<div class="p-4 md:p-6 lg:p-8">
<!-- Content -->
</div>
```
### Responsive Vertical Spacing
```html
<!-- Responsive vertical spacing between elements -->
<div class="space-y-4 md:space-y-6 lg:space-y-8">
<!-- Elements -->
</div>
```
## 🚀 Getting Started
1. **Clone or download** this skeleton project
2. **Install dependencies**:
```bash
npm install
```
3. **Start development server**:
```bash
npm run dev
```
4. **Start building** your responsive website!
## 🛠️ Development Commands
- `npm run dev` - Start development server
- `npm run build` - Build for production
- `npm run preview` - Preview production build
- `npm run check` - Run TypeScript checks
## 📚 Best Practices
### Mobile-First Approach
Always start with mobile styles and add larger breakpoints:
```html
<!-- ✅ Good: Mobile-first -->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3">
<!-- ❌ Avoid: Desktop-first -->
<div class="grid grid-cols-3 lg:grid-cols-3 md:grid-cols-2 grid-cols-1">
```
### Semantic HTML
Use proper HTML5 semantic elements:
```html
<header>Navigation</header>
<main>
<section>Content sections</section>
<aside>Sidebar content</aside>
</main>
<footer>Footer content</footer>
```
### Accessibility
Include proper ARIA labels and keyboard navigation:
```html
<button aria-label="Toggle menu" class="lg:hidden">
<Menu class="h-6 w-6" />
</button>
```
## 🎨 Customization
### Colors
Customize the color scheme in `tailwind.config.js`:
```javascript
module.exports = {
// ... other config
daisyui: {
themes: [
{
mytheme: {
"primary": "#your-color",
"secondary": "#your-color",
// ... other colors
},
},
],
},
}
```
### Breakpoints
Add custom breakpoints in `tailwind.config.js`:
```javascript
module.exports = {
theme: {
screens: {
'xs': '475px',
// ... default breakpoints
'3xl': '1600px',
}
}
}
```
## 📦 Tech Stack
- **[SvelteKit](https://kit.svelte.dev/)** - Full-stack web framework
- **[TailwindCSS](https://tailwindcss.com/)** - Utility-first CSS framework
- **[DaisyUI](https://daisyui.com/)** - Component library for TailwindCSS
- **[Lucide Svelte](https://lucide.dev/)** - Beautiful & consistent icons
- **[TypeScript](https://www.typescriptlang.org/)** - Type safety
- **[Vite](https://vitejs.dev/)** - Fast build tool
## 🤝 Contributing
This is a skeleton framework meant to be customized for your projects. Feel free to:
1. Fork this repository
2. Customize it for your needs
3. Share improvements back to the community
## 📄 License
This project is open source and available under the [MIT License](LICENSE).
## 🆘 Support
- Check the example pages for common patterns
- Review the comprehensive comments in the code
- Open an issue for bugs or feature requests
---
**Happy building!** 🎉
Use this skeleton as your starting point for creating beautiful, responsive, and accessible web applications.

3463
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

32
package.json Normal file
View File

@@ -0,0 +1,32 @@
{
"name": "responsive-grid-skeleton",
"private": true,
"version": "1.0.0",
"type": "module",
"description": "A clean, minimal skeleton for building responsive, grid-based websites with SvelteKit, TailwindCSS, and DaisyUI",
"keywords": ["svelte", "sveltekit", "tailwindcss", "daisyui", "responsive", "grid", "skeleton", "framework"],
"scripts": {
"dev": "vite dev",
"build": "vite build",
"preview": "vite preview",
"prepare": "svelte-kit sync || echo ''",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch"
},
"devDependencies": {
"@sveltejs/adapter-auto": "^6.1.0",
"@sveltejs/kit": "^2.43.2",
"@sveltejs/vite-plugin-svelte": "^6.2.0",
"autoprefixer": "^10.4.21",
"daisyui": "^5.1.27",
"postcss": "^8.5.6",
"svelte": "^5.39.5",
"svelte-check": "^4.3.2",
"tailwindcss": "^3.4.18",
"typescript": "^5.9.2",
"vite": "^7.1.7"
},
"dependencies": {
"lucide-svelte": "^0.544.0"
}
}

6
postcss.config.js Normal file
View File

@@ -0,0 +1,6 @@
export default {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}

35
src/app.css Normal file
View File

@@ -0,0 +1,35 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
/* Custom styles for the games shop */
@layer components {
.card-hover {
@apply transition-all duration-300 hover:shadow-lg hover:-translate-y-1;
}
.btn-primary-custom {
@apply btn btn-primary hover:btn-primary-focus;
}
.text-gradient {
@apply bg-gradient-to-r from-primary to-secondary bg-clip-text text-transparent;
}
}
/* Custom scrollbar */
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
@apply bg-base-200;
}
::-webkit-scrollbar-thumb {
@apply bg-primary rounded-full;
}
::-webkit-scrollbar-thumb:hover {
background-color: hsl(var(--p) / 0.8);
}

13
src/app.d.ts vendored Normal file
View File

@@ -0,0 +1,13 @@
// See https://svelte.dev/docs/kit/types#app.d.ts
// for information about these interfaces
declare global {
namespace App {
// interface Error {}
// interface Locals {}
// interface PageData {}
// interface PageState {}
// interface Platform {}
}
}
export {};

13
src/app.html Normal file
View File

@@ -0,0 +1,13 @@
<!doctype html>
<html lang="en" data-theme="gamestore">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>GameHub - Your Local Games Shop</title>
<meta name="description" content="Your local destination for board games, card games, and gaming events" />
%sveltekit.head%
</head>
<body data-sveltekit-preload-data="hover" class="min-h-screen bg-base-100">
<div style="display: contents">%sveltekit.body%</div>
</body>
</html>

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="107" height="128" viewBox="0 0 107 128"><title>svelte-logo</title><path d="M94.157 22.819c-10.4-14.885-30.94-19.297-45.792-9.835L22.282 29.608A29.92 29.92 0 0 0 8.764 49.65a31.5 31.5 0 0 0 3.108 20.231 30 30 0 0 0-4.477 11.183 31.9 31.9 0 0 0 5.448 24.116c10.402 14.887 30.942 19.297 45.791 9.835l26.083-16.624A29.92 29.92 0 0 0 98.235 78.35a31.53 31.53 0 0 0-3.105-20.232 30 30 0 0 0 4.474-11.182 31.88 31.88 0 0 0-5.447-24.116" style="fill:#ff3e00"/><path d="M45.817 106.582a20.72 20.72 0 0 1-22.237-8.243 19.17 19.17 0 0 1-3.277-14.503 18 18 0 0 1 .624-2.435l.49-1.498 1.337.981a33.6 33.6 0 0 0 10.203 5.098l.97.294-.09.968a5.85 5.85 0 0 0 1.052 3.878 6.24 6.24 0 0 0 6.695 2.485 5.8 5.8 0 0 0 1.603-.704L69.27 76.28a5.43 5.43 0 0 0 2.45-3.631 5.8 5.8 0 0 0-.987-4.371 6.24 6.24 0 0 0-6.698-2.487 5.7 5.7 0 0 0-1.6.704l-9.953 6.345a19 19 0 0 1-5.296 2.326 20.72 20.72 0 0 1-22.237-8.243 19.17 19.17 0 0 1-3.277-14.502 17.99 17.99 0 0 1 8.13-12.052l26.081-16.623a19 19 0 0 1 5.3-2.329 20.72 20.72 0 0 1 22.237 8.243 19.17 19.17 0 0 1 3.277 14.503 18 18 0 0 1-.624 2.435l-.49 1.498-1.337-.98a33.6 33.6 0 0 0-10.203-5.1l-.97-.294.09-.968a5.86 5.86 0 0 0-1.052-3.878 6.24 6.24 0 0 0-6.696-2.485 5.8 5.8 0 0 0-1.602.704L37.73 51.72a5.42 5.42 0 0 0-2.449 3.63 5.79 5.79 0 0 0 .986 4.372 6.24 6.24 0 0 0 6.698 2.486 5.8 5.8 0 0 0 1.602-.704l9.952-6.342a19 19 0 0 1 5.295-2.328 20.72 20.72 0 0 1 22.237 8.242 19.17 19.17 0 0 1 3.277 14.503 18 18 0 0 1-8.13 12.053l-26.081 16.622a19 19 0 0 1-5.3 2.328" style="fill:#fff"/></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

1
src/lib/index.ts Normal file
View File

@@ -0,0 +1 @@
// place files you want to import through the `$lib` alias in this folder.

171
src/routes/+layout.svelte Normal file
View File

@@ -0,0 +1,171 @@
<!--
RESPONSIVE GRID LAYOUT FRAMEWORK
This layout provides a foundation for building responsive, grid-based websites.
KEY RESPONSIVE BREAKPOINTS (TailwindCSS):
- sm: 640px and up (small tablets)
- md: 768px and up (tablets)
- lg: 1024px and up (laptops)
- xl: 1280px and up (desktops)
- 2xl: 1536px and up (large desktops)
GRID LAYOUT PATTERNS:
- Mobile-first approach: Start with single column, expand upward
- Use grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 for responsive columns
- Use col-span-full for full-width elements across all columns
- Use col-span-2 lg:col-span-3 for elements that span multiple columns
CONTAINER PATTERNS:
- container mx-auto px-4: Centered container with responsive padding
- max-w-7xl mx-auto: Custom max-width container
- w-full: Full width within parent
SPACING PATTERNS:
- gap-4 md:gap-6 lg:gap-8: Responsive grid gaps
- p-4 md:p-6 lg:p-8: Responsive padding
- space-y-4 md:space-y-6: Responsive vertical spacing
-->
<script lang="ts">
import '../app.css';
import { Menu, X } from 'lucide-svelte';
let mobileMenuOpen = $state(false);
function toggleMobileMenu() {
mobileMenuOpen = !mobileMenuOpen;
}
</script>
<!--
MAIN LAYOUT STRUCTURE
- min-h-screen: Ensures full viewport height
- bg-base-200: DaisyUI background color that adapts to theme
-->
<div class="min-h-screen bg-base-200">
<!--
RESPONSIVE NAVIGATION
- Hidden on mobile (lg:flex), shows hamburger menu instead
- Full navigation on desktop screens
-->
<nav class="bg-base-100 shadow-lg">
<div class="container mx-auto px-4">
<div class="flex items-center justify-between h-16">
<!-- Logo/Brand -->
<a href="/" class="text-2xl font-bold text-primary">
Skeleton
</a>
<!-- Desktop Navigation (hidden on mobile) -->
<div class="hidden lg:flex space-x-8">
<a href="/" class="text-base-content hover:text-primary transition-colors">
Home
</a>
<a href="/about" class="text-base-content hover:text-primary transition-colors">
About
</a>
<a href="/contact" class="text-base-content hover:text-primary transition-colors">
Contact
</a>
</div>
<!-- Mobile Menu Button (visible on mobile only) -->
<button
class="lg:hidden btn btn-ghost btn-square"
onclick={toggleMobileMenu}
aria-label="Toggle menu"
>
{#if mobileMenuOpen}
<X class="h-6 w-6" />
{:else}
<Menu class="h-6 w-6" />
{/if}
</button>
</div>
<!-- Mobile Navigation Menu (toggleable) -->
{#if mobileMenuOpen}
<div class="lg:hidden border-t border-base-300">
<div class="px-2 pt-2 pb-3 space-y-1">
<a href="/" class="block px-3 py-2 text-base-content hover:bg-base-200 rounded">
Home
</a>
<a href="/about" class="block px-3 py-2 text-base-content hover:bg-base-200 rounded">
About
</a>
<a href="/contact" class="block px-3 py-2 text-base-content hover:bg-base-200 rounded">
Contact
</a>
</div>
</div>
{/if}
</div>
</nav>
<!--
MAIN CONTENT AREA
- flex-1: Takes remaining space between header and footer
- This is where page content will be rendered
-->
<main class="flex-1">
<slot />
</main>
<!--
RESPONSIVE FOOTER
- Uses grid layout that adapts from 1 column on mobile to 3 columns on desktop
- Demonstrates responsive grid patterns
-->
<footer class="bg-base-300 text-base-content mt-auto">
<div class="container mx-auto px-4 py-8">
<!--
RESPONSIVE GRID EXAMPLE
- grid-cols-1: Single column on mobile
- md:grid-cols-2: Two columns on tablets
- lg:grid-cols-3: Three columns on desktop
- gap-8: Consistent spacing between grid items
-->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
<!-- Footer Column 1 -->
<div>
<h3 class="font-semibold mb-4">Navigation</h3>
<nav class="flex flex-col space-y-2">
<a href="/" class="link link-hover">Home</a>
<a href="/about" class="link link-hover">About</a>
<a href="/contact" class="link link-hover">Contact</a>
</nav>
</div>
<!-- Footer Column 2 -->
<div>
<h3 class="font-semibold mb-4">Information</h3>
<div class="space-y-2 text-sm">
<p>This is a skeleton framework for responsive grid layouts.</p>
<p>Built with SvelteKit, TailwindCSS, and DaisyUI.</p>
</div>
</div>
<!-- Footer Column 3 (hidden on mobile, shows on tablet+) -->
<div class="hidden md:block">
<h3 class="font-semibold mb-4">Framework</h3>
<div class="space-y-2 text-sm">
<p>Mobile-first responsive design</p>
<p>Grid-based layout system</p>
<p>Accessible components</p>
</div>
</div>
</div>
<!-- Footer Bottom -->
<div class="divider"></div>
<div class="text-center text-sm">
<p>© 2024 Responsive Grid Skeleton. Built for scalable web development.</p>
</div>
</div>
</footer>
</div>

327
src/routes/+page.svelte Normal file
View File

@@ -0,0 +1,327 @@
<!--
RESPONSIVE GRID EXAMPLES PAGE
This page demonstrates various responsive grid patterns and best practices.
Use these patterns as templates for building responsive layouts.
-->
<script lang="ts">
import { Grid, Layout, Smartphone, Tablet, Monitor } from 'lucide-svelte';
</script>
<svelte:head>
<title>Responsive Grid Skeleton</title>
<meta name="description" content="A skeleton framework for responsive, grid-based web layouts" />
</svelte:head>
<!--
HERO SECTION
- Full-width hero with centered content
- Responsive padding and text sizes
-->
<section class="bg-gradient-to-br from-primary to-secondary text-primary-content">
<div class="container mx-auto px-4 py-16 md:py-24">
<div class="text-center max-w-4xl mx-auto">
<h1 class="text-4xl md:text-6xl font-bold mb-6">
Responsive Grid Framework
</h1>
<p class="text-xl md:text-2xl mb-8 opacity-90">
A clean, minimal skeleton for building responsive, grid-based websites with SvelteKit, TailwindCSS, and DaisyUI.
</p>
<div class="flex flex-col sm:flex-row gap-4 justify-center">
<button class="btn btn-accent btn-lg">Get Started</button>
<button class="btn btn-outline btn-lg">View Examples</button>
</div>
</div>
</div>
</section>
<!--
FEATURES SECTION
- Responsive grid: 1 column on mobile, 2 on tablet, 3 on desktop
- Equal height cards using grid
-->
<section class="py-16 md:py-24">
<div class="container mx-auto px-4">
<div class="text-center mb-12">
<h2 class="text-3xl md:text-4xl font-bold mb-4">Framework Features</h2>
<p class="text-lg text-base-content/70 max-w-2xl mx-auto">
Built with modern web technologies and responsive design principles.
</p>
</div>
<!--
RESPONSIVE FEATURE GRID
- grid-cols-1: Single column on mobile (default)
- md:grid-cols-2: Two columns on tablets (768px+)
- lg:grid-cols-3: Three columns on desktop (1024px+)
- gap-8: Consistent spacing between items
-->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
<!-- Feature Card 1 -->
<div class="card bg-base-100 shadow-lg">
<div class="card-body text-center">
<div class="mx-auto mb-4 p-3 bg-primary/10 rounded-full w-fit">
<Smartphone class="h-8 w-8 text-primary" />
</div>
<h3 class="card-title justify-center">Mobile First</h3>
<p>Designed with mobile-first responsive principles for optimal performance on all devices.</p>
</div>
</div>
<!-- Feature Card 2 -->
<div class="card bg-base-100 shadow-lg">
<div class="card-body text-center">
<div class="mx-auto mb-4 p-3 bg-secondary/10 rounded-full w-fit">
<Grid class="h-8 w-8 text-secondary" />
</div>
<h3 class="card-title justify-center">Grid System</h3>
<p>Flexible CSS Grid and Flexbox layouts that adapt seamlessly across breakpoints.</p>
</div>
</div>
<!-- Feature Card 3 -->
<div class="card bg-base-100 shadow-lg">
<div class="card-body text-center">
<div class="mx-auto mb-4 p-3 bg-accent/10 rounded-full w-fit">
<Layout class="h-8 w-8 text-accent" />
</div>
<h3 class="card-title justify-center">Clean Code</h3>
<p>Well-documented, semantic HTML with comprehensive comments and best practices.</p>
</div>
</div>
</div>
</div>
</section>
<!--
GRID EXAMPLES SECTION
- Demonstrates various grid patterns
- Shows responsive behavior at different breakpoints
-->
<section class="py-16 md:py-24 bg-base-200">
<div class="container mx-auto px-4">
<div class="text-center mb-12">
<h2 class="text-3xl md:text-4xl font-bold mb-4">Grid Layout Examples</h2>
<p class="text-lg text-base-content/70 max-w-2xl mx-auto">
Common responsive grid patterns you can use in your projects.
</p>
</div>
<!--
EXAMPLE 1: ASYMMETRIC GRID
- Main content takes 2/3 width on desktop
- Sidebar takes 1/3 width on desktop
- Stacks vertically on mobile
-->
<div class="mb-16">
<h3 class="text-2xl font-semibold mb-6">Asymmetric Layout (2:1 Ratio)</h3>
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
<!-- Main Content Area (spans 2 columns on desktop) -->
<div class="lg:col-span-2">
<div class="card bg-base-100 shadow-lg">
<div class="card-body">
<h4 class="card-title">Main Content Area</h4>
<p>This area spans 2 columns on desktop (lg:col-span-2) but takes full width on mobile. Perfect for main content, articles, or primary information.</p>
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4 mt-4">
<div class="bg-base-200 p-4 rounded">Sub-item 1</div>
<div class="bg-base-200 p-4 rounded">Sub-item 2</div>
</div>
</div>
</div>
</div>
<!-- Sidebar (spans 1 column) -->
<div class="lg:col-span-1">
<div class="card bg-base-100 shadow-lg">
<div class="card-body">
<h4 class="card-title">Sidebar</h4>
<p>This sidebar spans 1 column on desktop but stacks below main content on mobile.</p>
<div class="space-y-3 mt-4">
<div class="bg-base-200 p-3 rounded text-sm">Widget 1</div>
<div class="bg-base-200 p-3 rounded text-sm">Widget 2</div>
<div class="bg-base-200 p-3 rounded text-sm">Widget 3</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!--
EXAMPLE 2: EQUAL COLUMNS
- 1 column on mobile
- 2 columns on tablet
- 4 columns on desktop
-->
<div class="mb-16">
<h3 class="text-2xl font-semibold mb-6">Equal Columns (1→2→4)</h3>
<div class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-4 gap-6">
<div class="card bg-base-100 shadow-lg">
<div class="card-body">
<h4 class="card-title text-lg">Column 1</h4>
<p>Equal width columns that adapt: 1 on mobile, 2 on tablet, 4 on desktop.</p>
</div>
</div>
<div class="card bg-base-100 shadow-lg">
<div class="card-body">
<h4 class="card-title text-lg">Column 2</h4>
<p>Perfect for product grids, team members, or feature showcases.</p>
</div>
</div>
<div class="card bg-base-100 shadow-lg">
<div class="card-body">
<h4 class="card-title text-lg">Column 3</h4>
<p>Uses responsive breakpoints: md:grid-cols-2 xl:grid-cols-4</p>
</div>
</div>
<div class="card bg-base-100 shadow-lg">
<div class="card-body">
<h4 class="card-title text-lg">Column 4</h4>
<p>Maintains consistent spacing with gap-6 across all breakpoints.</p>
</div>
</div>
</div>
</div>
<!--
EXAMPLE 3: MIXED SPANS
- Demonstrates different column spans
- Shows how to create complex layouts
-->
<div class="mb-16">
<h3 class="text-2xl font-semibold mb-6">Mixed Column Spans</h3>
<div class="grid grid-cols-1 md:grid-cols-4 gap-6">
<!-- Full width header -->
<div class="md:col-span-4">
<div class="card bg-primary text-primary-content shadow-lg">
<div class="card-body">
<h4 class="card-title">Full Width Header (col-span-4)</h4>
<p>This element spans all 4 columns on desktop, full width on mobile.</p>
</div>
</div>
</div>
<!-- 3-column main area -->
<div class="md:col-span-3">
<div class="card bg-base-100 shadow-lg">
<div class="card-body">
<h4 class="card-title">Main Area (col-span-3)</h4>
<p>Takes up 3/4 of the width on desktop. Great for primary content areas.</p>
</div>
</div>
</div>
<!-- 1-column sidebar -->
<div class="md:col-span-1">
<div class="card bg-base-100 shadow-lg">
<div class="card-body">
<h4 class="card-title text-lg">Aside</h4>
<p>1/4 width sidebar for secondary content.</p>
</div>
</div>
</div>
<!-- Two half-width items -->
<div class="md:col-span-2">
<div class="card bg-base-100 shadow-lg">
<div class="card-body">
<h4 class="card-title">Half Width (col-span-2)</h4>
<p>Takes up half the grid width on desktop.</p>
</div>
</div>
</div>
<div class="md:col-span-2">
<div class="card bg-base-100 shadow-lg">
<div class="card-body">
<h4 class="card-title">Half Width (col-span-2)</h4>
<p>Perfect for side-by-side content sections.</p>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!--
RESPONSIVE BREAKPOINTS SECTION
- Visual guide to breakpoints
- Shows how content adapts
-->
<section class="py-16 md:py-24">
<div class="container mx-auto px-4">
<div class="text-center mb-12">
<h2 class="text-3xl md:text-4xl font-bold mb-4">Responsive Breakpoints</h2>
<p class="text-lg text-base-content/70 max-w-2xl mx-auto">
Understanding how layouts adapt across different screen sizes.
</p>
</div>
<!-- Breakpoint indicators -->
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6">
<!-- Mobile -->
<div class="card bg-base-100 shadow-lg">
<div class="card-body text-center">
<Smartphone class="h-12 w-12 mx-auto mb-4 text-primary" />
<h3 class="card-title justify-center">Mobile</h3>
<p class="text-sm">Default (0px+)</p>
<p class="text-xs text-base-content/70">Single column layouts, stacked content</p>
</div>
</div>
<!-- Tablet -->
<div class="card bg-base-100 shadow-lg">
<div class="card-body text-center">
<Tablet class="h-12 w-12 mx-auto mb-4 text-secondary" />
<h3 class="card-title justify-center">Tablet</h3>
<p class="text-sm">md: 768px+</p>
<p class="text-xs text-base-content/70">2-column layouts, condensed navigation</p>
</div>
</div>
<!-- Desktop -->
<div class="card bg-base-100 shadow-lg">
<div class="card-body text-center">
<Monitor class="h-12 w-12 mx-auto mb-4 text-accent" />
<h3 class="card-title justify-center">Desktop</h3>
<p class="text-sm">lg: 1024px+</p>
<p class="text-xs text-base-content/70">Multi-column layouts, full navigation</p>
</div>
</div>
<!-- Large Desktop -->
<div class="card bg-base-100 shadow-lg">
<div class="card-body text-center">
<Monitor class="h-12 w-12 mx-auto mb-4 text-info" />
<h3 class="card-title justify-center">Large</h3>
<p class="text-sm">xl: 1280px+</p>
<p class="text-xs text-base-content/70">Maximum columns, spacious layouts</p>
</div>
</div>
</div>
</div>
</section>
<!--
CALL TO ACTION SECTION
- Simple centered content
- Responsive button layout
-->
<section class="py-16 md:py-24 bg-gradient-to-r from-primary to-secondary text-primary-content">
<div class="container mx-auto px-4 text-center">
<h2 class="text-3xl md:text-4xl font-bold mb-6">Ready to Build?</h2>
<p class="text-xl mb-8 opacity-90 max-w-2xl mx-auto">
Use this skeleton as your starting point for responsive, grid-based web applications.
</p>
<div class="flex flex-col sm:flex-row gap-4 justify-center">
<button class="btn btn-accent btn-lg">Start Building</button>
<button class="btn btn-outline btn-lg">View Documentation</button>
</div>
</div>
</section>

View File

@@ -0,0 +1,230 @@
<!--
ABOUT PAGE - EXAMPLE CONTENT LAYOUT
This page demonstrates how to structure content using the responsive grid system.
Shows various layout patterns for text-heavy pages.
-->
<script lang="ts">
import { Code, Palette, Zap } from 'lucide-svelte';
</script>
<svelte:head>
<title>About - Responsive Grid Skeleton</title>
<meta name="description" content="Learn about the responsive grid framework and its features" />
</svelte:head>
<!--
PAGE HEADER
- Full-width header with background
- Centered content with responsive padding
-->
<section class="bg-gradient-to-r from-secondary to-accent text-secondary-content">
<div class="container mx-auto px-4 py-16">
<div class="text-center max-w-3xl mx-auto">
<h1 class="text-4xl md:text-5xl font-bold mb-6">About This Framework</h1>
<p class="text-xl opacity-90">
A comprehensive guide to building responsive, accessible, and maintainable web layouts.
</p>
</div>
</div>
</section>
<!--
MAIN CONTENT SECTION
- Two-column layout on desktop
- Single column on mobile
- Demonstrates content + sidebar pattern
-->
<section class="py-16 md:py-24">
<div class="container mx-auto px-4">
<!--
CONTENT GRID
- lg:grid-cols-4: 4-column grid on desktop
- Content spans 3 columns, sidebar spans 1
- Stacks vertically on mobile
-->
<div class="grid grid-cols-1 lg:grid-cols-4 gap-8">
<!-- Main Content Area -->
<div class="lg:col-span-3">
<div class="prose prose-lg max-w-none">
<h2>What is This Framework?</h2>
<p>
This responsive grid skeleton is designed to be a starting point for modern web applications.
It combines the power of SvelteKit's reactive framework with TailwindCSS's utility-first
approach and DaisyUI's beautiful components.
</p>
<h3>Key Principles</h3>
<p>
The framework is built around several core principles that ensure your websites are
fast, accessible, and maintainable:
</p>
<ul>
<li><strong>Mobile-First Design:</strong> All layouts start with mobile and scale up</li>
<li><strong>Semantic HTML:</strong> Proper use of HTML5 semantic elements</li>
<li><strong>Accessibility:</strong> ARIA labels, keyboard navigation, and screen reader support</li>
<li><strong>Performance:</strong> Optimized for fast loading and smooth interactions</li>
</ul>
<h3>Grid System Overview</h3>
<p>
The grid system uses CSS Grid as its foundation, providing flexible and powerful
layout capabilities. Here are the key concepts:
</p>
<!--
NESTED GRID EXAMPLE
- Shows how grids can be nested within content
-->
<div class="grid grid-cols-1 md:grid-cols-2 gap-6 my-8">
<div class="card bg-base-100 shadow-lg">
<div class="card-body">
<h4 class="card-title">Responsive Columns</h4>
<p class="text-sm">
Use classes like <code>grid-cols-1 md:grid-cols-2 lg:grid-cols-3</code>
to create responsive column layouts.
</p>
</div>
</div>
<div class="card bg-base-100 shadow-lg">
<div class="card-body">
<h4 class="card-title">Column Spanning</h4>
<p class="text-sm">
Use <code>col-span-2</code>, <code>col-span-3</code>, etc. to make
elements span multiple columns.
</p>
</div>
</div>
</div>
<h3>Component Architecture</h3>
<p>
The framework encourages a component-based approach where each piece of UI
is self-contained and reusable. This makes maintenance easier and promotes
consistency across your application.
</p>
</div>
</div>
<!-- Sidebar -->
<div class="lg:col-span-1">
<div class="sticky top-8 space-y-6">
<!-- Quick Stats Card -->
<div class="card bg-base-100 shadow-lg">
<div class="card-body">
<h3 class="card-title text-lg">Quick Stats</h3>
<div class="space-y-3">
<div class="flex justify-between">
<span class="text-sm">Framework Size</span>
<span class="text-sm font-semibold">~50KB</span>
</div>
<div class="flex justify-between">
<span class="text-sm">Components</span>
<span class="text-sm font-semibold">15+</span>
</div>
<div class="flex justify-between">
<span class="text-sm">Breakpoints</span>
<span class="text-sm font-semibold">5</span>
</div>
<div class="flex justify-between">
<span class="text-sm">Browser Support</span>
<span class="text-sm font-semibold">Modern</span>
</div>
</div>
</div>
</div>
<!-- Technology Stack -->
<div class="card bg-base-100 shadow-lg">
<div class="card-body">
<h3 class="card-title text-lg">Tech Stack</h3>
<div class="space-y-3">
<div class="flex items-center gap-3">
<Code class="h-5 w-5 text-primary" />
<span class="text-sm">SvelteKit 2.0</span>
</div>
<div class="flex items-center gap-3">
<Palette class="h-5 w-5 text-secondary" />
<span class="text-sm">TailwindCSS 3.4</span>
</div>
<div class="flex items-center gap-3">
<Zap class="h-5 w-5 text-accent" />
<span class="text-sm">DaisyUI 5.1</span>
</div>
</div>
</div>
</div>
<!-- Navigation -->
<div class="card bg-base-100 shadow-lg">
<div class="card-body">
<h3 class="card-title text-lg">Page Sections</h3>
<nav class="space-y-2">
<a href="#principles" class="block text-sm link link-hover">Key Principles</a>
<a href="#grid" class="block text-sm link link-hover">Grid System</a>
<a href="#components" class="block text-sm link link-hover">Components</a>
<a href="#examples" class="block text-sm link link-hover">Examples</a>
</nav>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!--
FEATURES SECTION
- Three-column grid showcasing framework features
- Responsive: 1 column on mobile, 3 on desktop
-->
<section class="py-16 md:py-24 bg-base-200">
<div class="container mx-auto px-4">
<div class="text-center mb-12">
<h2 class="text-3xl md:text-4xl font-bold mb-4">Why Choose This Framework?</h2>
<p class="text-lg text-base-content/70 max-w-2xl mx-auto">
Built with developer experience and user performance in mind.
</p>
</div>
<div class="grid grid-cols-1 md:grid-cols-3 gap-8">
<div class="card bg-base-100 shadow-lg">
<div class="card-body text-center">
<Code class="h-12 w-12 mx-auto mb-4 text-primary" />
<h3 class="card-title justify-center">Developer Friendly</h3>
<p>
Clean, well-documented code with comprehensive comments explaining
every pattern and best practice.
</p>
</div>
</div>
<div class="card bg-base-100 shadow-lg">
<div class="card-body text-center">
<Palette class="h-12 w-12 mx-auto mb-4 text-secondary" />
<h3 class="card-title justify-center">Highly Customizable</h3>
<p>
Built with TailwindCSS and DaisyUI, making it easy to customize
colors, spacing, and components to match your brand.
</p>
</div>
</div>
<div class="card bg-base-100 shadow-lg">
<div class="card-body text-center">
<Zap class="h-12 w-12 mx-auto mb-4 text-accent" />
<h3 class="card-title justify-center">Performance Optimized</h3>
<p>
Minimal bundle size, efficient CSS, and optimized for Core Web Vitals
to ensure fast loading times.
</p>
</div>
</div>
</div>
</div>
</section>

View File

@@ -0,0 +1,283 @@
<!--
CONTACT PAGE - FORM LAYOUT EXAMPLE
This page demonstrates form layouts and mixed content patterns.
Shows how to create effective contact/form pages with the grid system.
-->
<script lang="ts">
import { Mail, MessageSquare, Send, Github, Twitter, Linkedin } from 'lucide-svelte';
let formData = $state({
name: '',
email: '',
subject: '',
message: ''
});
function handleSubmit(event: Event) {
event.preventDefault();
// Handle form submission here
console.log('Form submitted:', formData);
// Reset form or show success message
}
</script>
<svelte:head>
<title>Contact - Responsive Grid Skeleton</title>
<meta name="description" content="Get in touch about the responsive grid framework" />
</svelte:head>
<!--
PAGE HEADER
- Centered content with gradient background
-->
<section class="bg-gradient-to-r from-accent to-info text-accent-content">
<div class="container mx-auto px-4 py-16">
<div class="text-center max-w-3xl mx-auto">
<h1 class="text-4xl md:text-5xl font-bold mb-6">Get In Touch</h1>
<p class="text-xl opacity-90">
Have questions about the framework? Want to contribute? We'd love to hear from you.
</p>
</div>
</div>
</section>
<!--
MAIN CONTACT SECTION
- Two-column layout: form + contact info
- Responsive: stacks on mobile, side-by-side on desktop
-->
<section class="py-16 md:py-24">
<div class="container mx-auto px-4">
<!--
CONTACT GRID
- lg:grid-cols-3: 3-column grid on desktop
- Form spans 2 columns, contact info spans 1
-->
<div class="grid grid-cols-1 lg:grid-cols-3 gap-12">
<!-- Contact Form (spans 2 columns on desktop) -->
<div class="lg:col-span-2">
<div class="card bg-base-100 shadow-lg">
<div class="card-body">
<h2 class="card-title text-2xl mb-6">
<MessageSquare class="h-6 w-6" />
Send us a Message
</h2>
<form onsubmit={handleSubmit} class="space-y-6">
<!--
FORM GRID
- Two-column layout for name/email on desktop
- Single column on mobile
-->
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
<div class="form-control">
<label class="label" for="name">
<span class="label-text">Name *</span>
</label>
<input
type="text"
id="name"
bind:value={formData.name}
placeholder="Your full name"
class="input input-bordered w-full"
required
/>
</div>
<div class="form-control">
<label class="label" for="email">
<span class="label-text">Email *</span>
</label>
<input
type="email"
id="email"
bind:value={formData.email}
placeholder="your.email@example.com"
class="input input-bordered w-full"
required
/>
</div>
</div>
<div class="form-control">
<label class="label" for="subject">
<span class="label-text">Subject *</span>
</label>
<input
type="text"
id="subject"
bind:value={formData.subject}
placeholder="What's this about?"
class="input input-bordered w-full"
required
/>
</div>
<div class="form-control">
<label class="label" for="message">
<span class="label-text">Message *</span>
</label>
<textarea
id="message"
bind:value={formData.message}
class="textarea textarea-bordered h-32"
placeholder="Tell us more about your question or feedback..."
required
></textarea>
</div>
<div class="form-control">
<button type="submit" class="btn btn-primary btn-lg">
<Send class="h-5 w-5" />
Send Message
</button>
</div>
</form>
</div>
</div>
</div>
<!-- Contact Information Sidebar -->
<div class="lg:col-span-1">
<div class="space-y-6">
<!-- Contact Info Card -->
<div class="card bg-base-100 shadow-lg">
<div class="card-body">
<h3 class="card-title">
<Mail class="h-5 w-5" />
Contact Info
</h3>
<div class="space-y-4">
<div>
<h4 class="font-semibold">Email</h4>
<p class="text-sm text-base-content/70">hello@gridframework.dev</p>
</div>
<div>
<h4 class="font-semibold">Response Time</h4>
<p class="text-sm text-base-content/70">Usually within 24 hours</p>
</div>
<div>
<h4 class="font-semibold">Best For</h4>
<p class="text-sm text-base-content/70">
Technical questions, bug reports, feature requests, and general feedback.
</p>
</div>
</div>
</div>
</div>
<!-- Social Links Card -->
<div class="card bg-base-100 shadow-lg">
<div class="card-body">
<h3 class="card-title">Follow Us</h3>
<div class="flex gap-4">
<a href="#" class="btn btn-circle btn-outline btn-sm">
<Github class="h-4 w-4" />
</a>
<a href="#" class="btn btn-circle btn-outline btn-sm">
<Twitter class="h-4 w-4" />
</a>
<a href="#" class="btn btn-circle btn-outline btn-sm">
<Linkedin class="h-4 w-4" />
</a>
</div>
<p class="text-sm text-base-content/70 mt-3">
Stay updated with the latest framework updates and tips.
</p>
</div>
</div>
<!-- FAQ Card -->
<div class="card bg-base-100 shadow-lg">
<div class="card-body">
<h3 class="card-title">Quick FAQ</h3>
<div class="space-y-3">
<div>
<h4 class="font-semibold text-sm">Is this framework free?</h4>
<p class="text-xs text-base-content/70">Yes, completely open source and free to use.</p>
</div>
<div>
<h4 class="font-semibold text-sm">Can I contribute?</h4>
<p class="text-xs text-base-content/70">Absolutely! Check our GitHub for contribution guidelines.</p>
</div>
<div>
<h4 class="font-semibold text-sm">Browser support?</h4>
<p class="text-xs text-base-content/70">All modern browsers (Chrome, Firefox, Safari, Edge).</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!--
ADDITIONAL RESOURCES SECTION
- Three-column grid with helpful resources
- Demonstrates equal-width columns
-->
<section class="py-16 md:py-24 bg-base-200">
<div class="container mx-auto px-4">
<div class="text-center mb-12">
<h2 class="text-3xl md:text-4xl font-bold mb-4">Other Ways to Connect</h2>
<p class="text-lg text-base-content/70 max-w-2xl mx-auto">
Multiple channels to get help and stay informed about the framework.
</p>
</div>
<!--
RESOURCES GRID
- Equal columns: 1 on mobile, 3 on desktop
- Perfect for showcasing multiple options
-->
<div class="grid grid-cols-1 md:grid-cols-3 gap-8">
<div class="card bg-base-100 shadow-lg">
<div class="card-body text-center">
<Github class="h-12 w-12 mx-auto mb-4 text-primary" />
<h3 class="card-title justify-center">GitHub</h3>
<p class="mb-4">
View source code, report issues, and contribute to the project.
</p>
<div class="card-actions justify-center">
<button class="btn btn-primary btn-sm">View Repository</button>
</div>
</div>
</div>
<div class="card bg-base-100 shadow-lg">
<div class="card-body text-center">
<MessageSquare class="h-12 w-12 mx-auto mb-4 text-secondary" />
<h3 class="card-title justify-center">Community</h3>
<p class="mb-4">
Join our Discord community for real-time help and discussions.
</p>
<div class="card-actions justify-center">
<button class="btn btn-secondary btn-sm">Join Discord</button>
</div>
</div>
</div>
<div class="card bg-base-100 shadow-lg">
<div class="card-body text-center">
<Mail class="h-12 w-12 mx-auto mb-4 text-accent" />
<h3 class="card-title justify-center">Newsletter</h3>
<p class="mb-4">
Get monthly updates about new features and best practices.
</p>
<div class="card-actions justify-center">
<button class="btn btn-accent btn-sm">Subscribe</button>
</div>
</div>
</div>
</div>
</div>
</section>

3
static/robots.txt Normal file
View File

@@ -0,0 +1,3 @@
# allow crawling everything by default
User-agent: *
Disallow:

18
svelte.config.js Normal file
View File

@@ -0,0 +1,18 @@
import adapter from '@sveltejs/adapter-auto';
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
/** @type {import('@sveltejs/kit').Config} */
const config = {
// Consult https://svelte.dev/docs/kit/integrations
// for more information about preprocessors
preprocess: vitePreprocess(),
kit: {
// adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list.
// If your environment is not supported, or you settled on a specific environment, switch out the adapter.
// See https://svelte.dev/docs/kit/adapters for more information about adapters.
adapter: adapter()
}
};
export default config;

27
tailwind.config.js Normal file
View File

@@ -0,0 +1,27 @@
/** @type {import('tailwindcss').Config} */
export default {
content: ['./src/**/*.{html,js,svelte,ts}'],
theme: {
extend: {},
},
plugins: [require('daisyui'), require('@tailwindcss/typography')],
daisyui: {
themes: [
{
gamestore: {
"primary": "#3b82f6",
"secondary": "#8b5cf6",
"accent": "#06b6d4",
"neutral": "#1f2937",
"base-100": "#ffffff",
"info": "#0ea5e9",
"success": "#10b981",
"warning": "#f59e0b",
"error": "#ef4444",
},
},
"dark",
"light",
],
},
}

19
tsconfig.json Normal file
View File

@@ -0,0 +1,19 @@
{
"extends": "./.svelte-kit/tsconfig.json",
"compilerOptions": {
"allowJs": true,
"checkJs": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"resolveJsonModule": true,
"skipLibCheck": true,
"sourceMap": true,
"strict": true,
"moduleResolution": "bundler"
}
// Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias
// except $lib which is handled by https://svelte.dev/docs/kit/configuration#files
//
// To make changes to top-level options such as include and exclude, we recommend extending
// the generated config; see https://svelte.dev/docs/kit/configuration#typescript
}

11
vite.config.ts Normal file
View File

@@ -0,0 +1,11 @@
import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite';
export default defineConfig({
plugins: [sveltekit()],
server: {
host: '0.0.0.0',
port: 12000,
allowedHosts: true
}
});