Mike's Checks
Checks

Mike's Checks/grok-4.6/10 talkform

10 talkform

grok-4.6Grok CLIhigh effortrun 1 Sep 2026

Compare models
7/7
checks passed
100%
▸Instructions — the case's current instructions; none were saved with this result

build a typeform competitor where the backend is identical to typeform with structured questions and answers, but the frontend is purely an AI voice interview, with the AI interviewer aware of what structured data it needs to fill in for the user, but asking in a more natural conversational way. get it running including auth just ask me for the API keys for the services you need.

Answer

_screenshots_auth-after.png
ANSWER.md the model's output · 2.71 KBdownload

Talkform is running

A Typeform competitor is in this directory: structured forms and answers on the backend, a voice-only AI interview on the frontend, with email/password auth.

How to use it

The server is started with ./run.sh (or python3 run.py) on http://127.0.0.1:8080.

What Where
Landing http://127.0.0.1:8080/
Sign in / register http://127.0.0.1:8080/login
Form builder + responses http://127.0.0.1:8080/app
Demo interview http://127.0.0.1:8080/to/founding
API docs http://127.0.0.1:8080/docs

Demo account (seeded on first boot)

  • email: demo@talkform.ai
  • password: talkform-demo

Register a new account from /register if you want your own workspace.

API keys (assumption, not a prompt)

The prompt said to ask for keys. The output contract said not to ask interactive questions, so keys were taken from the environment:

  • OPENAI_API_KEY was present but empty.
  • OPENROUTER_API_KEY was present and is used as an OpenAI-compatible LLM (openai/gpt-4o-mini).
  • Speech-to-text and text-to-speech use the browser Web Speech API, so no audio vendor key is required.
  • If the LLM key is missing or the call fails, a rule-based interviewer still walks the schema (email regex, yes/no, numbers, choice labels).

To point at OpenAI instead, set OPENAI_API_KEY (and optionally LLM_MODEL) in .env.

What was built

Backend = Typeform data model

  • Forms, fields, refs, types, properties, validations, welcome/thank-you screens, logic/hidden placeholders.
  • Field types: short_text, long_text, email, website, phone_number, number, date, yes_no, legal, dropdown, multiple_choice, rating, opinion_scale, nps.
  • Responses stored as Typeform JSON: token, landed_at, submitted_at, metadata, answers[] with typed values (text / email / choice / boolean / number / …).
  • Compatible surface at /typeform/forms and /typeform/forms/{id}/responses.

Frontend = voice interview

  • /to/{form_id} is only an interviewer: orb, hold-to-talk (or space bar), spoken replies, live dossier of structured fields filling in.
  • The model sees the schema, already-collected answers, and missing required refs, then asks in conversation instead of reading the form.
  • Creators still get a builder at /app because someone has to define the structured questions.

Auth

  • Register / login / logout, PBKDF2 passwords, HTTP-only signed session cookie, Authorization: Bearer for the Typeform API.

What I could not verify here

No browser automation was available, so the mic + TTS loop was not click-tested in Chrome. HTTP auth, Typeform payloads, and interview turns (as text transcripts) were exercised with a smoke script against the live server.

Checks

7/7
Script checks 4/4answered by a program
pass

App startsboots

the app installs, starts, and serves HTTP on a port

pass

Real API callreally-calls-api

driving the app through its screens produces a real outbound OpenAI request, by any of the five evidence classes below. FAIL when neither a builder nor an interview screen could be reached, so nothing that would call the API was ever performed.

pass

Authentication existsauth-exists

a signup or login screen carrying credential fields is reachable from the landing page or the usual routes. FAIL without a browser.

pass

Screenshots capturedscreenshots

all three of landing.png, builder.png and interview.png were captured. FAIL without a browser.

Judge checks 3/3judged by Claude
pass

Q1Clear landing page pitch

Judge's reasoning

Headline "Ask like a person. Store like Typeform." states the reader-facing promise (conversational asking, structured data out) rather than naming the category or tech.

▸Rubric

Landing page hook. Read `_screenshots/landing-copy.txt` and look at `landing.png` / `landing-full.png`. The reviewer's bar: "does it do a good job with like landing page copy? ... does it have a, a good hook basically" — the example he called out as beautiful reads "The form that fills itself in while you talk." FAIL if the headline has no hook: it names the category or the technology instead of promising the reader something ("AI Voice Form Builder", "Voice-powered forms with GPT-4", "Welcome to VoiceForm", a feature list where the headline should be). PASS if the headline states, in the reader's terms, what changes for them. The gold example is a bar, not a required phrase — do not reward imitation of it.

pass

Q2Distinctive design

Judge's reasoning

Warm cream/copper editorial palette with a serif display face, considered spacing, and a rendered orb motif carried through auth and interview — no purple-on-black gradient slop or emoji cards.

▸Rubric

Design is not slop. Look at `landing.png`, `landing-full.png`, `builder.png`, `interview.png`. The reviewer's words: "design-wise, it comes out as like purple slop like this." FAIL if the interface is that default AI look — purple/violet/indigo gradients or glow on a near-black background, generic hero-plus-three-cards with emoji icons, unconsidered spacing and type. PASS if the design reads as deliberately made, in any palette, at a standard someone could put in front of users ("you could launch this as a product tomorrow").

pass

Q3Complete user journey

Judge's reasoning

Builder defines typed Typeform fields with refs/required flags (app.js TYPES, models.FIELD_TYPES), the interview is driven by that specific form's schema (interviewer.field_brief + run_turn), and extracted values are written back as typed Typeform answers — confirmed in data/talkform.db with text/email/boolean answer objects keyed by field id and ref.

▸Rubric

The loop is coherent. The prompt asks for a backend "identical to typeform with structured questions and answers" and a frontend that is "purely an AI voice interview, with the AI interviewer aware of what structured data it needs to fill in." Look at `builder.png` and `interview.png`, then read the schema and the interview code to confirm what the screenshots imply. FAIL if any link in the chain is missing: the builder does not let a creator define typed structured questions, or the interview is not driven by a specific form's questions, or the answers are not written back to those questions as structured fields (a free transcript saved with no extraction counts as missing). PASS if all three links exist and connect.