ops0ops0

Project Editor

The IDE-like workspace for building infrastructure with AI assistance. Three resizable panels: Chat, Code Editor, and File Explorer.

Editor Panels

Chat

Describe infrastructure in plain English. AI writes code with reasoning.

Code Editor

Monaco editor with HCL syntax highlighting, auto-complete, and code folding.

File Explorer

File tree with color-coded icons. Right-click for actions.

Toolbar Actions

ButtonDescription
ValidateCheck Terraform syntax
GitHubPush, sync, or create PR
DeployRun plan and apply
OutputsView output values
CostMonthly cost estimate
SettingsAWS integration & backend

AI Chat

Create Terraform code by describing what you need in plain English.

Example Prompts

Create Resources

"Create an RDS PostgreSQL instance with db.t3.medium, Multi-AZ, and automated backups"

Modify Existing

"Add a lifecycle policy to delete S3 objects after 90 days"

Explain Code

"What does the security group in main.tf do?"

Fix Errors

"I am getting InvalidParameterValue on the EC2 instance"

Example Conversation

You: Create an EKS cluster with 3 t3.medium nodes in us-east-1

AI: I'll create an EKS cluster with a managed node group. Here's what I'm setting up:

  • VPC with public/private subnets (EKS requires specific networking)
  • EKS cluster with Kubernetes 1.28
  • Managed node group with 3 t3.medium instances
  • IAM roles for cluster and nodes
  • Security groups for cluster communication
module "eks" {
  source          = "terraform-aws-modules/eks/aws"
  version         = "~> 19.0"

  cluster_name    = "production-eks"
  cluster_version = "1.28"

  vpc_id          = module.vpc.vpc_id
  subnet_ids      = module.vpc.private_subnets

  eks_managed_node_groups = {
    default = {
      min_size       = 3
      max_size       = 5
      desired_size   = 3
      instance_types = ["t3.medium"]
    }
  }
}

You: Add cluster autoscaler

AI: I'll add the Cluster Autoscaler to automatically adjust node count based on demand...

Tips for Better Results

Prompting Tips
  • Be specific - Include instance sizes, regions, naming conventions
  • Reference existing code - "Add a security group to the EC2 in main.tf"
  • Ask follow-ups - "Now add CloudWatch alarms for that RDS"
  • Include constraints - Compliance requirements, budget limits

Code Editor

Monaco-based editor (same as VS Code) with full Terraform support.

Features

Syntax Highlighting

HCL, JSON, YAML, Markdown support.

Auto-Complete

Intelligent completion for resource types, attributes, and functions.

minimize-2

Code Folding

Collapse resource blocks to focus on what matters.

Auto-Save

Automatically saves your work after 2s of inactivity.

Keyboard Shortcuts

ActionWindows/LinuxMac
SaveCtrl + SCmd + S
FindCtrl + FCmd + F
ReplaceCtrl + HCmd + H
CommentCtrl + /Cmd + /
Go to lineCtrl + GCmd + G
Delete lineCtrl + Shift + KCmd + Shift + K
Duplicate lineCtrl + Shift + DCmd + Shift + D

Error Indicators

IndicatorMeaning
Red underlineSyntax error
Yellow underlineWarning
Red dot in marginError on this line

File Explorer

Manage your Terraform files with a tree view.

File Tree Example

EXPLORER
├── main.tf
├── variables.tf
├── outputs.tf
├── terraform.tfvars
└── modules/
    └── vpc.tf

File Actions

ActionHow
Create fileClick + in header
Create folderClick folder icon in header
RenameRight-click → Rename
DeleteRight-click → Delete
Copy pathRight-click → Copy Path

File Indicators

IndicatorMeaning
Bold textCurrently open file
Purple dotUnsaved changes

Example: Building an S3 Static Website

Create Files

In the file explorer, create:

  • main.tf
  • variables.tf
  • outputs.tf

Ask AI

Create an S3 bucket configured for static website hosting with:
- Bucket name from variable
- index.html as default document
- error.html for 404s
- Public read access via bucket policy
- CloudFront distribution for HTTPS

Produced Code

main.tf

resource "aws_s3_bucket" "website" {
  bucket = var.bucket_name
}

resource "aws_s3_bucket_website_configuration" "website" {
  bucket = aws_s3_bucket.website.id

  index_document {
    suffix = "index.html"
  }

  error_document {
    key = "error.html"
  }
}

resource "aws_s3_bucket_public_access_block" "website" {
  bucket = aws_s3_bucket.website.id

  block_public_acls       = false
  block_public_policy     = false
  ignore_public_acls      = false
  restrict_public_buckets = false
}

resource "aws_s3_bucket_policy" "website" {
  bucket = aws_s3_bucket.website.id

  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Sid       = "PublicReadGetObject"
        Effect    = "Allow"
        Principal = "*"
        Action    = "s3:GetObject"
        Resource  = "${aws_s3_bucket.website.arn}/*"
      }
    ]
  })
}

resource "aws_cloudfront_distribution" "website" {
  enabled             = true
  default_root_object = "index.html"

  origin {
    domain_name = aws_s3_bucket_website_configuration.website.website_endpoint
    origin_id   = "S3-Website"

    custom_origin_config {
      http_port              = 80
      https_port             = 443
      origin_protocol_policy = "http-only"
      origin_ssl_protocols   = ["TLSv1.2"]
    }
  }

  default_cache_behavior {
    allowed_methods        = ["GET", "HEAD"]
    cached_methods         = ["GET", "HEAD"]
    target_origin_id       = "S3-Website"
    viewer_protocol_policy = "redirect-to-https"

    forwarded_values {
      query_string = false
      cookies {
        forward = "none"
      }
    }
  }

  restrictions {
    geo_restriction {
      restriction_type = "none"
    }
  }

  viewer_certificate {
    cloudfront_default_certificate = true
  }
}

variables.tf

variable "bucket_name" {
  description = "Name of the S3 bucket for website hosting"
  type        = string
}

outputs.tf

output "website_url" {
  description = "S3 website URL"
  value       = aws_s3_bucket_website_configuration.website.website_endpoint
}

output "cloudfront_url" {
  description = "CloudFront distribution URL (HTTPS)"
  value       = "https://${aws_cloudfront_distribution.website.domain_name}"
}

Validate and Deploy

  1. Click Validate to check syntax
  2. Click GitHub to push code
  3. Click Deploy → Enter bucket_name value → Apply

Status Indicators

IndicatorMeaning
Purple dot on fileUnsaved changes
Orange dot on GitHubUnpushed changes
Green checkmarkValidation passed
Cost badgeMonthly estimate