Archived
Three things a bakery's site should do that this one couldn't, all from the same fact. THE HOURS WERE MARKUP, so the only thing the site could do with them was print them. A visitor at half past two on a Sunday had to work out for themselves that the shop was shut. They are data now (Shop.WEEK), and `Hours` reads them two ways: as the list the footer and the contact page print — consecutive days with the same times collapsed into one line, the way a sign does it, instead of three hand-written rows — and as an answer. The header now says "Open until 2:00pm", or "Closed · opens Tuesday at 7:00am", worked out on the server in the shop's own timezone. Right now, on a Sunday evening, it says the latter. THE SHOP IS NOW DESCRIBED TO A SEARCH ENGINE: schema.org Bakery in the head, with the address, the phone number and those same opening times. For a shop whose customers find it by searching its town, that is the difference between a blue link and a listing that shows "Open ⋅ closes 2pm" — and it cannot drift from what the page says, because it is built from the same record. Serialised with Jackson rather than string-built, so the day somebody interpolates a name into it, it is not an injection. (Jackson 3 — `tools.jackson` — which is what Boot 4 ships; the fasterxml import does not compile.) A SHARED LINK NOW HAS A PICTURE. og:image, og:image:alt and a large summary card: it was a grey box with a title, which is what every link to this site has looked like in a message. AND IT PRINTS. The catering page is a price list and a bakery prints price lists — Ctrl-P now gives the prices on paper rather than a screenshot of a website: no chrome, no sage bands eating a cartridge, cards that don't split across a page break, and the buttons that only exist to be clicked marked `no-print`. Five new tests, all of them free of Spring, because this is a calculation over a constant: the week collapses as a sign would write it, the minute of opening counts as open and the minute of closing does not, and a Saturday afternoon is told when Tuesday starts. Also swept the last one-off styles the earlier pass missed — max-w-3xl/4xl, an inline letter-spacing the .h2 class already carries, and the mobile menu's link string.
93 lines
3.9 KiB
HTML
93 lines
3.9 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en" xmlns:th="http://www.thymeleaf.org" th:replace="~{fragments/page :: page(${title}, ${description}, ${path}, ~{::content})}">
|
|
<body>
|
|
<div th:fragment="content" class="bg-bakery-50">
|
|
|
|
<!--/* The shop's own front, which is what the story is about. Same band as the catering page. */-->
|
|
<section class="band relative flex items-center bg-bakery-900 text-white overflow-hidden">
|
|
<img th:src="${photos.of('gallery/Outside.webp')}" alt=""
|
|
class="absolute inset-0 w-full h-full object-cover object-bottom blur-[3px] scale-110">
|
|
<div class="absolute inset-0 bg-bakery-900/80"></div>
|
|
<div class="absolute inset-0 bg-gradient-to-t from-bakery-900 via-bakery-800/60 to-bakery-900/80"></div>
|
|
<div class="relative container w-full min-w-0">
|
|
<div class="measure text-center">
|
|
<p class="eyebrow text-bakery-200">Since 2024</p>
|
|
<h1 class="h1 mt-3 text-bakery-50">Our story</h1>
|
|
<p class="lede mt-5 text-bakery-100">
|
|
215 E Main Street, in the middle of downtown Princeville.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<header class="container pt-14 pb-2 md:pt-16 text-center"></header>
|
|
|
|
<div class="container pb-16 md:pb-24">
|
|
<div class="measure space-y-12">
|
|
<section>
|
|
<h2 class="h3 text-bakery-900 mb-4">How it started</h2>
|
|
<p class="text-bakery-800 leading-relaxed">
|
|
Morissa Bennett opened The Vine in 2024, at 215 E Main Street, in the middle of downtown
|
|
Princeville. The plan was not complicated. Bake it ourselves, sell it ourselves, and keep
|
|
enough tables that nobody feels rushed out the door.
|
|
</p>
|
|
</section>
|
|
|
|
<section>
|
|
<h2 class="h3 text-bakery-900 mb-4">What we make</h2>
|
|
<p class="text-bakery-800 leading-relaxed">
|
|
We opened with coffee and pastries. The menu kept growing. Now there are cinnamon rolls
|
|
and caramel rolls, scones, cookie bars, macarons, brownies, and pies, plus sandwiches and
|
|
paninis once the lunch crowd shows up.
|
|
</p>
|
|
</section>
|
|
|
|
<section>
|
|
<h2 class="h3 text-bakery-900 mb-4">The cakes are the fun part</h2>
|
|
<p class="text-bakery-800 leading-relaxed">
|
|
Cakes and decorated cookies are made to order, which means we mostly bake whatever
|
|
Princeville is celebrating that week. We have done a tractor, a cow, a 76th birthday, a
|
|
retirement, a wedding, and a cake for the class of 1964. We have iced sugar cookies for
|
|
the cross country team and for a bridal party. If you can describe it, we will have a go
|
|
at it.
|
|
</p>
|
|
</section>
|
|
|
|
<section>
|
|
<h2 class="h3 text-bakery-900 mb-4">Around town</h2>
|
|
<p class="text-bakery-800 leading-relaxed">
|
|
We turn out for Christmas in the Village every year and for other civic events, and the
|
|
Princeville Civic Association counts us among the town's small businesses. Enjoy
|
|
Illinois and Discover Peoria have both pointed travelers our way. If you are one of them,
|
|
we open at 7:00am, Tuesday through Saturday.
|
|
</p>
|
|
</section>
|
|
</div>
|
|
</div>
|
|
|
|
<!--/* Somewhere to go after reading: the story is a preamble to an order. */-->
|
|
<section class="section bg-bakery-800 text-white">
|
|
<div class="container">
|
|
<div class="measure text-center">
|
|
<h2 class="h3">Come and see us</h2>
|
|
<p class="mt-4 text-bakery-100 leading-relaxed">
|
|
We open at 7:00am, Tuesday through Saturday. If you are after something for a date in the
|
|
diary, it is worth asking early.
|
|
</p>
|
|
<div class="mt-8 flex flex-col sm:flex-row gap-3 justify-center">
|
|
<a href="/products"
|
|
class="pill-cream">
|
|
See what we make
|
|
</a>
|
|
<a href="/contact"
|
|
class="pill-ghost">
|
|
Get in touch
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</div>
|
|
</body>
|
|
</html>
|