#!/usr/bin/env python3 """Landing Factory โ€” kick-ass interactive landing pages for the homelab fleet. Emits self-contained HTML (inline CSS+JS, zero external deps) per site. Usage: python3 build.py -> writes ~/landing-factory/out/.html """ import os OUT = os.path.expanduser("~/landing-factory/out") os.makedirs(OUT, exist_ok=True) ENGINE_CSS = """ """ ENGINE_JS = """ """ PAGES = { "satsspin": dict( title="SatsSpin โ€” Lightning Casino", ac="#ffb300", ac2="#7c3aed", bg="#0a0618", bg2="#150b2e", card="#141026", txt="#f2edff", mut="#9a8fc4", glow="rgba(255,179,0,.45)", glowsoft="rgba(255,179,0,.15)", border="rgba(255,179,0,.5)", band="rgba(124,58,237,.25)", typephrases=['โšก Instant Lightning payouts', '๐ŸŽฐ 6 provably-fair games', '๐Ÿ”“ No KYC. No waiting.', '๐Ÿ’œ Built for sats, not suits'], slots=True, wave=False, nav=[('Games','/play'),('How It Works','#how'),('Lightning','#lightning')], navcta=('Play Now','/play'), body="""
โ–Œ
LIVE ยท Lightning Network Casino

Spin The Lightning.

SatsSpin is a Bitcoin-native casino running on the Lightning Network. Deposit in seconds, win in sats, withdraw instantly. No accounts with strangers, no KYC, no payout delays โ€” just you and the reels.

0
Casino Games
0
% Lightning Payouts
0
KYC Requirements
0
/ 7 Live
๐ŸŽฐSLOTS๐Ÿ’ฃMINES๐ŸŽฒDICE๐Ÿ“ˆCRASH๐ŸƒBLACKJACK๐ŸŽฏPLINKOโšกLIGHTNING

Pick Your Poison

Six games. One engine. Zero delays. Launch the casino โ†’

๐ŸŽฐ

Slots

Classic 3-reel action with 777 jackpots and multiplier lines. Pure dopamine, one spin away.

๐Ÿ’ฃ

Mines

Reveal safe tiles, dodge the bombs, cash out when your nerve breaks. Risk/reward at its finest.

๐ŸŽฒ

Dice

Pick your odds, roll under the number, double or nothing. The simplest game in the house.

๐Ÿ“ˆ

Crash

The multiplier climbs until it doesn't. Cash out before the crash โ€” greed is a strategy, until it isn't.

๐Ÿƒ

Blackjack

Beat the dealer to 21. Hit, stand, and count your sats when the house busts.

๐ŸŽฏ

Plinko

Drop the ball, watch it bounce, pray to the peg gods. Big drops mean big multipliers.

Three Steps To Winning

Faster than a bank transfer to the moon.

01

Create a House Account

No KYC, no email hoops. Your account lives in the casino โ€” anonymous by design.

02

โšก Top Up With Lightning

Scan the invoice with any Lightning wallet. Sats land in seconds, not days.

03

Play & Withdraw Instantly

Bet sats, stack sats, withdraw sats. Payouts hit your wallet the moment you cash out.

โšก Powered By The Lightning Network

Real Bitcoin, real fast. Deposits and withdrawals over Lightning โ€” the same network the whole sats economy runs on.

โšก Enter The Casino
""" ), "signalminer": dict( title="Signal Miner X โ€” Market Intelligence", ac="#00e676", ac2="#00e5ff", bg="#03050a", bg2="#071018", card="#0d1420", txt="#e4e8f4", mut="#7a8699", glow="rgba(0,230,118,.4)", glowsoft="rgba(0,230,118,.14)", border="rgba(0,230,118,.5)", band="rgba(0,229,255,.16)", typephrases=['๐Ÿ“ก 1,085+ Telegram channels monitored', '๐ŸŽ Gift cards before your competition', '๐Ÿ”‘ Software keys, wholesale prices', '๐Ÿค– API access for your bots'], slots=False, wave=True, nav=[('Features','#features'),('Coverage','#coverage'),('Pricing','#pricing')], navcta=('Launch App','/signup'), body="""
โ–Œ
LIVE ยท 1,085+ Telegram Marketplaces

Mine The Signal.
Trade The Noise.

Signal Miner X watches the Telegram marketplace underground in real time. Deals on gift cards, software keys, streaming accounts and hardware โ€” surfaced, credibility-scored, and searchable before your competition even opens the app.

0
Channels Monitored
0
Commerce Categories
0
Gift Card Listings
0
KYC Checks

Built For Deal Hunters

Everything you need to find the signal in the noise.

๐Ÿ”

Instant Search

Search every monitored channel for the exact deal you want. Results in seconds, not scrobbles.

๐ŸŽฏ

Credibility Scoring

Every seller and channel gets a trust score built from history, behavior and network signals.

