尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Ask Dad anything. He answers with a dad joke.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Ask Dad anything. He answers with a dad joke. Every time.
DADGPT is a voice app. You tap the mic, say something, and Dad replies out loud with one shameless pun. He never gives a real answer, no matter how hard you push.
Roast mode: tap the camera, and Dad snaps a photo and roasts you out loud.
It was built for a Halloween party, so the jokes lean a little cheeky.
DADGPT is a Halloween costume. Wear a black t-shirt and a black baseball hat. Set a phone sideways on the brim, screen out, and open the app. Pin the printable logo to your chest. People walk up, tap the mic, and talk to Dad. Or they tap the camera and get roasted. The selfie camera faces out from the brim, so it sees whoever is in front of you.
Print it for a sign, a sticker, or the back of your shirt. The SVG and PDF files are vector, so they print sharp at any size. The PDF fills a landscape letter page.
| Version | SVG | PNG | |
|---|---|---|---|
| Black on white | SVG | PNG | |
| White on black | SVG | PNG |
/api/chat.lib/dad-prompt.ts./api/speak, which turns it into a dad voice with OpenAI text to speech.After two minutes with nothing happening, the chat clears itself so the next person gets a fresh Dad.
/api/roast.lib/roast-prompt.ts. It goes after the costume, outfit, pose, and props, never things people can’t change.Photos are never saved. Each one goes to the model once and is thrown away. Roast mode is only in live mode, since canned mode has no model to look at the photo.
/ is the front page. It explains the costume in a click-through and links to both modes./free is canned mode. It tells 20 stock jokes with prerecorded audio. It needs no API keys and anyone can use it./live is live mode. It writes a new joke for whatever you say, and has roast mode. It needs API keys and can sit behind a passcode. Visitors without the passcode get the prompt to make their own.gpt-6-luna first. It won a blind party face off in the evals.claude-haiku-5-5 is the backup if OpenAI is down or has no key. Both can see photos.gpt-4o-mini-tts with the ash voice.getUserMedia for roast modePaste this into Claude Code or any coding agent. The front page has the same prompt behind its Make your own button.
Set up my own copy of DADGPT, the dad joke costume app at https://github.com/johnpolacek/dadgpt. Read the README first.
1. Clone it and install with pnpm. It needs Node 24.
2. Copy .env.example to .env.local. Ask me for my Anthropic API key and a passcode to lock live mode. An OpenAI key is optional and gives Dad a better voice.
3. Run pnpm dev. Open /live and confirm Dad answers out loud with a joke, and that the camera button roasts a photo.
4. Deploy it to Vercel with the same environment variables, then give me the URL.
You need Node 24 and pnpm.
pnpm install
cp .env.example .env.local
pnpm dev
Open http://localhost:3000.
| Name | What it does |
|---|---|
ANTHROPIC_API_KEY | Claude Haiku, the backup joke and roast writer |
OPENAI_API_KEY | Luna jokes and roasts, and the dad voice. Leave it empty to use the browser voice |
PASSCODE | Locks everything except / and /free. Leave it empty to skip the lock |
With no keys at all, canned mode still works.
When PASSCODE is set, every page but / and /free sends you to /unlock. API routes return 401. The gate lives in proxy.ts. The cookie stores a SHA-256 hash, never the passcode itself.
| Command | What it does |
|---|---|
pnpm dev | Start the dev server |
pnpm build | Build for production |
pnpm start | Run the production build |
pnpm record-jokes | Record the canned jokes to public/jokes/. Rerun after you edit lib/jokes.ts |
pnpm record-voices | Record the voice lab samples to public/voices/ |
Both record scripts need OPENAI_API_KEY in .env.local.
These pages were used to pick the look, sound, and motion. They sit behind the passcode.
/designs compares font weights for the logo/motion tries out text animations/particles tries out particle effects/voices plays every voice and style side by sideapp/
page.tsx front page
_about/ the click-through deck
free/ canned mode
live/ live mode
dad-chat.tsx the chat UI, mic, camera, and audio
api/chat/ writes the joke
api/roast/ roasts a photo
api/speak/ turns the joke into speech
api/unlock/ checks the passcode
unlock/ the passcode page
lib/
dad-prompt.ts the joke prompt
roast-prompt.ts the roast prompt
joke.ts model calls for Luna and Haiku
jokes.ts the 20 canned jokes
voice.ts text to speech
motion.ts logo and text animation
embers.ts ember effect
particles.ts press particles
passcode.ts passcode hashing
proxy.ts the passcode gate
scripts/ audio recording scripts
evals/ prompt and model evals
The joke prompt was tuned with evals in evals/. The roast prompt has no evals yet. It was only spot checked by hand. They run through the local Claude CLI, so they do not spend API credits.
evals/failure-modes.md lists the ten ways Dad went wrong in the first run.build-queries.mjs and build-party-queries.mjs make synthetic test chats.run.mjs plays each chat through Dad.checks.mjs has code checks for length, markdown, quotes, and verbal tics.judges.mjs has LLM judges for things code cannot check, like whether a reply is really a joke.validate-judges.mjs measures each judge against hand labels.review/server.mjs is a small labeling UI at http://localhost:4173.Run a set of chats and judge them:
node evals/run.mjs v5
node evals/judge-run.mjs v5
Run the code check tests:
node --test evals/checks.test.mjs
It runs on Vercel with no extra config. Add the environment variables in the project settings. Set PASSCODE if you add API keys, or anyone can spend your credits on /live.
MIT