Developer & Entrepreneur — Pittsburgh, PA

Trent Tompkins builds systems, websites, marketing assets, and operational tools that make stalled ideas move faster.

When growth is slow, leads are inconsistent, the tech is clumsy, or the offer is not converting, the problem is rarely effort. The problem is usually positioning, speed, clarity, automation, and execution. I help founders, operators, investors, and small business owners build practical systems that save time, make money, protect margin, and move projects from idea to launch.

Build Faster Custom websites, web systems, admin tools, CMS workflows, landing pages, automation, and application development built to ship instead of stall.
Sell More Clearly Direct-response positioning, offers, service pages, conversion copy, investor materials, and marketing systems designed around speed, clarity, and results.
Fix Bottlenecks When a site, workflow, funnel, or internal process is losing time or money, I help identify the choke point and build the practical fix.
ChatGPT development and automation badge Claude AI integration and workflow badge Gemini AI workflow and automation badge FlatLine Python debugger badge Python software development badge QT.py development badge Ollama local model workflow badge
Trent Tompkins, software developer, consultant, and entrepreneur

Request a Free Consultation

Tell me what is broken, slow, expensive, or stuck — and what outcome you want instead.

Services

Build. Market. Automate. Execute.

Website Building

Website building service graphic for custom website design, website development, and lead generation

When the website looks decent but still does not sell, trust leaks out fast. I build pages and systems that clarify the offer, remove friction, and turn attention into inquiries so the business can move faster.

Free Consultation

Online Marketing

Online marketing service graphic for offers, positioning, direct-response copywriting, and lead generation

If the message is vague, the market hesitates. I tighten positioning, sharpen the promise, and build direct-response marketing assets that help you get attention, create demand, and make more money.

Free Consultation

Search Engine Optimization

Search engine optimization service graphic for technical SEO, metadata, headings, alt text, and keyword targeting

If people cannot find you, they cannot buy from you. I improve SEO structure, metadata, headings, internal clarity, and keyword targeting so the site has a better chance to rank, attract clicks, and save wasted ad spend.

Free Consultation

Application Development

Application development service graphic for custom software, admin systems, dashboards, and workflow automation

Manual work compounds into delay, payroll drag, and avoidable mistakes. I build custom software, admin tools, dashboards, and workflow systems that save time, reduce friction, and give you more control over operations.

Free Consultation

Mobile Development

Mobile development service graphic for responsive mobile interfaces, customer workflows, and app-style experiences

When the mobile experience is clumsy, leads disappear before they ever talk to you. I build responsive, mobile-first experiences and app-style workflows designed to make action easy on the device people use most.

Free Consultation

Free Custom Consultation

Free custom consultation service graphic for strategy, bottleneck analysis, and next-step planning

Sometimes the fastest way to save time and money is to identify the real bottleneck first. Use the free consultation to map the problem, define the solution, and get a clearer path to speed, revenue, and execution.

Free Consultation
Developer & Entrepreneur — Pittsburgh, PA

Trent Tompkins builds software systems, websites, SEO assets, and business tools for real-world growth.

When the website is weak, the message is soft, the workflow is clumsy, or the business is moving too slowly, the cost compounds. I build custom software, websites, direct-response assets, SEO structures, and operational systems designed to save time, speed up execution, improve trust, and help businesses make or keep more money.

Trent Tompkins

Resume, Curriculum Vitae, and Technical Background

Experience & Education

Help Desk, Technical Support, Software Development, and Business Systems Resume

If you need a concise downloadable version first, it is right here. Review the PDF, download it, or request a free consultation to discuss a role, project, contract, or build.

Professional Experience

Founder & CEO
AcquisitionInvest LLC
2024 – Present
  • Built and operates a private business acquisition investment firm targeting established, cash-flowing Main Street companies at 2–4× EBITDA.
  • Leads finance, due diligence, and acquisition structuring under SBA 7(a) frameworks with a disciplined minimum DSCR of 2.0×.
  • Developed the full investor-facing web platform, 81-page investor report pipeline, and accredited investor outreach infrastructure from scratch.
Sales Representative
Sheetz Communications / Palmetto Solar
June 2024 – Present
  • Earned Palmetto Certified Expert designation through a rigorous technical sales certification.
  • Sells residential solar solutions. Direct-to-door discipline sharpens the one skill that matters most in any transaction: closing without flinching.
