Files
DebbieWindlerSeamstress/README.md
2026-07-21 11:48:50 -05:00

217 lines
6.8 KiB
Markdown

# Debbie Windler Seamstress Website
Self-hosted website and owner administration system for `debbiewindlerseamstress.com`.
This project is intentionally a small, understandable Node.js application with Express, SQLite, session login, local image storage, Docker support, backups, and a nontechnical owner backend. It does not include checkout, customer accounts, public comments, customer uploads, payments, or scheduling.
## What Was Built
- Four public pages: Home, Items, Services, About and Contact.
- Full-screen editable hero with replaceable background image, overlay, position, text, and buttons.
- Editable featured/new/sale item showcase.
- Alphabetical item browsing with search and filters.
- Editable services page.
- Editable about text and equipment list.
- Website contact form that stores messages in SQLite even when email notification is not configured or fails.
- Secure first-owner setup flow at `/admin/setup`.
- Owner login at `/admin`.
- Admin dashboard, page editor, item manager, service manager, about/equipment manager, messages inbox, media library, appearance settings, navigation settings, business settings, search/sharing settings, security settings, backups, and maintenance mode.
- Local image upload validation and WebP optimization through Sharp.
- Manual downloadable backup archives for the database and uploaded images.
- Docker and Docker Compose support.
- Sample content and one sample sewing-themed hero image that should be replaced with Debbie's real artwork/photos.
## Project Location
`C:\Users\Owner\Documents\UO private Server\DebbieWindlerSeamstress`
## Local Development
Install Node.js 24 or newer, then from this folder:
```powershell
pnpm install
pnpm run init-db
pnpm run dev
```
Open:
```text
http://localhost:3000
```
If `pnpm` is not installed globally, `npm install` and `npm run dev` also work.
## First Owner Setup
1. Start the site.
2. Open `http://localhost:3000/admin`.
3. The app will redirect to `/admin/setup` until the first owner account is created.
4. Enter owner name, email, and a password with at least 10 characters.
5. After setup, future visits to `/admin` use the owner login screen.
No administrator password is hardcoded or stored as plain text.
## Common Owner Tasks
Edit the home page:
1. Log in at `/admin`.
2. Choose `Home Page`.
3. Change hero text, background URL, overlay, buttons, and showcase text.
4. Use `Preview Home Page`.
Add an item:
1. Choose `Items`.
2. Choose `Add Item`.
3. Fill in name, descriptions, category, price notes, availability, badges, and publish setting.
4. Upload one or more item images.
5. Save.
Read a customer message:
1. Choose `Messages`.
2. Open a message.
3. Use `Reply by Email` to open the computer's normal email program.
4. Mark unread, archive, or delete as needed.
Create a backup:
1. Choose `Backups`.
2. Choose `Create Manual Backup`.
3. Download the created ZIP file.
## Environment Setup
Copy `.env.example` to `.env` for local or production configuration.
Important values:
- `PORT`: app port, default `3000`.
- `APP_BASE_URL`: final public URL, for example `https://debbiewindlerseamstress.com`.
- `SESSION_SECRET`: long random secret for sessions.
- `DATABASE_PATH`: SQLite file path.
- `UPLOAD_DIR`: uploaded image folder.
- `BACKUP_DIR`: backup output folder.
- `OWNER_EMAIL`: where contact form notifications go.
- `SMTP_HOST`, `SMTP_PORT`, `SMTP_USER`, `SMTP_PASS`, `SMTP_FROM`: email notification settings.
Messages are always stored in the database even when SMTP is empty or fails.
## Docker
Create `.env`, then run:
```powershell
docker compose up -d --build
```
The app stores persistent files in:
- `./storage`
- `./public/uploads`
Do not include `.env` in downloadable backups or source control.
## Production Hosting Notes
Recommended production shape:
1. Run the app with Docker Compose on Perry's server.
2. Put a reverse proxy such as Caddy, Nginx, or IIS ARR in front of it.
3. Configure TLS for `debbiewindlerseamstress.com`.
4. Later, redirect `debbiewindler.com` to `debbiewindlerseamstress.com`.
5. Set `NODE_ENV=production`, `APP_BASE_URL`, `SESSION_SECRET`, SMTP values, and owner email in `.env`.
This project does not make DNS, router, firewall, reverse proxy, or live production changes.
## Backup and Restore
Manual backups are created from `/admin/backups`.
Backups include:
- SQLite database.
- Uploaded images.
Backups exclude:
- `.env`.
- passwords and SMTP secrets outside the database.
Restore process:
1. Stop the app.
2. Make a copy of the current `storage` and `public/uploads` folders.
3. Extract the backup ZIP.
4. Replace `storage/site.sqlite` and restore the `uploads` folder.
5. Start the app and check `/healthz`.
Use strong confirmation before replacing production files.
## Testing
Run:
```powershell
pnpm test
```
Current smoke tests verify:
- Public pages load.
- Admin redirects to setup/login.
- Contact form validation and CSRF session behavior.
Manual checklist before going live:
- Create owner account.
- Log in and log out.
- Edit the home hero and preview.
- Upload an image and confirm it appears in the media library.
- Add an item and confirm `/items` stays alphabetical.
- Add a service and reorder it.
- Edit About and Equipment entries.
- Submit a contact form message.
- Confirm the message appears in the admin inbox.
- Configure SMTP and confirm email notifications.
- Confirm messages are still stored if SMTP is disabled.
- Create and download a backup.
- Enable maintenance mode and confirm admins can still log in.
- Check phone, tablet, and desktop widths.
## Security Checklist
- Set a long `SESSION_SECRET`.
- Use HTTPS in production.
- Keep `.env` private.
- Use a strong owner password.
- Keep Docker base images and npm packages updated.
- Back up before updates.
- Do not expose `public/uploads` as executable content.
- Do not add customer file uploads without a separate security review.
- Keep private home address hidden unless Debbie deliberately chooses to publish it.
## Still Needed From Owner
- Final Debbie business wording.
- Final email address and phone number.
- Facebook page link, if desired.
- Service area and business hours.
- Final photos, artwork, logo, favicon, and business card artwork.
- Real service descriptions and pricing notes.
- Real item listings and item photos.
- SMTP provider settings.
- Decision on whether `debbiewindler.com` should redirect at the reverse proxy or DNS/hosting layer later.
## Notes About Initial Version
This is a complete working first version, but a few advanced features are intentionally conservative:
- CAPTCHA is wired as a future setting but not enabled by default.
- Revision history is stored for important edits; a polished one-click restore screen can be expanded later.
- The page editor uses controlled section layouts instead of arbitrary code or drag-and-drop.
- The owner reply flow uses `mailto:` instead of a built-in outgoing email client.