railway-edge
tcp/443 tcp/80
Open service 66.33.22.240:443 · dev-api.passage.software
2026-01-09 11:27
HTTP/1.1 200 OK
Accept-Ranges: bytes
Access-Control-Allow-Origin: *
Cache-Control: public, max-age=0
Content-Length: 6656
Content-Type: text/html; charset=utf-8
Date: Fri, 09 Jan 2026 11:27:06 GMT
Etag: W/"1a00-19b9caed470"
Last-Modified: Thu, 08 Jan 2026 08:17:42 GMT
Server: railway-edge
X-Powered-By: Express
X-Railway-Edge: railway/us-east4-eqdc4a
X-Railway-Request-Id: 1VumCvwiRXOWPymFAax-fw
Connection: close
Page title: SuperSpell
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SuperSpell</title>
<link rel="stylesheet" href="viz_style.css">
</head>
<body>
<div class="header">
<h1>SuperSpell</h1>
<div id="statusBox">Ready</div>
</div>
<div>
<label>
<input type="checkbox" id="promptSelect" />
Advanced Editing
</label>
<label for="model">Model:</label>
<select name="model" id="model">
<option value="gpt-5.2">gpt-5.2</option>
<option value="gpt-5.1">gpt-5.1</option>
<option value="gpt-5-mini">gpt-5-mini</option>
<option value="gpt-5-nano">gpt-5-nano</option>
<option value="gpt-4.1-mini" selected>gpt-4.1-mini</option>
<option value="gpt-4.1">gpt-4.1</option>
</select>
</div>
<div class="main-content">
<!-- Input box -->
<div class="text-box">
<h2>Input</h2>
<div id="inputContainer" class="text-container" contenteditable="true">
</div>
</div>
<!-- Button row -->
<div class="button-row">
<button id="sendButton">Send</button>
<button id="pasteButton">Paste & Send</button>
<button id="copyButton">Copy Diff</button>
</div>
<!-- Diff box -->
<div class="text-box">
<h2>Diff<span id="usage"></span></h2>
<div id="diffContainer" class="text-container" contenteditable="true">
</div>
</div>
</div>
<script>
const statusBox = document.getElementById('statusBox');
const inputDiv = document.getElementById('inputContainer');
const sendButton = document.getElementById('sendButton');
const pasteButton = document.getElementById('pasteButton');
const copyButton = document.getElementById('copyButton');
const diffContainer = document.getElementById('diffContainer');
const usageDisp = document.getElementById('usage');
function setStatus(msg) {
statusBox.innerText = msg;
}
setStatus("Ctrl+V to Paste")
const checkbox = document.getElementById('promptSelect')
const STORAGE_KEY = 'selectedPrompt';
// on load, restore the last choice
document.addEventListener('DOMContentLoaded', () => {
const saved = localStorage.getItem(STORAGE_KEY);
if (saved === 'promptB') {
checkbox.checked = true;
}
});
// whenever it changes, save the corresponding prompt string
checkbox.addEventListener('change', () => {
const promptName = checkbox.checked ? 'promptB' : 'promptA';
localStorage.setItem(STORAGE_KEY, promptName);
});
// function to send content of inputDiv to server
async function sendInput() {
setStatus('Text Sent');
setStatus('Sending...');
const input = inputDiv.innerText;
// fall back to promptA if nothing saved yet
const promptSelect = localStorage.getItem(STORAGE_KEY) || 'promptA';
//grabs the checkbox state: true/false
const useAltPrompt = document.getElementById('promptSelect').checked
// model select
const modelSelectElm = document.getElementById('model')
const modelSelect = modelSelectElm.value
console.log(modelSelect)
try {
const res = await fetch('/api/chat', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({input, promptSelect, modelSelect})
});
console.log(res)
if (res.status === 413) {
setStatus('Text too long!');
return;
}
const {reply, diffHtml, error, fullReply} = await res.json(
Open service 66.33.22.240:80 · dev-api.passage.software
2026-01-09 11:27
HTTP/1.1 301 Moved Permanently Content-Type: text/html; charset=utf-8 Location: https://dev-api.passage.software/ Server: railway-edge X-Railway-Edge: railway/europe-west4-drams3a X-Railway-Request-Id: HNW5cLJbSG6Y7KPpss7a6g Date: Fri, 09 Jan 2026 11:27:14 GMT Content-Length: 68 Connection: close <a href="https://dev-api.passage.software/">Moved Permanently</a>.