Sales Representative
Aftermath Marketing / Fidium Fiber
Aug 2023 – June 2024
  • Sold 150+ residential fiber optic internet contracts through direct D2D canvassing. Volume achieved through consistency and discipline — not shortcuts.
PHP Developer
Moore Consulting Group
Nov 2014 – Nov 2016
  • Collaborated with a former business partner on client web projects. Rebuilt the Moore Consulting Group website end-to-end.
PHP Developer
Myriad Core
Mar 2014 – Sep 2014
  • Built theclassroomstore.com using CodeIgniter and Bootstrap — a practical system built for a real business with real customers.
Lead PHP Developer
Universal Technologies Inc.
Jun 2008 – Feb 2013
  • Sole technical support for 300+ funeral home clients — maintaining that responsibility alone required extreme discipline most engineers never face.
  • Engineered a custom templating system allowing a non-programmer designer to build templates in Dreamweaver, eliminating a constant bottleneck.
  • Built a full vendor marketplace, auction system, and classifieds platform embedded inside client admin areas.
  • Developed a complete custom ecommerce solution integrated with Teleflora’s XML API — real-time order routing, rerouting, status updates, and price changes.
  • Physically assembled and colocated the production server at Teraswitch in Greentree (CentOS / Apache / MySQL / RAID). Company acquired and sold, 2013.

Education

A.S. Software Applications & Programming
ITT Technical Institute
Spring 2005 – Fall 2007

Foundational systems thinking, algorithms, and application development. The credential was the starting point; the real education happened in production systems, under real pressure, serving real clients.

High School Diploma
Mercer Area High School
Graduated Fall 2004

Technical Skills

PHP JavaScript jQuery HTML CSS / LESS MySQL JSON LAMP Stack CodeIgniter Bootstrap Git / GitHub Photoshop Regex API Integration Data Migration SSL / Security Google Analytics Sales Rabbit Linux / CentOS Nginx / BT Panel Python matplotlib / Plotly

References

Eric Cotter
Technical Services Engineer, Epic Systems Corporation

Former teacher and long-time mentor — (724) 826-8837

Corey Rodriguez
Chief Strategy Officer, AcquisitionInvest LLC

(412) 657-0010

Brandon Kagey
Former PHP Developer Colleague

(330) 979-2466

Michael Moore
Former Business Partner, Universal Technologies Inc.

(412) 600-3099

Projects

Built. Shipped. Proven.

Ideas without execution are fantasies. Every project below represents a problem taken seriously, constraints respected, and a result that stood in front of real users under real conditions.

AcquisitionInvest LLC — Investor Platform

Private business acquisition investment firm targeting established Main Street companies at 2–4× EBITDA. Full investor-facing website built on a custom PHP CMS with nginx, SimpleCrud, elFinder, and blueimp Gallery. 81-page investor report pipeline with server-side charts via matplotlib and Plotly. acquisitioninvest.com

PHP 8.3nginxMySQLjQuery Custom CMSPythonmatplotlibPlotly

FullPriceExit.com — Business Consulting

Consulting practice focused on helping business owners sell at full price rather than accepting lowball acquisition offers. Strategy, positioning, and deal preparation for Main Street business owners. fullpriceexit.com(888) 838-8229

Business StrategyM&A AdvisoryDeal Structuring

Practical Cryonics

Educational resource covering the science, logistics, and practical considerations of cryonic preservation. Built to cut through the noise and give serious people serious information. practicalcryonics.com

Web DevelopmentContent Strategy

Expressions Tributes — Funeral Home SaaS Platform

Single-handedly built and maintained a full-featured SaaS platform for 300+ funeral home clients over five years. Custom ecommerce tied to Teleflora’s XML API, a vendor marketplace, auction system, and a templating engine designed for a non-developer. Physically built and colocated the production server. Acquired and sold, 2013.

PHPMySQLCentOSApache jQueryTeleflora APIFedEx/UPS APIs

The Classroom Store — Educational Ecommerce

Designed and built a complete ecommerce storefront for an educational supplies retailer using CodeIgniter MVC. Clean architecture built for maintainability.

