- Implemented tests for debugging browser cache vs server response. - Verified calendar displays correct dates for November 2025. - Added visual inspection screenshot for calendar layout. - Created tests to ensure calendar fits within its container. - Checked for correct styling of available and blocked dates. - Debugged login form behavior and cookie handling. - Added tests for forced browser refresh and cache verification. - Conducted visual tests to compare actual calendar layout with expected. - Enhanced logging for better traceability during test execution.
112 lines
3.3 KiB
Markdown
112 lines
3.3 KiB
Markdown
# Warme Catering Website
|
|
|
|
En moderne hjemmeside for catering og private dining services. Bygget med Next.js 14, TypeScript og Tailwind CSS.
|
|
|
|
## Features
|
|
|
|
- Moderne og responsivt design
|
|
- Online menu oversigt og bestilling
|
|
- Admin dashboard for bookings
|
|
- Dynamisk prissætning baseret på antal gæster
|
|
- Pakke- og menu-konfiguration
|
|
|
|
## Tech Stack
|
|
|
|
- Next.js 14 med App Router
|
|
- TypeScript
|
|
- Tailwind CSS
|
|
- React Server Components
|
|
- date-fns for datohåndtering
|
|
- react-day-picker for kalenderbooking
|
|
|
|
## Kom i gang
|
|
|
|
1. Klon repositoriet:
|
|
```bash
|
|
git clone https://github.com/alexpolo1/kokken.git
|
|
```
|
|
|
|
2. Installer dependencies:
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
3. Start development server:
|
|
```bash
|
|
npm run dev
|
|
```
|
|
|
|
4. Åbn [http://localhost:3000](http://localhost:3000) i din browser
|
|
|
|
## Struktur
|
|
|
|
```
|
|
/src/
|
|
/app/* - Next.js App Router pages & API routes
|
|
/components/* - React komponenter (UI, admin, marketing)
|
|
/config/* - Konfiguration og data
|
|
/lib/* - Utility functions (auth, db, utils)
|
|
/types/* - TypeScript type definitioner
|
|
/scripts/* - Database migrations & utility scripts
|
|
/tests/* - Playwright E2E tests
|
|
/docs/* - Dokumentation
|
|
/public/* - Statiske filer (billeder, etc.)
|
|
```
|
|
|
|
## Deployment & database
|
|
|
|
Environment variables are required and must be set in a local `.env` file (do NOT commit it).
|
|
|
|
Required env vars (see `.env.example`):
|
|
|
|
- `OPENAI_KEY` - OpenAI API key used by image generation (optional)
|
|
- `DB_HOST`, `DB_USER`, `DB_PASSWORD`, `DB_NAME` - MariaDB connection
|
|
- `ADMIN_USER`, `ADMIN_PASSWORD` - basic-auth for admin area
|
|
|
|
Run database migrations (builds helper scripts then runs migration):
|
|
|
|
```bash
|
|
npm run migrate
|
|
```
|
|
|
|
Build and start the production server:
|
|
|
|
```bash
|
|
npm run build
|
|
node server.mjs
|
|
```
|
|
|
|
Generate images (script will skip images that already exist and uses `scripts/image-cache.json`):
|
|
|
|
```bash
|
|
node scripts/generate-images.mjs
|
|
```
|
|
|
|
Notes:
|
|
- The repo ignores `.env*` files. Keep secrets in `.env` or your deployment environment.
|
|
- Generated images can be large; a small number of generated images were removed from git and the project ignores `public/img/generated/`. If you want generated images checked into the repo, move them into `public/img/` and commit explicitly.
|
|
- For production process management the project includes PM2 scripts in `package.json` (see `pm2:*` scripts).
|
|
|
|
### Office365 / SMTP (app password)
|
|
|
|
If you plan to use an Office365 mailbox with SMTP (app password):
|
|
|
|
1. Enable SMTP AUTH for the mailbox (tenant settings may block it by default).
|
|
2. If the mailbox has MFA enabled, create an app password for the mailbox and use it as `SMTP_PASS`.
|
|
- Microsoft 365: My account -> Security info -> Add method -> App password (or use admin center to manage).
|
|
3. Set these env vars in your local `.env`:
|
|
|
|
```bash
|
|
SMTP_HOST=smtp.office365.com
|
|
SMTP_PORT=587
|
|
SMTP_USER=christian@warme.dk
|
|
SMTP_PASS=your-app-password
|
|
SENDER_EMAIL=christian@warme.dk
|
|
BOOKING_EMAIL=christian@warme.dk
|
|
```
|
|
|
|
4. The contact API will send mail using the authenticated mailbox as the From address and set Reply-To to the visitor's email so replies go to them.
|
|
|
|
If you prefer a more modern and robust approach we can switch to Microsoft Graph API with OAuth2 (recommended for production).
|
|
|