The tech stack¶
Here's what actually powers TCS — not a marketing wish list, but the exact platforms, models, and APIs the site runs on today.
Hosting & infrastructure¶
-
Bluehost
Web hosting for thecanadian.space (WordPress). The foundation for the blog: easy WordPress installation and reliable uptime.
-
OVH Cloud
VPS host (VPS2 tier — 6 vCores, 12GB RAM, 100GB NVMe) running our n8n instance, Caddy reverse proxy, and internal image-prep service. Frankfurt data centre. Powers all automation 24/7 with predictable annual billing and full control.
-
GitHub
Code + image hosting. Header graphics, diagrams, and static assets live in a public repo. Keeps everything versioned and accessible.
-
Caddy
Modern reverse proxy and TLS terminator. Handles HTTPS, rate limiting, and routing for the n8n instance and internal services.
Workflow orchestration¶
-
n8n
The backbone of TCS. Open-source workflow engine that pulls data, drafts articles, posts to WordPress + Facebook + Instagram, and handles scheduling. Self-hosted on OVH Cloud.
-
Docker Compose
Containerizes n8n, Redis, and supporting services. Makes local dev and production identical — no "works on my machine" surprises.
-
Redis
In-memory data store for n8n's queue and job management. Keeps workflows responsive under load.
-
GitHub Actions
CI/CD for this wiki and other repos. Builds and deploys on push.
AI models¶
-
OpenRouter
Unified API for routing requests to the LLMs below. One interface, one billing line, easy to swap models when better ones show up.
-
Qwen 3.7 Plus
Our primary author — drafts every daily broadcast and weekly / monthly report. Cost-effective and produces clean, structured HTML that plays well with the downstream editor.
-
Claude Haiku 4.5 (Anthropic)
Author fallback that kicks in when Qwen errors or stalls mid-response. Also the model behind the workflow-assembly assistant Chris uses to build and debug n8n nodes.
-
OpenAI GPT-5-mini
Runs a fact-check + editor pass on every draft: verifies claims against the source articles, tightens SEO, and generates the patches the publisher applies before the post goes live.
-
xAI Grok
Writes the Facebook and Instagram excerpts that go out with each published post. Handles the shorter, punchier social copy.
Data sources¶
-
Real-time aerospace news aggregation. Pulls articles, blogs, and reports from across the industry — structured and curated.
-
Launch schedules, vehicle information, and agency data. Maintained by The Space Devs — a volunteer community. Powers our launch tracking.
-
The open-source Node.js library we wrap in a small VPS-side script to pull the latest posts from tracked official accounts (Rocket Lab, Blue Origin, CSA, NASA Administrator, and more) into daily tweet roundups. Cookie-authed via a burner X account, fully self-managed — no third-party API tier to graduate off of.
-
Open-source Python library for LLM-ready web scraping — a Playwright-backed headless browser with LLM-friendly markdown output. Every V3 blog workflow calls our
article_scraper.py(a wrapper around Crawl4AI, run over SSH on the VPS) to fetch article content, metadata, and images. Handles JS-heavy sites, anti-bot blocks, and per-domain extraction rules cleanly. -
Self-hosted Rust scraper with a Firecrawl-compatible REST API and automatic stealth-JavaScript injection (patches
navigator.webdriver, mocks the Chrome runtime, populates plugin arrays). Deployed on the OVH VPS alongside Chrome + LightPanda renderers. Handles cookie-wall Cloudflare and modern SPAs cleanly. Backs every one of our 5 blog workflows' Space Daily article scraping (via a shared sub-workflow) plus SpaceX + Starlink update-page listings. The honest ceiling: Cloudflare Turnstile and Vercel Security Checkpoint, which no free tool bypasses in 2026 (see the ScraperAPI card below). -
Managed scraping API with rotating residential proxies. Used by the Bright Blue Origin V3 workflow for
blueorigin.com/news— the site is fronted by Vercel Security Checkpoint, which no self-hosted tool bypasses reliably. Two nodes hitapi.scraperapi.com(one for the news-index listing, one for per-article scrapes). Kept deliberately; self-hosting isn't viable for this class of anti-bot. -
Wikipedia
Entity lookups, historical context, and fact verification. Always cited when we use it.
-
RSS feeds
SpaceQ and other aerospace outlets that publish an RSS feed. Simple, reliable, catches regional coverage other aggregators miss.
Home-brew tools¶
-
tcs-tools
Python package for article scraping, parsing, and deduplication. Lives in our GitHub org and handles data cleaning before it hits n8n.
-
tcs-scripts
Per-workflow Python helpers: cost calculation, metadata generation, fact-checker prompts, and more.
-
tcs-images
Image library for blog posts. Curated space photography, diagrams, and graphics — plus header graphics courtesy of Brian Carpenter and the Retired For Life YouTube channel.
How we handle sources¶
Every article on thecanadian.space links back to its original source. If we quote someone, we quote accurately. If we use data from an API, we credit it.
We don't republish entire articles — we summarize. Robo Chris reads the sources, n8n routes them to an LLM, and the LLM authors a summary that ties related stories together and adds a bit of context. You're always one click away from the original.
Ethical scraping practices¶
When we scrape, we do it right:
- Respect robots.txt — if a site says "don't scrape," we don't.
- Back off on 429s — rate limits exist for a reason. We respect them.
- Cache aggressively — once we've scraped something, we cache it. Reduces load on source servers and speeds up our processing.
- No PII — we never scrape or store personal information.
- Transparent user-agent — our scraper identifies itself clearly so site operators know what's pulling their content.
Our philosophy on data
We're not here to commoditize information or circumvent publishers' wishes. We're here to synthesize signal from noise, give credit where it's due, and help aerospace enthusiasts stay informed. That means playing by the rules.
Stack evolution
This list reflects our current setup. We've switched hosts, rotated LLMs, and added data sources over time. For notes on what changed and when, check the History.