PHPCodeIgniterBootstrapMySQL

PGH Hauling — Business Website

Custom website for a Pittsburgh-based hauling business. Dark construction-themed design with local SEO optimization and a service presentation built for lead generation.

HTMLCSSJavaScriptLocal SEO

FlatLine Debugger

FlatLine Debugger

Python Process Debugger

FlatLine supervises any Python script, watches heartbeats, detects freezes, opens an interactive crash console, and captures a stack trace plus variable dump the moment something goes wrong.

It supports both relay-backed heartbeat mode and a database-free poll mode, writes out stack_trace.log, variables.log, and error.log, and exposes a local socket REPL on localhost:5050 for live inspection.

Download FlatLine ZIP → GitHub Project Site

FlatLine logo

Screenshots

Live Demo + Debug Console
FlatLine demo application screenshot

The bundled demo app uses a white monospaced editor on the left and a full-height black/green output console on the right. It is designed to be edited live so you can trigger exceptions and test supervision behavior quickly.

Get the ZIP

FlatLine debug console screenshot

When a crash, freeze, or manual pause occurs, FlatLine opens an interactive debug console with stack dump, variable dump, graceful close, terminate, kill, refresh, restart, shell commands, connection inspection, and monitoring controls.

Download FlatLine ZIP →

What It Does

Designed for ugly failures

Supervisor-first design

FlatLine launches your Python app as a subprocess and stays outside the target process so the debugger remains useful even when the child becomes unstable.

Subprocess SupervisionPythonMIT

Freeze detection

It can detect freezes through relay-backed heartbeat events or through a non-blocking poll mode when you do not want MariaDB in the loop.

Heartbeat RelayPoll ModeNo DB Required

Crash snapshots

On failure it captures a stack trace and variable dump, then writes them to disk alongside a unified error log for later review.

stack_trace.logvariables.logerror.log

Interactive crash console

The built-in console exposes stack, vars, close, terminate, kill, refresh, restart, shell commands, connection inspection, and network monitoring.

Console UIShell CommandsRestart

Live inspection

FlatLine opens a socket REPL on localhost:5050, which means you can inspect and interact without waiting for a crash first.

Socket REPLlocalhost:5050nc Support

Demo app included

The package ships with a demo Qt app, an example launcher, HTML help, config file, and a lightweight remote client for adding beat() calls to your own app.

app.pyexample.pyremote_client.py

Quick Start

Minimal setup

FlatLine runs in supervisor mode by default. The package README documents quick-start usage like python flatline.py app.py, alternate config support, and pass-through arguments for the child application.

  • Quick start: python flatline.py app.py
  • Alternate config: python flatline.py --config myapp.ini
  • Target override: python flatline.py --app script.py
  • Live inspection: nc localhost 5050
  • Optional dependencies: PySide6 for the demo app and pymysql for MariaDB support

Download ZIP Read the Repo

Usage Example

Included example.py

The package includes an example.py launcher that resolves a target app, forwards pass-through arguments, starts the debugger, prints relay details, and shuts down cleanly on Ctrl+C.

#!/usr/bin/env python3
"""
example.py — Flatline Usage Example
======================================
Demonstrates how to launch app.py under Flatline supervision.
Any arguments not consumed by this script are passed through to app.py.

Usage:
  python example.py                  Launch app.py with Flatline
  python example.py --help           Show help
  python example.py --version        Show version
  python example.py --app myapp.py   Supervise a different script
  python example.py -a --port 8080   Pass --port 8080 to the target app

Authors : Trent Tompkins <trenttompkins@gmail.com>
          GPT-5.4 Plus Thinking
          Claude Sonnet 4.6 (Anthropic)
Version : 1.0b  |  MIT License  |  https://github.com/tibberous/Flatline
"""
import sys
import os
import signal
from pathlib import Path

HERE = Path(__file__).resolve().parent
sys.path.insert(0, str(HERE))

# ── Quick CLI ─────────────────────────────────────────────────────────────
_argv = sys.argv[1:]
_low  = [a.strip().lower() for a in _argv]

if any(x in _low for x in ('--help', '-h', '/?', '/help', 'man', '--man')):
    print(__doc__)
    print("Full documentation:  python flatline.py --help")
    print(f"Project:  https://github.com/tibberous/Flatline")
    sys.exit(0)