๐Ÿค–

API Access

Wire Signal Miner into your own bots and alerting. Your API key, your pipeline.

๐Ÿ›’

776 Categories

Gift cards, software keys, accounts, hardware, services. If it's traded, it's tracked.

โšก

Real-Time Feeds

New listings land the moment they're posted. Speed is the entire game.

๐Ÿ”“

No KYC, Ever

Just an email for your key. Pay in Bitcoin. No forms, no ID, no nonsense.

The Underground, Mapped

1,085+ channels across 776 commerce categories โ€” and counting.

๐ŸŽ
0

Gift Cards

๐Ÿ”‘
0

Software Keys

๐Ÿ“บ
0

Accounts

๐Ÿ’ป
0

Hardware

๐Ÿ› ๏ธ
0

Services & Tools

Ridiculously Simple Pricing

No subscriptions. Pay with Bitcoin. Get intelligence.

๐Ÿ†“ Free Tier

$0
forever
  • Free starter searches
  • Full channel access
  • Credibility scoring
  • No expiration
Start Free
MOST POPULAR

๐Ÿš€ Researcher Tier

$1
= 5 searches ยท Bitcoin โšก
  • 5 marketplace searches
  • Full access to 1,085+ channels
  • Credibility scoring
  • API access for bots
  • No expiration ยท No KYC
Sign Up Free

The Next Deal Is Already Posted.

Get your free searches and see what the underground is selling today.

Claim Free Searches
""" ), "workbrain": dict( title="Certus WorkBrain", ac="#ffb300", ac2="#ff7043", bg="#0c0f14", bg2="#12161d", card="#161b23", txt="#eef1f5", mut="#8a94a3", glow="rgba(255,179,0,.4)", glowsoft="rgba(255,179,0,.13)", border="rgba(255,179,0,.5)", band="rgba(255,112,67,.14)", typephrases=['๐Ÿœ Pest knowledge, indexed', '๐Ÿง  AI answers with citations', '๐Ÿ“„ Every doc, instantly searchable', '๐Ÿ› Bug squashing on standby'], slots=False, wave=False, nav=[('Features','#features'),('Knowledge','#knowledge')], navcta=('Open WorkBrain','/app'), body="""
โ–Œ
CERTUS ยท KNOWLEDGE ENGINE

Your Second Brain
For Pest Control.

WorkBrain ingests your documents, chunks them into knowledge, and answers questions with citations. Chat, search, and squash bugs โ€” one brain for the whole operation.

0
/ 7 Availability
0
% Cited Answers
0
Knowledge Pillars
0
Bug Squasher

Everything In One Place

Stop digging through folders. Ask the brain.

๐Ÿ’ฌ

AI Chat

Ask anything about your operations. Answers come with citations straight from your documents.

๐Ÿ“„

Document Vault

Every ingested file, organized and retrievable. Drop it in, never lose it again.

๐Ÿงฉ

Knowledge Chunks

Documents broken into searchable knowledge chunks โ€” the raw material for every answer.

๐Ÿ›

Bug Squasher

Click the bugs before they escape. The only pest-control game built into a knowledge base.

Stop Searching. Start Knowing.

Your entire pest-control knowledge base, one click away.

๐Ÿœ Enter WorkBrain
""" ), } def build(name): p = PAGES[name] css = (ENGINE_CSS .replace("AC;--accent2:AC2", f"{p['ac']};--accent2:{p['ac2']}").replace("BG;--bg2:BG2", f"{p['bg']};--bg2:{p['bg2']}") .replace("CARD;--text:TXT", f"{p['card']};--text:{p['txt']}").replace("--muted:MUT", f"--muted:{p['mut']}") .replace("COLORGLOW_SOFT", p['glowsoft']).replace("COLORGLOW_BAND", p['band']) .replace("COLORGLOW", p['glow']).replace("ACBORDER", p['border'])) js = (ENGINE_JS .replace('accent:"AC"', f'accent:"{p["ac"]}"').replace('accent2:"AC2"', f'accent2:"{p["ac2"]}"') .replace('bg2:"BG2"', f'bg2:"{p["bg2"]}"').replace('glow:"COLORGLOW"', f'glow:"{p["glow"]}"') .replace("wave:WAVE", f"wave:{str(p['wave']).lower()}").replace("slots:SLOTS", f"slots:{str(p['slots']).lower()}") .replace("typephrases:TYPEPHRASES", "typephrases:" + repr(p['typephrases']))) nav_html = "".join(f'{l}' for l, u in p["nav"]) footer = (f'') html = f""" {p['title']} {css} {p['body']}
{p['navcta'][0]} โ†’
{footer} {js}""" path = os.path.join(OUT, f"{name}.html") with open(path, "w") as f: f.write(html) print(f"built {path} ({len(html)} bytes)") for name in PAGES: build(name) print("DONE")