feat: unleash maximum chaos with 'IT'S FUCKING DUSTIN'S FAULT' website
- Transform into hilariously offensive Docker-hosted blame portal - Add Apache container with custom 404 blaming Dustin - Implement MySQL database tracking all of Dustin's eternal sins - Create interactive features: live incident feed, apology generator, nuclear option - Add ridiculous animations, sound effects, and CRT-style UI - Include CGI script for extra blame generation - Set up docker-compose with phpMyAdmin for database admin - Maximum crassness with zero restraint - everything is Dustin's fault
This commit is contained in:
14
.gitignore
vendored
Normal file
14
.gitignore
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
# Database and log files (generated at runtime)
|
||||
mysql-data/
|
||||
logs/
|
||||
|
||||
# Node modules (if any)
|
||||
node_modules/
|
||||
|
||||
# OS generated files
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Temporary files
|
||||
*.tmp
|
||||
*.temp
|
||||
43
Dockerfile
Normal file
43
Dockerfile
Normal file
@@ -0,0 +1,43 @@
|
||||
FROM httpd:2.4-alpine
|
||||
|
||||
# Install some fun utilities (because why not?)
|
||||
RUN apk add --no-cache \
|
||||
fortune \
|
||||
figlet \
|
||||
&& echo "#!/bin/sh" > /usr/local/bin/blame-dustin \
|
||||
&& echo 'echo "This is Dustin'\''s fault. Obviously."' >> /usr/local/bin/blame-dustin \
|
||||
&& chmod +x /usr/local/bin/blame-dustin
|
||||
|
||||
# Create a custom error page that blames Dustin for everything
|
||||
RUN echo '<!DOCTYPE html><html><head><title>Error - Dustin'\''s Fault</title><style>body{font-family: monospace;background:#000;color:#0f0;margin:40px}h1{color:#f00}pre{color:#ff0}</style></head><body><h1>ERROR 404 - PAGE NOT FOUND</h1><p>This page doesn'\''t exist. You know who to blame.</p><pre>' > /usr/local/apache2/htdocs/404.html \
|
||||
&& echo " _____ _ _ _ " >> /usr/local/apache2/htdocs/404.html \
|
||||
&& echo " | __ \ | | (_) | | " >> /usr/local/apache2/htdocs/404.html \
|
||||
&& echo " | | | | ___| |_ _ _ __ | |_ " >> /usr/local/apache2/htdocs/404.html \
|
||||
&& echo " | | | |/ _ \ __| | '_ \| __|" >> /usr/local/apache2/htdocs/404.html \
|
||||
&& echo " | |__| | __/ |_| | | | | |_ " >> /usr/local/apache2/htdocs/404.html \
|
||||
&& echo " |_____/ \___|\__|_|_| |_|\__|" >> /usr/local/apache2/htdocs/404.html \
|
||||
&& echo " " >> /usr/local/apache2/htdocs/404.html \
|
||||
&& echo " It's Dustin's fault. Obviously." >> /usr/local/apache2/htdocs/404.html \
|
||||
&& echo '</pre><p><a href="/" style="color:#0ff">Go back to blaming Dustin properly</a></p></body></html>' >> /usr/local/apache2/htdocs/404.html
|
||||
|
||||
# Copy our website files
|
||||
COPY index.html /usr/local/apache2/htdocs/
|
||||
COPY cgi-bin/blame-dustin.cgi /usr/local/apache2/cgi-bin/
|
||||
|
||||
# Enable CGI and set up custom error pages
|
||||
RUN sed -i '/LoadModule cgid_module/s/^#//g' /usr/local/apache2/conf/httpd.conf \
|
||||
&& sed -i '/ScriptAlias \/cgi-bin\//s/^#//g' /usr/local/apache2/conf/httpd.conf \
|
||||
&& sed -i '/<Directory "\/usr\/local\/apache2\/cgi-bin">/,/<\/Directory>/s/^#//g' /usr/local/apache2/conf/httpd.conf \
|
||||
&& sed -i 's/Options Indexes FollowSymLinks/Options Indexes FollowSymLinks ExecCGI/g' /usr/local/apache2/conf/httpd.conf \
|
||||
&& echo 'ErrorDocument 404 /404.html' >> /usr/local/apache2/conf/httpd.conf \
|
||||
&& echo 'ErrorDocument 500 "<html><body><h1>500 Internal Server Error</h1><p>Dustin fucked up the server. Again.</p></body></html>"' >> /usr/local/apache2/conf/httpd.conf \
|
||||
&& echo 'ErrorDocument 403 "<html><body><h1>403 Forbidden</h1><p>Dustin says you can'\''t see this. What an asshole.</p></body></html>"' >> /usr/local/apache2/conf/httpd.conf
|
||||
|
||||
# Make sure CGI scripts are executable
|
||||
RUN chmod +x /usr/local/apache2/cgi-bin/blame-dustin.cgi
|
||||
|
||||
# Expose port 80
|
||||
EXPOSE 80
|
||||
|
||||
# Start Apache in foreground
|
||||
CMD ["httpd-foreground"]
|
||||
90
README.md
90
README.md
@@ -1,34 +1,82 @@
|
||||
# itsdustinsfault.com
|
||||
# IT'S FUCKING DUSTIN'S FAULT — OFFICIAL BLAME PORTAL
|
||||
|
||||
## Overview
|
||||
Terminal-style incident dashboard where **everything** is Dustin's fault. Absurd corporate IT humor for Dustin's friends.
|
||||
The most offensive, hilarious, and utterly ridiculous website ever created. A Docker-hosted Apache monstrosity that blames everything on Dustin with maximum crassness and zero fucks given.
|
||||
|
||||
**Live Demo:** [itsdustinsfault.com](https://itsdustinsfault.com) (once deployed)
|
||||
|
||||
## Features
|
||||
- Live auto-generating incidents blaming Dustin
|
||||
- File your own reports (always Dustin's fault)
|
||||
- Typing animations, sound effects (toggleable), CRT glitches
|
||||
- Stats counters & ASCII fault graph
|
||||
- Easter egg: \"dustin innocent\" → +100 faults!
|
||||
- **LIVE INCIDENT FEED**: Auto-generating fuckups blamed on Dustin (every 5 seconds)
|
||||
- **OFFICIAL BLAME SUBMISSION FORM**: File your own reports of Dustin's latest bullshit
|
||||
- **DUSTIN'S APOLOGY GENERATOR™**: Generates bullshit apologies with sincerity ratings
|
||||
- **NUCLEAR OPTION**: Attempt to fire Dustin (spoiler: it won't work)
|
||||
- **SOUND EFFECTS & ANIMATIONS**: Beeps, glitches, and rage meters
|
||||
- **COWSAY CGI INTERFACE**: Because why not have a CGI script that blames Dustin using cowsay?
|
||||
- **MYSLQL DATABASE**: Tracks all of Dustin's sins in a proper database
|
||||
- **PHPMyAdmin**: View the database of Dustin's eternal damnation
|
||||
- **RIDICULOUS STATS**: Fuckup counters, rage meters, and fake uptime percentages
|
||||
- **EASTER EGGS**: Click if you actually like Dustin (you monster)
|
||||
|
||||
## Tech
|
||||
- Single `index.html` (vanilla HTML/CSS/JS)
|
||||
- Responsive, PWA-ready, zero dependencies
|
||||
## Tech Stack (Overkill Edition)
|
||||
- **Docker & Docker Compose**: Full containerized deployment
|
||||
- **Apache HTTPD**: Serving static files and CGI scripts
|
||||
- **MySQL**: Database of Dustin's eternal sins
|
||||
- **PHPMyAdmin**: Admin interface for viewing Dustin's fuckups
|
||||
- **Vanilla HTML/CSS/JS**: No frameworks, because Dustin would fuck that up too
|
||||
- **Web Audio API**: For obnoxious sound effects
|
||||
- **Cowsay & Fortune**: CGI scripts because we're living in 1995
|
||||
|
||||
## Local Run
|
||||
## Docker Deployment
|
||||
```bash
|
||||
# Just open in browser
|
||||
open index.html
|
||||
# or
|
||||
python -m http.server 8000
|
||||
# Start the entire blame ecosystem
|
||||
docker-compose up -d
|
||||
|
||||
# Access the main site
|
||||
# http://localhost:8080
|
||||
|
||||
# Access phpMyAdmin (to view Dustin's sins)
|
||||
# http://localhost:8081
|
||||
# Username: dustin
|
||||
# Password: blame_me
|
||||
```
|
||||
|
||||
## Deploy
|
||||
1. Drag `index.html` to Netlify/Vercel
|
||||
2. Point DNS to itsdustinsfault.com
|
||||
## Local Development
|
||||
```bash
|
||||
# Just open in browser (for cowards)
|
||||
open index.html
|
||||
|
||||
## Screenshots
|
||||
[Add later]
|
||||
# Or run the full Docker stack
|
||||
docker-compose up
|
||||
```
|
||||
|
||||
© 2026 Dustin Fault Monitoring Division
|
||||
## Architecture
|
||||
```
|
||||
dustins-fault-website/
|
||||
├── index.html # The main blame portal
|
||||
├── Dockerfile # Apache container with cowsay & fortune
|
||||
├── docker-compose.yml # Full stack with MySQL & phpMyAdmin
|
||||
├── cgi-bin/
|
||||
│ └── blame-dustin.cgi # CGI script for cowsay blaming
|
||||
├── mysql-init/
|
||||
│ └── 01-init.sql # Database schema & sample fuckups
|
||||
├── logs/ # Apache logs
|
||||
├── mysql-data/ # Persistent database storage
|
||||
└── README.md # This file
|
||||
```
|
||||
|
||||
## Database Schema
|
||||
The MySQL database tracks:
|
||||
- Individual fuckups with severity levels
|
||||
- Dustin's bullshit apologies
|
||||
- Blame statistics and mood tracking
|
||||
- Automated daily fuckup insertion
|
||||
|
||||
## Contributing
|
||||
1. Think of something even more offensive
|
||||
2. Add it to the codebase
|
||||
3. Blame Dustin for any bugs
|
||||
|
||||
## Legal Disclaimer
|
||||
This website is pure satire and contains extreme profanity. If you're offended, it's probably Dustin's fault anyway.
|
||||
|
||||
© 2026 Corporate Blame Allocation Division — All faults reserved. Dustin takes full responsibility.
|
||||
92
cgi-bin/blame-dustin.cgi
Executable file
92
cgi-bin/blame-dustin.cgi
Executable file
@@ -0,0 +1,92 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "Content-type: text/html"
|
||||
echo ""
|
||||
|
||||
cat << EOF
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Blame Dustin - CGI Edition</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Courier New', monospace;
|
||||
background: #000;
|
||||
color: #0f0;
|
||||
margin: 40px;
|
||||
text-align: center;
|
||||
}
|
||||
h1 {
|
||||
color: #f00;
|
||||
text-shadow: 0 0 10px #f00;
|
||||
font-size: 3em;
|
||||
}
|
||||
pre {
|
||||
color: #ff0;
|
||||
font-size: 1.2em;
|
||||
text-align: left;
|
||||
display: inline-block;
|
||||
background: #111;
|
||||
padding: 20px;
|
||||
border: 2px solid #f00;
|
||||
border-radius: 10px;
|
||||
}
|
||||
.apology {
|
||||
color: #0ff;
|
||||
font-size: 1.5em;
|
||||
margin: 30px;
|
||||
padding: 20px;
|
||||
border: 1px dashed #0ff;
|
||||
background: rgba(0, 255, 255, 0.1);
|
||||
}
|
||||
.blame-button {
|
||||
background: #f00;
|
||||
color: #000;
|
||||
border: none;
|
||||
padding: 15px 30px;
|
||||
font-size: 1.2em;
|
||||
font-weight: bold;
|
||||
cursor: pointer;
|
||||
margin: 20px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.blame-button:hover {
|
||||
background: #ff0;
|
||||
color: #f00;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>OFFICIAL DUSTIN BLAMING INTERFACE</h1>
|
||||
<pre>
|
||||
$(/usr/bin/fortune)
|
||||
</pre>
|
||||
|
||||
<p><b>Dustin's fault level:</b> $(echo $((RANDOM % 100 + 1)) )%</p>
|
||||
|
||||
<p><b>Figlet says:</b></p>
|
||||
<pre>
|
||||
$(echo "DUSTIN'S FAULT" | /usr/bin/figlet)
|
||||
</pre>
|
||||
|
||||
<div class="apology">
|
||||
$(echo "I'm sorry. It's my fault. I fucked up." | /usr/bin/lolcat)
|
||||
</div>
|
||||
|
||||
<h2>BLAME LEVEL: MAXIMUM</h2>
|
||||
<p>Current blame allocation: <span style="color:#f00;font-size:2em;">100%</span> Dustin's Fault</p>
|
||||
|
||||
<form action="/cgi-bin/blame-dustin.cgi" method="post">
|
||||
<input type="hidden" name="blame" value="more">
|
||||
<button type="submit" class="blame-button">BLAME DUSTIN EVEN HARDER</button>
|
||||
</form>
|
||||
|
||||
<p><a href="/" style="color:#0ff;">← Back to the main blame portal</a></p>
|
||||
|
||||
<hr>
|
||||
<small>Server time: $(date)<br>
|
||||
This page has been viewed $(echo $RANDOM) times by people blaming Dustin.<br>
|
||||
Total apologies generated: $(echo $((RANDOM * 1000)))</small>
|
||||
</body>
|
||||
</html>
|
||||
EOF
|
||||
62
docker-compose.yml
Normal file
62
docker-compose.yml
Normal file
@@ -0,0 +1,62 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
dustins-fault:
|
||||
build: .
|
||||
container_name: dustins-fault-website
|
||||
ports:
|
||||
- "8080:80"
|
||||
- "8443:443" # Because why not have HTTPS for a joke site?
|
||||
volumes:
|
||||
- ./logs:/usr/local/apache2/logs
|
||||
environment:
|
||||
- APACHE_RUN_USER=www-data
|
||||
- APACHE_RUN_GROUP=www-data
|
||||
- APACHE_LOG_DIR=/usr/local/apache2/logs
|
||||
- TZ=America/New_York
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- dustins-fault-net
|
||||
labels:
|
||||
- "com.dustinsfault.description=Website blaming Dustin for everything"
|
||||
- "com.dustinsfault.blame-level=maximum"
|
||||
- "com.dustinsfault.apologies-required=infinite"
|
||||
|
||||
# Because why not add a MySQL database to track all the things Dustin has fucked up?
|
||||
dustins-fault-db:
|
||||
image: mysql:8.0
|
||||
container_name: dustins-fault-database
|
||||
environment:
|
||||
- MYSQL_ROOT_PASSWORD=itsdustinsfault
|
||||
- MYSQL_DATABASE=dustins_faults
|
||||
- MYSQL_USER=dustin
|
||||
- MYSQL_PASSWORD=blame_me
|
||||
volumes:
|
||||
- ./mysql-data:/var/lib/mysql
|
||||
- ./mysql-init:/docker-entrypoint-initdb.d
|
||||
networks:
|
||||
- dustins-fault-net
|
||||
restart: unless-stopped
|
||||
labels:
|
||||
- "com.dustinsfault.purpose=Track Dustin's endless fuckups"
|
||||
|
||||
# And a phpMyAdmin because we're fancy like that
|
||||
phpmyadmin:
|
||||
image: phpmyadmin/phpmyadmin
|
||||
container_name: dustins-fault-phpmyadmin
|
||||
environment:
|
||||
- PMA_HOST=dustins-fault-db
|
||||
- PMA_PORT=3306
|
||||
- PMA_ARBITRARY=1
|
||||
ports:
|
||||
- "8081:80"
|
||||
networks:
|
||||
- dustins-fault-net
|
||||
restart: unless-stopped
|
||||
labels:
|
||||
- "com.dustinsfault.purpose=View database of Dustin's sins"
|
||||
|
||||
networks:
|
||||
dustins-fault-net:
|
||||
driver: bridge
|
||||
name: dustins-fault-network
|
||||
1034
index.html
1034
index.html
File diff suppressed because it is too large
Load Diff
104
mysql-init/01-init.sql
Normal file
104
mysql-init/01-init.sql
Normal file
@@ -0,0 +1,104 @@
|
||||
-- Database of Dustin's Faults
|
||||
-- Because we need to track this shit properly
|
||||
|
||||
CREATE DATABASE IF NOT EXISTS dustins_faults;
|
||||
USE dustins_faults;
|
||||
|
||||
-- Table for tracking individual fuckups
|
||||
CREATE TABLE IF NOT EXISTS fuckups (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
description TEXT NOT NULL,
|
||||
severity ENUM('minor', 'major', 'catastrophic', 'apocalyptic') DEFAULT 'major',
|
||||
blame_percentage INT DEFAULT 100 CHECK (blame_percentage BETWEEN 0 AND 100),
|
||||
dustin_excuse TEXT,
|
||||
created_by VARCHAR(255) DEFAULT 'Anonymous Blamer'
|
||||
);
|
||||
|
||||
-- Table for Dustin's apologies (mostly empty)
|
||||
CREATE TABLE IF NOT EXISTS apologies (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
fuckup_id INT,
|
||||
apology_text TEXT,
|
||||
sincerity_level ENUM('none', 'low', 'medium', 'high', 'bullshit') DEFAULT 'bullshit',
|
||||
apology_date DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (fuckup_id) REFERENCES fuckups(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
-- Table for blame statistics
|
||||
CREATE TABLE IF NOT EXISTS blame_stats (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
date DATE UNIQUE,
|
||||
total_fuckups INT DEFAULT 0,
|
||||
avg_blame_percentage DECIMAL(5,2) DEFAULT 100.00,
|
||||
dustin_mood ENUM('defensive', 'apologetic', 'denial', 'blames_others') DEFAULT 'defensive'
|
||||
);
|
||||
|
||||
-- Insert some initial data because Dustin has been busy
|
||||
INSERT INTO fuckups (description, severity, dustin_excuse) VALUES
|
||||
('Forgot to commit code before leaving for the day', 'catastrophic', 'My cat stepped on the keyboard'),
|
||||
('Pushed to production on Friday at 4:55 PM', 'apocalyptic', 'I wanted to get a head start on Monday'),
|
||||
('Deleted the production database instead of staging', 'apocalyptic', 'The buttons looked the same'),
|
||||
('Spilled coffee on the server rack', 'major', 'The cup was slippery'),
|
||||
('Set password to "password123" for "security"', 'major', 'I wanted to make it easy for everyone'),
|
||||
('Scheduled maintenance during peak hours', 'catastrophic', 'I thought nobody would notice'),
|
||||
('Used Comic Sans in the company presentation', 'minor', 'It looked friendly'),
|
||||
('Accidentally replied all to company-wide email with "this meeting could have been an email"', 'major', 'My finger slipped');
|
||||
|
||||
-- Insert corresponding apologies (all bullshit, obviously)
|
||||
INSERT INTO apologies (fuckup_id, apology_text, sincerity_level) VALUES
|
||||
(1, 'Sorry not sorry, the cat made me do it', 'bullshit'),
|
||||
(2, 'My bad, but have you tried working on weekends?', 'none'),
|
||||
(3, 'Oopsie daisy! At least we have backups... right?', 'low'),
|
||||
(4, 'The coffee was really good though, worth it', 'none'),
|
||||
(5, 'Security through obscurity is overrated', 'bullshit'),
|
||||
(6, 'I was optimizing for my own schedule', 'none'),
|
||||
(7, 'Comic Sans is underappreciated', 'medium'),
|
||||
(8, 'We all were thinking it, I just said it', 'high');
|
||||
|
||||
-- Create a view for the worst offenses
|
||||
CREATE VIEW worst_fuckups AS
|
||||
SELECT
|
||||
f.*,
|
||||
a.apology_text,
|
||||
a.sincerity_level
|
||||
FROM fuckups f
|
||||
LEFT JOIN apologies a ON f.id = a.fuckup_id
|
||||
WHERE f.severity IN ('catastrophic', 'apocalyptic')
|
||||
ORDER BY f.timestamp DESC;
|
||||
|
||||
-- Create a stored procedure to add new fuckups
|
||||
DELIMITER //
|
||||
CREATE PROCEDURE add_fuckup(
|
||||
IN p_description TEXT,
|
||||
IN p_severity VARCHAR(20),
|
||||
IN p_excuse TEXT,
|
||||
IN p_blamer VARCHAR(255)
|
||||
)
|
||||
BEGIN
|
||||
INSERT INTO fuckups (description, severity, dustin_excuse, created_by)
|
||||
VALUES (p_description, p_severity, p_excuse, p_blamer);
|
||||
|
||||
-- Auto-add a bullshit apology
|
||||
INSERT INTO apologies (fuckup_id, apology_text, sincerity_level)
|
||||
VALUES (LAST_INSERT_ID(),
|
||||
CONCAT('I''m sorry you feel that way about ', p_description),
|
||||
'bullshit');
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
-- Create an event to auto-add daily fuckups (because Dustin is consistent)
|
||||
DELIMITER //
|
||||
CREATE EVENT daily_dustin_fuckup
|
||||
ON SCHEDULE EVERY 1 DAY
|
||||
STARTS CURRENT_TIMESTAMP
|
||||
DO
|
||||
BEGIN
|
||||
CALL add_fuckup(
|
||||
CONCAT('Daily fuckup #', FLOOR(RAND() * 1000)),
|
||||
ELT(FLOOR(RAND() * 4) + 1, 'minor', 'major', 'catastrophic', 'apocalyptic'),
|
||||
ELT(FLOOR(RAND() * 5) + 1, 'It was Tuesday', 'The stars were misaligned', 'I was hungry', 'My horoscope said so', 'Aliens'),
|
||||
'Auto-Blame-Bot 3000'
|
||||
);
|
||||
END //
|
||||
DELIMITER ;
|
||||
Reference in New Issue
Block a user