Tackling a sudden comeback to web development hasn’t been easy on my mind. Figuring out where to begin, what to start with, how to approach a long forgotten and perhaps even dead hobby within me… did take a couple rounds. Staring down the barrel of a forced retirement from being a layger gnome, I had to consider the future. My the future.
While I still constantly discuss with the endless voices of myself, the year of the future offered something I didn’t have last time I was active with webdev…
We marveled at our own magnificence as we gave birth to AI.
Perhaps not quite the Skynet we were promised, so I will refrain from misusing the term. Glorified Google. Spell Checker on Steroids. Large Language Models… Chad? Grok? Claude? Any of the stupid terms we give each night? Anywho, this technology made it easier for me to discuss with a different entity other than myselves, one that could do the Google for me, collect information at light speed, and help me reach a starting point.
So we landed on making a template for my parked domains. Me, Myself and Grok. We have spun the tiny totem that will eventually weave itself into existence, as my brain reconnects to the web of dev. Or so to speak.
So here we are… screenshots of the parked-domain landings I’ve built so far, plus the code to view them. In time, each parking spot will become a real site, and this post will be the archive of those forgotten placeholders. Also I needed to kickstart writing about whatever the fuck it is that I’m doing…
I won’t go too much into details, I wanted a simple parked setup that would display something slightly different for each domain, with a countdown that is random (giving myself endless time to actually make a real website).
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
<?php require_once __DIR__ . '/config.php'; ?> <!DOCTYPE html> <html lang="en" class="h-100" data-bs-theme="dark"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content="D-FAULT PARKED | Coming soon page for <?php echo htmlspecialchars($settings['title'] ?? ucfirst($domain)); ?>"> <meta name="theme-color" content="#0f172a"> <!-- <meta name="author" content="Daniel Dahl"> --> <meta name="robots" content="index, follow" /> <title><?php echo htmlspecialchars($settings['title']); ?> | Coming Soon</title> <link rel="canonical" href="https://<?php echo htmlspecialchars($domain); ?>/" /> <link rel="icon" href="/favicon.ico" type="image/x-icon"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/5.3.8/quartz/bootstrap.min.css" integrity="sha512-dnVRkLGpagS9BYaiWREn1h+iXsQukido4lIuMQFNc0ZBI285WEfmpQWf5sjL0yWS4JfrEJ1XUZ0O99zacIPmPA==" crossorigin="anonymous" referrerpolicy="no-referrer" /> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" integrity="sha384-XGjxtQfXaH2tnPFa9x+ruJTuLE3Aa6LhHSWRr1XeTyhezb4abCG4ccI5AkVDxqC+" crossorigin="anonymous"> <link rel="stylesheet" href="/style.css" id="dfault-css" type="text/css" media="all" /> <?php if (!empty($settings['ga_id'])): ?> <script async src="https://www.googletagmanager.com/gtag/js?id=<?php echo htmlspecialchars($settings['ga_id']); ?>"></script> <script> window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('js', new Date()); gtag('config', '<?php echo htmlspecialchars($settings['ga_id']); ?>') </script> <?php endif; ?> <?php if (!empty($settings['background_image'])): ?> <style> .bg-image { background-image: linear-gradient(rgba(0, 0, 0, <?php echo $settings['overlay_opacity']; ?>), rgba(0, 0, 0, <?php echo $settings['overlay_opacity']; ?>)), url('<?php echo htmlspecialchars($settings['background_image']); ?>') !important; opacity: <?php echo $settings['bg_opacity']; ?> } </style> <?php endif; ?> <meta property="og:type" content="website" /> <meta property="og:url" content="https://<?php echo htmlspecialchars($domain); ?>/" /> <meta property="og:title" content="<?php echo htmlspecialchars($settings['og_title'] ?? $settings['title'] ?? ucfirst($domain)); ?>" /> <meta property="og:description" content="<?php echo htmlspecialchars($settings['og_description'] ?? 'D-FAULT PARKED'); ?>" /> <meta property="og:image" content="https://<?= htmlspecialchars($domain) ?><?= htmlspecialchars($settings['background_image']) ?>" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:title" content="<?php echo htmlspecialchars($settings['og_title'] ?? $settings['title'] ?? ucfirst($domain)); ?>" /> <meta name="twitter:description" content="<?php echo htmlspecialchars($settings['og_description'] ?? 'D-FAULT PARKED'); ?>" /> <meta name="twitter:image" content="https://<?= htmlspecialchars($domain) ?><?= htmlspecialchars($settings['background_image']) ?>" /> </head> <body class="d-flex h-100"> <div class="bg-image"></div> <div class="container d-flex w-100 h-100 p-1 mx-auto flex-column"> <div class="mb-auto d-lg-block"> </div> <main class="text-center"> <h1 class="display-1 dd-fw4">Website <span class="d-lg-inline d-block text-warning">Coming Soon</span></h1> <blockquote> <p class="lead pb-2">Oh, yes. Very soon. <span class="d-lg-inline d-block">They are building it now.</span></p> </blockquote> <div class="container"> <div class="row"> <div class="col-6 col-lg-3"> <div class="card mb-1"> <div class="card-body"> <h1 id="days" class="card-title display-1">--</h1> </div> <div class="card-footer text-body-secondary">Days</div> </div> </div> <div class="col-6 col-lg-3"> <div class="card mb-1"> <div class="card-body"> <h1 id="hours" class="card-title display-1">--</h1> </div> <div class="card-footer text-body-secondary">Hours</div> </div> </div> <div class="col-6 col-lg-3"> <div class="card mb-1"> <div class="card-body"> <h1 id="minutes" class="card-title display-1">--</h1> </div> <div class="card-footer text-body-secondary">Minutes</div> </div> </div> <div class="col-6 col-lg-3"> <div class="card mb-1"> <div class="card-body"> <h1 id="seconds" class="card-title display-1">--</h1> </div> <div class="card-footer text-body-secondary">Seconds</div> </div> </div> </div> </div> </main> <footer class="mt-auto text-center" role="contentinfo"> <p class="m-0"> <a href="https://dfault.it/" target="_blank" title="D-FAULT PENDING" class="text-warning">D-FAULT PARKED</a><br> <span class="d-none d-lg-inline">Copyright</span> <i class="bi bi-c-circle"></i> 2005–<?php echo date("Y") ?><i class="bi bi-dot"></i><a href="https://<?php echo htmlspecialchars($domain); ?>/" title="<?php echo htmlspecialchars(ucfirst($domain)); ?>" class="text-warning"><?php echo htmlspecialchars($settings['title']); ?></a><br> <a href="https://dahlskebank.com/" target="_blank" title="Dahlske Bank" class="text-warning">Powered by dB</a> / <a href="https://danieldahl.com/" target="_blank" title="Daniel Dahl" class="text-warning">Fueled by dD</a> / <a href="https://dxd.no/" target="_blank" title="deus ex Dahl" class="text-warning">Pinnacle of dxD</a> </p> </footer> </div> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.bundle.min.js" integrity="sha384-FKyoEForCGlyvwx9Hj09JcYn3nv7wiPVlz7YYwJrWVcXK/BmnVDxM+D2scQbITxI" crossorigin="anonymous"></script> <script src="/dfault.js"></script> </body> </html> |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 |
<?php // ====================== PARKED DOMAINS CONFIG ====================== // Add every new domain here. Super easy to maintain. $host = strtolower(trim($_SERVER['HTTP_HOST'] ?? '')); $domain = preg_replace('/^www\./i', '', $host); // strip www. automatically $configs = [ 'arksanity.com' => [ 'title' => 'Arksanity Server', 'ga_id' => '', 'background_image' => '/img/arksanity.jpg', 'bg_opacity' => 0.65, 'overlay_opacity' => 0.50, 'og_title' => 'Arksanity - ARK: Survival Evolved', 'og_description' => 'Dedicated Linux Server for the Popular Game ARK: Survival Evolved' ], 'brutalina.com' => [ 'title' => 'Brutalina the Movie', 'ga_id' => '', 'background_image' => '/img/brutalina.jpg', 'bg_opacity' => 0.75, 'overlay_opacity' => 0.50, 'og_title' => 'Brutalina the Movie | Too Violent For Your Therapist', 'og_description' => 'The bloodiest cinematic experience of the decade. So unhinged they almost cancelled it before filming started. Coming soonTM (probably).' ], 'compoundcomplex.com' => [ 'title' => 'Compound Complex', 'ga_id' => '', 'background_image' => '/img/compoundcomplex.jpg', 'bg_opacity' => 0.60, 'overlay_opacity' => 0.75, 'og_title' => 'Compound Complex | Sentences That Make English Teachers Quit', 'og_description' => 'Grammar so convoluted even linguists need therapy. The only website that requires a flowchart to understand itself.' ], 'cybabes.org' => [ 'title' => 'Cybabes Society', 'ga_id' => '', 'background_image' => '/img/cybabes.png', 'bg_opacity' => 0.75, 'overlay_opacity' => 0.55, 'og_title' => 'Cybabes | Your AI Waifus Are Finally Online (Fashionably 27 Years Late)', 'og_description' => 'Virtual girlfriends who reply... eventually. Better personalities than your ex. Zero emotional baggage (until the update).' ], 'cybocop.com' => [ 'title' => 'Cybo Cop (TV Series)', 'ga_id' => '', 'background_image' => '/img/cybocop.png', 'bg_opacity' => 0.75, 'overlay_opacity' => 0.35, 'og_title' => 'Cybocop | Half Cop, Half Machine, All Existential Dread', 'og_description' => 'Policing the Internet one bad take at a time. Will arrest you for bad grammar and poor life choices.' ], 'dahlskebank.com' => [ 'title' => 'Dahlske Bank', 'ga_id' => '', 'background_image' => '/img/dahlskebank.png', 'bg_opacity' => 0.65, 'overlay_opacity' => 0.25, 'og_title' => 'Dahlske Bank | Norwegian Banking With Questionable Ethics', 'og_description' => 'Where your money goes to die... slowly and with excellent customer service. Coming soon (after the next audit).' ], 'danieldahl.com' => [ 'title' => 'Daniel Dahl', 'ga_id' => '', 'background_image' => '/img/danieldahl.png', 'bg_opacity' => 0.55, 'overlay_opacity' => 0.65, 'og_title' => 'Daniel Dahl | Professional Human, Amateur God', 'og_description' => 'Full-time professional at being Daniel Dahl. Part-time deity. 100% Norwegian chaos energy.' ], 'darkdictator.com' => [ 'title' => 'The Dark Dictator', 'ga_id' => '', 'background_image' => '/img/darkdictator.png', 'bg_opacity' => 0.65, 'overlay_opacity' => 0.50, 'og_title' => 'Dark Dictator | Yes We\'re The Villains And We\'re Honest About It', 'og_description' => 'Total world domination in progress. Please stand by. (Or else.)' ], 'fatalityfacilitator.com' => [ 'title' => 'Fatality Facilitator', 'ga_id' => '', 'background_image' => '/img/fatalityfacilitator.jpg', 'bg_opacity' => 0.35, 'overlay_opacity' => 0.00, 'og_title' => 'Fatality Facilitator | Making Death Slightly More Convenient', 'og_description' => 'Professional help with your inevitable demise since 2005. Fast, discreet, and weirdly polite.' ], 'iliketomovie.com' => [ 'title' => 'I Like To Movie', 'ga_id' => '', 'background_image' => '/img/iliketomovie.png', 'bg_opacity' => 0.75, 'overlay_opacity' => 0.50, 'og_title' => 'I Like To Movie | I Don\'t Watch Films, I Mainline Them Like Heroin', 'og_description' => 'Terminal cinephilia. Entire personality is just obscure references and emotional damage. Coming soon (after my 47th rewatch of the same movie).' ], 'iliveagain.com' => [ 'title' => 'I Live Again', 'ga_id' => '', 'background_image' => '/img/iliveagain.png', 'bg_opacity' => 0.75, 'overlay_opacity' => 0.50, 'og_title' => 'I Live Again | Death Was A Phase', 'og_description' => 'Came back wrong on purpose. Twice as unhinged and three times as hot. Resurrection kink activated.' ], 'kennywang.com' => [ 'title' => 'Kenny Wang', 'ga_id' => '', 'background_image' => '/img/kennywang.png', 'bg_opacity' => 0.65, 'overlay_opacity' => 0.50, 'og_title' => 'Kenny Wang | 100% Real Human Person (Source: Dude Trust Me)', 'og_description' => 'Professional Wang. Amateur Kenny. Full-time identity theft victim of his own name.' ], 'kiande.com' => [ 'title' => 'KiAnDe', 'ga_id' => '', 'background_image' => '/img/kiande.png', 'bg_opacity' => 0.50, 'overlay_opacity' => 0.50, 'og_title' => 'KiAnDe | Alien Queen In A Human Suit', 'og_description' => 'Xenomorph-coded but make it sexy. We\'re not saying we lay eggs... but we\'re not denying it either.' ], 'killingheat.com' => [ 'title' => 'Killing Heat', 'ga_id' => '', 'background_image' => '/img/killingheat.png', 'bg_opacity' => 0.65, 'overlay_opacity' => 0.25, 'og_title' => 'Killing Heat | So Hot It Should Be Classified As A War Crime', 'og_description' => 'Global warming is just foreplay. This website will literally melt your face off.' ], 'marxisthunter.com' => [ 'title' => 'Marxist Hunter', 'ga_id' => '', 'background_image' => '/img/marxisthunter.png', 'bg_opacity' => 0.50, 'overlay_opacity' => 0.30, 'og_title' => 'Marxist Hunter | From Each According To His Ability, To Each According To My 12-Gauge', 'og_description' => 'Licensed commie remover. Class consciousness? Nah. Class annihilation.' ], 'meatfetish.com' => [ 'title' => 'Meat Fetish', 'ga_id' => '', 'background_image' => '/img/meatfetish.png', 'bg_opacity' => 0.45, 'overlay_opacity' => 0.20, 'og_title' => 'Meat Fetish | We Don\'t Eat The Meat... We Fuck It', 'og_description' => 'Carnivores with commitment issues. The only site where "raw dog" has a completely different meaning.' ], 'meatsex.org' => [ 'title' => 'Meat Sex', 'ga_id' => '', 'background_image' => '/img/meatsex.jpg', 'bg_opacity' => 0.45, 'overlay_opacity' => 0.30, 'og_title' => 'Meatsex | Where The Sausage Party Gets Extremely Literal', 'og_description' => 'Not safe for vegetarians. Not safe for vegans. Not safe for anyone with a functioning moral compass.' ], 'meloslave.com' => [ 'title' => 'Meloslave', 'ga_id' => '', 'background_image' => '/img/meloslave.png', 'bg_opacity' => 0.75, 'overlay_opacity' => 0.25, 'og_title' => 'Meloslave | Submit To The Beat And Call Me Master', 'og_description' => 'BDSM but the safe word is lo-fi beats to cry and obey to. Melancholy never sounded so submissive.' ], 'reservedekk.no' => [ 'title' => 'Reservedekk', 'ga_id' => '', 'background_image' => '/img/reservedekk.png', 'bg_opacity' => 0.55, 'overlay_opacity' => 0.20, 'og_title' => 'Reserved Ekk | Norwegian For "Emotionally Constipated By Choice"', 'og_description' => 'We don\'t do feelings. We do long awkward silences and passive-aggressive "hei". Peak Scandinavian dysfunction.' ], 'zombiefetish.com' => [ 'title' => 'Zombie Fetish', 'ga_id' => '', 'background_image' => '/img/zombiefetish.jpg', 'bg_opacity' => 0.35, 'overlay_opacity' => 0.00, 'og_title' => 'Zombie Fetish | Cold Dead Flesh Is My Love Language', 'og_description' => 'Brains are overrated. Give us rigor mortis and that sweet post-mortem drip. Necrophilia with extra steps.' ], ]; $settings = $configs[$domain] ?? [ 'title' => 'Coming Soon', 'ga_id' => '', 'background_image' => '', 'bg_opacity' => 0.50, 'overlay_opacity' => 0.35, 'og_title' => 'Coming Soon', 'og_description' => 'D-FAULT PARKED' ]; |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
/* Theme Name: D-FAULT Theme URI: http://dfault.it/ Author: Daniel Dahl Author URI: http://danieldahl.com/ Description: D-FAULT Version: v26-0.0.2_parked License: WTFPL License URI: http://www.wtfpl.net/txt/copying/ Text Domain: Tags: */ /*-------------------------------------------------------------- >>> THEME CUSTOMIZATION STARTS HERE --------------------------------------------------------------*/ html footer a { text-decoration: none !important; } html footer a:hover { text-decoration: underline !important; } .bg-image { position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: -1; background-size: cover; background-position: center; background-attachment: fixed; } .card { box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.37), /* my deep outer shadow */ 1px 3px 24px -1px rgba(0, 0, 0, 0.15), /* your soft outer */ inset 1px 1px rgba(255, 255, 255, 0.20), /* your bright top-left highlight */ inset -1px -1px rgba(255, 255, 255, 0.10), /* your soft bottom-right */ inset 0 1px 0 0 rgba(255, 255, 255, 0.15); /* extra inner glow */ } .dd-fw4 span { font-weight: 400; } .display-1 { text-shadow: 2px 4px 3px rgba(0,0,0,0.3); } .card-title.display-1 { margin-bottom: 0; text-shadow: 2px 2px 2px rgba(0,0,0,0.5); } .card-footer { text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.75); } .lead, footer { text-shadow: 1px 2px 4px rgba(0, 0, 0, 0.85); } @media only screen and (min-width: 991px) { footer { font-weight: 600; padding-bottom: 2rem; } } @media only screen and (max-width: 992px) { .col-6.col-lg-3 { padding: 0px 5px; } .card-body { padding: 1rem; } } |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
// === RANDOM "COMING SOON" COUNTDOWN === // Completely random target every page load (no real launch date needed) // Change minDays / maxDays below if you want a different range const minDays = 30; // minimum days from now const maxDays = 180; // maximum days from now (feels like "coming soon" but unknown) const randomMs = (minDays + Math.random() * (maxDays - minDays)) * 24 * 60 * 60 * 1000; let targetTime = Date.now() + randomMs; // this changes on every refresh! function updateCountdown() { const diff = targetTime - Date.now(); if (diff <= 0) { // Countdown finished (won't normally happen with random future date) document.getElementById("days").textContent = "00"; document.getElementById("hours").textContent = "00"; document.getElementById("minutes").textContent = "00"; document.getElementById("seconds").textContent = "00"; return; } const days = Math.floor(diff / (1000 * 60 * 60 * 24)); const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60)); const seconds = Math.floor((diff % (1000 * 60)) / 1000); // Update the cards document.getElementById("days").textContent = days; document.getElementById("hours").textContent = hours.toString().padStart(2, "0"); document.getElementById("minutes").textContent = minutes.toString().padStart(2, "0"); document.getElementById("seconds").textContent = seconds.toString().padStart(2, "0"); } // Start immediately + update every second updateCountdown(); setInterval(updateCountdown, 1000); |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
<?php require_once __DIR__ . '/config.php'; header("HTTP/1.1 404 Not Found"); header("Status: 404 Not Found"); ?> <!DOCTYPE html> <html lang="en" class="h-100" data-bs-theme="dark"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content="D-FAULT PARKED | Coming soon page for <?php echo htmlspecialchars($settings['title'] ?? ucfirst($domain)); ?>"> <meta name="theme-color" content="#0f172a"> <!-- <meta name="author" content="Daniel Dahl"> --> <meta name="robots" content="noindex" /> <title><?php echo htmlspecialchars($settings['title']); ?> | 404 Page Not Found</title> <link rel="canonical" href="https://<?php echo htmlspecialchars($domain); ?>/" /> <link rel="icon" href="/favicon.ico" type="image/x-icon"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/5.3.8/quartz/bootstrap.min.css" integrity="sha512-dnVRkLGpagS9BYaiWREn1h+iXsQukido4lIuMQFNc0ZBI285WEfmpQWf5sjL0yWS4JfrEJ1XUZ0O99zacIPmPA==" crossorigin="anonymous" referrerpolicy="no-referrer" /> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" integrity="sha384-XGjxtQfXaH2tnPFa9x+ruJTuLE3Aa6LhHSWRr1XeTyhezb4abCG4ccI5AkVDxqC+" crossorigin="anonymous"> <link rel="stylesheet" href="/style.css" id="dfault-css" type="text/css" media="all" /> <?php if (!empty($settings['ga_id'])): ?> <script async src="https://www.googletagmanager.com/gtag/js?id=<?php echo htmlspecialchars($settings['ga_id']); ?>"></script> <script> window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('js', new Date()); gtag('config', '<?php echo htmlspecialchars($settings['ga_id']); ?>') </script> <?php endif; ?> <?php if (!empty($settings['background_image'])): ?> <style> .bg-image { background-image: linear-gradient(rgba(0, 0, 0, <?php echo $settings['overlay_opacity']; ?>), rgba(0, 0, 0, <?php echo $settings['overlay_opacity']; ?>)), url('<?php echo htmlspecialchars($settings['background_image']); ?>') !important; opacity: <?php echo $settings['bg_opacity']; ?>; } </style> <?php endif; ?> <meta property="og:type" content="website" /> <meta property="og:url" content="https://<?php echo htmlspecialchars($domain); ?>/" /> <meta property="og:title" content="<?php echo htmlspecialchars($settings['og_title'] ?? $settings['title'] ?? ucfirst($domain)); ?>" /> <meta property="og:description" content="<?php echo htmlspecialchars($settings['og_description'] ?? 'D-FAULT PARKED'); ?>" /> <meta property="og:image" content="https://<?= htmlspecialchars($domain) ?><?= htmlspecialchars($settings['background_image']) ?>" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:title" content="<?php echo htmlspecialchars($settings['og_title'] ?? $settings['title'] ?? ucfirst($domain)); ?>" /> <meta name="twitter:description" content="<?php echo htmlspecialchars($settings['og_description'] ?? 'D-FAULT PARKED'); ?>" /> <meta name="twitter:image" content="https://<?= htmlspecialchars($domain) ?><?= htmlspecialchars($settings['background_image']) ?>" /> </head> <body class="d-flex h-100"> <div class="bg-image"></div> <div class="container d-flex w-100 h-100 p-1 mx-auto flex-column"> <div class="mb-auto"> </div> <main class="text-center"> <h1 class="display-1">404<br>Page Not Found</h1> </main> <footer class="mt-auto text-center" role="contentinfo"> <p class="m-0"> <a href="https://dfault.it/" target="_blank" title="D-FAULT PENDING" class="text-warning">D-FAULT PARKED</a><br> <span class="d-none d-lg-inline">Copyright</span> <i class="bi bi-c-circle"></i> 2005–<?php echo date("Y") ?><i class="bi bi-dot"></i><a href="https://<?php echo htmlspecialchars($domain); ?>/" title="<?php echo htmlspecialchars(ucfirst($domain)); ?>" class="text-warning"><?php echo htmlspecialchars($settings['title']); ?></a><br> <a href="https://dahlskebank.com/" target="_blank" title="Dahlske Bank" class="text-warning">Powered by dB</a> / <a href="https://danieldahl.com/" target="_blank" title="Daniel Dahl" class="text-warning">Fueled by dD</a> / <a href="https://dxd.no/" target="_blank" title="deus ex Dahl" class="text-warning">Pinnacle of dxD</a> </p> </footer> </div> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.bundle.min.js" integrity="sha384-FKyoEForCGlyvwx9Hj09JcYn3nv7wiPVlz7YYwJrWVcXK/BmnVDxM+D2scQbITxI" crossorigin="anonymous"></script> <!-- <script src="/dfault.js"></script> --> </body> </html> |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
RewriteEngine On # --------------------------------------------------------------- # SECURITY # --------------------------------------------------------------- # Block direct access to config and any other PHP includes <FilesMatch "^config\.php$"> Require all denied </FilesMatch> # Disable directory listing Options -Indexes # Security headers <IfModule mod_headers.c> Header always set X-Frame-Options "SAMEORIGIN" Header always set X-Content-Type-Options "nosniff" Header always set Referrer-Policy "strict-origin-when-cross-origin" </IfModule> # --------------------------------------------------------------- # REWRITES # --------------------------------------------------------------- # 1. Redirect .php extension requests to trailing-slash clean URL (e.g. /page.php → /page/) RewriteCond %{THE_REQUEST} \s/+(.+)\.php[\s?] [NC] RewriteRule ^ /%1/ [R=301,L,NE] # 2. Redirect clean URLs without trailing slash (e.g. /page → /page/) RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !/$ RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.+)$ /$1/ [R=301,L] # 3. Internally rewrite trailing-slash clean URLs to .php (e.g. /page/ → page.php) RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} /$ RewriteCond %{REQUEST_FILENAME%/}\.php -f RewriteRule ^(.*)/$ $1.php [L] # --------------------------------------------------------------- # ERROR PAGES # --------------------------------------------------------------- ErrorDocument 404 /404.php ErrorDocument 403 /403.php |
Built with the help of Grok, based on Bootstrap, using Grok Imagine to generate background images. Also I might’ve written a line or two…
Update 17-03-26:
Added refactored code into post, rather than fetching from file. Remember to add “learning GitHub” to ToDo-list.





















