From Bare Theme to a Store That Looks Real: My Shopify Launch Baseline Skill
A six-stage baseline distilled from one full store overhaul at knightlynails.com: channel and backup, theme fixes, brand-asset fallbacks, legal and trust pages, content system, admin handoff — every pitfall root-caused, every item verified with curl and screenshots.
The problem: "theme installed" and "ready to open" are a hundred details apart
When we overhauled our own Shopify store (knightlynails.com, DS Nails theme), we found that a "installed theme" is nowhere near "ready to open": product-card hover buttons covering the title and price, a big empty gap under the PDP gallery main image, zero policy pages, no contact form, an homepage full of "Example product" placeholders, and the default Shopify favicon.
None of these is hard. But nobody had ever listed them systematically. So after the overhaul, we distilled the whole flow into a skill: shopify-store-launch-baseline — a baseline from bare theme to operational store, six stages, every pitfall root-caused.
The one rule: not seen is not done
Every stage follows the same loop: fix theme → build → push precisely → verify with curl → see it with your own eyes in a screenshot. String assertions can't see nested styles; until you've seen it, it isn't done.
Six stages (the order is dependency-driven)
1. Channel and backup. Without a deployment channel everything after is moot. Prefer a Dev Dashboard app (one credential covers theme + content; the shpat_ token doubles as the CLI theme token); fall back to Theme Access only when the merchant wants theme-only permissions. Back up with shopify theme pull before pushing anything — the merchant may have theme-editor changes live that a full push would wipe.
2. Theme baseline fixes. Product cards and the PDP are the conversion battlefield — fix bugs first: hover overlay buttons must position relative to the image container; white-background product images always use object-fit: contain; PDP gallery width/height must be real dimensions (wrong hardcoded ratios leave wrong lazy-slide space); single-image products must not fade to blank on hover; merchant-entered headings must not go through the t filter.
3. Brand-asset fallback wiring. One pattern: theme-bundled defaults in assets/, templates wired with a "merchant setting > theme asset" fallback chain — uploads in the admin override automatically, and a fresh install looks complete out of the box. favicon (512²), logo (horizontal wordmark), OG share image (1200×628) can all be generated in code.
4. Legal and trust (A-priority). The policy set of four: refund/privacy/terms from Shopify's template generator then adapted (**remember to delete the [INSERT RETURN ADDRESS] placeholder**); shipping has no official template and must be written by hand. Contact form via {% form 'contact' %} — a page whose handle is contact picks up the template automatically. Footer menu split into Quick links / Policies columns.
5. Content system — the key to "looking like a real store." Hero slider with ≥3 slides (white-background product shots use split layout, never full-bleed cover); smart collections New arrivals + Best sellers to kill placeholders; a brand-story page in the main menu; a Guides blog with 4 core guides; two-layer FAQ (6 questions on the homepage + "Before you choose your set" at the PDP bottom).
6. Admin handoff checks. Non-theme items the store owner must confirm personally: shipping rates matching the announcement bar, tax/Markets/currency strategy, branded order notification emails, the Cookie/GDPR banner, social placeholder links swapped for real accounts.
Push discipline: five steps, every time
- Edit source → build; 2. diff files-to-push against the live backup; 3.
shopify theme push --only <each file>— always push precisely; 4. if the page didn't change, immediately--verbosefor silent failures (schema option labels are capped at 50 chars;themeFilesUpsertcan silently reject); 5. curl + screenshot.
And one ordering rule: push the section (schema) before the JSON template — Shopify strips settings not registered in the schema; do it in reverse and custom settings vanish.
Pitfall cheat-sheet (all field-tested)
- Navigation menus are a separate scope,
write_online_store_navigation— notwrite_content. Collections=products, pages/blogs=content, menus=navigation; don't mix the three. article.handlecarries the blog prefix (guides/slug) — match withhandle | split: '/' | last.- In the admin TinyMCE, use single newlines for paragraphs; double newlines spawn empty
<p><br></p>. - The new admin no longer has in-store custom apps — they moved to the Dev Dashboard.
For the content side (collections/menus/pages/blogs), a store-bootstrap script can lay everything down in one run: create-only and idempotent, never overwriting merchant edits.
Install
git clone https://github.com/laojin1900/365Skill.git
./install.sh shopify-store-launch-baselineRepo: github.com/laojin1900/365Skill/tree/main/skills/shopify-store-launch-baseline
Made by Laojin · AI that ships
365SkillAn agent-skills lab: 14 in-house skills
365Skill is our public lab for agent skills: a standard SKILL.md format, a deny-by-default publish policy, and an evals harness. It holds 14 original 365 skills — 12 public and 2 internal. Apache-2.0 — star it, install it, file issues.
More from Laojin: Sellenca · 365AIOrg · AllModelsAPI · 365Loopa · 365 Ops