Project Detail

Test App

A single project, organized into five groups: Overview, Brief, Deploy, Runtime, Advanced.

Host Jobs
Projects / test-app
Brief
Scaffold
3
Deploy
Live

Handle the most important workflow for this project

running static-nginx
Current focus
What matters most right now
Public host needs attention
Internal runtime may be OK, but the public entry is not stable yet.
Primary action
The primary action to take now
Check Runtime
Target host
Public URL to validate
Latest workflow jobs
Recent brief / deploy / rebuild / restart / codex jobs
Overview
Test App
test-app
running static-nginx
id=1 container=bb-app-test-app
demo
Suggested next: Fix public entry
Public host probe looks unhealthy. Check the Runtime public-host validation, then decide whether to redeploy / sync routes.
Host preview
Use this URL for real smoke testing
Path preview
Compatibility fallback
Wizard status
Brief → Deploy → Runtime
brief ready runtime on

Clarify intent first, then deploy

latest brief job #6
Codex not connected
Go to Settings and confirm /root/.codex is mounted correctly.
Extra context (optional)
You can paste URLs. Enabling web search pulls competitor / intro pages as extra context.
Search provider
auto tries external providers first, then falls back to DuckDuckGo.

Current spec summary

generated_at=2026-03-05T10:35:34+00:00
difficulty=S cpu=2 vCPU (burstable OK) ram=2GB disk=30GB
Why high demand
A Dockerized, Traefik-proxied template app on a single VPS is a common baseline for validating providers, demoing deployments, and spinning up new projects quickly with predictable ops.
MVP scope
  • One responsive web UI with a single protected admin route
  • REST API with CRUD for one model + pagination
  • PostgreSQL persistence with migrations
  • Session-based auth for admin user (single role)
  • Basic logs and metrics endpoint; simple error reporting
Core features
  • Public landing page for Test App (demo)
  • Health/status endpoints and basic uptime page
  • Simple CRUD demo entity (e.g., Notes) with validation
  • Admin login + protected admin page
  • Deployment-ready Docker Compose stack behind Traefik
Possible risks
  • Under-provisioned VPS leading to OOM/restarts during builds or peak traffic
  • Misconfigured Traefik routing/TLS causing downtime or redirect loops
  • Database backups not tested or not automated
  • Secrets leakage via env files, logs, or Git history
  • Single-server blast radius: no HA; upgrades can cause outages
Suggested tech stack
PartChoice
frontendReact + Vite (served by Nginx container) or simple server-side templates if preferred
backendNode.js (Express) with TypeScript
dbPostgreSQL 16
authCookie-based sessions (express-session) + bcrypt; single admin user in DB
storageLocal volume for uploads (optional) with clear size limits; consider S3-compatible later
queueNone for MVP; use in-process cron for simple jobs (backups handled outside app)
observabilityDocker logs (json-file) + Traefik access logs + optional Prometheus node exporter
Infra notes
  • Single VPS with Docker Engine + Docker Compose; pin image versions and use restart: unless-stopped
  • Traefik as edge router with ACME TLS; only expose 80/443; keep DB internal network-only
  • Use .env for secrets on server only; never commit; rotate admin password and session secret
  • Persistent volumes: postgres data, app uploads (if any), Traefik acme.json; set correct permissions
  • Backups: schedule via host cron or lightweight backup container; verify restores monthly
  • Resource limits: set memory limits per container to prevent host OOM; enable swap only if necessary
  • Security: automatic OS updates, firewall (ufw), disable password SSH, fail2ban optional
Step-by-step plan
  1. Define domains/subdomains and DNS records (app, api, traefik/dashboard if needed)
  2. Create repo structure: /frontend /backend /infra with docker-compose.yml and Traefik dynamic config
  3. Implement backend service: CRUD, migrations, health endpoints, admin auth
  4. Implement frontend: landing + admin login + CRUD UI (minimal styling)
  5. Wire Traefik routes/middlewares: HTTPS via ACME, gzip, security headers, rate limit (basic)
  6. Add observability: structured logs, basic metrics, error capture; confirm container log rotation
  7. Add backup job: nightly pg_dump to local + optional offsite (S3-compatible) and restore test
  8. CI/CD: build and deploy via SSH (or GitHub Actions) pulling repo and running compose up -d
  9. Load test lightly (wrk/k6) and tune: DB connections, request limits, container resources
  10. Document runbook: deploy, rollback, backups, restore, renew certs, rotate secrets
Questions
  • Do you need a custom domain and HTTPS, or is provider IP access sufficient for the demo?
  • Should this be a pure API + static frontend, or server-rendered pages to reduce complexity?
  • Is persistence required for the demo, or can the CRUD be ephemeral/in-memory?
  • Do you need multi-user auth or only a single admin account?
  • Any requirement to support file uploads or background jobs in the MVP?

Create a real deploy job (not just a static preview)

host=test-app.beast-builder.marklo.de

This creates a job: Scaffold → docker build → docker run → health check → validate → sync routes, then attaches the app to https://test-app.beast-builder.marklo.de/.

Template
static-nginx is the fastest preview. fastapi-api/nextjs-webapp builds a real app.
Scaffold options
By default we protect existing folders to avoid overwriting files you’ve already changed.
(Optional) Generate a brief before deploy (PM/Tech)
Codex not connected
Cannot generate a brief inside the deploy job. Fix it in Settings, or skip this step for now.
Brief extra context (optional)
Brief search provider
View in Jobs

Check health first, then decide restart / rebuild

