The complete guide to creating, managing, and deploying websites across the WholeTech domain portfolio.
Last updated: March 15, 2026 — Private reference, not linked from site navigation
- System Overview
- Local Machine Setup
- Creating a New Site (Step by Step)
- LiquidWeb Server Setup
- Uploading with WinSCP
- DNS & Domain Pointing
- WordPress Coexistence
- Working with Claude
- Claude Best Practices
- Google Sheets Integration
- Archive.org Notes
- Standard File Structure
- Theme System (Light/Dark/Spring)
- Launch Checklist
- Troubleshooting
01System Overview
| Component | What |
|---|---|
| Local machine | Beelink mini PC, Windows 11 Pro, bash shell available |
| Local directory | C:\Users\walhu\websites\ — one folder per site |
| Web server | LiquidWeb shared/VPS hosting, Apache, PHP available |
| Server files | /home/wholetec/ on the LiquidWeb server |
| File transfer | WinSCP (SFTP/FTP to LiquidWeb) |
| AI assistant | AI tools (AI CLI, runs in terminal) |
| Technology | Pure static HTML + CSS + vanilla JS — no Node, no npm, no frameworks |
| Preview | python -m http.server 8081 on localhost |
| Domains | 112 domains, managed through LiquidWeb and/or registrar |
02Local Machine Setup
Directory structure
C:\Users\walhu\websites\
austen.com\
firth.com\
tvreviewer.com\
wholetech.com\
static\ ← the actual site files
index.html
springnet.html
activesites.html
archive.html
index.html ← redirect to static/ (or copy of static/index.html)
[newsite]\ ← create a new folder for each new site
Starting a local preview server
# Navigate to the site's folder and start the server cd C:\Users\walhu\websites\wholetech.com\static python -m http.server 8081 # Then open http://localhost:8081 in your browser # Use a different port for each site if running multiple
03Creating a New Site (Step by Step)
This is the complete process for taking a domain from "parked" to "live static site."
Create C:\Users\walhu\websites\domainname.com\ on your machine. If the domain has WordPress, create a static\ subfolder inside it to keep files separate.
Open AI tools in the terminal. Tell Claude what you want: "Build me a site for domainname.com. It should be about [topic]. Use the same design system as wholetech.com" (or whatever style you want). Claude will create the HTML/CSS/JS files.
Ask Claude to start a local server: "Let's look at it on localhost:8082." Review in your browser, request changes until you're happy.
Log into LiquidWeb → cPanel → add the domain as an Addon Domain or Alias (see LiquidWeb section below).
At your domain registrar, set the nameservers or A record to point to your LiquidWeb server IP (see DNS section).
Connect WinSCP to LiquidWeb, navigate to the domain's document root, upload your files (see WinSCP section).
Visit the domain in your browser. Verify all pages load, links work, and themes toggle correctly.
04LiquidWeb Server Setup
Logging in
- Go to manage.liquidweb.com and log in with your LiquidWeb credentials
- Navigate to your server/hosting account
- Open cPanel (usually accessible from the LiquidWeb dashboard)
Adding a new domain (Addon Domain)
- In cPanel, find "Domains" or "Addon Domains"
- Enter the domain name (e.g.,
austinblogger.com) - cPanel will auto-fill the document root — typically
/home/wholetec/public_html/austinblogger.com - Click Add Domain
- The server now knows to serve files from that directory when someone visits the domain
SSL Certificate (HTTPS)
- In cPanel, find "SSL/TLS Status" or "Let's Encrypt"
- Select the new domain
- Click Issue or Run AutoSSL
- Wait a few minutes — the certificate will auto-install
- Verify by visiting
https://yourdomain.com
Server file locations
/home/wholetec/ public_html/ ← primary domain's document root public_html/domainname.com/ ← addon domain document roots backups/ ← your old backup files (need external drive to download)
05Uploading with WinSCP
Connection settings
| Field | Value |
|---|---|
| Protocol | SFTP (preferred) or FTP |
| Host name | Your LiquidWeb server hostname or IP |
| Port | 22 (SFTP) or 21 (FTP) |
| User name | Your cPanel username |
| Password | Your cPanel password |
Upload workflow
- Left panel (local): Navigate to
C:\Users\walhu\websites\domainname.com\ - Right panel (server): Navigate to
/home/wholetec/public_html/domainname.com/ - Select all files on the left → drag to the right (or press F5 to upload)
- Click OK to confirm
Updating an existing site
Just upload the changed files — WinSCP will ask if you want to overwrite. Click Yes. No build step, no deploy pipeline. Upload and it's live.
06DNS & Domain Pointing
Option A: Nameservers (easiest)
At your domain registrar (GoDaddy, Namecheap, etc.), set the nameservers to LiquidWeb's nameservers. These are usually something like:
ns1.liquidweb.com ns2.liquidweb.com
(Check your LiquidWeb dashboard for the exact nameservers for your account.)
Option B: A Record (more control)
If you want to keep DNS at your registrar but point the domain to LiquidWeb:
- Find your LiquidWeb server's IP address (in cPanel → "Server Information")
- At your registrar's DNS settings, create an A record:
Type: A Host: @ Value: [your server IP] TTL: 3600
- Also create a CNAME for www:
Type: CNAME Host: www Value: yourdomain.com TTL: 3600
nslookup yourdomain.com in terminal to check.
07WordPress Coexistence
Some domains (like wholetech.com) still have WordPress installed. Here's how to run a static site alongside WordPress without breaking either:
The static/ subdirectory approach
- Put your static files in a
static/subfolder inside the domain's document root - Create an
index.htmlin the root that redirects tostatic/, OR copy your homepage to the root asindex.html - Add this line to the top of
.htaccessin the domain root:DirectoryIndex index.html index.php
This tells Apache to serveindex.htmlbefore WordPress'sindex.php
Fully replacing WordPress
When you're ready to ditch WordPress entirely:
- Back up the WordPress files and database (just in case)
- Move or delete WordPress files from the document root
- Move your static files from
static/up to the root - Update any internal links that pointed to
static/whatever.html - Done — no more PHP, no more database, no more plugin updates
08Working with Claude
Starting AI tools
# Open terminal (bash or PowerShell) # Navigate to the site's directory cd C:\Users\walhu\websites\domainname.com # Start AI tools claude
What Claude can do
- Build entire sites from a description — "build me a site about X"
- Edit existing files — "change the headline" or "add a dark mode"
- Read and understand your existing code before making changes
- Search the web for information (archive.org lookups, etc.)
- Run commands — start servers, run scripts, check disk space
- Write PowerShell scripts for bulk operations across many files
- Preview sites on localhost
What Claude cannot do
- Access remote servers directly — can't SSH into LiquidWeb. You upload via WinSCP.
- Edit Google Sheets — can read published sheets but not write to them
- Push to production — Claude works on local files only, you deploy
Giving Claude context
Claude remembers things within a conversation but starts fresh each new session. To help Claude pick up where you left off:
- Your CLAUDE.md file at the project root is automatically loaded — it tells Claude about the project structure and conventions
- Claude has a memory system that persists between conversations (stored in
~/.claude/projects/) - If Claude seems confused, just say "read the CLAUDE.md" or "check your memory"
09Claude Best Practices
How to get the best results
- Be specific about what you want — "make the background blue" works better than "make it look better"
- Show examples — "make it look like tvreviewer.com" gives Claude a concrete reference
- Review before deploying — always preview on localhost before uploading to the server
- Ask Claude to explain — if you don't understand a change, ask "what did you just do?"
- Course correct early — if it's going in the wrong direction, say so immediately rather than letting it continue
- Save your Claude.md — keep it up to date with conventions so Claude stays consistent across sessions
Effective prompts for building sites
# Starting a new site "Build a static site for austinblogger.com. It should be a modern Austin culture blog. Use a warm color palette, not the typical dark-theme-with-gold look. Include a search/filter, dark mode toggle, and responsive design." # Modifying an existing site "On the activesites.html page, add a new domain called example.com. It's a tech site. Give it the tech category and find a good archive.org snapshot from before June 2007." # Bulk operations "Add a nav bar to all the pages in the wholetech static directory with links to Home, Archive, and Active Sites." # Debugging "The page isn't loading on the server. Here's what I see: [describe]. What might be wrong?"
Things to tell Claude at the start of a session
- Which site you're working on: "I'm working on wholetech.com"
- What you want to accomplish: "I want to add a new page" or "I want to update the design"
- Any constraints: "Keep it simple" or "Match the existing style" or "Don't use any frameworks"
10Google Sheets Integration
You can use Google Sheets as a live data source for any page. The sheet data loads fresh every time a visitor opens the page.
Setup
- Create or open your Google Sheet
- Go to File → Share → Publish to web
- Choose Entire Document and click Publish
- This is separate from the normal sharing settings — the sheet must be published, not just shared
Fetching sheet data in JavaScript
// Use the JSON endpoint (avoids CSV comma-parsing issues)
var SHEET_ID = 'your-sheet-id-here';
var url = 'https://docs.google.com/spreadsheets/d/'
+ SHEET_ID + '/gviz/tq?tqx=out:json';
fetch(url)
.then(r => r.text())
.then(text => {
// Strip the wrapper: google.visualization.Query.setResponse({...})
var json = text.replace(/^[^(]*\(/, '').replace(/\);?\s*$/, '');
var data = JSON.parse(json);
// data.table.rows is your row array
// data.table.rows[0].c[0].v is the value of cell A1
});
tqx=out:json).
When to use Google Sheets vs. hardcoded data
| Use Google Sheets when | Use hardcoded data when |
|---|---|
| Data changes frequently | Data is stable |
| Non-technical people need to edit it | Only you/Claude edit it |
| You want live updates without re-deploying | You want the page to work offline |
| Example: a calendar, a directory | Example: a portfolio, a domain list |
11Archive.org Notes
The LiquidWeb attack (Summer 2007)
Your LiquidWeb server was attacked between June and October 2007. Archive.org snapshots from after this date may show compromised or garbage content for sites that were hosted on that server.
20070607. Post-attack snapshots are unreliable.
Finding archive.org snapshots
# Check if a snapshot exists (returns JSON) https://archive.org/wayback/available?url=domainname.com # Request a snapshot near a specific date https://archive.org/wayback/available?url=domainname.com×tamp=20060601 # Browse all snapshots (calendar view) https://web.archive.org/web/*/domainname.com
Your backups on LiquidWeb
Old site backups exist at /home/wholetec/ on the LiquidWeb server. You'll need an external drive attached to the Beelink to download them (the internal drive is small). Use WinSCP to download the backup files, then Claude can help you restore and rebuild from them.
12Standard File Structure
Every WholeTech static site follows this pattern:
domainname.com/ index.html ← homepage (inline styles or linked CSS) [other-page].html ← additional pages style.css ← shared styles (optional, can be inline) images/ ← site images (optional)
Standard HTML template
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Page Title — Site Name</title>
<meta name="description" content="...">
<!-- Google Fonts -->
<!-- Early theme detection script -->
<style>
/* CSS variables for light/dark/spring */
/* All styles inline */
</style>
</head>
<body>
<nav>...</nav>
<header>...</header>
<main>...</main>
<footer>...</footer>
<script>
/* Theme toggle + page logic */
</script>
</body>
</html>
13Theme System (Light / Dark / Spring)
WholeTech sites use a three-theme system: light (default), dark, and spring.
How it works
- CSS variables defined on
:root(light),html.dark, andhtml.spring - An early
<script>in<head>checkslocalStorageand applies the class before paint (prevents flash) - A toggle button cycles: light → dark → spring → light
- Choice saved to
localStorageaswt-theme - Respects
prefers-color-scheme: darkon first visit
Early detection script (put in <head>)
<script>
(function(){
var t = localStorage.getItem('wt-theme');
if (t === 'dark' || (!t && matchMedia('(prefers-color-scheme:dark)').matches))
document.documentElement.classList.add('dark');
else if (t === 'spring')
document.documentElement.classList.add('spring');
})();
</script>
Toggle script (put before </body>)
document.getElementById('theme-toggle').addEventListener('click', function() {
var el = document.documentElement;
var themes = ['light', 'dark', 'spring'];
var current = el.classList.contains('dark') ? 'dark'
: el.classList.contains('spring') ? 'spring' : 'light';
var next = themes[(themes.indexOf(current) + 1) % themes.length];
el.classList.remove('dark', 'spring');
if (next !== 'light') el.classList.add(next);
localStorage.setItem('wt-theme', next);
});
14Launch Checklist
Before going live with any new site:
- Page loads correctly on localhost
- All three themes work (light, dark, spring)
- Page is responsive (check at 375px mobile width)
- All links work and open in correct tab
-
<title>and<meta description>are set - No placeholder text left in the page
- Domain is added in cPanel on LiquidWeb
- DNS is pointing to LiquidWeb
- Files uploaded via WinSCP
- Site loads at
https://yourdomain.com - SSL certificate is active (padlock in browser)
- If replacing WordPress:
.htaccessupdated withDirectoryIndex index.html index.php
15Troubleshooting
Site shows "Redirecting..." instead of the real page
The root index.html is the redirect stub, not your real homepage. Either copy your real homepage to the root as index.html, or make sure the meta refresh redirect is working.
WordPress shows instead of static site
Apache is serving index.php (WordPress) instead of index.html. Add DirectoryIndex index.html index.php to the top of your .htaccess file in the domain root.
SSL certificate won't issue
DNS isn't pointing to LiquidWeb yet. Point DNS first, wait for propagation (check with nslookup), then request SSL.
Google Sheets data not loading
The sheet needs to be published to the web (File → Share → Publish to web), which is different from the normal sharing settings. Also make sure you're using the JSON endpoint, not CSV.
Archive.org snapshot shows garbage
You're looking at a post-attack snapshot. Find a snapshot from before June 2007. Use the Wayback API with a timestamp: ?url=domain.com×tamp=20060601
WinSCP can't connect
- Check hostname, username, password are correct
- Try port 22 (SFTP) first, then port 21 (FTP) if that fails
- Make sure your IP isn't blocked by the server firewall — contact LiquidWeb support if needed
Page looks different on server vs. localhost
Usually a caching issue. Hard-refresh with Ctrl+Shift+R. If using Cloudflare or another CDN, purge the cache there too.