IDENTITY

title: "TICKET_045: 15-Minute Wizard + Landing Page on Odoo Website"
type: ticket
subtype: execution
purpose: "Build the client-facing wizard form and landing page on Odoo Website that calls the BEP/EIR Generation Engine."
status: done
priority: P0
sprint: S001_base_and_mvp1
assignee: "Claude Code (Sonnet 4.6)"
estimated_hours: 6
depends_on: [TICKET_044]
blocks: [TICKET_039_stripe, TICKET_040_cde_provisioning]
last_updated: "2026-03-17"

TICKET_045: 15-Minute Wizard + Landing Page (Odoo Website)

Objective

Build and deploy on Odoo Website:

  1. Marketing landing page at struxio.ai/services — hero, problem, solution, pricing, CTA
  2. Multi-step wizard form at struxio.ai/services/comply — 5 steps matching MVP Blueprint §4.3
  3. Free trial flow: wizard → call /api/v1/preview → display watermarked BEP preview
  4. Paid flow placeholder: wizard → tier selection → (Stripe in future ticket) → full generation

This is the customer-facing front door. The BEP/EIR engine (TICKET_044) is live at 89.167.96.154:8010 — this ticket connects users to it.

Context

Constraints

Architecture

User visits struxio.ai/services (Odoo Website)
    │
    ├── Reads landing page → clicks "Try It Free"
    │
    ▼
struxio.ai/services/comply (Odoo Website — 5-step wizard)
    │
    ├── Step 1: Organization Profile
    ├── Step 2: Project Details
    ├── Step 3: Stakeholder Matrix
    ├── Step 4: Information Requirements
    ├── Step 5: Delivery Timeline
    │
    ▼ POST wizard data as JSON
Odoo Controller → HTTP call to 89.167.96.154:8010/api/v1/preview
    │
    ▼
Display watermarked BEP/EIR preview in browser
    │
    ├── "Download Full Report" → (Stripe paywall — future ticket)
    └── "Book a Demo" → CRM lead creation in Odoo

Execution Plan

Task 0: Prerequisites — Merge 044 PRs + Fixes (10 min)

Before starting, complete these from TICKET_044 open items:

  1. Merge all 3 TICKET_044 PRs to main (STRUXIO_Logic, STRUXIO_App, STRUXIO_OS)
  2. Verify all builds pass
  3. Fix ccusage PATH: add source ~/.nvm/nvm.sh to ~/.zshrc so npx is always available
  4. Test: npx ccusage@latest daily --compact works from any new terminal

Task 1: Odoo Website Module Structure (30 min)

Create a new Odoo module for the website pages. This is separate from struxio_iso19650 (which is data/config). This module handles the website UI.

Module: STRUXIO_App/odoo_erp/struxio_website/

struxio_website/
├── __init__.py
├── __manifest__.py         # depends: website, website_sale, struxio_iso19650
├── controllers/
│   ├── __init__.py
│   └── main.py             # Routes: /services, /services/comply, /services/comply/submit
├── static/
│   └── src/
│       ├── css/
│       │   └── struxio_theme.css    # Brand colors, typography, wizard styling
│       └── js/
│           └── wizard.js            # Multi-step form logic (vanilla JS or jQuery)
├── views/
│   ├── landing_page.xml     # QWeb: /services marketing page
│   ├── wizard_form.xml      # QWeb: /services/comply 5-step wizard
│   ├── preview_result.xml   # QWeb: BEP/EIR preview display page
│   └── templates.xml        # Asset bundle registration
├── data/
│   └── website_pages.xml    # Register pages in Odoo Website menu
└── tests/
    └── test_controllers.py  # HTTP test for each route

Task 2: Landing Page (60 min)

Build views/landing_page.xml as a QWeb template:

Sections:

  1. Hero: "Win your next tender. ISO 19650 compliance in 15 minutes, not 15 weeks."
    • Sub: "Our AI generates your BEP/EIR package, provisions your CDE, and lets you view your BIM models."
    • CTA button: "Try It Free" → /services/comply
  2. Problem: "Your competitors have BIM Managers. You have a deadline."
    • Stats: $130-170K BIM Manager salary, $5-150K consultancy costs, weeks of manual work
  3. Solution: Three-step visual: Wizard → AI Generation → CDE + IFC Viewer
  4. Pricing: Three-tier cards (Starter $1,500/$250, Professional $3,000/$500, Enterprise $6,000/$1,000)
    • Professional highlighted as "Recommended"
  5. Trust: Odoo Enterprise, ISO 19650 Parts 1-6, "Powered by AI" badges
  6. CTA footer: "Try It Free — Generate Your BEP Preview Now"

Styling: Use STRUXIO brand colors. Dark mode preferred (matches the Odoo.sh dark theme users already see).

Task 3: Multi-Step Wizard Form (90 min)

Build views/wizard_form.xml + static/src/js/wizard.js:

5 Steps matching MVP Blueprint §4.3:

Step 1: Organization Profile

Step 2: Project Details

Step 3: Stakeholder Matrix

Step 4: Information Requirements

Step 5: Delivery Timeline

Form behavior:

Task 4: Controller + Engine Integration (60 min)

Build controllers/main.py:

@http.route('/services', type='http', auth='public', website=True)
def landing_page(self):
    return request.render('struxio_website.landing_page')

@http.route('/services/comply', type='http', auth='public', website=True)
def wizard(self):
    return request.render('struxio_website.wizard_form')

@http.route('/services/comply/submit', type='json', auth='public', methods=['POST'])
def wizard_submit(self, **kwargs):
    # 1. Validate wizard data
    # 2. Call BEP/EIR engine: POST http://89.167.96.154:8010/api/v1/preview
    # 3. Create CRM lead in Odoo (lead capture even for free trials)
    # 4. Return preview data for rendering
    
@http.route('/services/comply/preview', type='http', auth='public', website=True)
def preview(self, generation_id=None):
    # Render the watermarked BEP/EIR preview
    return request.render('struxio_website.preview_result', {...})

Engine URL configuration: Store the engine URL in ir.config_parameter:

<record id="iso_engine_url" model="ir.config_parameter">
    <field name="key">struxio.iso_engine_url</field>
    <field name="value">http://89.167.96.154:8010</field>
</record>

This way the URL is configurable without code changes.

Task 5: Preview Result Page (30 min)

Build views/preview_result.xml:

Task 6: Tests + Push + Build (30 min)

  1. Write tests/test_controllers.py — HTTP tests for each route
  2. Git commit on feature branch, push to Odoo.sh
  3. Monitor build — must be GREEN with Test: Success
  4. Verify pages render at the Odoo.sh dev URL

Acceptance Criteria

Verification Commands

# V1: Landing page renders
curl -s -o /dev/null -w "%{http_code}" https://struxio-platform-main-29729723.dev.odoo.com/services
# Expected: 200

# V2: Wizard renders
curl -s -o /dev/null -w "%{http_code}" https://struxio-platform-main-29729723.dev.odoo.com/services/comply
# Expected: 200

# V3: Build status
# Use /verify-build skill

# V4: CRM lead created after submission
odoo-bin shell -c "print('LEADS:', env['crm.lead'].search_count([('name','like','%ISO 19650%')]))"
# Expected: >= 1 after test submission

Rollback

Remove struxio_website from depends, git revert, push. Landing page disappears, core module unaffected.

Affected Files (New)


STRUXIO.ai // Confidential & Proprietary // © 2026