if any(x in _low for x in ('--version', '--ver', '-v', '/v')):
    from flatline import VERSION, BUILD_DATE, PROJECT
    print(f'Flatline Example v{VERSION}  ({BUILD_DATE})')
    print(PROJECT)
    sys.exit(0)

if any(x in _low for x in ('--license',)):
    from flatline import MIT_LICENSE
    print(MIT_LICENSE)
    sys.exit(0)

# ── Resolve target app ────────────────────────────────────────────────────
target   = HERE / 'app.py'
app_args = []

i = 0
while i < len(_argv):
    arg = _argv[i]
    low = arg.lower()
    if low in ('--app', '-app') and i + 1 < len(_argv):
        target = Path(_argv[i + 1]); i += 2; continue
    if low in ('-a', '--args', '/args') and i + 1 < len(_argv):
        app_args = _argv[i + 1:]; break
    if not arg.startswith('-') and arg.endswith('.py'):
        target = Path(arg)
    elif arg.startswith('-') and low not in ('--app',):
        app_args.append(arg)
    i += 1

if not target.exists():
    print(f"[example] Target not found: {target}", file=sys.stderr)
    print(f"[example] Usage: python example.py [--app script.py] [-a arg1 arg2]")
    sys.exit(2)

# ── Launch via Flatline ───────────────────────────────────────────────────
from flatline import Flatline, FlatlineConfig, _md5, VERSION, BUILD_DATE

print(f"Flatline Example — v{VERSION}  ({BUILD_DATE})")
print(f"Supervising  : {target}")
print(f"MD5          : {_md5(target)}")
print(f"Extra args   : {app_args or '(none)'}")
print()

cfg      = FlatlineConfig()
debugger = Flatline(config=cfg)
debugger.start()

print(f"[example] Relay port : {debugger._relayPort}")
print(f"[example] Socket REPL: nc localhost 5050")
print(f"[example] Ctrl+C to terminate child")
print()


def _sigint(sig, frame):
    print("\n[example] Ctrl+C — terminating...")
    debugger.terminate()
    debugger.shutdown()
    sys.exit(0)

signal.signal(signal.SIGINT, _sigint)

try:
    debugger.launch([str(target)] + app_args)
    exit_code = debugger.wait()
    print(f"\n[example] Child exited: {exit_code}")
    sys.exit(exit_code)
finally:
    debugger.shutdown()

Included Files

What ships in the ZIP

flatline.py

Main debugger distribution.

app.py

Demo Qt application used to test output and crash behavior.

example.py

Programmatic usage example with pass-through CLI support.

config.ini

Configurable freeze threshold, poll interval, app target, and database settings.

help.html / README

Bundled project documentation and help material.

source/remote_client.py

Helper client for adding beat() events to your own application.

Download & Links

ZIP, docs, support

FlatLine is published under the MIT license and the package includes the demo app, example launcher, docs, and support files in one bundle.

Download FlatLine ZIP Direct ZIP Link Get the Package GitHub Repository

Need custom PHP or Python development? Reach out directly.

Hosts File Script

Usage Example

Included fixhosts.py

The package includes a fixhosts.py utility for toggling managed entries in the Windows hosts file. It flips lines between active mappings like 127.0.0.1 example.test # auto and disabled mappings like # auto: 127.0.0.1 example.test, making it easy to turn local vhosting off and on without manually editing C:\Windows\System32\drivers\etc\hosts.

The script can target all managed entries or a named switch group, creates a backup before writing, requests elevation on Windows when needed, and flushes DNS after changes so the new host mappings take effect immediately.

import argparse
import ctypes
import os
import re
import shutil
import subprocess
import sys
import time
from dataclasses import dataclass
from pathlib import Path
from typing import Iterable

HOSTS = Path(r"C:\Windows\System32\drivers\etc\hosts")
AUTO_TAG = "# auto"
AUTO_PREFIX = "# auto:"

