Private
Public Access
1
0

27 Commits

Author SHA1 Message Date
constantprojects
0bef817f7b Add license key gate, migrate marketing site to separate repo
- install.sh: prompt for license key as first step, validate against
  makeyourown.website/api/validate before any system changes
- setup.sh: secondary key check (format-only if .license-key exists,
  server validation if missing)
- Remove website/ directory — marketing site, keyserver, and deploy
  scripts migrated to the websites repo (git.constantprojects.xyz/
  tankadmin/websites.git) for independent deployment
- Update CLAUDE.md, guide.md, .gitignore to reflect migration

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 12:50:24 -07:00
constantprojects
1750efeb05 Fix gitignore blocking deploy override from being tracked
The pattern docker-compose.override.yml matched at all levels,
preventing website/deploy/docker-compose.override.yml from being
committed. Changed to /docker-compose.override.yml (root-only).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 11:59:30 -07:00
constantprojects
53ac8f85ac Add marketing site for makeyourown.website
Static single-page marketing site with dark theme, 3-tier pricing,
LLM/agent SEO (llms.txt), and deployment setup that overlays onto
the existing WebsiteBox nginx via docker-compose.override.yml
without modifying any core project files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 11:58:48 -07:00
constantprojects
2e06db3291 Fix WordPress unable to connect to database
Two bugs found:

1. wp-config-docker.php was being copied to /usr/src/wordpress/wp-config-docker.php,
   REPLACING the official WordPress config template. Our file only had security
   hardening settings (DISALLOW_FILE_EDIT, etc.) but no DB constants, auth keys,
   or table prefix. The generated wp-config.php had zero database configuration,
   so WordPress could never connect.

   Fix: Copy our config to /usr/src/websitebox-config.php instead, and load it
   via WORDPRESS_CONFIG_EXTRA=require_once in docker-compose.yml.

2. .user.ini set auto_prepend_file=wordfence-waf.php, but the file didn't exist
   until Wordfence plugin was installed. Every PHP request during initial setup
   returned a 500 fatal error.

   Fix: Add a stub wordfence-waf.php placeholder in the Docker image that gets
   copied with WordPress files. Wordfence replaces it during plugin activation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 09:29:16 -07:00
constantprojects
2c3b58eea7 Add --build to websitebox up, comprehensive guide.md polish
- websitebox up now includes --build flag to always rebuild images,
  fixing Docker cache serving stale containers after code updates
- setup.sh launch command updated to source ~/.bashrc first
- guide.md: added step roadmap table with time estimates
- guide.md: added time estimates to all step headers
- guide.md: updated Launch step to use websitebox shortcut with
  source ~/.bashrc, added command reference table
- guide.md: updated all troubleshooting commands to use websitebox
  shortcut instead of cd + docker compose
- guide.md: added 'websitebox: command not found' troubleshooting
- guide.md: updated setup wizard terminal example to match current
  colored output format
- guide.md: added container build step to launch explanation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 09:18:54 -07:00
constantprojects
6a164ab40d Clean stale certbot data before SSL acquisition attempt
If a previous certbot run created live/archive/renewal dirs but
failed to complete, the next attempt would choke on the existing
'live directory'. Now cleans these before each attempt.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 09:11:08 -07:00
constantprojects
3a6cf54d92 Make websitebox command smarter: auto-add -d and -f flags
- 'websitebox up' now automatically runs 'docker compose up -d'
- 'websitebox logs' now automatically runs 'docker compose logs -f'
- All other commands pass through unchanged
- Added 'source ~/.bashrc' instruction at end of installer so the
  command works immediately without logout/login
