Go to file
Jamey Greenwood 7ae3af91ba chore: change newsletter default title to "Get updates"
More accurate than "Stay in touch" - newsletters are one-way communication.
Also updated description slightly: "news" instead of "updates" to avoid
repetition with the title.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 20:59:02 +00:00
assets fix: improve header navigation accessibility 2026-01-19 23:43:54 +00:00
config mix phx.gen.auth Accounts User users 2025-12-30 12:26:46 +00:00
docs docs: add mockup generator to README, delete sample-content.md 2026-01-17 22:55:01 +00:00
lib chore: change newsletter default title to "Get updates" 2026-01-20 20:59:02 +00:00
priv feat: add automated Printify mockup generation & POD sample content 2026-01-14 23:35:18 +00:00
test feat: add product sorting to collection pages with tests 2026-01-19 23:38:22 +00:00
.env fix: resolve compilation warnings and update tests to match implementation 2026-01-15 22:36:15 +00:00
.formatter.exs mix phx.new simpleshop_theme --database sqlite3 --adapter bandit --binary-id 2025-12-30 12:26:26 +00:00
.gitignore mix phx.new simpleshop_theme --database sqlite3 --adapter bandit --binary-id 2025-12-30 12:26:26 +00:00
AGENTS.md mix phx.gen.auth Accounts User users 2025-12-30 12:26:46 +00:00
mix.exs feat: add dark mode support, accordion UI, and current combination display 2025-12-31 18:55:44 +00:00
mix.lock feat: add dark mode support, accordion UI, and current combination display 2025-12-31 18:55:44 +00:00
README.md docs: correct license to AGPL-3.0 2026-01-17 23:10:02 +00:00
ROADMAP.md feat: enhance contact page with newsletter and social cards 2026-01-20 19:13:48 +00:00

SimpleShop

A beautiful, customisable e-commerce storefront built with Phoenix LiveView. Designed for print-on-demand sellers who want professional shops without design expertise.

Features

The Shop

A complete storefront with all the pages you need:

  • Home - Hero banner, category navigation, featured products, testimonials
  • Products - Grid layout with hover effects and filtering
  • Product Detail - Image gallery, variants, reviews, related products
  • Cart - Full shopping cart with order summary
  • About - Rich content with your brand story
  • Contact - Contact form with business details
  • Error pages - Themed 404/500 pages

Theme Editor (/admin/theme)

Customise your shop's look without touching code:

  • 8 curated presets - Gallery, Studio, Boutique, Bold, Playful, Minimal, Night, Classic
  • Real-time preview - See changes instantly across all page types
  • Comprehensive customisation:
    • Mood (Neutral, Warm, Cool, Dark)
    • Typography (Clean, Editorial, Modern, Classic, Friendly, Minimal)
    • Shape (Sharp, Soft, Round, Pill)
    • Density (Compact, Balanced, Spacious)
    • Accent colours with automatic contrast
    • Layout options (grid columns, header style, width)
    • Feature toggles (announcement bar, sticky header, etc.)
  • Logo upload with optional SVG recolouring
  • Header image with zoom and position controls

Technical Highlights

  • CSS custom properties for instant theme switching
  • Three-layer CSS architecture (primitives → attributes → semantic)
  • ETS-based CSS caching for performance
  • SQLite database with BLOB storage for images
  • Shared PageTemplates between preview and live shop

Getting Started

Prerequisites

  • Elixir 1.17+
  • Erlang 27+
  • Node.js 20+ (for assets)

Setup

# Clone the repository
git clone <repo-url>
cd simpleshop_theme

# Install dependencies
mix setup

# Start the server
mix phx.server

Visit:

Running Tests

mix test

Project Structure

lib/
├── simpleshop_theme/           # Core business logic
│   ├── settings.ex             # Theme settings context
│   ├── settings/
│   │   └── theme_settings.ex   # Theme settings schema
│   ├── media.ex                # Image upload handling
│   └── theme/
│       ├── css_generator.ex    # Generates CSS from settings
│       ├── css_cache.ex        # ETS cache for generated CSS
│       ├── presets.ex          # 8 theme presets
│       └── preview_data.ex     # Mock data for previews
│
├── simpleshop_theme_web/       # Web layer
│   ├── components/
│   │   ├── layouts/            # App and shop layouts
│   │   ├── page_templates/     # Shared page templates (*.heex)
│   │   ├── page_templates.ex   # PageTemplates module
│   │   └── shop_components.ex  # Reusable shop UI components
│   ├── live/
│   │   ├── theme_live/         # Theme editor LiveView
│   │   └── shop_live/          # Public shop LiveViews
│   └── controllers/
│       └── error_html.ex       # Themed error pages

assets/css/
├── app.css                     # Main stylesheet
├── theme-layer1-primitives.css # Design tokens
├── theme-layer2-attributes.css # Theme-specific values
└── theme-layer3-semantic.css   # Component styles

Routes

Path Description
/ Shop home page
/products Products listing
/products/:id Product detail page
/cart Shopping cart
/about About page
/contact Contact page
/admin/theme Theme editor (requires auth)
/dev/errors/404 Preview 404 page (dev only)
/dev/errors/500 Preview 500 page (dev only)

Generating Mockups

The project includes a Printify integration for generating product mockups. This is useful for creating sample product images from Unsplash artwork.

Prerequisites

  1. A Printify account with API access
  2. Set the PRINTIFY_API_TOKEN environment variable

Usage

# Generate all mockups (saves to priv/static/mockups/)
export PRINTIFY_API_TOKEN="your-token"
mix generate_mockups

# Generate mockups and delete products from Printify afterwards
mix generate_mockups --cleanup

# Search for available blueprints
mix generate_mockups --search "poster"

# List all blueprints
mix generate_mockups --list-blueprints

Product definitions are in lib/simpleshop_theme/printify/mockup_generator.ex.

Documentation

Design Philosophy

  1. "One theme, infinite variations" - Rather than multiple themes, one solid foundation with curated customisation
  2. Constrained creativity - Limit choices to prevent poor design outcomes
  3. No professional photography required - Works with product mockups
  4. Mobile-first - All features work on touch devices
  5. Ethical design - No dark patterns or fake urgency

License

AGPL-3.0