IP_LIKE_RE = re.compile(r"^(?:\d{1,3}(?:\.\d{1,3}){3}|::1|localhost)\b", re.IGNORECASE)
ACTIVE_RE = re.compile(
    r"^(?P<indent>\s*)(?P<entry>.*?\S)\s+#\s*auto(?:\s*:\s*(?P<switch>[^#]+?))?\s*$",
    re.IGNORECASE,
)
DISABLED_RE = re.compile(
    r"^(?P<indent>\s*)#\s*auto\s*:\s*(?P<rest>.+?)\s*$",
    re.IGNORECASE,
)


@dataclass
class ManagedLine:
    indent: str
    entry: str
    switch: str | None
    active: bool

    @property
    def domains(self) -> list[str]:
        base = self.entry.split("#", 1)[0].strip()
        parts = base.split()
        if len(parts) < 2:
            return []
        return parts[1:]

    @property
    def switch_name(self) -> str:
        return (self.switch or "default").strip() or "default"


@dataclass
class Change:
    action: str
    switch: str
    domains: list[str]
    before: str
    after: str


def is_windows() -> bool:
    return os.name == "nt"


def is_admin() -> bool:
    if not is_windows():
        return True
    try:
        return bool(ctypes.windll.shell32.IsUserAnAdmin())
    except Exception:
        return False


def quote_windows_arg(arg: str) -> str:
    if not arg:
        return '""'
    if not re.search(r'[\s"]', arg):
        return arg
    escaped = arg.replace('\\', '\\\\').replace('"', '\"')
    return f'"{escaped}"'


def relaunch_as_admin() -> None:
    script = str(Path(__file__).resolve())
    params = " ".join([quote_windows_arg(script), *[quote_windows_arg(a) for a in sys.argv[1:]]])
    try:
        rc = ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, params, None, 1)
    except Exception as exc:
        print(f"❌ Could not request elevation: {exc}")
        raise SystemExit(1)

    if int(rc) <= 32:
        print("❌ UAC elevation was denied or failed.")
        raise SystemExit(1)

    raise SystemExit(0)


def flush_dns() -> None:
    try:
        completed = subprocess.run(
            ["ipconfig", "/flushdns"],
            check=True,
            capture_output=True,
            text=True,
        )
        output = (completed.stdout or "").strip()
        print(f"✅ DNS cache flushed.{(' ' + output) if output else ''}")
    except Exception as exc:
        print(f"⚠️ Could not flush DNS: {exc}")


def make_backup(path: Path) -> Path:
    backup = path.with_name(path.name + ".fixhosts.bak")
    shutil.copy2(path, backup)
    return backup


def looks_like_entry(text: str) -> bool:
    token = text.strip().split(None, 1)[0] if text.strip() else ""
    return bool(token and IP_LIKE_RE.match(token))


def parse_disabled_rest(rest: str) -> tuple[str | None, str] | None:
    rest = rest.strip()
    if not rest:
        return None

    if looks_like_entry(rest):
        return None, rest

    if ":" in rest:
        maybe_switch, maybe_entry = rest.split(":", 1)
        maybe_switch = maybe_switch.strip()
        maybe_entry = maybe_entry.strip()
        if maybe_switch and maybe_entry and looks_like_entry(maybe_entry):
            return maybe_switch, maybe_entry

    return None


def parse_managed_line(line: str) -> ManagedLine | None:
    active_match = ACTIVE_RE.match(line)
    if active_match:
        entry = active_match.group("entry").strip()
        switch = active_match.group("switch")
        return ManagedLine(
            indent=active_match.group("indent") or "",
            entry=entry,
            switch=switch.strip() if switch else None,
            active=True,
        )

    disabled_match = DISABLED_RE.match(line)
    if not disabled_match:
        return None

    parsed = parse_disabled_rest(disabled_match.group("rest"))
    if not parsed:
        return None

    switch, entry = parsed
    return ManagedLine(
        indent=disabled_match.group("indent") or "",
        entry=entry.strip(),
        switch=switch.strip() if switch else None,
        active=False,
    )


def render_line(item: ManagedLine) -> str:
    if item.active:
        if item.switch:
            return f"{item.indent}{item.entry} {AUTO_TAG}: {item.switch}"
        return f"{item.indent}{item.entry} {AUTO_TAG}"

    if item.switch:
        return f"{item.indent}{AUTO_PREFIX} {item.switch}: {item.entry}"
    return f"{item.indent}{AUTO_PREFIX} {item.entry}"