- Updated tips and setup summary to show simplified commands

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 09:09:01 -07:00
constantprojects
be9fd7fa06 Fix MariaDB healthcheck failing on MariaDB 11.8
The 'healthcheck --su-mysql' binary isn't reliably available in
newer MariaDB images. Switch to 'mariadb-admin ping' which is
always present. Also add start_period and increase retries for
slow first-boot initialization on small VPS instances.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 09:04:23 -07:00
constantprojects
2685603fcd Add 'websitebox' shell command as shortcut for docker compose
Installs a shell function in .bashrc/.zshrc that auto-cds into the
project directory, so users can run 'websitebox up -d' from anywhere
instead of remembering to cd first. Shows usage examples in the
installer's closing output. Setup summary updated to use the shortcut.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 09:02:03 -07:00
constantprojects
3846070818 Add cd ~/websitebox to docker compose command in setup summary
Users copying the command from the summary were running it from
their home directory, causing 'no configuration file provided'.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 08:59:55 -07:00
constantprojects
a35569863e Add colored output and UX improvements to setup.sh
- Config option labels (domain, email, etc.) shown in bold blue
- Errors in red, warnings in yellow, success checkmarks in green
- Password field: note that input won't appear on screen
- SMTP prompt: "if you don't know what this is, press Enter to skip"
- Summary next steps: detailed A record fields (Type, Name, Value, TTL)
  with explanations, dig command with success/failure examples,
  "copy this command into the server terminal" instead of "run"
- Matching color scheme with install.sh (header, section, etc.)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 08:59:14 -07:00
constantprojects
d76c572af8 Fix stdin: use targeted /dev/tty redirects instead of exec
The exec < /dev/tty approach silently killed the script under set -e
if /dev/tty wasn't accessible. Replace with surgical redirects on
just the interactive reads and setup.sh invocation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 08:52:48 -07:00
constantprojects
dcbcf799c4 Fix stdin hijack when run via curl | bash
When piped through curl, stdin is the download stream, not the
terminal. This caused setup wizard prompts to read empty input
(the 'rogue enter' bug). Fix: reopen stdin from /dev/tty before
any interactive prompts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 08:50:39 -07:00
constantprojects
eca351057b Add colored output to install.sh, update all URLs to Gitea
Color system: green checkmarks for success, orange bold for info/hints,
cyan section headers, bold white title headers, yellow warnings, red
errors. Rolling progress preview lines shown in dim. UFW "Rules updated"
noise suppressed.

Updated all repository URLs from github.com/websitebox/websitebox to
git.constantprojects.xyz/tankadmin/websitebox across install.sh,
guide.md, and README.md.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 08:49:13 -07:00
constantprojects
9ec246cb65 Add rolling 4-line progress preview to install.sh
Long-running apt commands now show a live 4-line preview window that
overwrites in place using terminal escape codes. Users see what's
happening without the screen flooding with package manager output.
Preview auto-clears when each step completes.

Also fixes: duplicate else branch in Docker if/else block,
adds DEBIAN_FRONTEND=noninteractive and --force-confold to prevent
interactive dpkg prompts (sshd_config, etc).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 08:45:18 -07:00
constantprojects
06ecfe1034 Auto-keep existing config files during apt upgrade
Adds --force-confold to prevent interactive dpkg prompts (e.g.
sshd_config) that would block unattended installation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 08:41:35 -07:00
constantprojects
5973331f64 Add progress descriptions to install.sh for slow connections
Each major install step now shows what it does and how long to expect:
- System update: 2-10 min on fresh servers
- Security tools: under a minute
- Docker: 1-3 min (largest download)
- Clone: a few seconds

Updated guide.md terminal output to match.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 08:38:33 -07:00
constantprojects
c05c32f70c Polish guide.md for accessibility (iteration 4)
- Add itemized cost breakdown in intro step
- Explain "root" before SSH step, recommend password managers
- Add VPS web console fallback tip
- Explain what ssh root@IP means inline
- Explain what curl | bash does with link to source code
- Add registrar-specific DNS navigation instructions
- Add www CNAME record tip
- Add dig/dnsutils install hint
- Expand dpkg pink/purple screen guidance
- Add SSH reconnection tip if connection drops during install
- Fix "Going Further" to reference automated (not manual) security setup
- Improve password storage callout with Bitwarden/1Password links
- Add SMTP pricing details for email services
- Describe WordPress dashboard sidebar layout
- Explain Ctrl+C key combo for beginners
- Add SSH timeout troubleshooting with web console reference
- Add GitHub issues link for getting help

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 16:35:26 -07:00
constantprojects
b7dc25fbf2 Automate server hardening in install.sh, update guide accordingly
Move firewall (UFW), fail2ban, auto-updates, and Docker log rotation
from manual guide steps into install.sh automation. Update guide.md
to describe the automated process instead of manual commands.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 16:32:47 -07:00
constantprojects
d63701abfb Add auto-updates and Docker log rotation to server setup
In the "Secure Your Server" guide step:
- Install unattended-upgrades for automatic OS security patches
- dpkg-reconfigure to enable daily auto-updates
- Callout explaining auto-updates won't touch Docker/WordPress
- Create /etc/docker/daemon.json with log rotation (10MB max,
  3 files per container) before Docker is installed
