Das Abo-/Bestandsschutz-Gate (User::hasActiveBooking, BookingRequiredException,
Submit-Modal, API 402/422) war bereits implementiert und getestet. Ergänzt wird
die proaktive Block-UX:
- Kunden-Dashboard zeigt bei scharfem Gate (billing.enforce_booking=true) und
fehlender aktiver Buchung einen Banner "Buchung erforderlich, um zu
veröffentlichen" mit Link zur Buchungsseite. Bestandskunden (grandfathered)
sehen den Hinweis nicht; bei offenem Gate bleibt er unsichtbar.
- Tests: Banner aus (Gate offen) / an (Gate scharf, keine Buchung) /
Ausnahme für grandfathered.
Launch-Flip bleibt env-gesteuert (BILLING_ENFORCE_BOOKING), Dev-Default false –
.env.example und Detailplan (WS-5 ✅) dokumentieren den Schalter.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
80 lines
1.8 KiB
Text
80 lines
1.8 KiB
Text
APP_NAME=Laravel
|
||
APP_ENV=local
|
||
APP_KEY=
|
||
APP_DEBUG=true
|
||
APP_URL=http://localhost
|
||
|
||
APP_LOCALE=en
|
||
APP_FALLBACK_LOCALE=en
|
||
APP_FAKER_LOCALE=en_US
|
||
|
||
APP_MAINTENANCE_DRIVER=file
|
||
# APP_MAINTENANCE_STORE=database
|
||
|
||
PHP_CLI_SERVER_WORKERS=4
|
||
|
||
BCRYPT_ROUNDS=12
|
||
|
||
LOG_CHANNEL=stack
|
||
LOG_STACK=single
|
||
LOG_DEPRECATIONS_CHANNEL=null
|
||
LOG_LEVEL=debug
|
||
|
||
DB_CONNECTION=sqlite
|
||
# DB_HOST=127.0.0.1
|
||
# DB_PORT=3306
|
||
# DB_DATABASE=laravel
|
||
# DB_USERNAME=root
|
||
# DB_PASSWORD=
|
||
|
||
SESSION_DRIVER=database
|
||
SESSION_LIFETIME=120
|
||
SESSION_ENCRYPT=false
|
||
SESSION_PATH=/
|
||
SESSION_DOMAIN=null
|
||
|
||
BROADCAST_CONNECTION=log
|
||
FILESYSTEM_DISK=local
|
||
QUEUE_CONNECTION=database
|
||
|
||
CACHE_STORE=database
|
||
# CACHE_PREFIX=
|
||
|
||
MEMCACHED_HOST=127.0.0.1
|
||
|
||
REDIS_CLIENT=phpredis
|
||
REDIS_HOST=127.0.0.1
|
||
REDIS_PASSWORD=null
|
||
REDIS_PORT=6379
|
||
|
||
MAIL_MAILER=log
|
||
MAIL_SCHEME=null
|
||
MAIL_HOST=127.0.0.1
|
||
MAIL_PORT=2525
|
||
MAIL_USERNAME=null
|
||
MAIL_PASSWORD=null
|
||
MAIL_FROM_ADDRESS="hello@example.com"
|
||
MAIL_FROM_NAME="${APP_NAME}"
|
||
|
||
AWS_ACCESS_KEY_ID=
|
||
AWS_SECRET_ACCESS_KEY=
|
||
AWS_DEFAULT_REGION=us-east-1
|
||
AWS_BUCKET=
|
||
AWS_USE_PATH_STYLE_ENDPOINT=false
|
||
|
||
VITE_APP_NAME="${APP_NAME}"
|
||
|
||
# Google-Login (Laravel Socialite). Die Redirect-URI muss in der Google Cloud
|
||
# Console EXAKT der Callback-URL der Portal-Domain entsprechen (Login läuft auf
|
||
# dem Portal-Host, nicht zwingend APP_URL). Prod: https://pressekonto.com/...
|
||
# Hinweis: Google akzeptiert keine .test-Domains – lokal nur localhost oder ein
|
||
# https-Tunnel; der echte Round-Trip wird auf Staging/Live getestet.
|
||
GOOGLE_CLIENT_ID=
|
||
GOOGLE_CLIENT_SECRET=
|
||
GOOGLE_REDIRECT_URI=https://pressekonto.com/auth/google/callback
|
||
|
||
# Abo-/Bestandsschutz-Gate (WS-5). Ist der Schalter aus, darf jeder einreichen
|
||
# (Dev-Default). Für den Launch auf true setzen: Einreichen zur Prüfung erfordert
|
||
# dann ein aktives Abo, einen bezahlten Einzelkauf oder Bestandsschutz
|
||
# (grandfathered). Siehe User::hasActiveBooking().
|
||
BILLING_ENFORCE_BOOKING=false
|