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 hosting and workflow backups, plus the image archive older posts still link to. 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, Caddy, and the supporting services. Makes local dev and production identical — no "works on my machine" surprises.
-
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 for the daily broadcast and the weekly reports, and the fallback for the monthly deep dives. Cost-effective and produces clean, structured HTML that plays well with the downstream editor.
-
Claude Haiku 4.5 (Anthropic)
Primary author for the four monthly deep dives, and the fallback for the daily and weekly posts when Qwen errors or stalls mid-response. Claude Sonnet 5.5 is the fact checker's backup. Also the model behind the workflow-assembly assistant Chris uses to build and debug n8n nodes.
-
OpenAI GPT-6 and GPT-5-mini
GPT-6 Sol is the fact checker for the Daily Broadcast: it checks every claim against the source articles and fixes or removes what they don't support. GPT-6 Luna supplies new wording when an SEO fix needs it. GPT-5-mini is the editor for the other blogs until they move to the new pipeline: it reviews each draft and tightens the headline, excerpt and SEO.
-
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 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
Our original image library: curated space photography, diagrams, and graphics that older posts still link to. New images (post headers, Rocket Lab photos, Instagram cards) are served from our own server at assets.thecanadian.space. 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.