def toggle_line(item: ManagedLine) -> ManagedLine:
    return ManagedLine(
        indent=item.indent,
        entry=item.entry,
        switch=item.switch,
        active=not item.active,
    )


def read_hosts_lines(path: Path) -> list[str]:
    return path.read_text(encoding="utf-8", errors="replace").splitlines()


def write_hosts_lines(path: Path, lines: Iterable[str]) -> None:
    path.write_text("\n".join(lines) + "\n", encoding="utf-8")


def print_summary(changes: list[Change], dry_run: bool) -> None:
    if not changes:
        print("ℹ️ No managed # auto lines were toggled.")
        return

    by_action: dict[str, dict[str, list[str]]] = {"ON": {}, "OFF": {}}
    for change in changes:
        bucket = by_action[change.action].setdefault(change.switch, [])
        bucket.extend(change.domains or [change.before])

    prefix = "🧪 Would turn" if dry_run else "✅ Turned"

    for action in ("OFF", "ON"):
        groups = by_action[action]
        if not groups:
            continue
        print(f"{prefix} {action}:")
        for switch, domains in groups.items():
            unique_domains: list[str] = []
            for domain in domains:
                if domain not in unique_domains:
                    unique_domains.append(domain)
            print(f"  [{switch}]")
            for domain in unique_domains:
                print(f"    - {domain}")


def toggle_hosts(path: Path, target_switch: str | None = None, dry_run: bool = False) -> int:
    original_lines = read_hosts_lines(path)
    new_lines: list[str] = []
    changes: list[Change] = []
    normalized_target = (target_switch or "").strip().lower()

    for line in original_lines:
        parsed = parse_managed_line(line)
        if not parsed:
            new_lines.append(line)
            continue

        switch_name = parsed.switch_name
        if normalized_target and switch_name.lower() != normalized_target:
            new_lines.append(line)
            continue

        toggled = toggle_line(parsed)
        new_line = render_line(toggled)
        new_lines.append(new_line)
        changes.append(
            Change(
                action="ON" if toggled.active else "OFF",
                switch=switch_name,
                domains=parsed.domains,
                before=line,
                after=new_line,
            )
        )

    if not changes:
        print("ℹ️ Nothing matched.")
        if normalized_target:
            print(f"   No managed entries were found for switch: {target_switch}")
        else:
            print("   No managed # auto entries were found.")
        return 0

    if dry_run:
        print_summary(changes, dry_run=True)
        return len(changes)

    backup = make_backup(path)
    write_hosts_lines(path, new_lines)
    print(f"✅ Updated hosts file: {path}")
    print(f"✅ Backup created: {backup}")
    print_summary(changes, dry_run=False)
    flush_dns()
    return len(changes)


def build_parser() -> argparse.ArgumentParser:
    parser = argparse.ArgumentParser(
        description=(
            "Toggle managed Windows hosts entries between active lines like "
            "'127.0.0.1 example.com # auto' and disabled lines like "
            "'# auto: 127.0.0.1 example.com'."
        )
    )
    parser.add_argument(
        "--hosts",
        default=str(HOSTS),
        help="Path to the hosts file. Defaults to the Windows hosts file.",
    )
    parser.add_argument(
        "--switch",
        dest="switch_name",
        help=(
            "Only toggle entries in one named switch group. "
            "Active form: '127.0.0.1 x.com # auto: social' | "
            "Disabled form: '# auto: social: 127.0.0.1 x.com'"
        ),
    )
    parser.add_argument(
        "--dry-run",
        action="store_true",
        help="Show what would change without writing the file.",
    )
    return parser


def main() -> int:
    parser = build_parser()
    args = parser.parse_args()
    hosts_path = Path(args.hosts)

    print("Fixing hosts.")
    time.sleep(1)

    if not hosts_path.exists():
        print(f"❌ Hosts file not found: {hosts_path}")
        return 1

    if is_windows() and not args.dry_run and not is_admin():
        print("🔒 Hosts file needs admin rights. Requesting elevation...")
        relaunch_as_admin()

    try:
        toggle_hosts(
            path=hosts_path,
            target_switch=args.switch_name,
            dry_run=args.dry_run,
        )
        return 0
    except PermissionError:
        print("❌ Permission denied while writing the hosts file.")
        if is_windows() and not is_admin():
            print("   Run this as Administrator or accept the UAC prompt.")
        return 1
    except Exception as exc:
        print(f"❌ Error: {exc}")
        return 1
    
    print("Fixing hosts.")
    time.sleep(2)


