--- name: landing-page-marketing description: Automate landing page updates and marketing asset capture following established patterns version: 1.0.0 author: Saberloop Project usage: | Use this skill for landing page and marketing tasks: - Capturing screenshots for landing page - Adding new feature cards or sections - Updating marketing copy and CTAs - Processing images for web optimization - Deploying landing page changes Examples: "Update landing page for new feature using the landing-page-marketing skill" "Capture screenshots for landing page using the landing-page-marketing skill" "Deploy landing page to staging using the landing-page-marketing skill" --- # Landing Page Marketing Skill ## Overview This skill automates the complete workflow for updating the Saberloop landing page and capturing marketing assets. It consolidates screenshot capture, image processing, HTML updates, and deployment into a standardized process. ## Landing Page Architecture ``` saberloop.com/ ├── index.html # Landing page (from ./landing/) ├── app/ # PWA application ├── app-staging/ # Staging PWA └── [other endpoints] ./landing/ ├── index.html # Main landing page HTML ├── images/ # Landing page images (304x584 for mobile screenshots) │ ├── demo.webm │ ├── landing-*.png │ └── party-demo.webm └── [deployed to root] ``` ## When to Use This Skill Use this skill when ANY of these are true: - [ ] Adding a new feature to showcase on landing page - [ ] Updating marketing copy or CTAs - [ ] Capturing new app screenshots - [ ] Creating demo videos - [ ] Refreshing existing screenshots after UI changes - [ ] Deploying landing page updates ## Landing Page Sections | Section | Location (lines) | Purpose | |---------|------------------|---------| | Hero | ~668-694 | Main headline, video demo, primary CTAs | | Features | ~697-733 | Feature cards grid (6-7 cards) | | Party Mode | ~736-759 | Dedicated party mode section | | How It Works | ~762-788 | 4-step process explanation | | Screenshots | ~791-803 | App screenshot gallery | | Share Section | ~806-819 | Social sharing preview | | CTA | ~822-848 | Final call-to-action columns | | Footer | ~851-862 | Links and copyright | ## Complete Workflow ### Phase 1: Screenshot Capture #### Step 1.1: Create Capture Script **File:** `tests/e2e/capture-[feature]-screenshots.spec.js` ```javascript import { test, expect } from '@playwright/test'; import { setupAuthenticatedState, clearSessions } from './helpers.js'; const MOBILE_VIEWPORT = { width: 375, height: 667 }; const SCREENSHOT_DIR = 'landing/images'; test.use({ viewport: MOBILE_VIEWPORT }); test.describe('Capture [Feature] Screenshots', () => { test('[Feature] screenshot', async ({ page }) => { // Setup authenticated state if needed await setupAuthenticatedState(page); await clearSessions(page); await page.reload(); await page.waitForSelector('[data-testid="welcome-heading"]', { timeout: 10000 }); // Navigate to the screen to capture await page.goto('/#/[route]'); await page.waitForTimeout(500); // Setup the UI state (scroll, open modals, etc.) // ... // Capture screenshot await page.screenshot({ path: `${SCREENSHOT_DIR}/landing-[feature-name].png`, fullPage: false }); console.log('✓ Captured: [Feature] screenshot'); }); }); ``` #### Step 1.2: Run Capture Script ```bash # Run with visible browser npx playwright test tests/e2e/capture-[feature]-screenshots.spec.js --headed # Or run all capture scripts npm run test:e2e:capture ``` #### Step 1.3: Process Images ```bash # Resize to landing page dimensions (304x584) # Option 1: Using Sharp CLI npx sharp-cli landing/images/landing-[feature].png -o landing/images/landing-[feature].png resize 304 584 # Option 2: Using ImageMagick convert landing/images/landing-[feature].png -resize 304x584 landing/images/landing-[feature].png # Verify file size (should be <50KB for fast loading) ls -la landing/images/landing-[feature].png ``` ### Phase 2: HTML Updates #### Step 2.1: Add Feature Card **Location:** Features grid in `landing/index.html` (~line 700) ```html
[Short description - 1-2 sentences]
```
#### Step 2.4: Update Structured Data
**Location:** JSON-LD in `` (~line 52)
```json
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "Saberloop",
"description": "[Updated description including new feature]",
"featureList": [
"AI-powered quiz generation",
"[New feature description]",
"Multi-language support",
"Offline mode",
"Party Mode multiplayer"
]
}
```
### Phase 3: Testing
#### Step 3.1: Local Preview
```bash
# Serve landing page locally
npx serve landing -p 8080
# Or use Python
cd landing && python -m http.server 8080
```
#### Step 3.2: Responsive Testing
Test at these breakpoints:
- Mobile: 375px (primary)
- Tablet: 768px
- Desktop: 1200px+
```bash
# Use Playwright for responsive screenshots
npx playwright test tests/e2e/capture-landing-responsive.spec.js
```
### Phase 4: Deployment
#### Step 4.1: Deploy to Staging
```bash
# Build and deploy to staging first
npm run deploy:landing -- --staging
# Staging URL: https://saberloop.com/staging/ (if configured)
# Or test via: https://saberloop.com/app-staging/
```
#### Step 4.2: Verify Staging
Checklist:
- [ ] All images load correctly
- [ ] Feature cards display properly
- [ ] CTA buttons work
- [ ] Mobile layout is correct
- [ ] No console errors
- [ ] Tracking events fire (check GA)
#### Step 4.3: Deploy to Production
```bash
# Deploy landing page to production
npm run deploy:landing
# Production URL: https://saberloop.com/
```
#### Step 4.4: Post-Deploy Verification
```bash
# Clear CDN cache if needed (depends on hosting)
# Verify in incognito/private browsing
# Test on actual mobile device
```
## Templates
### Feature Card Template
```html
Brief description of the feature benefit to users. Keep it to 1-2 sentences.