diff --git a/lib/mix/tasks/generate_mockups.ex b/lib/mix/tasks/generate_mockups.ex index 2c43c50..2443e97 100644 --- a/lib/mix/tasks/generate_mockups.ex +++ b/lib/mix/tasks/generate_mockups.ex @@ -16,6 +16,9 @@ defmodule Mix.Tasks.GenerateMockups do # Generate mockups (keeps products in Printify) mix generate_mockups + # Delete existing products first, then generate fresh ones + mix generate_mockups --replace + # Generate mockups and delete products afterwards mix generate_mockups --cleanup @@ -45,12 +48,14 @@ defmodule Mix.Tasks.GenerateMockups do OptionParser.parse(args, switches: [ cleanup: :boolean, + replace: :boolean, search: :string, list_blueprints: :boolean, help: :boolean ], aliases: [ c: :cleanup, + r: :replace, s: :search, l: :list_blueprints, h: :help @@ -84,6 +89,7 @@ defmodule Mix.Tasks.GenerateMockups do mix generate_mockups [options] Options: + --replace, -r Delete ALL existing products from Printify before generating (with confirmation) --cleanup, -c Delete created products from Printify after downloading mockups --search, -s TERM Search for blueprints by name --list-blueprints List all available blueprint IDs and names @@ -149,12 +155,14 @@ defmodule Mix.Tasks.GenerateMockups do defp generate_mockups(opts) do cleanup = Keyword.get(opts, :cleanup, false) + replace = Keyword.get(opts, :replace, false) Mix.shell().info(""" ╔═══════════════════════════════════════════╗ ║ Printify Mockup Generator ║ ╠═══════════════════════════════════════════╣ + ║ Replace mode: #{if replace, do: "ON ", else: "OFF"} ║ ║ Cleanup mode: #{if cleanup, do: "ON ", else: "OFF"} ║ ╚═══════════════════════════════════════════╝ @@ -177,6 +185,8 @@ defmodule Mix.Tasks.GenerateMockups do """) _token -> + if replace, do: purge_existing_products() + results = MockupGenerator.generate_all(cleanup: cleanup) # Summary @@ -200,4 +210,27 @@ defmodule Mix.Tasks.GenerateMockups do end end end + + defp purge_existing_products do + alias SimpleshopTheme.Clients.Printify, as: Client + + Mix.shell().info("Fetching existing products...") + + {:ok, shop_id} = Client.get_shop_id() + {:ok, %{"data" => products}} = Client.list_products(shop_id) + count = length(products) + + if count == 0 do + Mix.shell().info("No existing products to delete.\n") + else + Mix.shell().info("Found #{count} existing products in Printify.") + + if Mix.shell().yes?("Delete all #{count} products before generating new ones?") do + deleted = MockupGenerator.purge_all_products(shop_id) + Mix.shell().info("Deleted #{deleted} products.\n") + else + Mix.shell().info("Skipping purge.\n") + end + end + end end diff --git a/lib/simpleshop_theme/mockups/generator.ex b/lib/simpleshop_theme/mockups/generator.ex index 8360f80..df85f0f 100644 --- a/lib/simpleshop_theme/mockups/generator.ex +++ b/lib/simpleshop_theme/mockups/generator.ex @@ -21,43 +21,43 @@ defmodule SimpleshopTheme.Mockups.Generator do def product_definitions do [ %{ - name: "Mountain Sunrise Art Print", - slug: "mountain-sunrise-print", - category: "Art Prints", + name: "Mountain Sunrise Canvas", + slug: "mountain-sunrise-canvas", + category: "Canvas Prints", artwork_url: unsplash_download_url("UweNcthlmDc"), - product_type: :poster, + product_type: :canvas, price: 2400 }, %{ - name: "Ocean Waves Art Print", - slug: "ocean-waves-print", - category: "Art Prints", + name: "Ocean Waves Canvas", + slug: "ocean-waves-canvas", + category: "Canvas Prints", artwork_url: unsplash_download_url("XRhUTUVuXAE"), - product_type: :poster, + product_type: :canvas, price: 2400 }, %{ - name: "Wildflower Meadow Art Print", - slug: "wildflower-meadow-print", - category: "Art Prints", + name: "Wildflower Meadow Canvas", + slug: "wildflower-meadow-canvas", + category: "Canvas Prints", artwork_url: unsplash_download_url("QvjL4y7SF9k"), - product_type: :poster, + product_type: :canvas, price: 2400 }, %{ - name: "Geometric Abstract Art Print", - slug: "geometric-abstract-print", - category: "Art Prints", + name: "Geometric Abstract Canvas", + slug: "geometric-abstract-canvas", + category: "Canvas Prints", artwork_url: unsplash_download_url("-6GvTDpkkPU"), - product_type: :poster, + product_type: :canvas, price: 2800 }, %{ - name: "Botanical Illustration Print", - slug: "botanical-illustration-print", - category: "Art Prints", + name: "Botanical Illustration Canvas", + slug: "botanical-illustration-canvas", + category: "Canvas Prints", artwork_url: unsplash_download_url("FNtNIDQWUZY"), - product_type: :poster, + product_type: :canvas, price: 2400 }, %{ @@ -157,25 +157,20 @@ defmodule SimpleshopTheme.Mockups.Generator do """ def blueprint_config do %{ - # Search terms matched to Printify's actual blueprint titles (partial match) - poster: %{blueprint_id: nil, print_provider_id: nil, search_term: "Matte Posters"}, - tshirt: %{blueprint_id: nil, print_provider_id: nil, search_term: "Softstyle T-Shirt"}, - hoodie: %{blueprint_id: nil, print_provider_id: nil, search_term: "Pullover Hoodie"}, - tote: %{blueprint_id: nil, print_provider_id: nil, search_term: "Cotton Tote Bag"}, - mug: %{blueprint_id: nil, print_provider_id: nil, search_term: "Mug 11oz"}, - cushion: %{ - blueprint_id: nil, - print_provider_id: nil, - search_term: "Spun Polyester Square Pillow" - }, - blanket: %{blueprint_id: nil, print_provider_id: nil, search_term: "Sherpa Fleece Blanket"}, - notebook: %{ - blueprint_id: nil, - print_provider_id: nil, - search_term: "Hardcover Journal Matte" - }, - phone_case: %{blueprint_id: nil, print_provider_id: nil, search_term: "Tough Phone Cases"}, - laptop_sleeve: %{blueprint_id: nil, print_provider_id: nil, search_term: "Laptop Sleeve"} + # Search terms matched to Printify's actual blueprint titles (partial match). + # preferred_provider_id selects a UK-based provider where available: + # 29 = Monster Digital (UK) — apparel, mugs + # 72 = Print Clever (UK) — canvas prints + canvas: %{search_term: "Satin Canvas, Stretched", preferred_provider_id: 72}, + tshirt: %{search_term: "Softstyle T-Shirt", preferred_provider_id: 29}, + hoodie: %{search_term: "Heavy Blend™ Hooded Sweatshirt", preferred_provider_id: 29}, + tote: %{search_term: "Cotton Tote Bag", preferred_provider_id: nil}, + mug: %{search_term: "Ceramic Mug", preferred_provider_id: 29}, + cushion: %{search_term: "Spun Polyester Square Pillow", preferred_provider_id: nil}, + blanket: %{search_term: "Sherpa Fleece Blanket", preferred_provider_id: nil}, + notebook: %{search_term: "Hardcover Journal Matte", preferred_provider_id: nil}, + phone_case: %{search_term: "Tough Phone Cases", preferred_provider_id: nil}, + laptop_sleeve: %{search_term: "Laptop Sleeve", preferred_provider_id: nil} } end @@ -210,13 +205,19 @@ defmodule SimpleshopTheme.Mockups.Generator do @doc """ Find a suitable print provider for a blueprint. - Prefers providers with good ratings and reasonable pricing. + + When `preferred_provider_id` is given, uses that provider if available + for the blueprint. Falls back to the first provider otherwise. """ - def find_print_provider(blueprint_id) do + def find_print_provider(blueprint_id, preferred_provider_id \\ nil) do case Client.get_print_providers(blueprint_id) do {:ok, providers} when is_list(providers) and providers != [] -> - # Just pick the first provider for simplicity - {:ok, hd(providers)} + provider = + if preferred_provider_id do + Enum.find(providers, fn p -> p["id"] == preferred_provider_id end) + end + + {:ok, provider || hd(providers)} {:ok, []} -> {:error, :no_providers} @@ -384,6 +385,26 @@ defmodule SimpleshopTheme.Mockups.Generator do end) end + @doc """ + Deletes all products from the Printify shop. + Returns the number of products deleted. + """ + def purge_all_products(shop_id) do + case Client.list_products(shop_id) do + {:ok, %{"data" => products}} when is_list(products) -> + Enum.each(products, fn p -> + IO.puts(" Deleting: #{p["title"]} (#{p["id"]})") + Client.delete_product(shop_id, p["id"]) + Process.sleep(200) + end) + + length(products) + + _ -> + 0 + end + end + @doc """ Generate mockups for all products. """ @@ -450,7 +471,7 @@ defmodule SimpleshopTheme.Mockups.Generator do with {:ok, blueprint} <- find_blueprint(config.search_term), blueprint_id = blueprint["id"], _ = IO.puts(" Found blueprint: #{blueprint["title"]} (#{blueprint_id})"), - {:ok, provider} <- find_print_provider(blueprint_id), + {:ok, provider} <- find_print_provider(blueprint_id, config[:preferred_provider_id]), provider_id = provider["id"], _ = IO.puts(" Using provider: #{provider["title"]} (#{provider_id})"), {:ok, variants} <- get_variant_info(blueprint_id, provider_id), diff --git a/lib/simpleshop_theme/providers/printify.ex b/lib/simpleshop_theme/providers/printify.ex index 4137f56..cd9df9a 100644 --- a/lib/simpleshop_theme/providers/printify.ex +++ b/lib/simpleshop_theme/providers/printify.ex @@ -418,10 +418,11 @@ defmodule SimpleshopTheme.Providers.Printify do cond do has_tag?(tags, ~w[t-shirt tshirt shirt hoodie sweatshirt apparel clothing]) -> "Apparel" + has_tag?(tags, ~w[canvas]) -> "Canvas Prints" has_tag?(tags, ~w[mug cup blanket pillow cushion homeware homewares home]) -> "Homewares" has_tag?(tags, ~w[notebook journal stationery]) -> "Stationery" has_tag?(tags, ~w[phone case bag tote accessories]) -> "Accessories" - has_tag?(tags, ~w[art print poster canvas wall]) -> "Art Prints" + has_tag?(tags, ~w[art print poster wall]) -> "Art Prints" true -> List.first(raw["tags"]) end end diff --git a/priv/static/mockups/autumn-leaves-notebook-5.webp b/priv/static/mockups/autumn-leaves-notebook-5.webp new file mode 100644 index 0000000..709088d Binary files /dev/null and b/priv/static/mockups/autumn-leaves-notebook-5.webp differ diff --git a/priv/static/mockups/autumn-leaves-notebook-6.webp b/priv/static/mockups/autumn-leaves-notebook-6.webp new file mode 100644 index 0000000..33a24c6 Binary files /dev/null and b/priv/static/mockups/autumn-leaves-notebook-6.webp differ diff --git a/priv/static/mockups/botanical-illustration-canvas-1.webp b/priv/static/mockups/botanical-illustration-canvas-1.webp new file mode 100644 index 0000000..f2b4c21 Binary files /dev/null and b/priv/static/mockups/botanical-illustration-canvas-1.webp differ diff --git a/priv/static/mockups/botanical-illustration-canvas-2.webp b/priv/static/mockups/botanical-illustration-canvas-2.webp new file mode 100644 index 0000000..909944f Binary files /dev/null and b/priv/static/mockups/botanical-illustration-canvas-2.webp differ diff --git a/priv/static/mockups/botanical-illustration-canvas-3.webp b/priv/static/mockups/botanical-illustration-canvas-3.webp new file mode 100644 index 0000000..72d9fcc Binary files /dev/null and b/priv/static/mockups/botanical-illustration-canvas-3.webp differ diff --git a/priv/static/mockups/botanical-illustration-canvas-4.webp b/priv/static/mockups/botanical-illustration-canvas-4.webp new file mode 100644 index 0000000..223e15f Binary files /dev/null and b/priv/static/mockups/botanical-illustration-canvas-4.webp differ diff --git a/priv/static/mockups/botanical-illustration-print-1.webp b/priv/static/mockups/botanical-illustration-print-1.webp deleted file mode 100644 index 22fd326..0000000 Binary files a/priv/static/mockups/botanical-illustration-print-1.webp and /dev/null differ diff --git a/priv/static/mockups/botanical-illustration-print-2.webp b/priv/static/mockups/botanical-illustration-print-2.webp deleted file mode 100644 index 39690ea..0000000 Binary files a/priv/static/mockups/botanical-illustration-print-2.webp and /dev/null differ diff --git a/priv/static/mockups/botanical-illustration-print-3.webp b/priv/static/mockups/botanical-illustration-print-3.webp deleted file mode 100644 index e06c7de..0000000 Binary files a/priv/static/mockups/botanical-illustration-print-3.webp and /dev/null differ diff --git a/priv/static/mockups/fern-leaf-mug-1.webp b/priv/static/mockups/fern-leaf-mug-1.webp index bdce60c..d02f9ac 100644 Binary files a/priv/static/mockups/fern-leaf-mug-1.webp and b/priv/static/mockups/fern-leaf-mug-1.webp differ diff --git a/priv/static/mockups/fern-leaf-mug-2.webp b/priv/static/mockups/fern-leaf-mug-2.webp index ae4ccf1..16d551c 100644 Binary files a/priv/static/mockups/fern-leaf-mug-2.webp and b/priv/static/mockups/fern-leaf-mug-2.webp differ diff --git a/priv/static/mockups/fern-leaf-mug-3.webp b/priv/static/mockups/fern-leaf-mug-3.webp index 15c77a7..77160ca 100644 Binary files a/priv/static/mockups/fern-leaf-mug-3.webp and b/priv/static/mockups/fern-leaf-mug-3.webp differ diff --git a/priv/static/mockups/fern-leaf-mug-4.webp b/priv/static/mockups/fern-leaf-mug-4.webp index 0490e3b..afe32d3 100644 Binary files a/priv/static/mockups/fern-leaf-mug-4.webp and b/priv/static/mockups/fern-leaf-mug-4.webp differ diff --git a/priv/static/mockups/forest-light-hoodie-1.webp b/priv/static/mockups/forest-light-hoodie-1.webp index f322fde..594a566 100644 Binary files a/priv/static/mockups/forest-light-hoodie-1.webp and b/priv/static/mockups/forest-light-hoodie-1.webp differ diff --git a/priv/static/mockups/forest-light-hoodie-10.webp b/priv/static/mockups/forest-light-hoodie-10.webp new file mode 100644 index 0000000..abf1ee2 Binary files /dev/null and b/priv/static/mockups/forest-light-hoodie-10.webp differ diff --git a/priv/static/mockups/forest-light-hoodie-11.webp b/priv/static/mockups/forest-light-hoodie-11.webp new file mode 100644 index 0000000..7bbbe00 Binary files /dev/null and b/priv/static/mockups/forest-light-hoodie-11.webp differ diff --git a/priv/static/mockups/forest-light-hoodie-12.webp b/priv/static/mockups/forest-light-hoodie-12.webp new file mode 100644 index 0000000..e40dc24 Binary files /dev/null and b/priv/static/mockups/forest-light-hoodie-12.webp differ diff --git a/priv/static/mockups/forest-light-hoodie-13.webp b/priv/static/mockups/forest-light-hoodie-13.webp new file mode 100644 index 0000000..d1d106d Binary files /dev/null and b/priv/static/mockups/forest-light-hoodie-13.webp differ diff --git a/priv/static/mockups/forest-light-hoodie-14.webp b/priv/static/mockups/forest-light-hoodie-14.webp new file mode 100644 index 0000000..da00741 Binary files /dev/null and b/priv/static/mockups/forest-light-hoodie-14.webp differ diff --git a/priv/static/mockups/forest-light-hoodie-15.webp b/priv/static/mockups/forest-light-hoodie-15.webp new file mode 100644 index 0000000..7723119 Binary files /dev/null and b/priv/static/mockups/forest-light-hoodie-15.webp differ diff --git a/priv/static/mockups/forest-light-hoodie-16.webp b/priv/static/mockups/forest-light-hoodie-16.webp new file mode 100644 index 0000000..ed32d5c Binary files /dev/null and b/priv/static/mockups/forest-light-hoodie-16.webp differ diff --git a/priv/static/mockups/forest-light-hoodie-2.webp b/priv/static/mockups/forest-light-hoodie-2.webp index 697c8c5..dfc2718 100644 Binary files a/priv/static/mockups/forest-light-hoodie-2.webp and b/priv/static/mockups/forest-light-hoodie-2.webp differ diff --git a/priv/static/mockups/forest-light-hoodie-3.webp b/priv/static/mockups/forest-light-hoodie-3.webp new file mode 100644 index 0000000..b85784d Binary files /dev/null and b/priv/static/mockups/forest-light-hoodie-3.webp differ diff --git a/priv/static/mockups/forest-light-hoodie-4.webp b/priv/static/mockups/forest-light-hoodie-4.webp new file mode 100644 index 0000000..4da4c89 Binary files /dev/null and b/priv/static/mockups/forest-light-hoodie-4.webp differ diff --git a/priv/static/mockups/forest-light-hoodie-5.webp b/priv/static/mockups/forest-light-hoodie-5.webp new file mode 100644 index 0000000..0afec9e Binary files /dev/null and b/priv/static/mockups/forest-light-hoodie-5.webp differ diff --git a/priv/static/mockups/forest-light-hoodie-6.webp b/priv/static/mockups/forest-light-hoodie-6.webp new file mode 100644 index 0000000..6584419 Binary files /dev/null and b/priv/static/mockups/forest-light-hoodie-6.webp differ diff --git a/priv/static/mockups/forest-light-hoodie-7.webp b/priv/static/mockups/forest-light-hoodie-7.webp new file mode 100644 index 0000000..107b1a7 Binary files /dev/null and b/priv/static/mockups/forest-light-hoodie-7.webp differ diff --git a/priv/static/mockups/forest-light-hoodie-8.webp b/priv/static/mockups/forest-light-hoodie-8.webp new file mode 100644 index 0000000..117cd51 Binary files /dev/null and b/priv/static/mockups/forest-light-hoodie-8.webp differ diff --git a/priv/static/mockups/forest-light-hoodie-9.webp b/priv/static/mockups/forest-light-hoodie-9.webp new file mode 100644 index 0000000..f792e13 Binary files /dev/null and b/priv/static/mockups/forest-light-hoodie-9.webp differ diff --git a/priv/static/mockups/forest-silhouette-tshirt-1.webp b/priv/static/mockups/forest-silhouette-tshirt-1.webp index 1203775..81c48a1 100644 Binary files a/priv/static/mockups/forest-silhouette-tshirt-1.webp and b/priv/static/mockups/forest-silhouette-tshirt-1.webp differ diff --git a/priv/static/mockups/forest-silhouette-tshirt-10.webp b/priv/static/mockups/forest-silhouette-tshirt-10.webp new file mode 100644 index 0000000..69877c6 Binary files /dev/null and b/priv/static/mockups/forest-silhouette-tshirt-10.webp differ diff --git a/priv/static/mockups/forest-silhouette-tshirt-11.webp b/priv/static/mockups/forest-silhouette-tshirt-11.webp new file mode 100644 index 0000000..aa0c20e Binary files /dev/null and b/priv/static/mockups/forest-silhouette-tshirt-11.webp differ diff --git a/priv/static/mockups/forest-silhouette-tshirt-12.webp b/priv/static/mockups/forest-silhouette-tshirt-12.webp new file mode 100644 index 0000000..519b809 Binary files /dev/null and b/priv/static/mockups/forest-silhouette-tshirt-12.webp differ diff --git a/priv/static/mockups/forest-silhouette-tshirt-13.webp b/priv/static/mockups/forest-silhouette-tshirt-13.webp new file mode 100644 index 0000000..f52ce5f Binary files /dev/null and b/priv/static/mockups/forest-silhouette-tshirt-13.webp differ diff --git a/priv/static/mockups/forest-silhouette-tshirt-3.webp b/priv/static/mockups/forest-silhouette-tshirt-3.webp index c8ff3b4..d8e2642 100644 Binary files a/priv/static/mockups/forest-silhouette-tshirt-3.webp and b/priv/static/mockups/forest-silhouette-tshirt-3.webp differ diff --git a/priv/static/mockups/forest-silhouette-tshirt-4.webp b/priv/static/mockups/forest-silhouette-tshirt-4.webp index 5e11b17..e637189 100644 Binary files a/priv/static/mockups/forest-silhouette-tshirt-4.webp and b/priv/static/mockups/forest-silhouette-tshirt-4.webp differ diff --git a/priv/static/mockups/forest-silhouette-tshirt-5.webp b/priv/static/mockups/forest-silhouette-tshirt-5.webp new file mode 100644 index 0000000..98bab3d Binary files /dev/null and b/priv/static/mockups/forest-silhouette-tshirt-5.webp differ diff --git a/priv/static/mockups/forest-silhouette-tshirt-6.webp b/priv/static/mockups/forest-silhouette-tshirt-6.webp new file mode 100644 index 0000000..05c8208 Binary files /dev/null and b/priv/static/mockups/forest-silhouette-tshirt-6.webp differ diff --git a/priv/static/mockups/forest-silhouette-tshirt-7.webp b/priv/static/mockups/forest-silhouette-tshirt-7.webp new file mode 100644 index 0000000..ff7d534 Binary files /dev/null and b/priv/static/mockups/forest-silhouette-tshirt-7.webp differ diff --git a/priv/static/mockups/forest-silhouette-tshirt-8.webp b/priv/static/mockups/forest-silhouette-tshirt-8.webp new file mode 100644 index 0000000..b3d7563 Binary files /dev/null and b/priv/static/mockups/forest-silhouette-tshirt-8.webp differ diff --git a/priv/static/mockups/forest-silhouette-tshirt-9.webp b/priv/static/mockups/forest-silhouette-tshirt-9.webp new file mode 100644 index 0000000..32e3444 Binary files /dev/null and b/priv/static/mockups/forest-silhouette-tshirt-9.webp differ diff --git a/priv/static/mockups/geometric-abstract-canvas-1.webp b/priv/static/mockups/geometric-abstract-canvas-1.webp new file mode 100644 index 0000000..1eeb64b Binary files /dev/null and b/priv/static/mockups/geometric-abstract-canvas-1.webp differ diff --git a/priv/static/mockups/geometric-abstract-canvas-2.webp b/priv/static/mockups/geometric-abstract-canvas-2.webp new file mode 100644 index 0000000..83ba09e Binary files /dev/null and b/priv/static/mockups/geometric-abstract-canvas-2.webp differ diff --git a/priv/static/mockups/geometric-abstract-canvas-3.webp b/priv/static/mockups/geometric-abstract-canvas-3.webp new file mode 100644 index 0000000..4845cc8 Binary files /dev/null and b/priv/static/mockups/geometric-abstract-canvas-3.webp differ diff --git a/priv/static/mockups/geometric-abstract-canvas-4.webp b/priv/static/mockups/geometric-abstract-canvas-4.webp new file mode 100644 index 0000000..d32654b Binary files /dev/null and b/priv/static/mockups/geometric-abstract-canvas-4.webp differ diff --git a/priv/static/mockups/geometric-abstract-print-1.webp b/priv/static/mockups/geometric-abstract-print-1.webp deleted file mode 100644 index 6510cc4..0000000 Binary files a/priv/static/mockups/geometric-abstract-print-1.webp and /dev/null differ diff --git a/priv/static/mockups/geometric-abstract-print-2.webp b/priv/static/mockups/geometric-abstract-print-2.webp deleted file mode 100644 index 3985bb8..0000000 Binary files a/priv/static/mockups/geometric-abstract-print-2.webp and /dev/null differ diff --git a/priv/static/mockups/geometric-abstract-print-3.webp b/priv/static/mockups/geometric-abstract-print-3.webp deleted file mode 100644 index 554c782..0000000 Binary files a/priv/static/mockups/geometric-abstract-print-3.webp and /dev/null differ diff --git a/priv/static/mockups/monstera-leaf-notebook-5.webp b/priv/static/mockups/monstera-leaf-notebook-5.webp new file mode 100644 index 0000000..b3f06d8 Binary files /dev/null and b/priv/static/mockups/monstera-leaf-notebook-5.webp differ diff --git a/priv/static/mockups/monstera-leaf-notebook-6.webp b/priv/static/mockups/monstera-leaf-notebook-6.webp new file mode 100644 index 0000000..2f5e302 Binary files /dev/null and b/priv/static/mockups/monstera-leaf-notebook-6.webp differ diff --git a/priv/static/mockups/monstera-leaf-phone-case-5.webp b/priv/static/mockups/monstera-leaf-phone-case-5.webp new file mode 100644 index 0000000..f023bfd Binary files /dev/null and b/priv/static/mockups/monstera-leaf-phone-case-5.webp differ diff --git a/priv/static/mockups/monstera-leaf-phone-case-6.webp b/priv/static/mockups/monstera-leaf-phone-case-6.webp new file mode 100644 index 0000000..906a6fa Binary files /dev/null and b/priv/static/mockups/monstera-leaf-phone-case-6.webp differ diff --git a/priv/static/mockups/mountain-sunrise-canvas-1.webp b/priv/static/mockups/mountain-sunrise-canvas-1.webp new file mode 100644 index 0000000..49f9a1c Binary files /dev/null and b/priv/static/mockups/mountain-sunrise-canvas-1.webp differ diff --git a/priv/static/mockups/mountain-sunrise-canvas-2.webp b/priv/static/mockups/mountain-sunrise-canvas-2.webp new file mode 100644 index 0000000..8a45c7c Binary files /dev/null and b/priv/static/mockups/mountain-sunrise-canvas-2.webp differ diff --git a/priv/static/mockups/mountain-sunrise-canvas-3.webp b/priv/static/mockups/mountain-sunrise-canvas-3.webp new file mode 100644 index 0000000..8753f48 Binary files /dev/null and b/priv/static/mockups/mountain-sunrise-canvas-3.webp differ diff --git a/priv/static/mockups/mountain-sunrise-canvas-4.webp b/priv/static/mockups/mountain-sunrise-canvas-4.webp new file mode 100644 index 0000000..7e02f62 Binary files /dev/null and b/priv/static/mockups/mountain-sunrise-canvas-4.webp differ diff --git a/priv/static/mockups/mountain-sunrise-print-1.webp b/priv/static/mockups/mountain-sunrise-print-1.webp deleted file mode 100644 index e44ab67..0000000 Binary files a/priv/static/mockups/mountain-sunrise-print-1.webp and /dev/null differ diff --git a/priv/static/mockups/mountain-sunrise-print-2.webp b/priv/static/mockups/mountain-sunrise-print-2.webp deleted file mode 100644 index 631201f..0000000 Binary files a/priv/static/mockups/mountain-sunrise-print-2.webp and /dev/null differ diff --git a/priv/static/mockups/mountain-sunrise-print-3.webp b/priv/static/mockups/mountain-sunrise-print-3.webp deleted file mode 100644 index d601c58..0000000 Binary files a/priv/static/mockups/mountain-sunrise-print-3.webp and /dev/null differ diff --git a/priv/static/mockups/ocean-waves-canvas-1.webp b/priv/static/mockups/ocean-waves-canvas-1.webp new file mode 100644 index 0000000..3a7e729 Binary files /dev/null and b/priv/static/mockups/ocean-waves-canvas-1.webp differ diff --git a/priv/static/mockups/ocean-waves-canvas-2.webp b/priv/static/mockups/ocean-waves-canvas-2.webp new file mode 100644 index 0000000..8352280 Binary files /dev/null and b/priv/static/mockups/ocean-waves-canvas-2.webp differ diff --git a/priv/static/mockups/ocean-waves-canvas-3.webp b/priv/static/mockups/ocean-waves-canvas-3.webp new file mode 100644 index 0000000..e8ef226 Binary files /dev/null and b/priv/static/mockups/ocean-waves-canvas-3.webp differ diff --git a/priv/static/mockups/ocean-waves-canvas-4.webp b/priv/static/mockups/ocean-waves-canvas-4.webp new file mode 100644 index 0000000..e1ddb25 Binary files /dev/null and b/priv/static/mockups/ocean-waves-canvas-4.webp differ diff --git a/priv/static/mockups/ocean-waves-print-1.webp b/priv/static/mockups/ocean-waves-print-1.webp deleted file mode 100644 index 30bdcf3..0000000 Binary files a/priv/static/mockups/ocean-waves-print-1.webp and /dev/null differ diff --git a/priv/static/mockups/ocean-waves-print-2.webp b/priv/static/mockups/ocean-waves-print-2.webp deleted file mode 100644 index 96f7fd1..0000000 Binary files a/priv/static/mockups/ocean-waves-print-2.webp and /dev/null differ diff --git a/priv/static/mockups/ocean-waves-print-3.webp b/priv/static/mockups/ocean-waves-print-3.webp deleted file mode 100644 index 8494caf..0000000 Binary files a/priv/static/mockups/ocean-waves-print-3.webp and /dev/null differ diff --git a/priv/static/mockups/sunset-gradient-tote-5.webp b/priv/static/mockups/sunset-gradient-tote-5.webp new file mode 100644 index 0000000..2ba5a25 Binary files /dev/null and b/priv/static/mockups/sunset-gradient-tote-5.webp differ diff --git a/priv/static/mockups/wildflower-meadow-canvas-1.webp b/priv/static/mockups/wildflower-meadow-canvas-1.webp new file mode 100644 index 0000000..85a8023 Binary files /dev/null and b/priv/static/mockups/wildflower-meadow-canvas-1.webp differ diff --git a/priv/static/mockups/wildflower-meadow-canvas-2.webp b/priv/static/mockups/wildflower-meadow-canvas-2.webp new file mode 100644 index 0000000..b4e4e7c Binary files /dev/null and b/priv/static/mockups/wildflower-meadow-canvas-2.webp differ diff --git a/priv/static/mockups/wildflower-meadow-canvas-3.webp b/priv/static/mockups/wildflower-meadow-canvas-3.webp new file mode 100644 index 0000000..5a30853 Binary files /dev/null and b/priv/static/mockups/wildflower-meadow-canvas-3.webp differ diff --git a/priv/static/mockups/wildflower-meadow-canvas-4.webp b/priv/static/mockups/wildflower-meadow-canvas-4.webp new file mode 100644 index 0000000..4ba5205 Binary files /dev/null and b/priv/static/mockups/wildflower-meadow-canvas-4.webp differ diff --git a/priv/static/mockups/wildflower-meadow-print-1.webp b/priv/static/mockups/wildflower-meadow-print-1.webp deleted file mode 100644 index 04e4b86..0000000 Binary files a/priv/static/mockups/wildflower-meadow-print-1.webp and /dev/null differ diff --git a/priv/static/mockups/wildflower-meadow-print-2.webp b/priv/static/mockups/wildflower-meadow-print-2.webp deleted file mode 100644 index b9c23f6..0000000 Binary files a/priv/static/mockups/wildflower-meadow-print-2.webp and /dev/null differ diff --git a/priv/static/mockups/wildflower-meadow-print-3.webp b/priv/static/mockups/wildflower-meadow-print-3.webp deleted file mode 100644 index 583b743..0000000 Binary files a/priv/static/mockups/wildflower-meadow-print-3.webp and /dev/null differ diff --git a/priv/static/mockups/wildflower-meadow-tote-5.webp b/priv/static/mockups/wildflower-meadow-tote-5.webp new file mode 100644 index 0000000..64fdd5a Binary files /dev/null and b/priv/static/mockups/wildflower-meadow-tote-5.webp differ