尚未偵測到更新。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