Commit Graph
103 Commits
Author SHA1 Message Date
austinandClaude Opus 4.8 3b80584e22 Admin for the menu and enquiries, plus gallery fixes
Admin
- /api/admin: products CRUD, the enquiry inbox, and presigned photo upload straight to the
  bucket so images never pass through the app. Gated by platform.security.authenticated-paths
  = /api/admin/**, so any signed-in Authentik user is staff — the alternative is a role model
  a two-person bakery would never maintain.
- /api/me is deliberately PUBLIC. The SPA asks on every page load, and requiring a login
  would bounce every anonymous visitor to Authentik just to read the menu.
- /admin screens: product list with edit and remove, an editor with drag-free photo
  reordering and upload, and an enquiry inbox that flags anything the relay refused.

Gallery
- swipe on touch devices, which the react-awesome-slider it replaced had and this did not,
  plus arrow keys and position dots — with swipe there is otherwise nothing to say a card
  holds more than one photo. Vertical drags are ignored so page scrolling still works.
- @BatchSize on the photo collection: the products page loaded the whole catalogue and
  Hibernate issued a query per product for its images, forty-odd round trips for a page
  that needs two.

Three things the tests caught, none of which are obvious:
- Adding the storage starter broke every existing test. It activates on a default endpoint,
  so an S3 client is built even in tests and dies on blank keys.
- MockMvc's webAppContextSetup leaves the security filter chain OUT, so the first version of
  the security test passed 200s and proved the opposite of what it claimed. It needs
  .apply(springSecurity()).
- Turning on the security starter turns on CSRF — for the PUBLIC contact form too, which
  then 403s. The SPA now reads the XSRF-TOKEN cookie and sends X-XSRF-TOKEN, and there is a
  test asserting the form is rejected without it.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
Claude-Session: https://claude.ai/code/session_01XXKjx7FNyRVAjU8dgB5KhN
2026-07-23 11:58:21 -05:00
austin 4aee743efd Update dependency motion to v12.42.2
renovate/artifacts Artifact file update failure
2026-07-23 14:53:14 +00:00
austinandClaude Opus 4.8 c8cc8fe02d Inherit the platform contract tests, and extend the shared Renovate preset
build-and-publish / build (push) Successful in 1m16s
PlatformWebContract asserts what this app must do because it is on the platform: an /api
path matching no controller 404s rather than returning the SPA, health is UP, the liveness
and readiness probes exist, and a client-side route forwards to the shell. That first one
shipped broken to six live sites and was found by typing a URL by hand; now it fails a
build instead.

renovate.json is three lines pointing at austin/renovate-config. The rules were copied per
repo, so they matched only by luck and a change was six edits.

Platform 0.1.9.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
Claude-Session: https://claude.ai/code/session_01XXKjx7FNyRVAjU8dgB5KhN
2026-07-23 09:46:53 -05:00
austinandClaude Opus 4.8 50e17eb73f Point the motion imports at the renamed package
build-and-publish / build (push) Successful in 1m40s
Renovate's replacement PR swapped framer-motion for its successor 'motion' in
package.json but left the imports, so the build could not resolve them. The React entry
point is motion/react.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
Claude-Session: https://claude.ai/code/session_01XXKjx7FNyRVAjU8dgB5KhN
2026-07-23 08:52:01 -05:00
austin 050f20023f Merge pull request 'Update dependency vite-plugin-svgr to v5' (#5) from renovate/vite-plugin-svgr-5.x into main
build-and-publish / build (push) Successful in 1m25s
2026-07-23 08:50:57 -05:00
austin 6a6a8bbbd5 Merge pull request 'Update dependency typescript to v7' (#4) from renovate/typescript-7.x into main
build-and-publish / build (push) Successful in 1m36s
2026-07-23 08:50:56 -05:00
austin 51a024e9f5 Merge pull request 'Replace dependency framer-motion with motion' (#1) from renovate/framer-motion-replacement into main
build-and-publish / build (push) Successful in 1m49s
2026-07-23 08:50:54 -05:00
austinandClaude Opus 4.8 25832bd9ea tsconfig: drop baseUrl, which TypeScript 7 removed
build-and-publish / build (push) Successful in 1m27s
TS7 errors with 'Option baseUrl has been removed'. The paths mapping already points at
./src/*, which resolves relative to this file without it, and TS 5.9 accepts the same
config — so this lands safely ahead of the TypeScript 7 bump.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
Claude-Session: https://claude.ai/code/session_01XXKjx7FNyRVAjU8dgB5KhN
2026-07-23 08:50:29 -05:00
austin 6a18118485 Merge pull request 'Update bennett platform to v0.1.7' (#2) from renovate/bennett-platform into main
build-and-publish / build (push) Successful in 1m17s
2026-07-23 07:44:14 -05:00
austin f46c27f143 Update dependency vite-plugin-svgr to v5
renovate/artifacts Artifact file update failure
2026-07-23 12:44:13 +00:00
austin 912b47b0c3 Update dependency typescript to v7
renovate/artifacts Artifact file update failure
2026-07-23 12:44:13 +00:00
austin cd4a09c3e6 Replace dependency framer-motion with motion
renovate/artifacts Artifact file update failure
2026-07-23 12:44:11 +00:00
austin 5b1d3116a8 Update bennett platform to v0.1.7 2026-07-23 12:44:11 +00:00
austinandClaude Opus 4.8 ac2c938fea Platform 0.1.6 (contact security) + fidelity fixes from the port review
build-and-publish / build (push) Successful in 1m14s
- .container back in @layer components so Tailwind's px-4 still wins; unlayered it had
  quietly widened the gutter on every page
- shadow-sm -> shadow-xs: Tailwind v4 renamed the scale, so the ported markup was giving
  every white card a heavier shadow than the live site
- route changes jump to the top again instead of smooth-scrolling
- preload the wordmark font and the hero image

Co-Authored-By: Claude Opus 4.8 <[email protected]>
Claude-Session: https://claude.ai/code/session_01XXKjx7FNyRVAjU8dgB5KhN
2026-07-23 06:09:38 -05:00
austinandClaude Opus 4.8 1961dc64a6 Platform 0.1.5: fail fast on a blank contact recipient
build-and-publish / build (push) Successful in 46s
Co-Authored-By: Claude Opus 4.8 <[email protected]>
Claude-Session: https://claude.ai/code/session_01XXKjx7FNyRVAjU8dgB5KhN
2026-07-22 22:18:23 -05:00
austinandClaude Opus 4.8 11ae5f378d Rewrite on the Bennett platform: Spring Boot + Vite/React SPA
build-and-publish / build (push) Successful in 1m9s
Replaces the Next.js app. Same site, same look; the parts that were decisions rather
than markup now live in Java.

- catalogue, curated order, category filter and image URLs move from a TypeScript array
  into Postgres behind /api/products and /api/categories
- contact form uses the shared platform-starter-contact: validate, RECORD, send, then
  fan out to n8n. Recording first means a relay outage costs a notification, not an enquiry
- PageMetaController rewrites title/description/OG per route, replacing what Next's SSR
  gave crawlers and link-preview scrapers
- 50MB of photos leave the repo for the MinIO bucket, re-encoded to webp (14MB) with EXIF
  (including phone GPS) stripped
- fixes a catalogue typo: 'Strawberry Pie' was category 'Pies', which no filter matched, so
  it was unreachable unless browsing All

Co-Authored-By: Claude Opus 4.8 <[email protected]>
Claude-Session: https://claude.ai/code/session_01XXKjx7FNyRVAjU8dgB5KhN
2026-07-22 22:09:51 -05:00
austin 3f9efa178a ci: exercise workflow_run webhook (no-op)
build-and-publish / build (push) Successful in 3s
2026-07-22 19:50:15 -05:00
austinandClaude Opus 4.8 69e67182a1 contact: fan out enquiries to n8n hub (fire-and-forget)
build-and-publish / build (push) Successful in 8s
Keeps the direct SMTP email as the reliable delivery path; when CONTACT_HUB_URL
is set, also POSTs the enquiry to the n8n webhook so the hub sends the customer
auto-reply and (later) creates CRM/task records. Best-effort with a 4s timeout,
so a slow or down hub never blocks or fails the form.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-22 18:12:45 -05:00
austinandClaude Opus 4.8 c88bd3bc98 contact route: optional SMTP auth + trust local self-signed relay/bridge
build-and-publish / build (push) Successful in 2s
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-07-22 15:17:06 -05:00
austinandClaude Opus 4.8 0736081b5f ci: push image under thevine org after repo move
build-and-publish / build (push) Successful in 9s
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-07-22 11:53:58 -05:00
austin 9976d45af2 ci: re-trigger build after runner docker.sock fix
build-and-publish / build (push) Successful in 15s
2026-07-22 10:50:09 -05:00
austinandClaude Opus 4.8 d1cbe93721 Add Docker build + Gitea Actions CI for self-hosting
build-and-publish / build (push) Failing after 11s
- next.config: output 'standalone' for a self-contained server bundle
- Dockerfile: multi-stage Next.js build (node:22-alpine)
- .gitea/workflows/deploy.yml: build + push to the Gitea registry

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-07-22 10:44:04 -05:00
Austin c2a384e75e Enable Next image optimization now that hosting is Vercel
Firebase static export forced images.unoptimized; Vercel runs the optimizer,
so drop it to auto-resize and serve WebP for the product photos.
2026-07-14 17:51:20 -05:00
Austin 26d0e92509 Rebrand to Sage & Cream identity, working contact form, drop Firebase
- New sage/cream palette and stacked logo lockup (The Vine over Coffeehouse
  + Bakery) driven by currentColor; logo SVGs now colorable
- Reuse the logo component for the hero and section marks
- Rewrite site copy: real founding (Morissa Bennett, 2024), real story from
  the product range, remove invented claims and AI phrasing
- Contact form now sends over SMTP via /api/contact (nodemailer) with real
  send/error states, server-side validation, and reply-to the customer;
  delivers to CONTACT_TO. Add .env.example and a test-email script
- Fix mobile: unmount the off-screen menu (killed sideways scroll), cap logo
  width, responsive heroes and type
- Remove Firebase (config, tracked build output, placeholder pages, nix
  firebase-tools) now that hosting has moved
- Delete dead code: LoyaltyCardForm, ProductModal, LoadingSpinner, card-flip
  CSS, unused Playfair font
- Serve dev/start on port 2024
2026-07-14 17:48:00 -05:00
Austin c1e3390cdb updated hours 2026-03-14 11:32:25 -05:00
Austin d952371950 updated hours 2026-03-14 11:29:08 -05:00
Austin b71489d0da updated dependencies 2026-02-02 18:14:24 -06:00
austin 12c7f2ee49 added a dynamic favicon 2025-02-25 16:54:58 -08:00
austin 16db05a6a7 removed unessesary images 2025-02-25 16:54:45 -08:00
Austin Bennett bcfe880484 idk browski 2025-02-24 13:54:43 -06:00
Austin Bennett de4e7f4ed6 fixed hours & location 2025-02-21 18:27:37 -06:00
Austin Bennett fb498c7be8 idk 2025-02-21 15:11:57 -06:00
Austin Bennett e08127dcca fixed categories 2025-02-21 15:10:13 -06:00
Austin Bennett c0790f8a2a disabled contact page & fixed images 2025-02-21 15:07:16 -06:00
Austin Bennett 9b58d88977 fixed eslint issues 2025-02-21 14:51:41 -06:00
austin 84693e10b0 removed history page 2025-02-11 10:45:19 -06:00
austin 3e18e8e058 updated readme 2025-02-10 12:45:41 -06:00
austin a6ecff81d0 updated default.nix shell for nextjs 2025-02-10 12:42:19 -06:00
austin 9d03bcf8ee 2.0 2025-02-08 14:24:51 -06:00
Paul Fresnel 51988cfb3d redirect fix 2024-11-09 17:40:08 +01:00
Paul Fresnel 8847904516 products modal added 2024-11-09 17:39:17 +01:00
Paul Fresnel f877a74467 products images added 2024-11-09 17:22:56 +01:00
Paul Fresnel b6a5e5455d card form added 2024-11-09 16:46:49 +01:00
Paul Fresnel 79a9187dea form added 2024-11-09 15:15:50 +01:00
Paul Fresnel a4a5c3bd80 fixed images path 2024-11-07 14:52:32 +01:00
Paul Fresnel c143e297a4 card finished 2024-11-07 14:40:25 +01:00
Paul Fresnel a5697e4422 card css flip effect 2024-11-07 14:17:37 +01:00
Paul Fresnel 494aa650f8 loaylty card css 2024-11-07 14:13:37 +01:00
Paul Fresnel 5f3ab98040 added branding 2024-11-07 10:08:49 +01:00
Paul Fresnel ea772a139d fixes deploy 2024-11-07 03:24:33 +01:00