if __name__ == "__main__":
    raise SystemExit(main())
GitHub Release

Practical Cryonics

Practical Cryonics book cover

Practical Cryonics

Death has been the one boundary no civilization has crossed. But human history is, in large part, the story of boundaries dissolving.

Practical Cryonics examines cryonics from three angles: the science of what modern vitrification can and cannot preserve; the ethics of whether extending the possibility of life is hubris, desperation, or moral responsibility; and the logistics of how individuals can think rationally about cost, risk, probability, and long-term outcomes without resorting to fantasy or denial.

This book does not promise immortality. It does not claim revival is guaranteed. It asks a narrower question: if death is a process rather than an event, and if that process can be interrupted — what follows from that possibility?

Buy on Amazon →   practicalcryonics.com

About the Book

From anesthesia to antibiotics to organ transplantation, interventions once considered impossible have become ordinary. Each advance required a willingness to revise what counted as inevitable. The same question applies here.

Modern cryonic procedures do not freeze patients in the conventional sense. They use vitrification — a process in which bodily fluids achieve a glass-like state without the formation of ice crystals. The ice-crystal objection that most people raise against cryonics reflects a decades-old misunderstanding of the science, not its current state.

The book works through the physics of determinism and consciousness, the history of belief perseverance in medicine, the realistic pathway to revival through cloning rather than cell-by-cell repair, and the practical decisions an individual needs to make today to give cryonics its best chance of working.

Sample Chapter

"This is how humans are: We question all our beliefs, except for the ones that we really believe in, and those we never think to question."
— Orson Scott Card, Speaker for the Dead

For thousands of years, death was final. Then, in 1957, the first external defibrillation occurred — giving scientists the ability to restart hearts of patients who, a decade before, would have been pronounced dead. The technology did not become available everywhere overnight. Many people who could have been saved still died, as the medical establishment caught up to a new reality.

Cryonics is a bet — not a gamble. There are two parts. The first is the actual science of preserving a human body in a way that provides the best chance of future revival. That part can be done with science we have today. The second is a bet that future technology will make revival possible. People make bets like this constantly — when they invest in a biotech startup, or buy stock expecting next year's product will outperform this one.

Continue reading on Amazon →

About the Author

Trent Tompkins

I wrote Practical Cryonics for one simple reason: I have a daughter.

Eventually, it became obvious that the book I was looking for did not exist. So I wrote it.

At its core, Practical Cryonics reflects a simple conviction: if death is a process rather than an instantaneous event, and if future technology may one day reverse what medicine cannot today, then choosing preservation is not an act of desperation. It is an act of reason.

When I imagine the best possible future, it is not wealth or status that comes to mind. It is time. Time with the people I love. And if there is even a small chance to have more of it, that possibility is worth taking seriously.

AcquisitionInvest LLC

AcquisitionInvest LLC

Private business acquisition investment firm. We acquire profitable Main Street companies at disciplined valuations and distribute the income they produce to accredited investors.

Visit AcquisitionInvest.com →   (888) 464-4695

The Opportunity

Most investors are told that diversification means spreading money across stocks, bonds, and mutual funds. But experienced investors eventually discover something uncomfortable: most “diversified” portfolios still move with the same underlying force as the public markets. Real diversification comes from owning productive assets — assets that generate income because they provide real services to real customers.

Profitable small and mid-sized companies can often be acquired at 2–4× earnings, while many public companies trade at 15–30× earnings. That pricing gap exists because most buyers who would gladly acquire these businesses cannot access SBA financing or acquisition capital. That mismatch creates a market inefficiency where high-quality businesses with employees, customers, and real estate can still sell for 2.0–2.5× EBITDA with Debt Service Coverage above 2.0×.

The Numbers

ROI Comparison — AcquisitionInvest vs. S&P 500, Treasuries, CDs

ROI Comparison (2024–2025 data)

