WallpaperMachine
당신이 사랑하는 배경화면, 맥에서 새롭게 만나보세요
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Repo: https://github.com/leonvalido/shippear-hay-plan · Live: https://hayplan.vercel.app
Hackathon boilerplate for Shippear #3 (Rosario, 24 Oct 2026). Next.js 16 (App Router) · TypeScript · Tailwind v4 · shadcn/ui · Anthropic SDK (streaming) · SQLite built into Node.
One command to run:
npm install && npm run dev
Open http://localhost:3000. Without an API key it runs in mock mode (streamed canned answer) so the whole UI works offline. Add a key to go live.
| Path | What it is |
|---|---|
src/app/page.tsx | Landing: headline, one CTA, three "how it works" cards. Replace copy only. |
src/app/app/page.tsx + src/components/generate-form.tsx | The form → AI → result → saved flow. Change the fields, keep the shape. |
src/app/api/generate/route.ts | POST, validates with zod, streams text/plain from Claude. Header x-ai-mode: mock|live. |
src/app/api/items/route.ts | GET / POST / DELETE on a generic items table (JSON data column, no migrations). |
src/lib/ai.ts | streamText() (stream), completeJSON() (schema-validated object via zod), describeError(). Mock fallback built in. |
src/lib/prompts.ts | All prompts in one file. System prompt, buildPrompt(), mock answer. |
src/lib/db.ts | getStore() → node:sqlite at data/app.db, falls back to in-memory if Node < 22.13. |
src/hooks/use-stream.ts | Client hook: run(body) → text, status (idle/loading/streaming/done/error), abort(), reset(). |
src/components/ai-result.tsx | Reusable result card: skeleton → streaming cursor → done / error with retry. |
src/components/ui/* | shadcn/ui: button, card, input, textarea, label, badge, skeleton, alert. npx shadcn@latest add dialog works (components.json is set). |
scripts/check-api.mjs | npm run check → one tiny API call, prints latency or the exact error. |
IDEAS.md / PLAN.md | Idea bank + hour-by-hour plan, roles, pitch template, packing list. |
Dependencies are deliberately minimal (61 packages, ~17 s install on decent WiFi): no ESLint, no icon library, no ORM, no auth. Add only what the demo needs.
cp .env.example .env.local
| Var | Default | Notes |
|---|---|---|
ANTHROPIC_API_KEY | (empty → mock mode) | From console.anthropic.com |
ANTHROPIC_MODEL | claude-opus-5-5 | claude-sonnet-5-5 or claude-haiku-5-5 are faster for a demo |
ANTHROPIC_EFFORT | low | low is fastest; raise to medium if answers are shallow |
MOCK_AI | unset | 1 forces mock mode even with a key (WiFi dies mid-demo → flip this, restart) |
npm install (if WiFi is bad, copy node_modules via AirDrop/USB from the laptop that installed it last night).cp .env.example .env.local, paste the key, npm run check. Green line = live. If red, fix it now or decide to demo in mock mode.npm run dev, open /app, submit the form once. Confirm streaming + "db: sqlite" badge. Everyone must see this working before touching code.PLAN.md and the demo flow in 3 bullets. Nobody codes until this is written.layout.tsx (nav), page.tsx (headline), metadata.title.streamText; structured card → use completeJSON with a zod schema). Write the zod schema first.src/lib/prompts.ts: system prompt with the domain rules + 1 worked example; buildPrompt() from your fields. Test it in /app before touching UI.data/seed.json and load it in getStore() on first run.PLAN.md), create branches only if 3+ people; otherwise one branch, small commits, git pull --rebase often.Change the form → result flow. Edit the two state fields in generate-form.tsx,
the zod Body in api/generate/route.ts, and buildPrompt() in prompts.ts. That's it.
Return a structured object instead of text.
// in a route handler
import { z } from "zod";
import { completeJSON } from "@/lib/ai";
const Result = z.object({ viable: z.boolean(), reason: z.string(), cost: z.number() });
const out = await completeJSON({
prompt: buildPrompt(body),
schema: Result,
mock: { viable: true, reason: "Ejemplo en modo mock", cost: 1200000 },
});
return Response.json(out);
Save something.
const store = await getStore();
store.insert(newItem("order", { product: "yerba", qty: 2 }));
store.list("order", 10);
Add a shadcn component. npx shadcn@latest add dialog (needs WiFi; the 8 included cover most demos).
Streaming looks stuck. status === "loading" means waiting for the first byte;
with claude-opus-5-5 that can be 2–5 s. Switch to claude-sonnet-5-5 in .env.local for a snappier demo.
WiFi dies during the pitch. MOCK_AI=1 in .env.local, restart dev server, same UI.
Better: before the pitch, run the real flow once and keep that tab open.
| Script | Does |
|---|---|
npm run dev | Dev server (Turbopack) |
npm run build | Production build (also typechecks) |
npm run start | Serve the build |
npm run typecheck | tsc --noEmit |
npm run check | Ping the Anthropic API with the configured model |
output_config.effort (no budget_tokens, no temperature), the current API shape for Claude 5-family models.node:sqlite is built into Node ≥ 22.13 / 24. Nothing to compile, no cloud. The DB file is data/app.db (git-ignored). On older Node the store silently falls back to memory and the badge says db: memory.text/plain; the client reads it with fetch + ReadableStream. No SSE parsing, no extra library.