Automated pre-launch testing summary, generated 2026-05-27.
mod_headers or HTTPS can't be verified here and is flagged as prod-only. Most galleries are empty in this install (only randompic has 45 images), which limits some image-flow tests.
Your site is in good shape for launch from a security + transport perspective. License is valid, file protections all in place, CSRF + rate limiting work, image.php is properly scoped, code passes all the "code-level" t-checks in the checklist.
<title> and add <h1> + <meta description> + OG tags.mod_headers is off, masking nothing here — it's a Local quirk)./robots.txt 200, User-agent: * and Disallow: /admin/ present/sitemap.xml 200, valid XML, 5 URLs listed/sitemap.php 403 for anon, 200 logged in (admin gated correctly)/gallery/Portfolio 200 (rewrite works)/this-page-does-not-exist-xyz returns 404 with branded pagesite-settings.json (good for launch)https://instagram.com/olafernstphotography/ (because services_in_menu: false — expected)data-lang="de", data-lang="en")gallery/TheGarage renders intro HTML (sanitized) with H1/admin/upload.php)/admin/ anon: upload.php, branding.php, cache-manager.php, analytics.php, upload-history.php, contact-editor.php, legal-editor.php, services-editor.php, password-manager.phpmanage.php correctly 302's without ?gallery= paramtoggle-visibility.php returns 403 anon (stricter than the rest — good)testme.php itself is admin-only (302 anon → 404)check.php (logged-in): all green — PHP 8.2.27, GD, WebP, AVIF, FreeType, sodium, mbstring, fileinfo, exif, Argon2id, writable dirs, license valid until 2099, watermark font present, rewrite probe passes| Path | Code |
|---|---|
/site-settings.json | 404 ✓ |
/galleries/*/config.json | 404 ✓ |
/galleries/*/proof-flags.json | 404 ✓ |
/galleries/*/uploads-metadata.json | 404 ✓ |
/logs/security.log | 404 ✓ |
/analytics/visits.json | 404 ✓ |
/cache/ | 404 ✓ |
/admin-credentials.php | 403 ✓ |
/featured.json | 404 ✓ |
/.git/HEAD | 404 ✓ |
/_backup/ | 404 ✓ |
_backup/.htaccess and cache/.htaccess both have Require all denied. ✓
src=_backup/originals/... → 404 ✓src=cache/... → 404 ✓src=admin/... → 404 ✓src=logs/... → 404 ✓src=%2e%2e%2f%2e%2e%2fetc%2fpasswd → 404 ✓gallery.php?name=../../admin → 404 ✓gallery-pdf.php?g=TheGarage&slot=1 (anon) → 404 ✓image.php?src=galleries/randompic/<img> returns 200, Content-Type: image/jpeg (308KB original)?w=400 returns 27KBAccept: image/avif,image/webp,image/* → Content-Type: image/avif ✓csrf_token (verified at session start)csrf_token per session127.0.0.1 is now in cooldown for ~15 min — existing session unaffected.)track-image-visit.php: returns 405 for GET (POST-only — good); rate-limit code: isRateLimitExceeded('track_image_visit', 60, 60) returns 429 ✓updateJSONFileAtomic ✓getClientIP() reads only $_SERVER['REMOTE_ADDR'] — no spoofable headers ✓ (t203)admin/index.php uses password_verify() against getAdminPasswordHash() — no hardcoded fallback ✓ (t204)sanitizeQuillHTML enforces rel="noopener noreferrer" on target="_blank" anchors ✓ (t205a)getimagesize() against IMAGETYPE_PNG/JPEG/ICO ✓ (t205b)From: reads contact_email / from_email from site-settings.json — no hardcoded address ✓ (t205c)SESSION_TIMEOUT constant in security-helpers.php ✓ (t199)image/jpeg|png|gif|webp only ✓ (t077)imagecreatefrom* + imagejpeg/png/webp — only Orientation read for auto-rotation, rest dropped ✓ (t081)license.json present (325 bytes), signature valid, expires 2099-12-31 (per check.php)<title> is just "Gallery" — bad for SEO. Should be brand-specific (e.g., "Olaf Ernst Photography"). Other pages are fine (Contact, My Favorites, Legal Notice & Privacy Policy, The Garage).<h1> — only an <h2 class="ac-modal__title"> from the confirm modal. Adding a visually-hidden or visible H1 would help SEO + screen readers (t243).<meta name="description"> or Open Graph tags on homepage — hurts SEO and link previews on social media..htaccess correctly configures X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy, Strict-Transport-Security, CSP, and Cache-Control — all wrapped in <IfModule mod_headers.c>. But this Local Apache has mod_headers disabled, so nothing is emitted. This is a Local-only issue; production should ship with mod_headers enabled. Verify on prod with curl -I https://olafernst.com/ and confirm those headers appear (t188, t301).These can't be verified from a headless terminal session.
mail() output, line-break preservation, From header on prodLast-Modified / Cache-Control headers (currently 0 because mod_headers off)