Trial Signup Form — Design

Status: Draft Date: 2026-05-13 Scope: Website v3 (DE + EN)

Goal

Replace the current behavior where "Trial starten" / "Start trial" buttons link straight to app.getorcha.com with a lightweight qualification step. Visitors land on a dedicated trial-request page, submit their details, and Max receives a notification email and sets up the demo manually.

Motivation

Non-goals

Page structure

Two new pages, mirroring the existing v3 i18n layout:

Each page reuses v3 chrome (chrome.js / chrome.de.js inject nav + footer) and the standard v3 stylesheet. Top-to-bottom contents:

  1. Hero strip — short headline + one-sentence subhead.
  2. Form card — the only interactive element on the page.
  3. "What happens next" — three short steps (you submit → we set up → we email login). Sets expectations so people don't expect instant access.
  4. Footer (via chrome).

CTA routing

All existing "Trial starten" / "Start trial" CTAs change from https://app.getorcha.com/ to the trial page, language-aware:

Form fields

All required unless noted:

Field Type Notes
Name text First + last in one field
Firmen-E-Mail / Work email email HTML5 type="email" validation; no free-mail block on first cut
Unternehmen / Company text
Was möchten Sie testen? / What do you want to try? textarea, optional 1–2 line hint helps Max prep the demo
Sprache / Language hidden Auto-filled (de or en); used in email subject + sheet column

Validation

Anti-spam

Single honeypot field, no CAPTCHA:

<input name="website" tabindex="-1" autocomplete="off" style="position:absolute;left:-9999px">

Bots fill it; humans don't. Server-side: if data.website is non-empty, return {result: 'success'} to the client (so the bot thinks it worked) but skip the sheet append and email notification.

Backend (Google Apps Script extension)

Extend the existing Apps Script and Sheet documented in FORM_SETUP.md. The same doPost handler gets a new formType: 'trial' branch.

New sheet tab

Trial Requests with headers:

Timestamp | Name | Email | Company | Notes | Language | User-Agent | Referrer

Apps Script logic

} else if (formType === 'trial') {
  // Honeypot — bot detected, fake success
  if (data.website && data.website.length > 0) {
    return ContentService.createTextOutput(
      JSON.stringify({ result: 'success' })
    ).setMimeType(ContentService.MimeType.JSON);
  }

  var sheet = ss.getSheetByName('Trial Requests');
  sheet.appendRow([
    new Date().toISOString(),
    data.name,
    data.email,
    data.company,
    data.notes || '',
    data.language,
    data.userAgent || '',
    data.referrer || ''
  ]);

  MailApp.sendEmail({
    to: 'max@getorcha.com',
    subject: '🚀 Trial-Anfrage: ' + data.company + ' (' + data.language + ')',
    body: [
      'Neue Trial-Anfrage:',
      '',
      'Name: ' + data.name,
      'Email: ' + data.email,
      'Firma: ' + data.company,
      'Sprache: ' + data.language,
      '',
      'Was möchten sie testen:',
      data.notes || '(keine Angabe)',
      '',
      'Antworten: mailto:' + data.email
    ].join('\n')
  });
}

Notification email subject stays German for both DE and EN submissions — Max reads them, consistency wins over translation.

Response contract

Consistent with existing community forms:

Quota note

Apps Script MailApp has a daily quota (~100 recipients/day for free Google accounts). At expected trial volume this is a non-issue.

Submit flow (client)

Vanilla JS, no framework. New file www/v3/js/trial-form.js, loaded only on the trial pages with defer.

  1. Form submit handler intercepts (preventDefault).

  2. Submit button text swaps to "Senden…" / "Sending…", disabled.

  3. POST to the existing Apps Script deployment URL:

    fetch(SCRIPT_URL, {
      method: 'POST',
      // Apps Script web apps reject application/json cross-origin —
      // use text/plain; the script parses e.postData.contents as JSON.
      headers: { 'Content-Type': 'text/plain;charset=utf-8' },
      body: JSON.stringify({
        formType: 'trial',
        name, email, company, notes,
        language,            // from hidden field
        website,             // honeypot
        userAgent: navigator.userAgent,
        referrer: document.referrer
      })
    })
    
  4. On {result: 'success'}: swap the entire form card for a success card in-place. No redirect, no reload.

  5. On error or network failure: re-enable submit button, show inline error message below the form:

Success card content

DE:

✓ Danke, {Vorname}!

Wir haben Ihre Anfrage erhalten. Unser Team meldet sich innert 24 Stunden mit den Zugangsdaten für Ihre Testumgebung.

Bei Fragen: max@getorcha.com

EN:

✓ Thanks, {firstname}!

We've received your request. Our team will get back to you within 24 hours with the login details for your test environment.

Questions: max@getorcha.com

First-name extraction: name.split(' ')[0]. No edge-case handling.

Files touched

New:

Modified:

Out of scope (deferred)

Revisit if conversion data after launch suggests friction.

Open questions

None at design time. Implementation should:

  1. Audit any inline page-level CTAs (outside the chrome) that currently link to app.getorcha.com for trial signup — they should also route to the new trial page.
  2. Confirm the exact Apps Script deployment URL is the same one community forms use (single deployment, single secret).