A small proof of concept for browsing recent arXiv papers and turning one selected paper into a podcast-style script.
- Browse recent arXiv papers across focused research areas.
- Generate an 8-turn grounded dialogue from a selected paper.
- Name both speakers and choose a separate OpenAI model for each one.
- Replay the generated script with live dialogue animation.
- Export the script as plain text or ElevenLabs-compatible JSON.
This version intentionally has no database persistence.
- Paper discovery is fetched live from arXiv.
- Search results use the paper abstract directly.
- Script generation happens on demand through a local Node API and the OpenAI Responses API.
- Nothing is stored. Download the generated script if you want to keep it.
- Frontend: React 18, TypeScript, Vite
- Styling: Tailwind CSS, Radix UI primitives
- API: Express
- AI: OpenAI
nvm use
npm install
cp .env.example .env
# fill in OPENAI_API_KEY
npm run devFrontend: http://localhost:8080
API: http://localhost:3001
npm run dev
npm run build
npm run preview
npm run lint
npm run check
npm run healthcheck- Node 20 is the expected local and CI runtime.
.nvmrcis included for local version alignment.- GitHub Actions validates dependency install, audit, mock script evaluation, lint, typecheck, build, and a server health smoke test.
HOST=127.0.0.1
OPENAI_API_KEY=
OPENAI_SCRIPT_MODEL=gpt-5.5
OPENAI_SCRIPT_MAX_TOKENS=1600
OPENAI_SCRIPT_TURN_MAX_TOKENS=1200
PORT=3001
ARXIV_USER_AGENT=Only OPENAI_API_KEY is required.
For local-only secrets, .env.local is also loaded by the Node API and can contain the same keys.
The UI lets each speaker choose between gpt-5.5, gpt-5.4, gpt-5.4-mini, gpt-5-mini, and gpt-5-nano before script generation.
ARXIV_USER_AGENT is optional and can be used to identify your deployment when calling arXiv RSS.
npm run devstarts both the Vite frontend and the local API server.npm run previewbuilds the frontend and serves the built app through the API server.npm run healthcheckhitsGET /api/healthon the configured local port.- The frontend proxies
/api/*requests to the local server during development.
This repo is optimized for lightweight POC hosting, not a full production platform.
- Build the frontend with
npm run build. - Run the server with
npm run start. - Set
OPENAI_API_KEYin the runtime environment. - Serve the repository as a single Node process. The Express server will serve
dist/automatically after a build. - Serverless-style
/api/*entrypoints are included for Vercel-compatible hosting.
Good fits:
- Vercel
- Railway
- Render
- Fly.io
- A small VPS with Node 20+
Not included on purpose:
- Docker
- database migrations
- background workers
- secrets management beyond env vars
src/
components/ React UI
hooks/ Frontend search, selection, and script hooks
pages/ App routes
constants/ Research area definitions
server/
index.ts Express API entrypoint
research.ts arXiv search and filtering
openai.ts Podcast script generation
types.ts Shared server-side types
- No auth
- No paper history
- No episode library
- No background jobs
- No database
GET /api/health returns:
{"ok":true}MIT


