4 Commits

Author SHA1 Message Date
Hördle Bot
9df9a808bf fix: share emoji fills remaining slots with black squares when game is lost 2025-11-27 13:06:01 +01:00
Hördle Bot
5da78c926d fix: share emoji grid shows black square for skipped last attempt 2025-11-27 12:31:52 +01:00
Hördle Bot
120ffaaf2c docs: update docker config and docs for white labeling 2025-11-27 11:26:27 +01:00
Hördle Bot
50511f11ac chore: bump version to 0.1.0.14 2025-11-27 11:20:15 +01:00
6 changed files with 81 additions and 5 deletions

View File

@@ -40,6 +40,34 @@ ENV NEXT_TELEMETRY_DISABLED 1
ENV DATABASE_URL="file:./dev.db" ENV DATABASE_URL="file:./dev.db"
RUN node_modules/.bin/prisma generate RUN node_modules/.bin/prisma generate
# White Label Build Arguments
ARG NEXT_PUBLIC_APP_NAME
ARG NEXT_PUBLIC_APP_DESCRIPTION
ARG NEXT_PUBLIC_DOMAIN
ARG NEXT_PUBLIC_TWITTER_HANDLE
ARG NEXT_PUBLIC_PLAUSIBLE_DOMAIN
ARG NEXT_PUBLIC_PLAUSIBLE_SCRIPT_SRC
ARG NEXT_PUBLIC_THEME_COLOR
ARG NEXT_PUBLIC_BACKGROUND_COLOR
ARG NEXT_PUBLIC_CREDITS_ENABLED
ARG NEXT_PUBLIC_CREDITS_TEXT
ARG NEXT_PUBLIC_CREDITS_LINK_TEXT
ARG NEXT_PUBLIC_CREDITS_LINK_URL
# Pass env vars to build
ENV NEXT_PUBLIC_APP_NAME=$NEXT_PUBLIC_APP_NAME
ENV NEXT_PUBLIC_APP_DESCRIPTION=$NEXT_PUBLIC_APP_DESCRIPTION
ENV NEXT_PUBLIC_DOMAIN=$NEXT_PUBLIC_DOMAIN
ENV NEXT_PUBLIC_TWITTER_HANDLE=$NEXT_PUBLIC_TWITTER_HANDLE
ENV NEXT_PUBLIC_PLAUSIBLE_DOMAIN=$NEXT_PUBLIC_PLAUSIBLE_DOMAIN
ENV NEXT_PUBLIC_PLAUSIBLE_SCRIPT_SRC=$NEXT_PUBLIC_PLAUSIBLE_SCRIPT_SRC
ENV NEXT_PUBLIC_THEME_COLOR=$NEXT_PUBLIC_THEME_COLOR
ENV NEXT_PUBLIC_BACKGROUND_COLOR=$NEXT_PUBLIC_BACKGROUND_COLOR
ENV NEXT_PUBLIC_CREDITS_ENABLED=$NEXT_PUBLIC_CREDITS_ENABLED
ENV NEXT_PUBLIC_CREDITS_TEXT=$NEXT_PUBLIC_CREDITS_TEXT
ENV NEXT_PUBLIC_CREDITS_LINK_TEXT=$NEXT_PUBLIC_CREDITS_LINK_TEXT
ENV NEXT_PUBLIC_CREDITS_LINK_URL=$NEXT_PUBLIC_CREDITS_LINK_URL
RUN npm run build RUN npm run build
# Production image, copy all the files and run next # Production image, copy all the files and run next

View File

