{% extends "base.html" %} {% set active_page = "projects" %} {% block title %}{{ project.title[:40] }}{% endblock %} {% block content %}
← All Projects

{{ project.title }}

{{ project.bid_status.value | replace('_', ' ') | title }} Direct Client {% if project.project_type and project.project_type != 'software' %} {{ project.project_type | replace('_', ' ') | title }} {% elif project.project_type == 'software' %} Software {% endif %} {% if project.ref_number %} BS-{{ '%03d' % project.ref_number }} {% endif %} {% if project.github_repo_url %} GitHub → {% endif %}
{% if project.client_name %}
{{ project.client_name }}
{% endif %} {% if project.client_email %}
{{ project.client_email }}
{% endif %} {% if project.customer and project.customer.company %}
{{ project.customer.company }}
{% endif %}
{% set latest_session = dev_sessions[0] if dev_sessions else None %} {% set all_dev_confirmed = features and features | selectattr('dev_confirmed') | list | length == features | length %} {% set any_qa_confirmed = features and features | selectattr('qa_confirmed') | list | length > 0 %} {% set has_approved_plans = smoke_test_plans and smoke_test_plans | selectattr('approved') | list | length > 0 %} {% set has_docker = project.docker_image_url %} {# Determine current step index (0-based) #} {% set ns = namespace(step=0) %} {% if latest_session %} {% if latest_session.status.value == 'planning' or latest_session.status.value == 'plan_pending_review' %} {% set ns.step = 1 %} {% elif latest_session.status.value == 'running' or latest_session.status.value == 'paused_waiting_human' %} {% set ns.step = 2 %} {% elif latest_session.status.value == 'completed' or latest_session.status.value == 'failed' %} {% if all_dev_confirmed %} {% set ns.step = 3 %} {% else %} {% set ns.step = 2 %} {% endif %} {% else %} {% set ns.step = 1 %} {% endif %} {% endif %} {% if deployment_plan %} {% if deployment_plan.status.value == 'draft' or deployment_plan.status.value == 'pending_review' or deployment_plan.status.value == 'rejected' %} {% set ns.step = 4 %} {% elif deployment_plan.status.value == 'approved' or deployment_plan.status.value == 'provisioning' %} {% set ns.step = 5 %} {% elif deployment_plan.status.value == 'provisioned_stopped' %} {% set ns.step = 6 %} {% elif deployment_plan.status.value == 'test_approved' or deployment_plan.status.value == 'running' or deployment_plan.status.value == 'testing' %} {% set ns.step = 7 %} {% elif deployment_plan.status.value == 'test_complete' or deployment_plan.status.value == 'completed' %} {% set ns.step = 8 %} {% endif %} {% endif %} {% if has_docker and ns.step < 9 %} {% set ns.step = 9 %} {% endif %} {% if project.bid_status.value == 'completed' %} {% set ns.step = 10 %} {% endif %}

Workflow

Pricing

{% if project.bid_amount %}
${{ "%.2f" | format(project.bid_amount) }} $99.99
Promotional Offer
{% else %}
$99.99
Promotional Offer
{% endif %}

Timeline

{% if delivery_plan_data and delivery_plan_data is mapping and delivery_plan_data.get('total_days') %}
{{ delivery_plan_data.total_days }} days 48 Hours
{% elif project.bid_amount %}
48 Hours
{% else %}
48 Hours
{% endif %}
Promotional Delivery

Delivery Plan

{% if delivery_plan_data and delivery_plan_data is mapping %} {% if delivery_plan_data.get('phases') %}
{% for phase in delivery_plan_data.phases %}
Phase {{ loop.index }}: {{ phase.name if phase is mapping and phase.get('name') else phase }} {% if phase is mapping and phase.get('duration') %} {{ phase.duration }} {% endif %}
{% if phase is mapping and phase.get('deliverables') %}
    {% for d in phase.deliverables %}
  • {{ d }}
  • {% endfor %}
{% elif phase is mapping and phase.get('description') %}
{{ phase.description }}
{% endif %}
{% endfor %}
{% elif delivery_plan_data.get('description') %}
{% else %}
{{ delivery_plan_data | tojson(indent=2) }}
{% endif %} {% elif project.delivery_plan %}
{% else %}
No delivery plan generated yet
{% endif %}
{% set latest_session = dev_sessions[0] if dev_sessions else None %} {% if latest_session and latest_session.dev_plan %}

Development Plan {% if latest_session.dev_plan_approved %} Approved {% elif latest_session.status.value == 'plan_pending_review' %} Needs Review {% elif latest_session.status.value == 'planning' %} Generating... {% endif %}

{% if latest_session.status.value == 'plan_pending_review' and not latest_session.dev_plan_approved %}
Dev agent will follow this plan exactly once approved
{% else %}
{{ latest_session.dev_plan }}
{% endif %}
{% elif latest_session and latest_session.status.value == 'planning' %}

Development Plan

Dev Agent is generating a plan...
The plan will appear here for your review before coding begins
{% endif %} {% if latest_session %}

Project Plan

{% if latest_session.status.value in ('queued', 'plan_pending_review') %} Pending Review {% elif latest_session.dev_plan_approved %} Approved {% elif latest_session.status.value == 'running' %} In Progress {% endif %}
{% if latest_session.dev_plan %}
{{ latest_session.dev_plan | replace('\n', '
') | safe }}
{% else %}

Waiting for development plan to be generated...

{% endif %} {% if latest_session and not latest_session.dev_plan_approved and latest_session.status.value in ('queued', 'plan_pending_review') %}
{% endif %}
{% endif %}

Feature Tracking

{% if features %}
{% for f in features %} {% endfor %}
Feature Dev QA Client
{{ f.name }}
{% if f.description %}
{{ f.description }}
{% endif %}
{% if f.dev_confirmed %} {% endif %}
{% if f.qa_confirmed %} {% endif %}
{% if f.client_confirmed %} {% endif %}
Pending
Dev Confirmed
QA Confirmed
Client Confirmed
{% else %}
No features tracked yet
Features will appear here once the dev agent starts working
{% endif %}

Deployment Plan {% if deployment_plan %} {{ deployment_plan.status.value | replace('_', ' ') | title }} {% endif %}

{% if deployment_plan %} {% if deployment_plan.code_review_summary %}
PM Code Review Summary
{{ deployment_plan.code_review_summary }}
{% endif %} {% if deployment_plan.status.value == 'pending_review' %}
{% elif deployment_plan.strategy %}
Deployment Strategy
{{ deployment_plan.edited_strategy or deployment_plan.strategy }}
{% if deployment_plan.vm_instance_name %}
VM
{{ deployment_plan.vm_instance_name }}
Status
{{ deployment_plan.vm_status or 'unknown' | title }}
{% if deployment_plan.test_url %}
Test URL
{% if deployment_plan.vm_status == 'running' %} {{ deployment_plan.test_url }} → {% else %} {{ deployment_plan.test_url }} (VM stopped) {% endif %}
{% endif %}
{% endif %} {% if deployment_plan.status.value == 'provisioning' %}
Provisioning test environment...
DevOps agent is creating VM, deploying code, and setting up dependencies
{% elif deployment_plan.status.value == 'provisioned_stopped' %}
Test environment provisioned & stopped
VM is ready with code deployed. Approve test plans above, then click Start Testing to bring the environment online.
{% elif deployment_plan.status.value == 'test_approved' %}
Starting test environment...
DevOps agent is bringing the VM online
{% elif deployment_plan.status.value == 'testing' %}
Test environment is live
Smoke test agent is running approved test plans
{% elif deployment_plan.status.value == 'test_complete' %}
Testing complete
Review test results above
{% endif %} {% if deployment_plan.reviewer_notes %}
{{ deployment_plan.reviewer_notes }}
{% endif %} {% else %}
Waiting for DevOps Agent
PM agent has submitted a code review — DevOps agent is generating a deployment plan
{% endif %} {% else %}
No deployment plan yet
A deployment plan will be generated after all features are dev-confirmed and the PM agent reviews the code
{% endif %}

Test Plans

{% if smoke_test_plans %}
{% for plan in smoke_test_plans %}
{{ plan.name }} {{ plan.plan_type or 'smoke' }}
{% if plan.approved %} Approved {% else %} Pending Review {% endif %}
{% if plan.base_url %}
Target: {{ plan.base_url }}
{% endif %}
{% for step in (plan.steps or []) %}
{{ loop.index }}. {{ step.action }} {{ step.description or step.get('value', '') }} {% if step.selector %} {{ step.selector[:40] }} {% endif %}
{% endfor %}
{% if not plan.approved %}
Smoke test agent will only run approved plans
{% else %} {% set latest_result = plan.results[-1] if plan.results else None %} {% if latest_result %}
{{ 'PASSED' if latest_result.passed else 'FAILED' }} {{ latest_result.passed_steps }}/{{ latest_result.total_steps }} steps {% if latest_result.duration_ms %} {{ latest_result.duration_ms }}ms {% endif %} {{ latest_result.run_at.strftime('%Y-%m-%d %H:%M') if latest_result.run_at else '' }}
{% endif %} {% endif %}
{% endfor %}
{% else %}
No test plans yet
Smoke test agent will generate plans after all features are dev-confirmed
{% endif %}

QA Reports

{% if qa_questions %}

Questions

{% for q in qa_questions %}
{{ q.priority }} {{ q.status }}
{{ q.question }}
{% if q.context %}
Context: {{ q.context[:200] }}
{% endif %} {% if q.answer %}
{{ q.answer }}
{% elif q.status == 'pending' %}
{% endif %}
{% endfor %}
{% endif %} {% if qa_bug_reports %}

Bug Reports

{% for bug in qa_bug_reports %} {% endfor %}
ID Title Severity Status Assigned
{{ bug.bug_id }} {{ bug.title[:60] }}{% if bug.title|length > 60 %}...{% endif %} {{ bug.severity }} {{ bug.status | replace('_', ' ') }} {{ bug.assigned_to or '—' }}
{% endif %} {% if not qa_questions and not qa_bug_reports %}
No QA reports yet
QA agent will submit questions and bug reports during testing
{% endif %}

Tasks

{% if tasks %}
{% for t in tasks %}
{% if t.status == 'completed' %}
{% elif t.status == 'in_progress' %}
{% else %}
{% endif %}
{{ t.title }}
{% if t.description %}
{{ t.description }}
{% endif %}
{% if t.blocking and t.status != 'completed' %} Blocking {% endif %} {{ t.assigned_to | title }} {% if t.status != 'completed' %}
{% endif %}
{% endfor %}
{% else %}
No tasks yet
{% endif %}
Add Task

Agent Activity

{% if total_dev_input_tokens or total_dev_output_tokens %} {{ "{:,}".format(total_dev_input_tokens + total_dev_output_tokens) }} {% else %}0{% endif %}
Dev Tokens
{{ dev_sessions | length }}
Dev Sessions
{{ time_entries | length }}
Milestones Hit
{{ project.completion_pct or 0 }}%
Completion
{% if token_usage %}

Token Cost by Agent

{% for row in token_usage %} {% endfor %}
Agent Input Tokens Output Tokens Cost ($)
{{ row.agent_name | replace('_', ' ') | title }} {{ "{:,}".format(row.input_tokens) }} {{ "{:,}".format(row.output_tokens) }} ${{ "%.4f" | format(row.cost) }}
Total {{ "{:,}".format(token_usage | sum(attribute='input_tokens')) }} {{ "{:,}".format(token_usage | sum(attribute='output_tokens')) }} ${{ "%.4f" | format(total_token_cost) }}
{% endif %} {% if dev_sessions %}

Development Sessions

{% for session in dev_sessions[:3] %}
{{ session.status.value | replace('_', ' ') | title }} {{ session.iteration_count or 0 }} iterations
{% if session.input_tokens or session.output_tokens %} {{ "{:,}".format((session.input_tokens or 0) + (session.output_tokens or 0)) }} tokens {% endif %} {% if session.started_at %}· {{ session.started_at | timeago }}{% endif %}
{% endfor %}
{% endif %}

Development Logs

Live
{% for log in dev_logs %}
{{ log.created_at.strftime('%H:%M:%S') }} [{{ log.log_type.value }}] {{ log.content[:500] }}
{% endfor %} {% if not dev_logs %}
No logs yet — logs appear when a dev session starts
{% endif %}
{% if dev_logs %}
Logs cleared after review
{% endif %}

Agent Chat

Loading conversation...

Docker Build

{% if project.docker_image_url %}
Image {{ project.docker_image_url }}
{% if project.docker_exposed_port %}
Port {{ project.docker_exposed_port }}
{% endif %} {% if project.docker_build_commit_sha %}
Commit {{ project.docker_build_commit_sha[:8] }}
{% endif %}
Status {% if project.docker_build_commit_sha %} Built {% else %} Building {% endif %}
{% if project.docker_image_url and 'docker.io' in project.docker_image_url or 'hub.docker' in (project.docker_image_url or '') %} View on Docker Hub → {% endif %}
{% if project.docker_build_log %}
Build Log
{{ project.docker_build_log }}
{% endif %} {% else %}
No Docker image yet
The release agent will create a Docker image after development completes
{% endif %}
{% if release_checklist %}

Release Checklist

{% if release_checklist.version %} v{{ release_checklist.version }} {% endif %} {{ release_checklist.status | replace('_', ' ') | title }}
{% set phase_labels = {"pre_release": "Pre-Release", "test_environment": "Test Environment", "preview_environment": "Preview Environment", "post_release": "Post-Release"} %} {% for phase_key, phase_label in phase_labels.items() %} {% if phase_key in release_checklist.checklist %} {% set items = release_checklist.checklist[phase_key] %} {% set checked_count = items.values() | selectattr('checked') | list | length %} {% set total_count = items | length %}

{{ phase_label }}

{{ checked_count }}/{{ total_count }}
{% for item_id, item in items.items() %}
{% if item.checked %} {% else %}
{% endif %} {{ item_id | replace('_', ' ') | title }} {% if item.detail %} {{ item.detail[:80] }} {% endif %}
{% endfor %}
{% endif %} {% endfor %}
{% endif %}

Documents

NDA Skipped
Not required for this project
SOW {% if project.bid_status.value in ['awarded', 'scope_approved', 'completed'] %} Accepted {% elif project.delivery_plan %} Pending {% else %} Not Generated {% endif %}
{% if project.delivery_plan %}Scope & pricing approved{% else %}Pending delivery plan{% endif %}
Attachments {{ project.attachments | length if project.attachments else 0 }} files
{% if project.attachments %}
{% for att in project.attachments %}
{{ att.filename if att is mapping else att }}
{% endfor %}
{% else %}
No files attached
{% endif %}
{% if launchpad_url or project.docker_image_url %}

Launchpad

{% if launchpad_url %}
View in Launchpad Client-facing demo page
{% else %}
Not deployed to Launchpad yet
The project will be available on Launchpad after Docker build completes
{% endif %}
{% endif %} {% if project.description %}
Project Description
{{ project.description }}
{% endif %} {% if qa_pairs %}

Questionnaire & Client Answers

{% for qa in qa_pairs %}
{{ qa.num }}. {{ qa.question }}
{% if qa.answer %}
{{ qa.answer }}
{% else %}
No answer provided
{% endif %}
{% endfor %}
{% endif %} {% if decisions %}

Decisions

{% for d in decisions %}
{{ d.status.value | title }} {{ d.notified_at | timeago }}
{{ d.question }}
{% if d.status.value == 'pending' %}
{% elif d.answer %}
Answer: {{ d.answer }}
{% endif %}
{% endfor %}
{% endif %} {% if time_entries %}

Milestone Timeline

{% for entry in time_entries %}
{{ entry.milestone.value | replace('_', ' ') | title }} {{ entry.created_at.strftime('%Y-%m-%d %H:%M') }}
{% if entry.notes %}
{{ entry.notes }}
{% endif %} {% if entry.triggered_by %}
by {{ entry.triggered_by }}
{% endif %}
{% endfor %}
{% endif %} {% endblock %}