← Back to site Launch Manual · Document 01 of 03 Revision 1.0 — 2025
Progress
0 of 0 complete
DOC 01 / FIELD MANUAL / ATSPACE DEPLOYMENT

The 60-minute launch manual.

A field-tested, step-by-step procedure for taking the FreelancePro Toolkit from zero to a live, paying website on Atspace paid hosting — with a realistic plan to make it profitable in the first 30 days.

Duration
60 minutes
Stack
PHP 8.3 · MySQL
Skill level
Beginner+
Cost to launch
~$0–15

Eight blocks, sixty minutes.

Work top-left to bottom-right. Don't skip blocks — they're ordered so each one unblocks the next. If you hit a wall, mark it, move on, and come back. Perfectionism kills launches.

01
00:00 — 00:05

Hosting check

Verify Atspace plan has PHP 8.3 + MySQL. Log into cPanel.

02
00:05 — 00:10

Create database

MySQL DB + user + password via cPanel wizard.

03
00:10 — 00:20

Upload files

index.html, launch.html, outlook.html, subscribe.php, config.php.

04
00:20 — 00:30

Wire PHP + SQL

Create table. Edit config.php. Test email capture.

05
00:30 — 00:40

Connect payment

Create Gumroad product. Paste URL into index.html.

06
00:40 — 00:45

Test end-to-end

Visit site, submit email, verify DB, click buy, test receipt.

07
00:45 — 00:55

Domain + SSL

Point domain, enable Let's Encrypt, force HTTPS.

08
00:55 — 01:00

Launch post

First Reddit + X + LinkedIn posts. Send to 5 people personally.

i.

Verify your Atspace plan & log in.

5 minDifficulty ●○○Tools: Browser

Atspace's paid tier (anything above the free ad-supported plan) ships with PHP 8.3.3 and MySQL by default, but double-check before you build on top of it.

  1. Go to atspace.com and sign into your account.
  2. Open cPanel (some paid plans use a slightly custom panel — the concepts are identical).
  3. Find PHP Selector or Select PHP Version. Set it to 8.3 (or the highest 8.x available).
  4. Confirm MySQL is listed under Databases. If it's there, you're clear to proceed.
  5. Bookmark the cPanel URL — you'll return to it several times in the next hour.

What you need from Atspace: your FTP credentials (host, username, password), your domain or temporary subdomain (something like yourname.atspace.cc), and the cPanel login.

ii.

Create your MySQL database.

5 minDifficulty ●○○Tools: cPanel

This is where subscriber emails will live. We're keeping the schema minimal on purpose — simpler to debug, easy to export to Mailchimp or ConvertKit later.

  1. In cPanel, click MySQL Databases (or MySQL Database Wizard).
  2. Create a database named freelancepro. The final name will be prefixed, e.g. youracct_freelanceprosave this full name.
  3. Create a new user, e.g. fpadmin, with a strong password (use a password manager). Save the full username (it will also be prefixed).
  4. Add the user to the database. Grant ALL PRIVILEGES.
  5. Open phpMyAdmin, select your new database, click the SQL tab, and paste the schema below. Click Go.

The schema:

CREATE TABLE subscribers (
  id INT AUTO_INCREMENT PRIMARY KEY,
  email VARCHAR(255) NOT NULL UNIQUE,
  source VARCHAR(64) DEFAULT 'homepage',
  ip VARCHAR(45),
  user_agent VARCHAR(255),
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  INDEX idx_created (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Four fields: email, where they came from, some metadata, timestamp. You should see a green "1 table created" message.

iii.

Upload the site files.

10 minDifficulty ●●○Tools: FTP / File Manager

You'll upload five files to the public_html/ directory. You can use FileZilla (FTP) or cPanel's built-in File Manager — both work. For a one-shot launch, File Manager is faster.

  1. In cPanel, open File Manager → navigate to public_html/.
  2. If there's a default index.html, delete or rename it.
  3. Click Upload and select the three HTML files: index.html, launch.html, outlook.html.
  4. Upload the two PHP files: config.php and subscribe.php.
  5. Set permissions on all files to 644. Set the directory to 755. (Right-click → Permissions in File Manager.)
Directory structure · final public_html/ → index.html · launch.html · outlook.html · subscribe.php · config.php · /assets/ (optional)
iv.

Wire up PHP and the database.

10 minDifficulty ●●○Tools: Text editor

Create two small PHP files. The first holds your credentials (keep it out of Git if you're versioning). The second handles the form submission.

config.php — paste this, replace the placeholders with your real values:

<?php
// config.php — database credentials. Do NOT commit to git.

return [
  'host'     => 'localhost',
  'dbname'   => 'youracct_freelancepro',
  'username' => 'youracct_fpadmin',
  'password' => 'YOUR_STRONG_PASSWORD_HERE',
  'charset'  => 'utf8mb4',
];

subscribe.php — handles the form POST, validates, and inserts:

<?php
// subscribe.php — newsletter signup endpoint. PHP 8.3+.

declare(strict_types=1);
header('Content-Type: application/json; charset=utf-8');
header('X-Content-Type-Options: nosniff');

function respond(int $code, array $data): never {
    http_response_code($code);
    echo json_encode($data);
    exit;
}

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    respond(405, ['ok' => false, 'message' => 'POST only.']);
}

$email = trim((string)($_POST['email'] ?? ''));
if (!filter_var($email, FILTER_VALIDATE_EMAIL) || strlen($email) > 255) {
    respond(400, ['ok' => false, 'message' => 'Please enter a valid email.']);
}

// Simple rate-limit: 1 submission / IP / 60s via a lock file.
$ipHash = hash('sha256', $_SERVER['REMOTE_ADDR'] ?? '');
$lock   = sys_get_temp_dir() . "/fp_{$ipHash}.lock";
if (file_exists($lock) && (time() - filemtime($lock)) < 60) {
    respond(429, ['ok' => false, 'message' => 'Easy — already received.']);
}
touch($lock);

try {
    $cfg = require __DIR__ . '/config.php';
    $dsn = "mysql:host={$cfg['host']};dbname={$cfg['dbname']};charset={$cfg['charset']}";

    $pdo = new PDO($dsn, $cfg['username'], $cfg['password'], [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_EMULATE_PREPARES   => false,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    ]);

    $stmt = $pdo->prepare(
        'INSERT INTO subscribers (email, source, ip, user_agent)
         VALUES (:email, :source, :ip, :ua)
         ON DUPLICATE KEY UPDATE created_at = created_at'
    );
    $stmt->execute([
        ':email'  => $email,
        ':source' => 'homepage',
        ':ip'     => substr((string)($_SERVER['REMOTE_ADDR'] ?? ''), 0, 45),
        ':ua'     => substr((string)($_SERVER['HTTP_USER_AGENT'] ?? ''), 0, 255),
    ]);

    respond(200, [
      'ok' => true,
      'message' => 'Subscribed. Check Sunday\'s inbox.'
    ]);

} catch (Throwable $e) {
    error_log('subscribe.php: ' . $e->getMessage());
    respond(500, ['ok' => false, 'message' => 'Something went sideways. Try again in a minute.']);
}
Security note Never echo database errors to the browser. The script above logs to the server and returns a friendly generic message. Also: keep config.php out of any public repo — if you version-control the site, add it to .gitignore and upload it separately via FTP.

Test it immediately:

  • Visit yourdomain.com/index.html.
  • Submit the newsletter form with a test email.
  • In phpMyAdmin, open the subscribers table — you should see one row.
  • If you get a 500 error, check cPanel → Error Log and verify config.php credentials.
  1. Create config.php with your real DB credentials.
  2. Create subscribe.php with the code above.
  3. Upload both via File Manager to public_html/.
  4. Submit a test email on the homepage.
  5. Verify one row appears in the subscribers table in phpMyAdmin.
v.

Connect payment (Gumroad).

10 minDifficulty ●○○Tools: Gumroad

Gumroad handles Stripe, PayPal, taxes, receipts, and file delivery for a flat fee. For a 60-minute launch it's unbeatable. Stripe Checkout is an option too, but Gumroad's built-in digital delivery saves you an hour.

  1. Sign up at gumroad.com, complete payout info (Stripe or PayPal).
  2. Click New ProductDigital Product.
  3. Name it "FreelancePro Toolkit — Complete Kit." Upload a ZIP with all your assets (or a placeholder ZIP — you can replace any time).
  4. Set price to $29. Enable Pay What You Want with a minimum of $29 if you want tipping, otherwise fixed.
  5. In settings: enable ratings, enable affiliates (default 30% commission), turn on "Mark as best-seller" later once you have 10 sales.
  6. Copy the product's public URL. It will look like https://gumroad.com/l/xxxxxx.
  7. Open index.html, find the buy-btn script at the bottom, and replace the placeholder Gumroad URL with your real one.
Alternative Prefer Stripe? Use Stripe Payment Links — no code needed. Create a product, copy the payment link, paste into the buy button. Configure email delivery via Zapier or a cheap tool like SendOwl.
vi.

Test end-to-end.

5 minDifficulty ●○○Tools: Browser + phone

Before you send a single marketing message, run this checklist. If any item fails, fix it before launching — a broken checkout on day one is a brand wound that's hard to heal.

  1. Open the site on desktop and mobile. Both render correctly.
  2. Play with the rate calculator. Numbers update as you type.
  3. Submit the newsletter form with a real email. Confirm row in MySQL.
  4. Click the buy button. Lands on Gumroad product page.
  5. Complete a real test purchase (you can refund yourself immediately). Verify receipt, download link, and file download.
  6. Check all three pages: index.html, launch.html, outlook.html — all load.
  7. Test in Chrome, Safari, and one mobile browser.
vii.

Point your domain & enable SSL.

10 minDifficulty ●●○Tools: Registrar + cPanel

A custom domain makes the site trustworthy. Skip this at your peril — conversion rates on .atspace.cc subdomains are notably lower.

  1. In your registrar (Namecheap, Porkbun, etc.), set nameservers to Atspace's — find these in cPanel → Domains or the welcome email.
  2. Alternatively, use A records: point @ and www to Atspace's IP address (also in the welcome email).
  3. Wait 5–30 minutes for DNS propagation. Use dnschecker.org to confirm.
  4. In cPanel, open Addon Domains and add your domain pointing to public_html/.
  5. Open SSL/TLS Status → install Let's Encrypt certificate. This is free.
  6. In Domains, enable Force HTTPS Redirect.
  7. Test: visit http://yourdomain.com and confirm it redirects to https://.
viii.

Launch post & first customers.

5 min (then ongoing)Difficulty ●●○Tools: Phone + laptop

You're live. Now: your first five customers come from people who already trust you. Don't broadcast to strangers yet — the social proof comes later.

  1. Text five people. Not a mass email. Individual messages to freelancers you know: "Built a thing, would love your honest take." Offer a free copy. Ask for a testimonial if they like it.
  2. Post once on X/Twitter: a 5-tweet thread ending with the link. Lead with a surprising number from your rate calculator ("Most freelancers under-charge by $18,400/yr. Here's the math.").
  3. Post once on LinkedIn: a personal story about undercharging, the lesson, and the tool. End with a soft CTA.
  4. Post in /r/freelance and /r/digitalnomad: share the free calculator, not the paid product. Reddit hates sales pitches — give value, mention the toolkit at the end if asked.
  5. Tag 3 friends to share. Ask directly. This is not shameful, it's how every launch works.
Realistic expectation Week one: 0–5 sales. Week two with momentum: 5–20. The big unlocks come from SEO (3 months) and email list growth (ongoing). This is not a lottery ticket — it's a business.

A profit plan, week by week.

Launching is five minutes. Selling is forever. Here's a realistic four-week plan to go from "it's live" to "it's making money." Spend 60–90 minutes/day on marketing. Protect this time like it's a paying client.

Week 01 · Seeding & social proof

Goal: First 3 paying customers + 5 testimonials (even if from gifted copies).
Mon: Personal messages to 20 freelancer friends. Offer 50% launch code.
Tue: Twitter thread: "Why I raised my rate 2.4x in 18 months" → toolkit at end.
Wed: LinkedIn post: undercharging story + free calculator link.
Thu: Post in 3 subreddits sharing only the free calculator.
Fri: Email 5 freelance newsletter writers offering exclusive excerpts.
Sat: Record a 90-sec Loom demo. Post to Twitter + LinkedIn.
Sun: Write first edition of the newsletter. Send to signups.
Always: DM every buyer, ask for honest feedback + testimonial.

Week 02 · Content engine on

Goal: 15–25 total sales. Email list to 250+.
Publish a 1,500-word blog post: "The freelance rate calculator no one gave me."
Twitter: daily thread or insight from the toolkit — 7-day streak.
LinkedIn: 3× posts — story, how-to, results from a reader.
Guest post pitch to 5 freelance blogs. Offer the calculator as lead magnet.
Partnership: email 3 freelance podcasters offering free copies for listeners.
Gumroad Discover: optimize tags, thumbnail, description for search.
SEO: register Google Search Console, submit sitemap.
Add testimonials collected in week 1 to the homepage.

Week 03 · Paid discovery

Goal: First consistent daily sales. Test whether paid ads break even.
$50 test on Reddit Ads targeting /r/freelance and similar.
$50 test on Twitter/X ads promoting a winning organic tweet.
Launch affiliate program at 40% commission. DM 20 creators.
AppSumo-style lifetime deal: pitch to StackCommerce, AppSumo, DealMirror.
Add exit-intent popup with 10% discount to capture leaving visitors.
Start an email nurture sequence: 5 emails over 2 weeks for new subs.
Find a comparable $49 product and raise price? Test with A/B.
Review analytics: where's converting traffic actually coming from?

Week 04 · Double down on what works

Goal: 60–100 total sales. Establish recurring revenue streams.
Kill every channel that isn't producing. Triple the one that is.
Launch a $99 "Pro" tier: 1:1 rate-setting consultation + toolkit.
Newsletter sponsors: you're at 500+ subs — charge $100/drop.
Affiliate recurring: sign up as affiliate for 3 tools (Bonsai, HoneyBook, FreshBooks), embed referral links.
Publish a second blog post — long-form, SEO-optimized.
Guest on 2 podcasts. Record before launching → schedule drops for weeks 5–6.
Automate: abandoned-cart email via Gumroad. New-signup welcome email.
Plan v2 of the toolkit — upsell to existing customers at launch.

Where the money actually comes from.

Not every channel makes sense for a $29 product. Here's honest guidance on which to prioritize, which to skip, and roughly what to expect.

★ High ROI
Twitter / X threads

One breakout thread can drive 2,000+ clicks. Post 3×/week. Lead with a number, end with the link. Best channel for creators.

Effort: 1hr/post · Payback: 2–7 days
★ High ROI
LinkedIn posts

B2B freelancers live here. Personal stories outperform promos 10×. Aim for 5 posts/week, optimize the first 2 lines.

Effort: 30min/post · Payback: 1–3 days
★ High ROI
Email list + newsletter

The compounding asset. Every sub = ~$1.50–$3/yr. At 2,000 subs you've got a predictable engine. Start the list today.

Effort: Weekly · Payback: 30+ days
◆ Medium ROI
Reddit (correctly)

Never post the sales page. Post the calculator. Offer genuine help. Moderators will ban promos. Done right: 50–300 signups/post.

Effort: 30min/post · Payback: 1–5 days
◆ Medium ROI
SEO / blog

Slow but durable. Target long-tail queries: "how to calculate freelance rate," "freelance contract template." 3–6 months to rank.

Effort: 3hr/post · Payback: 90–180 days
◆ Medium ROI
Affiliate program

30–40% commission on a $29 product = $8–12 per sale. Recruit creators whose audience matches. Can become 30–40% of revenue by month 6.

Effort: Recruiting · Payback: 60+ days
△ Low ROI (at first)
Paid ads

Hard to make work at $29 AOV. Only scale after the organic funnel converts. Test with $50, kill fast.

Effort: $ + time · Payback: Uncertain
△ Low ROI (at first)
TikTok / Reels

Big reach potential, but low-intent audience. One viral video could 10× your month, or you could post 30 times for nothing.

Effort: High · Payback: Lottery
△ Low ROI (at first)
Podcast tour

Great for trust + long-tail SEO. Hard to attribute. Do once you have a $99+ upsell to recoup the time investment.

Effort: High · Payback: 90+ days

Before you ship.

The 14 boxes below should all be checked before you tell anyone the site is live. Ten minutes of checking beats ten hours of damage control. Tap each item — progress saves automatically.

Site loads at yourdomain.com — desktop + mobile
HTTPS enforced — no mixed-content warnings
Calculator works — numbers update live
Email form writes to MySQL table
Buy button lands on working Gumroad page
Test purchase completed + receipt received
Download file opens correctly — not corrupt
Refund flow tested (refund yourself the test sale)
Analytics installed — Plausible or Google Analytics
Favicon + OG image — social previews look sharp
Legal pages — Terms, Privacy, Refund policy drafted
Contact email — hello@yourdomain works, monitored
First 5 messages drafted, ready to send
Backup — config.php + DB dump saved locally
All clear Every box checked. Every page loading. Every integration verified. Now: stop checking, start telling people. The site doesn't sell itself — you do. Go.