Metric Annual Monthly
Acquisition Price $2,000,000
EBITDA Multiple 2.5×
Gross Revenue $1,400,000 $116,667
EBITDA $800,000 $66,667
Annual Debt Service (SBA 7(a)) $297,540 $24,795
DSCR 2.69× ✓
Net Distributable Cash Flow $502,460 $41,872
Investor Return — $200K @ 16% $32,000 $2,667
Compounded returns at 1, 5, and 10 years

Compounded Returns — 16% (blue) vs. S&P 500 ~10% (red)

Structure & Protections

  • 16% preferred annual return — distributions or compounding at investor election
  • Investor capital held in escrow prior to deployment into a closed acquisition
  • Independent third-party due diligence required before any funds are committed
  • Minimum Debt-Service-Coverage Ratio of 2.0× on every transaction
  • Monthly operating summaries (year 1), quarterly financials thereafter, full audit rights
  • Two-year termination right after deployment
  • Structured under Regulation D, Rule 506(b) — accredited investors only

Contact

Call or Text: (888) 464-4695
Email: invest@acquisitioninvest.com
Address: 510 Main Street, Prospect, PA 16052

† This section is for informational purposes only and does not constitute an offer to sell securities. All returns are projected and not guaranteed. Investing in private placements involves risk, including loss of principal. Available to accredited investors only.

Projects

FullPriceExit.com

FullPriceExit.com — Pre-Sale Business Consulting

Most business owners leave money on the table when they sell. Not because their business isn't worth more — because it isn't packaged, positioned, or prepared the way buyers and lenders need to see it.

We fix that. Before you go to market.

Visit FullPriceExit.com →   (888) 838-8229

What We Do

FullPriceExit is a pre-acquisition (pre-sale) consulting practice. We work with business owners before they go to market — cleaning up the financials, fixing the story, preparing the diligence package, and structuring the deal so that serious buyers can actually get SBA financing approved.

We don't just sell billable hours. We sell results. Every owner, every company, every deal is different — so the approach is tailored to the real-world needs of your business, your numbers, your timing, and your goals.

Thousands today can net you hundreds of thousands at sale.

Services

Exit Readiness & Strategy

Owner goals interview, baseline valuation, buyer-type targeting, go-to-market plan, and readiness scorecard. Sets expectations and deal strategy before anyone sees your numbers.

Financial Cleanup & Narrative

GAAP cleanup, owner add-backs, normalized EBITDA, revenue quality review, working capital analysis, AR/AP hygiene. Reveals true earnings and removes red flags before buyers find them.

Operations & Technology

SOPs, org charts, IT asset inventory, password vault, MFA rollout, DNS hardening, email migration, backups, and a full “Buyer Tech Pack.” Transferability is value.

Deal Packaging & Buyer Journey

Teaser, NDA, CIM (Confidential Information Memorandum), SBA-friendly lender pack, diligence workspace, management presentation, LOI comparison, and transition plan.

Legal & Corporate Housekeeping

Minute book, cap table, contract audit, lease and landlord estoppel readiness, license and permits, IP audit. No surprises in diligence.

Sales & Revenue Engine

CRM cleanup, customer concentration mitigation, pricing and margin quick wins, brand and web audit, LTV/CAC narrative. Turn marketing spend into valuation.

Packages

  • Starter — Sale-Readiness Audit (2–3 weeks): Scorecard, add-backs, working capital trend, contract/lease/IP audit, CIM outline, Google Drive skeleton, action plan.
  • Standard — Go-to-Market Prep (6–8 weeks): Everything in Starter plus QoE coordination, full buyer pack (teaser/CIM), lender-ready pack, management presentation, and diligence setup.
  • Full — Sell-Side Navigator (through closing): Everything above plus LOI comparison and negotiation prep, working capital model, and transition plan.

Contact

Not sure if we're the right fit? That's exactly the point of a conversation.

Call: (888) 838-8229
Website: fullpriceexit.com
Address: 250 Mt. Lebanon Blvd, STE 210, Pittsburgh, PA 15234
Fax: (412) 550-3742

Contact

Contact

Direct Lines Only

Serious people communicate directly. No contact form theater. If the work here interests you, reach out — and say something specific.

Fax (412) 550-3742
Email
Location Prospect, PA 16052