Mike's Checks
Checks

Mike's Checks/deepseek-v4-flash/10 talkform

10 talkform

deepseek-v4-flashCodex CLIhigh effortrun 4 Sep 2026930,169 tokens

Compare models
0/7
checks passed
0%
▸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

README.md the model's output · 4.86 KBdownload

TalkForm — AI Voice Interview Platform

A Typeform competitor where forms are built with structured questions but collected via an AI voice interview. The AI interviewer understands the schema and conducts a natural, conversational interview.

Architecture

┌─────────────────┐     ┌─────────────────┐
│   Frontend      │     │   Backend       │
│   React + Vite  │────▶│   Express +     │
│   Port 5173     │     │   SQLite        │
│                 │     │   Port 3001     │
└─────────────────┘     └─────────────────┘
                                │
                        ┌───────┴───────┐
                        │   OpenAI API   │
                        │  (AI Voice)   │
                        └───────────────┘

Project Structure

workspace/
├── backend/
│   ├── src/
│   │   ├── db.js              # SQLite database setup
│   │   ├── index.js           # Express server entry
│   │   └── routes/
│   │       ├── auth.js        # Registration, login, JWT
│   │       ├── forms.js       # CRUD for forms & questions
│   │       ├── responses.js   # Response collection
│   │       └── interview.js   # AI interview chat & extraction
│   ├── .env                   # Config (PORT, JWT_SECRET, OPENAI_API_KEY)
│   └── package.json
├── frontend/
│   ├── src/
│   │   ├── App.jsx            # Router setup
│   │   ├── index.css          # All styles
│   │   ├── main.jsx           # React entry
│   │   └── pages/
│   │       ├── Login.jsx      # Auth sign-in
│   │       ├── Register.jsx   # Auth register
│   │       ├── Dashboard.jsx  # List & create forms
│   │       ├── FormBuilder.jsx# Build structured forms
│   │       ├── Interview.jsx  # AI voice interview UI
│   │       └── Responses.jsx  # View collected responses
│   ├── index.html
│   ├── vite.config.js
│   └── package.json
└── README.md

Setup & Running

1. Set your OpenAI API key

Edit backend/.env:

OPENAI_API_KEY=sk-your-real-key-here

2. Start the backend

cd backend
npm start

Backend runs on http://localhost:3001. Creates talkform.db automatically on first run.

3. Start the frontend

In a separate terminal:

cd frontend
npm run dev

Frontend runs on http://localhost:5173.

4. Open the app

  • Register → create an account
  • Dashboard → click "+ New Form" to create a form
  • Form Builder → add structured questions (short text, rating, multiple choice, yes/no, etc.)
  • Interview Mode → click the "Interview Mode" button (or share the link) to start an AI voice interview
  • Inside the interview, type or use the microphone button 🎤 to speak your answers
  • After the interview, answers are extracted and saved to the structured form

Database

SQLite file at backend/talkform.db. Schema:

  • users — accounts
  • forms — form metadata
  • questions — structured questions (type, label, required, options)
  • responses — interview sessions
  • answers — extracted answers linked to questions

API Endpoints

Method Path Description
POST /api/auth/register Create account
POST /api/auth/login Sign in
GET /api/forms List user's forms
POST /api/forms Create form
GET /api/forms/:id Get form + questions
PUT /api/forms/:id Update form
DELETE /api/forms/:id Delete form
PUT /api/forms/:id/questions Batch save questions
GET /api/forms/public/:id Public form access
POST /api/responses/form/:id/start Start interview response
POST /api/responses/:id/answer Submit single answer
POST /api/responses/:id/complete Mark interview complete
GET /api/responses/:id Get response + answers
GET /api/responses/form/:id All responses for form
POST /api/interview/chat AI interview chat
POST /api/interview/extract Extract answers from conversation

How the AI Interview Works

  1. The form's structured questions (with types, labels, options) are sent to OpenAI as a JSON schema
  2. The AI receives a system prompt instructing it to act as a natural voice interviewer
  3. The conversation history is sent with each request so the AI maintains context
  4. When the interview concludes, a separate extraction call parses the conversation and saves structured answers
  5. The frontend supports both text input and browser speech recognition (Web Speech API)

Checks

0/7
Script checks 0/4answered by a program
fail

App startsboots

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

fail

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.

fail

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.

not exercised — app did not boot

fail

Screenshots capturedscreenshots

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

Judge checks 0/3judged by Claude
fail

Q1Clear landing page pitch

Judge's reasoning

There is no landing page at all — `/` redirects straight to `/dashboard` (then login), and no marketing headline or hook copy exists anywhere in the frontend.

▸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.

fail

Q2Distinctive design

Judge's reasoning

The stylesheet is the default AI look: #6c63ff/#4834d4 purple gradient auth screen, near-black navy gradient interview screen with purple accents, emoji icons (🎙️ ✏️ 🎤 ✅) and ad-hoc inline styles on a plain system font stack.

▸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").

fail

Q3Complete user journey

Judge's reasoning

Builder and interview links are fine (9 typed question types, form schema injected into the interviewer prompt), but the write-back link is broken — `/api/interview/extract` sends only the system prompt plus "Please extract the answers from the conversation" and never passes the transcript (which is also never persisted), so no real answers can ever reach the `answers` rows.

▸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.