# Contribution Guidelines — lukastitch.corneruniverse.com
## Project Overview
**Purpose:** Portfolio and showcase website for Luka Stitch, a handmade plushie business.
**Audience:** Potential customers interested in custom plushies, people browsing her work, and commission inquiries.
**Primary Goals:**
1. Showcase plushie creations with beautiful imagery
2. Communicate the handmade, personal nature of the work
3. Direct commission inquiries to Etsy
4. Build brand personality and connection
**Note:** This is NOT an e-commerce site. No direct purchases. Etsy handles transactions.
---
## Design Direction
**Aesthetic:** Warm, cozy, handcrafted feel. The design should reflect the care and personality that goes into each plushie. Think craft fair booth, not corporate storefront.
**Mood:** Friendly, approachable, whimsical but not childish.
**Color Palette:** Soft, warm colors. Pastels or muted tones that complement plushie photography without competing. Define in `/src/styles/variables.css`.
**Typography:** Friendly and readable. A slightly playful heading font paired with a clean body font.
**Imagery:** Photography is central. The design should frame and highlight the plushie images, not distract from them.
---
## Technical Standards
### Vue 3 Conventions
* Use Composition API with `
```
### Content Management
**This is critical:** The site owner will want to add new plushies regularly. Make this easy.
**Plushie Catalog (**`/src/content/plushies.js`):
```javascript
export const plushies = [
{
id: 'cozy-bear',
name: 'Cozy Bear',
image: '/images/plushies/cozy-bear.jpg',
description: 'A huggable friend for cold nights.',
size: '12 inches',
available: false,
etsyLink: null
},
{
id: 'sleepy-fox',
name: 'Sleepy Fox',
image: '/images/plushies/sleepy-fox.jpg',
description: 'Always ready for a nap.',
size: '10 inches',
available: true,
etsyLink: 'https://etsy.com/...'
}
]
```
**Site Content (**`/src/content/site-data.js`):
```javascript
export const hero = {
title: "Luka Stitch",
tagline: "Handmade plushies with love",
description: "Each creation is one-of-a-kind, crafted with care."
}
export const about = {
heading: "About",
text: "...",
image: "/images/about-photo.jpg"
}
export const contact = {
heading: "Get in Touch",
text: "Interested in a custom plushie? Reach out!",
etsyLink: "https://etsy.com/shop/...",
email: "hello@lukastitch.com" // or null if not wanted
}
```
### Styling
**CSS Custom Properties (variables.css):**
```css
:root {
/* Colors */
--color-primary: #...;
--color-secondary: #...;
--color-background: #...;
--color-text: #...;
--color-accent: #...;
/* Typography */
--font-heading: '...', sans-serif;
--font-body: '...', sans-serif;
/* Spacing */
--space-xs: 0.25rem;
--space-sm: 0.5rem;
--space-md: 1rem;
--space-lg: 2rem;
--space-xl: 4rem;
/* Gallery */
--gallery-gap: 1rem;
--card-radius: 8px;
}
```
**Responsive Design:**
* Mobile-first approach
* Gallery should be responsive: 1 column mobile, 2 tablet, 3-4 desktop
* Images should scale beautifully at all sizes
---
## Components to Build
### Layout
* `AppHeader.vue` — Logo/name, simple navigation
* `AppFooter.vue` — Social links, copyright
### Sections
* `HeroSection.vue` — Brand name, tagline, featured image or plushie
* `GallerySection.vue` — Grid of plushies from catalog
* `AboutSection.vue` — The maker's story, photo
* `ContactSection.vue` — How to reach out, Etsy link
### Common
* `BaseButton.vue` — Primary and secondary variants
* `PlushieCard.vue` — Image, name, description, availability badge, Etsy link
* `SectionWrapper.vue` — Consistent section padding and max-width
* `ImageLightbox.vue` — Optional: click to enlarge plushie photos
---
## Gallery & Image Handling
**PlushieCard Component:**
```vue
{{ plushie.name }}
{{ plushie.description }}
AvailableSold
View on Etsy
```
**Gallery Grid:**
```css
.gallery {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: var(--gallery-gap);
}
```
**Image Guidelines:**
* Consistent aspect ratio preferred (square or 4:3)
* Optimize images before adding (compress, reasonable resolution)
* Use descriptive filenames: `cozy-bear.jpg` not `IMG_3847.jpg`
* Alt text should describe the plushie
---
## Adding New Plushies (Instructions for Site Owner)
1. Add the photo to `/public/images/plushies/`
2. Open `/src/content/plushies.js`
3. Add a new entry to the array:
```javascript
{
id: 'new-plushie-name',
name: 'New Plushie Name',
image: '/images/plushies/new-plushie-name.jpg',
description: 'A short description.',
size: '10 inches',
available: true,
etsyLink: 'https://etsy.com/listing/...'
}
```
4. Commit and push—the site auto-deploys
---
## Accessibility
* Semantic HTML: ``, ``, ``, `