- mkdir -p to handle pre-Docker directory creation
- Harmless docker restart with || true fallback
- Updated intro text to reflect four setup concerns

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 16:25:20 -07:00
constantprojects
f8983792f7 Add firewall (UFW) and fail2ban setup step to guide.md
New "Secure Your Server" step between connecting and installing:
- apt update/upgrade for security patches
- UFW firewall: allow SSH, HTTP, HTTPS only
- fail2ban: brute-force SSH protection
- Clear danger callout about SSH lockout risk
- Expected terminal output for verification
- Plain-English explanations of what each command does
- Updated "Going Further" to reference earlier security setup

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 16:22:10 -07:00
constantprojects
8914f64be5 Add guide.md sync rule to CLAUDE.md critical rules
Any change that alters user-facing flow must also be reflected in
guide.md. This ensures the beginner deployment guide stays accurate
as the codebase evolves.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:18:49 -07:00
constantprojects
5ec16a3952 Final polish pass on guide.md (iteration 3)
- Fix all step number references to use descriptive names instead
  (step numbering shifts when steps are added/removed)
- Add WordPress.org vs WordPress.com explainer callout
- Fix Age Gate link to wordpress.org plugin directory
- Explain ./ prefix for running scripts
- Add popular SMTP relay services (Mailgun, SendGrid, Amazon SES)
- Break down nuclear option commands line by line
- Add server security tip (SSH keys) in Going Further
- Add WordPress block editor guide link

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 14:48:12 -07:00
constantprojects
bcbeec7bcb Polish guide.md for absolute beginners (iteration 2)
- Add "What You're Building" intro step explaining WordPress and
  what users will end up with, plus a pre-flight checklist
- Add Debian 12 to supported OS choices
- Fix broken Porkbun registrar link
- Explain terminal concepts: cd, ~, dig +short
- Break down intimidating password reset command with worked example
- Add "Going Further" step with next ideas (offsite backups, contact
  forms, SEO, CDN, learning resources)
- Add "what does success look like" description after first visit
- Clarify SSH reconnection instructions in maintenance section
- Add dig fallback for systems without dig installed

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 14:46:09 -07:00
constantprojects
0f927f1a17 Enhance guide.md for non-technical audiences
- Add detailed explanations of every concept (VPS, SSH, DNS, Docker)
- Add hyperlinks to all external tools and services
- Expand setup wizard walkthrough with full terminal output example
- Add concrete examples for each wizard prompt
- Add tips for common gotchas (paste shortcuts, invisible passwords, etc.)
- Expand troubleshooting with worked examples
- Add plugin descriptions and links (Wordfence, UpdraftPlus, Age Gate)
- Add healthcheck expected output example
- Add monthly maintenance recommendation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 14:44:02 -07:00
constantprojects
43e0353224 Add deployment guide and fix stale README theme listing
- Create guide.md: step-by-step deployment guide in ProjectPublic
  markup format, written for non-technical users
- Add guide-format.txt: markup syntax reference
- Fix README.md: remove references to deleted templates/ and parts/
  directories in theme tree listing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 14:34:04 -07:00
constantprojects
a440026701 Initial commit: complete WebsiteBox project
Docker-based self-hosted WordPress deployment system with:
- Four-container stack (nginx, wordpress/php-fpm, mariadb, certbot)
- Automatic SSL via Let's Encrypt with self-signed fallback
- First-boot WordPress setup via WP-CLI (GeneratePress + child theme, plugins)
- Interactive setup wizard and one-line install script
- Backup, update, healthcheck, and SSL renewal scripts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 15:24:23 -07:00