Woodsmith is a self-hosted Next.js application for the Beaman Woodworks company website. It combines a public portfolio, shop, process writing, buyer account flow, contact-first custom work intake, project tracking, media library management, and a private Woodshop dashboard in one deployment.
- Public portfolio pages backed only by verified or explicitly review-marked media from the NAS photo library mounted at
/app/pics - Portfolio category filtering for tables, benches, stepstools, cabinets, and smaller objects
- Shop pages with asking-price language, cart totals, coupon handling, tax estimate, pickup/delivery/shipping labels, and Stripe checkout plumbing
- Process writing under
/processand the Shop process section, with markdown content and optional source-credit links for outside references - Contact-first custom work requests with attachments, lead-time context, material preferences, project tracking, and an optional live procedural 3D scale preview
- Optional server-side OpenAI image-model previews for custom work when
OPENAI_API_KEYandENABLE_PUBLIC_AI_RENDERING=trueare configured; generated previews are stored back into/app/pics - Buyer account pages for signup, login, password reset, profile editing, profile images, and account-linked projects
- Private Woodshop dashboard with focused workspace tabs for editing settings, pages, pieces, custom work types, users, media, process notes, projects, orders, reviews, and notifications through structured browser forms
- Admin-only pencil edit entrypoints on public sections that link directly into the matching Woodshop workspace while signed in
- Browser media management for upload, rename, delete, assignment, tags, review state, visual crop/focal controls, optional AI-cleaned copies, cleanup mode, display order, source credit, and zoom metadata against the writable NAS photo library
- Email notification queueing, Stripe invoice creation, and EasyPost shipping-label requests when the related environment variables are configured
- Full-size image lightbox support with zoom, pan, arrow navigation, plus
Escand close-button exit behavior - Keyword/metadata search plus browser-assisted visual search across public content and, for admins, private media, visual labels, clusters, unpublished content, and project records. Optional OpenAI embeddings can re-rank results when enabled.
- Persistent light/day and black OLED night themes using the local ITC New Rennie Mackintosh font assets
- Programmatic Beaman Woodworks favicon and brand mark
- Safe profile administration for renaming accounts, replacing legacy developer emails, and deleting non-current users from the dashboard
- Persistence uses
node:sqlite, which emits Node's experimental warning during build and runtime. /journaland/journal/[slug]now redirect to Process. New public writing should be published as Process notes.- The public custom work flow is contact-first and includes a credential-free procedural 3D scale preview. The older SVG renderer remains for stored visualization snapshots. Optional photorealistic preview generation is available only when explicitly configured with a server-side OpenAI key and feature flag.
- The public site exposes admin-only edit links when an admin is signed in. Those links open the matching workspace in
/studio; they are entrypoints into the dashboard, not a drag-and-drop page builder. - Scientist Desk remains published without photos until the correct black phenolic resin top, birds-eye maple rails, and white maple legs media are verified.
- New piece records can be created without guessed photos. Media should be assigned only after review in the Woodshop dashboard.
- Payment capture, invoice delivery, shipping-label creation, outbound email, OpenAI image cleanup, photorealistic preview generation, and embedding re-ranking require environment configuration before they work live.
site/: the Next.js application- The repo-local
pics/folder is legacy/ignored and should not be used as the source of truth. Production mounts/volume1/homes/Cooper/Photos/Dad_Woodworking_09262025directly to/app/pics, andMEDIA_ROOTdefaults to/app/picsrather than creating a local media folder. design/Beaman_Woodworks_V2_Google_Stitch_Beta/: Beaman Woodworks 2.0 prototypes audited for layout, theme, and dashboard directionITC_New_Rennie_Mackintosh_Complete_Family_Pack/: source font assets for the site typographydocker-compose.synology.yml: Synology runtime modelsynology-nas-deploy.md: deployment and NAS operations guideadmin.md: private Woodshop dashboard manualwoodsmith_DeepWiki_Merged_03222026.md: codebase architecture reference
- Install dependencies from the repo root with
npm install. - Copy
.env.exampleto.envand fill the values you intend to use locally. - Start the app with
npm run dev. - Open
http://127.0.0.1:3000.
Root scripts proxy into site/:
npm run devnpm run typechecknpm run lintnpm run buildnpm run start
Use the root .env.example as the canonical reference.
Required for a secure deployment:
STUDIO_PASSWORDSESSION_SECRETSITE_URLNEXT_PUBLIC_SITE_URL
Required for optional live services:
STRIPE_SECRET_KEYSTRIPE_PUBLISHABLE_KEYEASYPOST_API_KEYSMTP_HOSTSMTP_PORTSMTP_SECURESMTP_USERSMTP_PASSWORDSHIP_FROM_NAMESHIP_FROM_STREET1SHIP_FROM_CITYSHIP_FROM_STATESHIP_FROM_ZIPSHIP_FROM_COUNTRYOPENAI_API_KEYOPENAI_IMAGE_MODELOPENAI_IMAGE_SIZEOPENAI_IMAGE_QUALITYOPENAI_EMBEDDING_MODELENABLE_PUBLIC_AI_RENDERINGENABLE_AI_BACKGROUND_CLEANUPENABLE_EMBEDDING_SEARCH
Public:
//portfolio/portfolio/[slug]/shop/shop/cart/process/process/[slug]/commissions/commissions/status/about/search
Legacy redirects:
/journal/journal/[slug]
Buyer account and request access:
/account/signup/account/login/account/forgot/account/reset/account/profile/account/projects/requests/[reference]
Private Woodshop:
/studio/login/studio
The supported deployment target is Synology NAS with Docker Compose and reverse proxy termination. The compose file mounts /volume1/homes/Cooper/Photos/Dad_Woodworking_09262025 directly to /app/pics:rw; do not remount or bind the repo-local pics/ folder under docker_ssd.
After deploying a build from this branch, the startup migration updates legacy lowestprime@proton.me developer references in persisted settings and seeded profile data to cooperbeaman@proton.me.
Use these docs together:
synology-nas-deploy.mdadmin.mdwoodsmith_DeepWiki_Merged_03222026.md