fix: update demo content, fix broken links, and add cart item product links
- Replace all placeholder text with demo-aware copy that signals "replace me" - Update USPs for POD accuracy (made to order, quality materials) - Fix broken footer links (/delivery, /returns → /contact) - Add real platform URLs to social icons with target="_blank" - Make cart item images and names link to product pages - Switch about page image to responsive_image component - Add missing cart_status to collection page cart drawer - Unify search hint text across all page templates Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -22,11 +22,14 @@
|
||||
<main id="main-content" class="content-page" style="background-color: var(--t-surface-base);">
|
||||
<.hero_section
|
||||
title="About the studio"
|
||||
description="Nature photography, printed with care"
|
||||
description="Your story goes here – this is sample content for the demo shop"
|
||||
background={:sunken}
|
||||
/>
|
||||
|
||||
<.content_body image_url="/mockups/night-sky-blanket-3.jpg">
|
||||
<.content_body
|
||||
image_src="/mockups/night-sky-blanket-3"
|
||||
image_alt="Night sky blanket draped over a chair"
|
||||
>
|
||||
<.rich_text blocks={SimpleshopTheme.Theme.PreviewData.about_content()} />
|
||||
</.content_body>
|
||||
</main>
|
||||
@@ -42,7 +45,7 @@
|
||||
cart_status={assigns[:cart_status]}
|
||||
/>
|
||||
|
||||
<.search_modal hint_text={~s(Try searching for "mountain", "forest", or "ocean")} />
|
||||
<.search_modal hint_text={~s(Try a search – e.g. "mountain" or "notebook")} />
|
||||
|
||||
<.mobile_bottom_nav active_page="about" mode={@mode} />
|
||||
</div>
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
open={assigns[:cart_drawer_open] || false}
|
||||
cart_status={assigns[:cart_status]}
|
||||
/>
|
||||
<.search_modal hint_text={~s(Try searching for "mountain", "forest", or "ocean")} />
|
||||
<.search_modal hint_text={~s(Try a search – e.g. "mountain" or "notebook")} />
|
||||
|
||||
<.mobile_bottom_nav active_page="cart" mode={@mode} />
|
||||
</div>
|
||||
|
||||
@@ -47,9 +47,10 @@
|
||||
cart_count={@cart_count}
|
||||
mode={@mode}
|
||||
open={assigns[:cart_drawer_open] || false}
|
||||
cart_status={assigns[:cart_status]}
|
||||
/>
|
||||
|
||||
<.search_modal hint_text={~s(Try searching for "mountain", "forest", or "ocean")} />
|
||||
<.search_modal hint_text={~s(Try a search – e.g. "mountain" or "notebook")} />
|
||||
|
||||
<.mobile_bottom_nav active_page="collection" mode={@mode} />
|
||||
</div>
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
<.hero_section
|
||||
variant={:page}
|
||||
title="Get in touch"
|
||||
description="Questions about your order or just want to say hello? Drop me a message and I'll get back to you as soon as I can."
|
||||
description="Sample contact page for the demo store. Add your own message here – something friendly about how customers can reach you."
|
||||
/>
|
||||
|
||||
<div class="grid gap-8 md:grid-cols-2 mb-12">
|
||||
@@ -35,20 +35,20 @@
|
||||
<.info_card
|
||||
title="Handy to know"
|
||||
items={[
|
||||
%{label: "Printing", value: "2-5 business days"},
|
||||
%{label: "Delivery", value: "3-7 business days after printing"},
|
||||
%{label: "Returns", value: "Happy to help with faulty or damaged items"}
|
||||
%{label: "Printing", value: "Example: 2-5 business days"},
|
||||
%{label: "Delivery", value: "Example: 3-7 business days after printing"},
|
||||
%{label: "Issues", value: "Example: Reprints for any defects"}
|
||||
]}
|
||||
/>
|
||||
|
||||
<.newsletter_card />
|
||||
|
||||
<.social_links_card links={[
|
||||
%{platform: :instagram, url: "#", label: "Instagram"},
|
||||
%{platform: :bluesky, url: "#", label: "Bluesky"},
|
||||
%{platform: :mastodon, url: "#", label: "Mastodon"},
|
||||
%{platform: :kofi, url: "#", label: "Ko-fi"},
|
||||
%{platform: :github, url: "#", label: "GitHub"}
|
||||
%{platform: :instagram, url: "https://instagram.com", label: "Instagram"},
|
||||
%{platform: :bluesky, url: "https://bsky.app", label: "Bluesky"},
|
||||
%{platform: :mastodon, url: "https://mastodon.social", label: "Mastodon"},
|
||||
%{platform: :kofi, url: "https://ko-fi.com", label: "Ko-fi"},
|
||||
%{platform: :github, url: "https://github.com", label: "GitHub"}
|
||||
]} />
|
||||
</div>
|
||||
</div>
|
||||
@@ -65,7 +65,7 @@
|
||||
cart_status={assigns[:cart_status]}
|
||||
/>
|
||||
|
||||
<.search_modal hint_text={~s(Try searching for "mountain", "forest", or "ocean")} />
|
||||
<.search_modal hint_text={~s(Try a search – e.g. "mountain" or "notebook")} />
|
||||
|
||||
<.mobile_bottom_nav active_page="contact" mode={@mode} />
|
||||
</div>
|
||||
|
||||
@@ -59,5 +59,5 @@
|
||||
cart_status={assigns[:cart_status]}
|
||||
/>
|
||||
|
||||
<.search_modal hint_text={~s(Try searching for "mountain", "forest", or "ocean")} />
|
||||
<.search_modal hint_text={~s(Try a search – e.g. "mountain" or "notebook")} />
|
||||
</div>
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
<main id="main-content">
|
||||
<.hero_section
|
||||
title="Original designs, printed on demand"
|
||||
description="From art prints to apparel – unique products created by independent artists and delivered straight to your door."
|
||||
description="Welcome to the SimpleShop demo store. This is where your hero text goes – something short and punchy about what makes your shop worth a browse."
|
||||
cta_text="Shop the collection"
|
||||
cta_page="collection"
|
||||
mode={@mode}
|
||||
@@ -39,7 +39,7 @@
|
||||
|
||||
<.image_text_section
|
||||
title="Made with passion, printed with care"
|
||||
description="Every design starts with an idea. We work with quality print partners to bring those ideas to life on premium products – from gallery-quality art prints to everyday essentials."
|
||||
description="This is an example content section. Use it to share your story, highlight what makes your products special, or link to your about page."
|
||||
image_url="/mockups/mountain-sunrise-print-3-800.webp"
|
||||
link_text="Learn more about the studio →"
|
||||
link_page="about"
|
||||
@@ -58,7 +58,7 @@
|
||||
cart_status={assigns[:cart_status]}
|
||||
/>
|
||||
|
||||
<.search_modal hint_text={~s(Try searching for "mountain", "forest", or "ocean")} />
|
||||
<.search_modal hint_text={~s(Try a search – e.g. "mountain" or "notebook")} />
|
||||
|
||||
<.mobile_bottom_nav active_page="home" mode={@mode} />
|
||||
</div>
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
open={assigns[:cart_drawer_open] || false}
|
||||
cart_status={assigns[:cart_status]}
|
||||
/>
|
||||
<.search_modal hint_text={~s(Try searching for "mountain", "forest", or "ocean")} />
|
||||
<.search_modal hint_text={~s(Try a search – e.g. "mountain" or "notebook")} />
|
||||
|
||||
<.mobile_bottom_nav active_page="pdp" mode={@mode} />
|
||||
</div>
|
||||
|
||||
@@ -26,7 +26,7 @@ defmodule SimpleshopThemeWeb.ShopComponents do
|
||||
<.announcement_bar theme_settings={@theme_settings} message="20% off this weekend!" />
|
||||
"""
|
||||
attr :theme_settings, :map, required: true
|
||||
attr :message, :string, default: "Free delivery on orders over £40"
|
||||
attr :message, :string, default: "Sample announcement – e.g. free delivery, sales, or new drops"
|
||||
|
||||
def announcement_bar(assigns) do
|
||||
~H"""
|
||||
@@ -723,7 +723,7 @@ defmodule SimpleshopThemeWeb.ShopComponents do
|
||||
<% else %>
|
||||
<li>
|
||||
<a
|
||||
href="/delivery"
|
||||
href="/contact"
|
||||
class="transition-colors hover:opacity-80"
|
||||
style="color: var(--t-text-secondary);"
|
||||
>
|
||||
@@ -732,7 +732,7 @@ defmodule SimpleshopThemeWeb.ShopComponents do
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="/returns"
|
||||
href="/contact"
|
||||
class="transition-colors hover:opacity-80"
|
||||
style="color: var(--t-text-secondary);"
|
||||
>
|
||||
@@ -764,7 +764,9 @@ defmodule SimpleshopThemeWeb.ShopComponents do
|
||||
</p>
|
||||
<div class="flex gap-2">
|
||||
<a
|
||||
href="#"
|
||||
href="https://instagram.com"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="social-link w-9 h-9 flex items-center justify-center transition-all"
|
||||
style="color: var(--t-text-secondary); border-radius: var(--t-radius-button);"
|
||||
aria-label="Instagram"
|
||||
@@ -782,7 +784,9 @@ defmodule SimpleshopThemeWeb.ShopComponents do
|
||||
</svg>
|
||||
</a>
|
||||
<a
|
||||
href="#"
|
||||
href="https://pinterest.com"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="social-link w-9 h-9 flex items-center justify-center transition-all"
|
||||
style="color: var(--t-text-secondary); border-radius: var(--t-radius-button);"
|
||||
aria-label="Pinterest"
|
||||
@@ -1226,7 +1230,7 @@ defmodule SimpleshopThemeWeb.ShopComponents do
|
||||
|
||||
## Attributes
|
||||
|
||||
* `item` - Required. Cart item with `name`, `variant`, `price`, `quantity`, `image`, `variant_id`.
|
||||
* `item` - Required. Cart item with `name`, `variant`, `price`, `quantity`, `image`, `variant_id`, `product_id`.
|
||||
* `size` - Either `:compact` (drawer) or `:default` (cart page). Default: :default
|
||||
* `show_quantity_controls` - Show +/- buttons. Default: false
|
||||
* `mode` - Either `:live` or `:preview`. Default: :live
|
||||
@@ -1242,14 +1246,35 @@ defmodule SimpleshopThemeWeb.ShopComponents do
|
||||
class="cart-item-row"
|
||||
style={"display: flex; gap: #{if @size == :compact, do: "0.75rem", else: "1rem"}; padding: 0.75rem 0;"}
|
||||
>
|
||||
<div
|
||||
class="cart-item-image"
|
||||
style={"width: #{if @size == :compact, do: "60px", else: "80px"}; height: #{if @size == :compact, do: "60px", else: "80px"}; border-radius: var(--t-radius-card); background-size: cover; background-position: center; flex-shrink: 0; #{if @item.image, do: "background-image: url('#{@item.image}');", else: "background-color: var(--t-surface-sunken);"}"}
|
||||
>
|
||||
</div>
|
||||
<%= if @mode != :preview do %>
|
||||
<a
|
||||
href={"/products/#{@item.product_id}"}
|
||||
class="cart-item-image"
|
||||
style={"display: block; width: #{if @size == :compact, do: "60px", else: "80px"}; height: #{if @size == :compact, do: "60px", else: "80px"}; border-radius: var(--t-radius-card); background-size: cover; background-position: center; flex-shrink: 0; #{if @item.image, do: "background-image: url('#{@item.image}');", else: "background-color: var(--t-surface-sunken);"}"}
|
||||
aria-label={"View #{@item.name}"}
|
||||
>
|
||||
</a>
|
||||
<% else %>
|
||||
<div
|
||||
class="cart-item-image"
|
||||
style={"width: #{if @size == :compact, do: "60px", else: "80px"}; height: #{if @size == :compact, do: "60px", else: "80px"}; border-radius: var(--t-radius-card); background-size: cover; background-position: center; flex-shrink: 0; #{if @item.image, do: "background-image: url('#{@item.image}');", else: "background-color: var(--t-surface-sunken);"}"}
|
||||
>
|
||||
</div>
|
||||
<% end %>
|
||||
<div class="cart-item-details" style="flex: 1; min-width: 0;">
|
||||
<h3 style={"font-family: var(--t-font-body); font-size: #{if @size == :compact, do: "var(--t-text-small)", else: "var(--t-text-base)"}; font-weight: 500; color: var(--t-text-primary); margin: 0 0 2px;"}>
|
||||
{@item.name}
|
||||
<h3 style={"font-family: var(--t-font-body); font-size: #{if @size == :compact, do: "var(--t-text-small)", else: "var(--t-text-base)"}; font-weight: 500; margin: 0 0 2px;"}>
|
||||
<%= if @mode != :preview do %>
|
||||
<a
|
||||
href={"/products/#{@item.product_id}"}
|
||||
style="color: var(--t-text-primary); text-decoration: none;"
|
||||
onmouseover="this.style.textDecoration='underline'"
|
||||
onmouseout="this.style.textDecoration='none'"
|
||||
>
|
||||
{@item.name}
|
||||
</a>
|
||||
<% else %>
|
||||
<span style="color: var(--t-text-primary);">{@item.name}</span>
|
||||
<% end %>
|
||||
</h3>
|
||||
<%= if @item.variant do %>
|
||||
<p style="font-family: var(--t-font-body); font-size: var(--t-text-caption); color: var(--t-text-tertiary); margin: 0;">
|
||||
@@ -1515,7 +1540,7 @@ defmodule SimpleshopThemeWeb.ShopComponents do
|
||||
<% end %>
|
||||
<%= if @show_delivery_text do %>
|
||||
<p class="text-xs mt-1" style="color: var(--t-text-tertiary);">
|
||||
Free delivery over £40
|
||||
Made to order
|
||||
</p>
|
||||
<% end %>
|
||||
</div>
|
||||
@@ -2328,7 +2353,8 @@ defmodule SimpleshopThemeWeb.ShopComponents do
|
||||
|
||||
## Attributes
|
||||
|
||||
* `image_url` - Optional. Header image URL.
|
||||
* `image_src` - Optional. Base path to image (without size/extension), used with responsive_image.
|
||||
* `image_alt` - Optional. Alt text for the image. Defaults to "Page image".
|
||||
|
||||
## Slots
|
||||
|
||||
@@ -2336,11 +2362,12 @@ defmodule SimpleshopThemeWeb.ShopComponents do
|
||||
|
||||
## Examples
|
||||
|
||||
<.content_body image_url="/images/about.jpg">
|
||||
<.content_body image_src="/mockups/night-sky-blanket-3" image_alt="A cosy blanket">
|
||||
<p>Content here...</p>
|
||||
</.content_body>
|
||||
"""
|
||||
attr :image_url, :string, default: nil
|
||||
attr :image_src, :string, default: nil
|
||||
attr :image_alt, :string, default: "Page image"
|
||||
|
||||
slot :inner_block, required: true
|
||||
|
||||
@@ -2350,11 +2377,18 @@ defmodule SimpleshopThemeWeb.ShopComponents do
|
||||
class="content-body"
|
||||
style="padding: var(--space-xl) var(--space-lg); max-width: 800px; margin: 0 auto;"
|
||||
>
|
||||
<%= if @image_url do %>
|
||||
<%= if @image_src do %>
|
||||
<div
|
||||
class="content-image about-image"
|
||||
style={"width: 100%; height: 300px; border-radius: var(--t-radius-image); margin-bottom: var(--space-lg); background-size: cover; background-position: center; background-image: url('#{@image_url}');"}
|
||||
style="margin-bottom: var(--space-lg); border-radius: var(--t-radius-image); overflow: hidden;"
|
||||
>
|
||||
<.responsive_image
|
||||
src={@image_src}
|
||||
source_width={1200}
|
||||
alt={@image_alt}
|
||||
sizes="(max-width: 800px) 100vw, 800px"
|
||||
class="w-full h-[300px] object-cover"
|
||||
/>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
@@ -2577,7 +2611,7 @@ defmodule SimpleshopThemeWeb.ShopComponents do
|
||||
attr :title, :string, default: "Newsletter"
|
||||
|
||||
attr :description, :string,
|
||||
default: "Get new designs and updates in your inbox. No spam, I promise."
|
||||
default: "Sample newsletter signup. Replace with your own message to encourage subscribers."
|
||||
|
||||
attr :button_text, :string, default: "Subscribe"
|
||||
attr :variant, :atom, default: :card
|
||||
@@ -2661,6 +2695,8 @@ defmodule SimpleshopThemeWeb.ShopComponents do
|
||||
<%= for link <- @links do %>
|
||||
<a
|
||||
href={link.url}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="themed-button-outline flex items-center gap-2 px-3 py-2 text-sm transition-all hover:opacity-80"
|
||||
style="text-decoration: none;"
|
||||
>
|
||||
@@ -2690,8 +2726,8 @@ defmodule SimpleshopThemeWeb.ShopComponents do
|
||||
"""
|
||||
attr :links, :list,
|
||||
default: [
|
||||
%{platform: :instagram, url: "#", label: "Instagram"},
|
||||
%{platform: :pinterest, url: "#", label: "Pinterest"}
|
||||
%{platform: :instagram, url: "https://instagram.com", label: "Instagram"},
|
||||
%{platform: :pinterest, url: "https://pinterest.com", label: "Pinterest"}
|
||||
]
|
||||
|
||||
def social_links(assigns) do
|
||||
@@ -2700,6 +2736,8 @@ defmodule SimpleshopThemeWeb.ShopComponents do
|
||||
<%= for link <- @links do %>
|
||||
<a
|
||||
href={link.url}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="social-link w-9 h-9 flex items-center justify-center transition-all"
|
||||
style="color: var(--t-text-secondary); border-radius: var(--t-radius-button);"
|
||||
aria-label={link.label}
|
||||
@@ -3280,8 +3318,8 @@ defmodule SimpleshopThemeWeb.ShopComponents do
|
||||
"""
|
||||
attr :items, :list,
|
||||
default: [
|
||||
%{icon: :check, title: "Free Delivery", description: "On orders over £40"},
|
||||
%{icon: :shield, title: "Easy Returns", description: "30-day return policy"}
|
||||
%{icon: :check, title: "Made to Order", description: "Printed just for you"},
|
||||
%{icon: :shield, title: "Quality Materials", description: "Premium inks and substrates"}
|
||||
]
|
||||
|
||||
def trust_badges(assigns) do
|
||||
|
||||
Reference in New Issue
Block a user