Moliere.love
September 6, 2025 · View on GitHub
Run Locally
Option 1: Docker (matches production)
make jekyll_build_prod # Build with production settings
make build # Build Docker image
make run # Run nginx container
Go to http://0.0.0.0/
Option 2: Jekyll development server
make jekyll_serve_local # Live reload on port 4000
Go to http://0.0.0.0:4000/
Option 3: Build and watch
make jekyll_build_watch # Watch for changes and rebuild
Deploy New Content
-
Build for production:
make jekyll_build_prod # This runs: JEKYLL_ENV=production bundle exec jekyll build -
Commit and push (including the built
_sitefolder):git add . git commit -m "Your changes" git push origin master -
Automatic deployment: DigitalOcean App Platform automatically:
- Detects the push to master
- Uses the
Dockerfileto build a production container - Copies the custom
nginx.confand_sitefolder to nginx - Deploys the site with optimized performance and SEO settings
Architecture & SSL Configuration
Infrastructure Overview
User → Cloudflare (CDN/SSL) → DigitalOcean App Platform → nginx container (HTTP)
SSL/HTTPS Handling
- HTTPS termination: Handled by Cloudflare (upstream)
- HTTP to HTTPS redirect: Automatic 301 redirect by Cloudflare
- nginx configuration: Only listens on port 80 (receives HTTP from Cloudflare)
- SSL certificates: Managed automatically by Cloudflare
Why nginx.conf Only Uses HTTP
The nginx container receives HTTP traffic from Cloudflare, which has already:
- Terminated SSL/TLS connections
- Performed HTTPS redirects
- Added security headers
- Provided CDN caching
Verification
Test the setup:
# Should return 301 redirect to HTTPS
curl -I http://moliere.love
# Should return 200 OK with Cloudflare headers
curl -I https://moliere.love
This architecture provides optimal SEO performance with HTTPS, HTTP/2 support, and global CDN caching.
URL Parameters for Testing
App Banner
?show-banner=true- Forces the app store banner to show (resets user dismissal)
Cookie Consent
?reset-cookies=true- Resets cookie consent and shows cookie banner again
New play
-
Content in data
.json - personnages-
.json - structure-
.json
-
images in assets/images/
- play image
- characters
- scenes
-
Folders in
- assets/images/
- posts/
- assets/images/
-
pages:
- posts/
/ 1 file per scene with summary - posts/
.md
- posts/