static-nginx port=80
Container
Current runtime instance
bb-app-test-app
Status
Current project status
running
Last validate check template=static-nginx 2026-03-07T15:35:51+00:00
Last public host validate ok status=200 attempts=1 2026-03-07T15:35:51+00:00
Current public host probe check status=502 2026-06-16T18:56:21+00:00
https://test-app.beast-builder.marklo.de/: status=502
Current internal probe check 2026-06-16T18:56:20+00:00
ConnectError: [Errno -3] Temporary failure in name resolution
Validate probes (1)
OKStatusmsURLError
check None 15 http://bb-app-test-app:80/ ConnectError: [Errno 111] Connection refused
Public host probes (1)
OKStatusmsURLError
ok 200 32 https://test-app.beast-builder.marklo.de/
deploy #7 restart #9

Heavy tools and low-frequency actions

Projects
Controls
Import ZIP (workspace upload)
Upload a .zip from your local machine (e.g. Windows), extract it into /projects/test-app, and continue with Deploy / Codex without using scp. The importer also writes .breast-builder/manifest.json so the Deploy scaffold step can safely “skip” without overwriting your files.
ZIP file (drag & drop)
Drag & drop a ZIP here
or click to select a file
No file selected
Limits: upload ≤ 125829120 bytes, files ≤ 20000, uncompressed ≤ 1073741824 bytes. Avoid bundling node_modules, .venv, build artifacts, or huge logs.
Template hint (used for manifest + health checks)
If you uploaded your own Dockerfile, pick the template that matches the internal port: fastapi-api=8000, nextjs-webapp=3000.
Inspect Files
Latest zip import job: #11
done
[2026-03-11T04:09:15+00:00] ZIP uploaded for project=test-app bytes=623 saved_path=/data/zip-imports/test-app/20260311_040915_c4fd910835.zip
[2026-03-11T04:09:15+00:00] Step 1/2: import_zip (started_at=2026-03-11T04:09:15+00:00)
[2026-03-11T04:09:15+00:00] Workspace cleared: moved_entries=1 backup_dir=/projects/test-app/.codex/import-backups/20260311_040915_job11
[2026-03-11T04:09:15+00:00] Extracting zip into workspace: zip=/data/zip-imports/test-app/20260311_040915_c4fd910835.zip dest=/projects/test-app template=static-nginx replace=True
[2026-03-11T04:09:15+00:00] ZIP extracted: files=3 bytes=338 skipped=0 stripped_prefix=myapp/ manifest=/projects/test-app/.breast-builder/manifest.json
[2026-03-11T04:09:15+00:00] Deleted uploaded zip: /data/zip-imports/test-app/20260311_040915_c4fd910835.zip
[2026-03-11T04:09:15+00:00] Step 2/2: git_init (started_at=2026-03-11T04:09:15+00:00)
[2026-03-11T04:09:15+00:00] Command: cd /projects/test-app && set -euo pipefail; if [ -d .git ]; then echo 'git repo already exists'; exit 0; fi; git init; git add -A; git -c user.name='Beast Builder' -c user.email='builder@local' commit -m 'init' || echo 'nothing to commit'; git status --porcelain || true
[2026-03-11T04:09:15+00:00] STDOUT:
Initialized empty Git repository in /projects/test-app/.git/
[master (root-commit) 8e8b1c6] init
 5 files changed, 46 insertions(+)
 create mode 100644 .breast-builder/manifest.json
 create mode 100644 .codex/import-backups/20260311_040915_job11/public/index.html
 create mode 100644 Dockerfile
 create mode 100644 README.md
 create mode 100644 public/index.html

[2026-03-11T04:09:15+00:00] STDERR:
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint: 
hint: 	git config --global init.defaultBranch <name>
hint: 
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint: 
hint: 	git branch -m <name>

[2026-03-11T04:09:15+00:00] Job done
Suggested next steps after import
1) Go to Deploy and create a deploy job (docker build/run).
2) Use Codex Console to fix bugs / add features.
3) Validate on https://test-app.beast-builder.marklo.de/.
Spec JSON (editable)
This spec is used in job approvals as the “Brief” summary. Generate it with the LLM first, then refine it here.
spec_json
Leave empty and Save to clear the spec. Must be a JSON object (dict).
Codex Console
Runs codex exec inside the breast-builder-codex container. Workspace: /projects/test-app.
CLI commands (optional)
docker exec -it breast-builder-codex bash
cd /projects/test-app
git status --porcelain
codex exec --cd /projects/test-app --skip-git-repo-check --color never --dangerously-bypass-approvals-and-sandbox \"...\"
Prompt
Latest codex job: #2
awaiting_approval
[2026-03-05T08:53:48+00:00] Codex job created for project=test-app
[2026-03-06T08:22:17+00:00] Edited step 1/2 action=codex_exec fields=user_prompt,include_logs
Recent Jobs
ID Kind Status Created
11 zip-import done 2026-03-11T04:09:15+00:00 View →
9 restart done 2026-03-07T15:35:36+00:00 View →
8 restart done 2026-03-07T15:34:46+00:00 View →
7 deploy-template awaiting_approval 2026-03-06T08:24:36+00:00 View →
6 generate-brief done 2026-03-05T10:35:11+00:00 View →
5 generate-brief done 2026-03-05T10:08:52+00:00 View →
4 generate-brief done 2026-03-05T10:04:21+00:00 View →
3 generate-brief done 2026-03-05T09:49:48+00:00 View →
2 codex-exec awaiting_approval 2026-03-05T08:53:48+00:00 View →
1 build-static-preview done 2026-03-05T08:09:32+00:00 View →
Container Logs

(No logs available yet — container may not be running or may not exist.)