commit f576bf06722190b6b55ab752a1a3d8ffd2d5cfe7 Author: Will Estes Date: Tue Jul 21 17:26:00 2026 -0400 Initial Sunflower Acres Hugo site scaffold diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8dd6d56 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +public/ +.hugo_build.lock diff --git a/archetypes/default.md b/archetypes/default.md new file mode 100644 index 0000000..c6f3fce --- /dev/null +++ b/archetypes/default.md @@ -0,0 +1,5 @@ ++++ +title = '{{ replace .File.ContentBaseName "-" " " | title }}' +date = {{ .Date }} +draft = true ++++ diff --git a/assets/css/style.css b/assets/css/style.css new file mode 100644 index 0000000..41b0b0e --- /dev/null +++ b/assets/css/style.css @@ -0,0 +1,225 @@ +:root { + --paper: #EDE7DA; + --paper-raised: #F5F0E5; + --ink: #2A241D; + --ink-soft: #5C5647; + --sage: #4E5C40; + --sage-soft: #6D7A5C; + --clay: #9C5A3C; + --line: #D6CCB8; + --ok: #4C7A52; + --ok-bg: #E3ECDE; + --low: #A97423; + --low-bg: #F1E6CD; + --out: #A24A3E; + --out-bg: #F0DFD8; +} + +@media (prefers-color-scheme: dark) { + :root { + --paper: #1D1B16; + --paper-raised: #26241D; + --ink: #ECE5D6; + --ink-soft: #B7AF9C; + --sage: #93AC7E; + --sage-soft: #7C9169; + --clay: #D08F65; + --line: #3B3728; + --ok: #8FBB8C; + --ok-bg: #263626; + --low: #D9A94B; + --low-bg: #3A3020; + --out: #D98C7E; + --out-bg: #3A2620; + } +} + +* { box-sizing: border-box; } + +html, body { margin: 0; padding: 0; } + +body { + background: var(--paper); + color: var(--ink); + font-family: Seravek, "Gill Sans Nova", "Gill Sans", "Segoe UI", system-ui, sans-serif; + font-size: 17px; + line-height: 1.6; + -webkit-font-smoothing: antialiased; +} + +h1, h2, h3 { + font-family: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif; + font-weight: 500; + text-wrap: balance; + margin: 0 0 0.6em; +} + +a { color: var(--sage); } + +.site-header { + display: flex; + align-items: center; + justify-content: space-between; + max-width: 960px; + margin: 0 auto; + padding: 1.75rem 1.5rem 1rem; +} + +.site-header .brand { + font-family: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif; + font-size: 1.3rem; + color: var(--ink); + text-decoration: none; +} + +.site-header nav { + display: flex; + gap: 1.5rem; +} + +.site-header nav a { + color: var(--ink-soft); + text-decoration: none; + font-size: 0.95rem; +} + +.site-header nav a:hover { color: var(--sage); } + +main { + max-width: 960px; + margin: 0 auto; + padding: 1rem 1.5rem 4rem; +} + +.site-footer { + max-width: 960px; + margin: 0 auto; + padding: 2rem 1.5rem 3rem; + color: var(--ink-soft); + font-size: 0.85rem; + border-top: 1px solid var(--line); +} + +/* Home hero */ +.hero { + padding: 3rem 0 2.5rem; + text-align: center; +} + +.hero h1 { font-size: clamp(2rem, 5vw, 2.8rem); } + +.hero p { + color: var(--ink-soft); + max-width: 42ch; + margin: 0 auto 1.5rem; +} + +.hero .cta { + display: inline-block; + background: var(--sage); + color: #fff; + padding: 0.7rem 1.4rem; + border-radius: 4px; + text-decoration: none; + font-size: 0.95rem; +} + +/* Product grid */ +.product-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); + gap: 1.5rem; + margin-top: 1.5rem; +} + +.product-card { + background: var(--paper-raised); + border: 1px solid var(--line); + border-radius: 6px; + overflow: hidden; + display: flex; + flex-direction: column; +} + +.product-card img { width: 100%; display: block; } + +.product-card .body { padding: 1rem 1.1rem 1.25rem; display: flex; flex-direction: column; gap: 0.5rem; flex: 1; } + +.product-card h3 { font-size: 1.1rem; margin: 0; } + +.product-card p.desc { color: var(--ink-soft); font-size: 0.9rem; margin: 0; flex: 1; } + +.product-card .price { font-weight: 600; font-variant-numeric: tabular-nums; } + +.status-pill { + display: inline-flex; + align-items: center; + gap: 0.4rem; + font-size: 0.7rem; + font-weight: 600; + letter-spacing: 0.05em; + text-transform: uppercase; + padding: 0.25rem 0.55rem; + border-radius: 100px; + align-self: flex-start; +} +.status-pill::before { content: ""; width: 0.45rem; height: 0.45rem; border-radius: 50%; background: currentColor; } +.status-pill.available { background: var(--ok-bg); color: var(--ok); } +.status-pill.low { background: var(--low-bg); color: var(--low); } +.status-pill.out { background: var(--out-bg); color: var(--out); } + +.buy-btn { + display: inline-block; + text-align: center; + padding: 0.55rem 1rem; + border-radius: 4px; + text-decoration: none; + font-size: 0.9rem; + font-weight: 600; +} +.buy-btn.enabled { background: var(--sage); color: #fff; } +.buy-btn.disabled { background: transparent; border: 1px solid var(--line); color: var(--ink-soft); cursor: default; pointer-events: none; } + +.low-note { font-size: 0.8rem; color: var(--low); margin: 0; } + +/* Reorder box */ +.reorder-box { + margin-top: 2.5rem; + padding: 1.5rem; + background: var(--paper-raised); + border: 1px solid var(--line); + border-radius: 6px; +} +.reorder-box h2 { font-size: 1.1rem; margin-bottom: 0.4rem; } +.reorder-box p { color: var(--ink-soft); font-size: 0.9rem; margin: 0 0 1rem; } +.reorder-box form { display: flex; gap: 0.6rem; flex-wrap: wrap; } +.reorder-box input[type="email"] { + flex: 1; + min-width: 200px; + padding: 0.55rem 0.75rem; + border-radius: 4px; + border: 1px solid var(--line); + background: var(--paper); + color: var(--ink); + font-size: 0.9rem; +} +.reorder-box button { + padding: 0.55rem 1.1rem; + border-radius: 4px; + border: none; + background: var(--clay); + color: #fff; + font-size: 0.9rem; + font-weight: 600; + cursor: pointer; +} +.reorder-box .demo-note { + margin-top: 0.75rem; + font-size: 0.78rem; + color: var(--ink-soft); + font-style: italic; +} + +@media (max-width: 620px) { + .site-header { flex-direction: column; gap: 0.75rem; align-items: flex-start; } +} diff --git a/content/_index.md b/content/_index.md new file mode 100644 index 0000000..81fbd37 --- /dev/null +++ b/content/_index.md @@ -0,0 +1 @@ +Cold-processed with simple ingredients, cured for six weeks, and packed by hand in small batches. If we're out of something, we'll tell you rather than let you guess. diff --git a/content/about.md b/content/about.md new file mode 100644 index 0000000..0ef6780 --- /dev/null +++ b/content/about.md @@ -0,0 +1,7 @@ +--- +title: "About" +--- + +Sunflower Acres is a small soap-making operation. Every bar is cold-processed by hand in small batches, cured for six weeks, and made with simple, recognizable ingredients. + +We keep this page as easy to update as the shop itself — nothing here needs a developer to change. diff --git a/content/shop/_index.md b/content/shop/_index.md new file mode 100644 index 0000000..62e3af8 --- /dev/null +++ b/content/shop/_index.md @@ -0,0 +1,3 @@ +--- +title: "Shop" +--- diff --git a/data/products.yaml b/data/products.yaml new file mode 100644 index 0000000..d47fbd9 --- /dev/null +++ b/data/products.yaml @@ -0,0 +1,28 @@ +- name: "Lavender Oatmeal Bar" + slug: "lavender-oatmeal" + description: "Cold-processed with rolled oats and lavender essential oil. Gentle enough for every day." + price: "8.00" + image: "/images/soaps/lavender-oatmeal.svg" + stripe_payment_link: "" + status: "available" +- name: "Clay & Charcoal Mint Bar" + slug: "clay-charcoal-mint" + description: "French green clay and activated charcoal with peppermint essential oil." + price: "9.00" + image: "/images/soaps/clay-charcoal-mint.svg" + stripe_payment_link: "" + status: "low" +- name: "Oat Milk & Honey Bar" + slug: "oat-milk-honey" + description: "Oat milk and local honey, unscented and mild." + price: "8.00" + image: "/images/soaps/oat-milk-honey.svg" + stripe_payment_link: "" + status: "available" +- name: "Cedar & Sage Bar" + slug: "cedar-sage" + description: "A grounding blend of cedarwood and sage, cold-processed with shea butter." + price: "9.00" + image: "/images/soaps/cedar-sage.svg" + stripe_payment_link: "" + status: "out" diff --git a/hugo.toml b/hugo.toml new file mode 100644 index 0000000..36ef4f5 --- /dev/null +++ b/hugo.toml @@ -0,0 +1,9 @@ +baseURL = "https://sunfloweracres.reground.org/" +languageCode = "en-us" +title = "Sunflower Acres" + +[params] + tagline = "Small-batch soap, made by hand" + +[markup.goldmark.renderer] + unsafe = true diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html new file mode 100644 index 0000000..8b5e96b --- /dev/null +++ b/layouts/_default/baseof.html @@ -0,0 +1,27 @@ + + + + + + {{ if .IsHome }}{{ .Site.Title }} — {{ .Site.Params.tagline }}{{ else }}{{ .Title }} — {{ .Site.Title }}{{ end }} + + + + + +
+ {{ block "main" . }}{{ end }} +
+ + + + diff --git a/layouts/_default/single.html b/layouts/_default/single.html new file mode 100644 index 0000000..17b274b --- /dev/null +++ b/layouts/_default/single.html @@ -0,0 +1,4 @@ +{{ define "main" }} +

{{ .Title }}

+{{ .Content }} +{{ end }} diff --git a/layouts/index.html b/layouts/index.html new file mode 100644 index 0000000..294ca8e --- /dev/null +++ b/layouts/index.html @@ -0,0 +1,7 @@ +{{ define "main" }} +
+

Small-batch soap, made by hand.

+

{{ .Content }}

+ Shop the soaps +
+{{ end }} diff --git a/layouts/shop/list.html b/layouts/shop/list.html new file mode 100644 index 0000000..090746c --- /dev/null +++ b/layouts/shop/list.html @@ -0,0 +1,41 @@ +{{ define "main" }} +

{{ .Title }}

+ +
+ {{ range .Site.Data.products }} +
+ {{ .name }} +
+ + {{ if eq .status "available" }}Available + {{ else if eq .status "low" }}Low Stock + {{ else }}Out of Stock{{ end }} + +

{{ .name }}

+

{{ .description }}

+

${{ .price }}

+ {{ if eq .status "low" }} +

Orders may take a bit longer to ship.

+ {{ end }} + {{ if eq .status "out" }} + Out of Stock + {{ else if .stripe_payment_link }} + Buy — ${{ .price }} + {{ else }} + Checkout coming soon + {{ end }} +
+
+ {{ end }} +
+ +
+

Already ordered from us?

+

Enter your email to see what you got last time.

+
+ + +
+

This box is a preview — it'll work once checkout is connected, since it looks up real past orders.

+
+{{ end }} diff --git a/static/images/soaps/cedar-sage.svg b/static/images/soaps/cedar-sage.svg new file mode 100644 index 0000000..0887c41 --- /dev/null +++ b/static/images/soaps/cedar-sage.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/static/images/soaps/clay-charcoal-mint.svg b/static/images/soaps/clay-charcoal-mint.svg new file mode 100644 index 0000000..379b01d --- /dev/null +++ b/static/images/soaps/clay-charcoal-mint.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/static/images/soaps/lavender-oatmeal.svg b/static/images/soaps/lavender-oatmeal.svg new file mode 100644 index 0000000..3fed36d --- /dev/null +++ b/static/images/soaps/lavender-oatmeal.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/static/images/soaps/oat-milk-honey.svg b/static/images/soaps/oat-milk-honey.svg new file mode 100644 index 0000000..25fd9a6 --- /dev/null +++ b/static/images/soaps/oat-milk-honey.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file