{ "_doc": "Arising Media stack selector — agent reference. Choose the correct stack before starting any project.", "_updated": "2026-05-21", "stacks": { "static-html": { "name": "Static HTML", "reference_project": "lahrcarpetcleaning.com", "use_when": [ "Site has fewer than 50 pages", "Content changes infrequently (monthly or less)", "Client hosts on cPanel shared hosting with no server-side scripting", "No database required" ], "do_not_use_when": [ "Site has more than 50 pages", "Content must be updated across many pages simultaneously", "Lead capture forms require server-side validation", "Site has location pages, service pages, or any programmatic content" ], "files": ["Dockerfile", "nginx.conf", "docker-compose.yml", ".htaccess", ".cpanel.yml"], "sops": ["01-project-structure.md", "03-build-pipeline.md", "08-deployment-docker.md"] }, "php-router-sqlite": { "name": "PHP Router + SQLite", "reference_project": "arisingmedia.us", "use_when": [ "Site has 50+ pages of any type", "Multiple page classes share a common template (services, locations, blog)", "Header/footer/nav updates must propagate instantly across all pages", "Content is authored in a database or Airtable and pulled at render time", "Site will grow — new pages added without new HTML files" ], "do_not_use_when": [ "Client requires cPanel shared hosting with no PHP-FPM (rare)", "Site is a pure landing page (1-3 pages)" ], "architecture": { "router": "src/api/router.php", "templates": "src/api/templates/ — one .php file per page class", "components": "src/api/components/_sections.php, _header.php, _footer.php", "database": "src/api/data/pages.sqlite (all page content)", "tokens": "src/assets/css/tokens.css", "styles": "src/assets/css/main.css", "js": "src/assets/js/main.js" }, "page_classes": { "service": "service.php — detailed service pages with value_prop, use_case_carousel, roi_band, lead_magnet, tiers", "location": "location.php — city + service combination pages, map embed, local content", "challenge": "challenge.php — problem definition + our approach + CTA", "static": "static.php — about, contact, hub pages, case studies", "blog": "blog.php — blog posts with author, date, related posts", "category": "category.php — service hub pages" }, "sops": ["15-php-router-sqlite-standard.md"], "design_reference": "arisingmedia.us/.planning/WEBSITE_BUILD_STANDARD.md", "architecture_diagram": "arisingmedia.us/.planning/RENDER_ARCHITECTURE.html", "approved_mockup": "arisingmedia.us/.planning/template-gallery-2026-05-20/mockup.html" }, "php-app": { "name": "PHP App Stack", "reference_project": "quickconvert.us", "use_when": [ "File uploads and server-side processing required", "At-rest encryption of user data", "Payment processing (Stripe subscriptions)", "User authentication" ], "sops": ["14-php-app-stack.md"] } }, "design_system": { "fonts": ["Plus Jakarta Sans (display)", "Inter (body)"], "approved_colors": { "cobalt_deep": "#021a6a", "cobalt": "#042fac", "cobalt_light": "#5d78c9", "navy": "#172034", "footer": "#0f1626", "slate": "#1c2c44", "graphite": "#222f42", "blue": "#1e6bd6", "facet": "#6b82b2", "stone": "#eef1f6", "white": "#ffffff" }, "rejected_colors": { "teal": "never use — not brand", "mist": "#f8f9fb — eliminated from band rhythm 2026-05-21", "angled_edges": "clip-path diagonals rejected — tech brands use flat horizontal lines" }, "band_rhythm": ["graphite", "light", "slate", "stone"], "statement_type": "clamp(40px, 6.5vw, 96px)", "section_padding_desktop": "120px", "credibility_pattern": "proof numbers in dark grid band (IBM/Nvidia) — NOT generic icon logos" }, "section_types": { "available": ["text", "split", "pain", "process", "spotlight", "benefits", "faqs", "grid", "comparison", "testimonials", "stats", "cta", "pin_story", "tiers", "value_prop", "use_case_carousel", "roi_band", "lead_magnet"], "v4_schema_columns": ["hero_value_proposition", "lead_magnet_json", "use_case_carousel_json", "roi_proof_json", "service_variant_strategy_json"], "deprecated": ["grid — replaced by use_case_carousel when cases are populated", "mist band — eliminated from rhythm"] }, "databases": { "sqlite": { "role": "Primary rendering database — exact slug lookups, structured content", "suitable_up_to": "Millions of rows — 10,000 pages is tiny (5MB)", "query_time": "< 1ms for slug lookup", "file": "src/api/data/pages.sqlite" }, "chromadb": { "role": "Future semantic layer — related content, site search, content generation grounding", "not_suitable_for": "Primary rendering — no exact-match primary key lookup", "status": "Planned — future phase after all content is in SQLite" } }, "deployment": { "container": "am-web (Docker)", "local_port": 8001, "db_path_in_container": "/var/www/data/pages.sqlite", "assets_path": "/var/www/html/assets/", "hot_copy_db": "docker cp src/api/data/pages.sqlite am-web:/var/www/data/pages.sqlite && docker exec am-web sh -c 'rm -f /var/www/data/pages.sqlite-shm /var/www/data/pages.sqlite-wal && chown www-data:www-data /var/www/data/pages.sqlite'", "hot_copy_assets": "docker cp src/assets/css/main.css am-web:/var/www/html/assets/css/main.css" } }