@@ -109,6 +109,8 @@ Das Ziel ist es, den Song mit so wenigen Hinweisen wie möglich zu erraten und d
Das Projekt ist für den Betrieb mit Docker optimiert. Das Projekt ist für den Betrieb mit Docker optimiert.
👉 **[White Labeling mit Docker? Hier klicken!](WHITE_LABEL.md#docker-deployment)**
1. **Vorbereitung:** 1. **Vorbereitung:**
Kopiere die Beispiel-Konfiguration: Kopiere die Beispiel-Konfiguration:
```bash ```bash

View File

@@ -65,3 +65,35 @@ To replace the logo and icons:
1. Replace `public/favicon.ico`. 1. Replace `public/favicon.ico`.
2. Replace `public/icon.png` (if it exists). 2. Replace `public/icon.png` (if it exists).
3. Update `app/manifest.ts` if you have custom icon paths. 3. Update `app/manifest.ts` if you have custom icon paths.
3. Update `app/manifest.ts` if you have custom icon paths.
## Docker Deployment
When deploying with Docker, please note that **Next.js inlines `NEXT_PUBLIC_` environment variables at build time**.
This means you cannot simply change the environment variables in `docker-compose.yml` and restart the container to change the branding. You must **rebuild the image**.
### Using Docker Compose
1. Create a `.env` file with your custom configuration:
```bash
NEXT_PUBLIC_APP_NAME="My Music Game"
NEXT_PUBLIC_THEME_COLOR="#ff0000"
# ... other variables
```
2. Ensure your `docker-compose.yml` passes these variables as build arguments (already configured in `docker-compose.example.yml`):
```yaml
services:
hoerdle:
build:
context: .
args:
NEXT_PUBLIC_APP_NAME: ${NEXT_PUBLIC_APP_NAME}
# ...
```
3. Build and start the container:
```bash
docker compose up --build -d
```

View File

@@ -254,15 +254,16 @@ export default function Game({ dailyPuzzle, genre = null, isSpecial = false, max
for (let i = 0; i < totalGuesses; i++) { for (let i = 0; i < totalGuesses; i++) {
if (i < gameState.guesses.length) { if (i < gameState.guesses.length) {
if (hasWon && i === gameState.guesses.length - 1) { if (gameState.guesses[i] === 'SKIPPED') {
emojiGrid += '🟩';
} else if (gameState.guesses[i] === 'SKIPPED') {
emojiGrid += '⬛'; emojiGrid += '⬛';
} else if (hasWon && i === gameState.guesses.length - 1) {
emojiGrid += '🟩';
} else { } else {
emojiGrid += '🟥'; emojiGrid += '🟥';
} }
} else { } else {
emojiGrid += '⬜'; // If game is lost, fill remaining slots with black squares
emojiGrid += hasLost ? '⬛' : '⬜';
} }
} }

View File

@@ -4,6 +4,19 @@ services:
build: build:
context: . context: .
dockerfile: Dockerfile dockerfile: Dockerfile
args:
NEXT_PUBLIC_APP_NAME: ${NEXT_PUBLIC_APP_NAME}
NEXT_PUBLIC_APP_DESCRIPTION: ${NEXT_PUBLIC_APP_DESCRIPTION}
NEXT_PUBLIC_DOMAIN: ${NEXT_PUBLIC_DOMAIN}
NEXT_PUBLIC_TWITTER_HANDLE: ${NEXT_PUBLIC_TWITTER_HANDLE}
NEXT_PUBLIC_PLAUSIBLE_DOMAIN: ${NEXT_PUBLIC_PLAUSIBLE_DOMAIN}
NEXT_PUBLIC_PLAUSIBLE_SCRIPT_SRC: ${NEXT_PUBLIC_PLAUSIBLE_SCRIPT_SRC}
NEXT_PUBLIC_THEME_COLOR: ${NEXT_PUBLIC_THEME_COLOR}
NEXT_PUBLIC_BACKGROUND_COLOR: ${NEXT_PUBLIC_BACKGROUND_COLOR}
NEXT_PUBLIC_CREDITS_ENABLED: ${NEXT_PUBLIC_CREDITS_ENABLED}
NEXT_PUBLIC_CREDITS_TEXT: ${NEXT_PUBLIC_CREDITS_TEXT}
NEXT_PUBLIC_CREDITS_LINK_TEXT: ${NEXT_PUBLIC_CREDITS_LINK_TEXT}
NEXT_PUBLIC_CREDITS_LINK_URL: ${NEXT_PUBLIC_CREDITS_LINK_URL}
user: root user: root
restart: always restart: always
ports: ports:

View File

@@ -1,6 +1,6 @@
{ {
"name": "hoerdle", "name": "hoerdle",
"version": "0.1.0.13", "version": "0.1.0.15",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",