AIDA Labs · Library

AIDA Labs: site map, server layout and scripts

AIDA Labs · Library · Reference · Canonical v2, locked 4 October 2026

Server and data

  • AIDA Labs Quebec (OVH VPS, nginx 1.28 on Ubuntu) serves every site. Run by OVHcloud's Canadian company, Hébergement OVH Inc., Beauharnois QC.
  • DNS and HTTPS: Cloudflare, all records proxied, Flexible SSL (sites listen on port 80). Removing Cloudflare (Let's Encrypt + WireGuard) is a later step.
  • Caching: every asset link carries ?v=<content hash>; pages send Cache-Control: no-cache.
  • Deploy access: Mike runs saved zsh scripts on AIDA Labs Toronto with the deploy key. AI never reaches the servers, Docker, databases or crontab.

Sites

AddressServer foldernginx fileSource on MacPaletteNotes
aidalabs.ca, wwwroot-portalaidalabs-productionaidalabs.ca/Paris duskHome: section menu, See it working (4 panels), Proudly Canadian, guardrails, founder; /about, /how-we-build, /aida-portal (section menu, Live job data), /blueprint
consulting.aidalabs.caconsultingaidalabsconsulting.aidalabs.ca/Paris duskConsulting and Professional Services, 9-section menu, 21 detail pop-ups
products.aidalabs.caproductsaidalabsproducts.aidalabs.ca/Paris duskCard deck, 6 products, fits one screen
projects.aidalabs.caprojectsaidalabsprojects.aidalabs.ca/Paris dawnProject Plans and Blueprints: the Sample Bank plan on the page
hub.aidalabs.cahubaidalabshub.aidalabs.ca/Paris morningSample Bank Intelligence Hub, live (product db), no notice screen
blueprint.aidalabs.cablueprintaidalabsblueprint.aidalabs.ca/Paris nightSample Bank Project Blueprint, live
portal.aidalabs.caportalaidalabsportal.aidalabs.ca/Paris morningSample Bank portal + installable app (café icon)
database.aidalabs.cadatabaseaidalabsdatabase.aidalabs.ca/Paris morningDatabase Analytics and Insights (product db)
jobs-data.aidalabs.cajobs-dataaidalabsjobs-data.aidalabs.ca/Paris duskLive, read-only job-market data
jobs.aidalabs.cajobsaidalabsjobs.aidalabs.ca/ (nginx block); kit in aida-website-handoff/aida-mobile-kit/AIDA Job SearchCopy of aida-job-search.ca + AIDA mobile kit + 3D trading cards; pictures as cached files (2026-10-11); script 45
recruiters.aidalabs.carecruitersaidalabsrecruiters.aidalabs.ca/ (nginx block)Recruiter ServicesCopy of recruiter.aida-job-search.ca + sign-in pages; pictures as cached files (2026-10-11); script 45
toolbox.aidalabs.catoolboxaidalabstoolbox.aidalabs.ca/Paris duskCanonical components. No password (Mike, 11 October 2026): kept obscure instead, not indexed and not linked
library.aidalabs.calibraryaidalabslibrary.aidalabs.ca/Paris duskThese documents. No password (Mike, 11 October 2026; script 47): kept obscure instead, not indexed and not linked

Every AIDA Labs product subdomain (not the Sample Bank ones) has the AIDA LABS menu top left in its own palette, and the same five buttons top right, 124 × 40 px: Portal · Projects · Hub · Get the app (café icon) · AIDA LABS. Main-header pages have breadcrumbs.

nginx files

FileCovers
aidalabsconsulting, products, projects, hub, blueprint, portal, database, jobs-data, jobs, recruiters, toolbox, library (a folder on the Mac)

Rule (2026-10-10): never upload a whole nginx file. Deploys swap one server block with scripts/server/nginx_swap_block.py, show the diff, run nginx -t and restore the old file on failure. (A stale whole-file upload briefly dropped several sites that day.)

Later: move the remaining Sample Bank blocks into the client-sites nginx file, aidalabs.ca into aidalabs, add a 00-default block.

Folders on AIDA Labs Toronto (a folder on the Mac)

Scripts (a folder on the Mac, copy on Quebec in a server file)

ScriptWhat it doesChanges
01–14Sources, first deploys, library/toolbox (08), Sample Bank hub and blueprint set-up, 14_update_blueprintssee v1
18_fetch_intelligenceAttempted download (no network on Mac shell)No
21_create_product_dbProduct database + API (Sample Bank)Toronto Docker
22_describe_job_dbStructure of the job database (no rows)No
23_deploy_product_siteshub, blueprint, portal, database + nginx aidalabsQuebec
24_deploy_main_and_consultingaidalabs.ca, consulting, products, projects, jobs-dataQuebec
25_check_aidalabs_liveRead-only live check of aidalabs.caNo
26_screenshot_portalsHeadless Chrome screenshots of the portalsNo
27_jobs_data_apijobs_api functions + aidalabs_jobs_api containerToronto db + Docker
28_check_live_dataRead-only check of every live-data pathNo
32_lock_canonical_v2Library deploy check, scripts copied to Quebec, canonical v2 snapshots on both machinesBoth
33_fix_api_name_clashJobs service renamed so only the Sample Bank service answers to "api"; 30-request testToronto Docker
35_rock_solidSafety net on Quebec (last good API answer kept 60 days, served if Toronto fails), watchdog on Toronto (launchd, every minute), restart-always, warm-up, 20-request test. Safe to re-runBoth
36_repair_nginxRepairs/normalises the safety-net lines and storage definition; tests, reloads, checks every site. Safe to re-runQuebec nginx
38_check_aidalabs_nginxRead-only: which nginx file answers each address; live file vs Mac copyNo
39_check_toolbox_library_liveRead-only: toolbox and library blocks, password files, webrootsNo
41_update_recruiter_originalrecruiter.aida-job-search.ca: portal fix, phone/tablet layer, sign-in on the subdomain (2026-10-10)Quebec
42_cleanup_stale_nginxCopies every live nginx file to nginx/; deleted stale backups and uploads (2026-10-10)Quebec
43_check_recruiter_liveRead-only: recruiter site files, sign-in pages, portal scriptNo
45_publish_aidalabs_sites (replaced 37, 40 and 44, deleted 2026-10-11)One step: recruiter (publish_recruiters.sh), jobs, recruiters (copies via server/build_site_copy.py), library (rebuild + publish). Each changed site backed up (two newest kept); unchanged sites left alone; only the two copy nginx blocks, only if they differ. Name sites to do fewer. Safe to re-runQuebec
49_publish_projects_pageprojects.aidalabs.ca only: "See it in the Project Blueprint" opens blueprint.aidalabs.ca, not the Sample Bank copy (2026-10-11)Quebec
50_publish_videosExplainer videos on aidalabs.ca, products.aidalabs.ca (Watch links + player window), aida-job-search.ca, recruiter.aida-job-search.ca; uploads videos/ folders; checks each live page is the expected version first; then script 45 (jobs, recruiters) (2026-10-11)Quebec
51_publish_home_video_topSuperseded by 52 before it ran -- do not run—
52_publish_menu_and_video_topVideo first on aidalabs.ca, aida-job-search.ca, recruiter.aida-job-search.ca; "Products" first in the AIDA LABS menu on every page whose live copy matches the Mac (manifest in backups/); then script 45 (jobs, recruiters, library). Skips, never overwrites, a page that differs (2026-10-11)Quebec
53_menu_order_on_liveSame menu reorder done on the server, on the live hub, blueprint, portal and toolbox pages (they were newer than the Mac copies) (2026-10-11)Quebec
54_publish_menu_page_videosExplainer video on the pages the menu opens (portal, projects, blueprint, hub, /aida-portal, /about, consulting), added on the server to each live page with menu_videos.py; all or nothing (2026-10-11)Quebec
55_check_hub_videoRead-only: which folder serves hub.aidalabs.ca and whether its page has the videoNo
56_publish_hub_video_tophub.aidalabs.ca: video first, like the other pages (replaced the 54 button) (2026-10-11)Quebec
menu_order.pyAIDA LABS menu: Products, then Company, then Client work. Used by build_from_consulting.py on every page it writes (not Sample Bank) and by 52/53 on built or live pages—
menu_videos.pyThe explainer video blocks for the menu pages (one rule per page, anchor + block). Used by build_from_consulting.py (write) and by 54/56 on the live pages; the build stops if a menu page ends up without its video—
server/build_site_copy.pyBuilds one copy: pictures to /aida-media (content-named, cached a year), kit on chosen pages, proof that every change undoes to the live file byte for byte—
server/nginx_swap_block.pyReplaces exactly one server block in an nginx file (used by 37, 40, 41 and publish_toolbox)—
build_from_consulting.pyBuilds every site (Mac only); product_names.py swaps client namesNo

AIDA portal sites (2026-10-11): after changing the kit, the recruiter generator, the job-seeker site or the docs, run a folder on the Mac (or name only recruiter, jobs, recruiters, library).

Explainer videos (2026-10-11): six captioned videos, no voice, in a folder on the Mac (sources, posters, template/ to make more). Site copies: shared/videos/ (built into aidalabs.ca/videos and products.aidalabs.ca/videos; every other AIDA Labs page plays them from products.aidalabs.ca), aida-website-handoff/videos/ (aida-job-search.ca/videos) and recruiters-site/videos/ (recruiter.aida-job-search.ca/videos). Where they show: first thing on aidalabs.ca, aida-job-search.ca, recruiter.aida-job-search.ca and every page the AIDA LABS menu opens (portal, projects, blueprint, hub, /aida-portal, /about, consulting); "Watch" links on products.aidalabs.ca. No video for database.aidalabs.ca (Mike's call). To replace a video: render it, copy the .mp4 and -poster.jpg into those folders, rebuild, publish.

AIDA LABS menu order (2026-10-11): Products, then Company, then Client work, on every AIDA Labs page (scripts/menu_order.py). Sample Bank sites unchanged.

Normal update: edit → python3 scripts/build_from_consulting.py (run inside 17/23/24) → preview → run 17 (Sample Bank), 23 (products), 24 (main sites).

Brand and standards

Palettes, components and rules: AIDA Labs canonical design and AIDA Labs build standards (v2).

‹ Back to the library