[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-78884":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":17,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":20,"hasPages":20,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":23,"readmeContent":24,"aiSummary":25,"trendingCount":15,"starSnapshotCount":15,"syncStatus":26,"lastSyncTime":27,"discoverSource":28},78884,"taste","jaytel0\u002Ftaste","jaytel0","Taste skill creation pipeline","https:\u002F\u002Ftaste.jaytel.com",null,"TypeScript",225,20,1,0,3,9,163,61.47,false,"main",[],"2026-06-12 04:01:24","\u003Cp align=\"center\">\n  \u003Cimg src=\"apps\u002Fweb\u002Fpublic\u002Ftaste.png\" alt=\"Taste logo\" width=\"96\" height=\"96\">\n\u003C\u002Fp>\n\n# Taste\n\nTaste turns a set of reference images into a reusable `SKILL.md`.\n\n- Hosted demo: \u003Chttps:\u002F\u002Ftaste.jaytel.com>\n- Try a taste skill: [`pipeline\u002Ftaste\u002Ftaste-skill\u002FSKILL.md`](pipeline\u002Ftaste\u002Ftaste-skill\u002FSKILL.md)\n\n## Repo Shape\n\n```text\napps\u002Fweb\u002F          hosted frontend demo and API worker implementation\npackages\u002Fai\u002F       reusable prompt, provider, chunking, and generation package\nscripts\u002F           local pipeline runner for humans and agents\nreference-images\u002F  ignored local drop folder for your own JPG\u002FPNG\u002FWebP inputs\npipeline\u002Ftaste\u002F    Jaytel's example generated taste skill and pipeline notes\ndocs\u002F              README images and examples\n```\n\nThe web app is a demo of the broader pipeline. The local pipeline is the easiest\nway to use this repo privately: it writes artifacts to `.taste\u002Fruns\u002F...` and\ndoes not need Postgres, Vercel Blob, Cron, or hosted auth.\n\n## Quick Start: Local Pipeline\n\nUse this path if you want to create a taste skill from your own images.\n\n```bash\nnpm install\ncp .env.example .env.local\n```\n\nSet the direct provider keys in `.env.local`:\n\n```text\nOPENAI_API_KEY=...\nANTHROPIC_API_KEY=...\n```\n\nPut JPG, PNG, or WebP reference images in `reference-images\u002F`, then run:\n\n```bash\nnpm run taste\n```\n\nThe final skill is written to:\n\n```text\n.taste\u002Fruns\u002F\u003Crun-id>\u002FSKILL.md\n.taste\u002Fruns\u002F\u003Crun-id>\u002F04-skill\u002FSKILL.md\n```\n\nConvenience alternatives: instead of the two direct keys, you can set one\ngateway key: `OPENROUTER_API_KEY` or `AI_GATEWAY_API_KEY`. Vercel's AI Gateway\nuses `AI_GATEWAY_API_KEY` and routes plain AI SDK model strings through the\nGateway by default.\n\nRun against a different folder:\n\n```bash\nnpm run taste -- .\u002Fpath\u002Fto\u002Fimages\n```\n\nUseful options:\n\n```bash\nnpm run taste -- .\u002Fimages --out .\u002Fmy-skill-run\nnpm run taste -- .\u002Fimages --skill-name my-taste\nnpm run taste -- .\u002Fimages --provider openrouter\nnpm run taste -- .\u002Fimages --model openai\u002Fgpt-5.5\n```\n\n## Comparison\n\nWe ran a small frontend design comparison with three agents: one base model\nwith no skill, one using Anthropic's `frontend-design` skill, and one using the\ngenerated Taste skill from `pipeline\u002Ftaste\u002Ftaste-skill\u002FSKILL.md`. Each agent was\ngiven the same prompt within each test and asked to produce a standalone HTML\nfile.\n\n### Test 01: Opus 4.7\n\nPrompt: `Design a dashboard. Build in an HTML file. Ask no questions.`\n\n![Dashboard comparison using Opus 4.7 across base model, Anthropic frontend-design skill, and Taste skill](docs\u002Fagent-comparison-test-01-opus-4-7-dashboard.png)\n\n### Test 02: Opus 4.7\n\nPrompt: `Design a chat interface. Build in an HTML file. Ask no questions.`\n\n![Chat interface comparison using Opus 4.7 across base model, Anthropic frontend-design skill, and Taste skill](docs\u002Fagent-comparison-test-02-opus-4-7-chat.png)\n\n### Test 03: GPT-5.5\n\nPrompt: `Design a chat interface. Build in an HTML file. Ask no questions.`\n\n![Chat interface comparison using GPT-5.5 across base model, Anthropic frontend-design skill, and Taste skill](docs\u002Fagent-comparison-test-03-gpt-5-5-chat.png)\n\n## How It Works\n\n### 1. Curate References\n\nProvide a tight set of reference images. High-resolution images help, and\nclose-up crops are often better than full screens because they make the visual\ndetails easier to read.\n\nThe goal is not random inspiration. The useful signals are repeated examples of\nlayout, spacing, color, type, texture, composition, density, and hierarchy.\n\n### 2. Index the Corpus\n\nThe pipeline indexes every uploaded image, removes exact duplicates, and assigns\nstable image ids. The current production limit is 20 images per run.\n\nArtifacts start here:\n\n```text\nruns\u002F{runId}\u002F01-corpus\u002Fimages.jsonl\n```\n\n### 3. Analyze Each Image\n\nEach image is read independently by the configured vision models. The default\ntwo-key pipeline uses:\n\n```text\nopenai\u002Fgpt-5.5\nanthropic\u002Fclaude-sonnet-4-6\n```\n\nThe prompts tell the models to ignore what the app does and focus only on\nvisual evidence: layout, spacing, color, type, texture, rhythm, density, and\nhierarchy.\n\nRaw notes are stored like this:\n\n```text\nruns\u002F{runId}\u002F02-image-notes\u002Fraw\u002F{imageId}\u002F{model}.md\n```\n\n### 4. Fuse and Chunk\n\nWhen an image's raw analyses finish, the synthesis model fuses them into one\ncanonical note. The inputs are anonymized first, so the model sees source-neutral\nanalyses instead of provider names.\n\nThen the synthesized notes are grouped into chunks. Each chunk becomes a small\nrule synthesis. Larger runs are reduced through merge layers before producing\none final Markdown rule set.\n\n```text\nruns\u002F{runId}\u002F02-image-notes\u002Fsynthesized\u002F{imageId}.md\nruns\u002F{runId}\u002F03-rule-set\u002Fchunks\u002F{chunkId}-rules.md\nruns\u002F{runId}\u002F03-rule-set\u002Fmerges\u002F{mergeId}-rules.md\nruns\u002F{runId}\u002F03-rule-set\u002Frule-set.md\n```\n\n### 5. Write the Skill\n\nThe skill writer turns the final rule set into concrete instructions. It keeps\nspecific visual constraints and avoids vague aesthetic labels.\n\nInstead of saying \"make it premium and tasteful,\" the skill says things like:\n\n- Use neutral sans-serif typography.\n- Keep accent color localized.\n- Use soft shadows and minimal borders.\n- Avoid beige luxury-commerce defaults.\n\nThe final artifact is:\n\n```text\nruns\u002F{runId}\u002F04-skill\u002FSKILL.md\n```\n\nThe current checked-in example skill is Jaytel's skill:\n`pipeline\u002Ftaste\u002Ftaste-skill\u002FSKILL.md`.\n\n## Production Shape\n\nThe hosted app stores workflow state in Postgres and writes run artifacts to\nprivate Vercel Blob storage.\n\n```text\nbrowser uploads -> Next API routes -> Postgres workflow jobs\n                                     -> OpenRouter OAuth session\n                                     -> private Vercel Blob artifacts\n```\n\n`apps\u002Fweb\u002Fsrc\u002Fworkflow\u002Frunner.ts` owns the durable job flow. `\u002Fapi\u002Fjobs\u002Fdrain`\nclaims bounded batches with database leases, and Vercel Cron can re-enter the\ndrain so interrupted functions resume.\n\n## Verification\n\n```bash\nnpm run check\nnpm test\nnpm run e2e:prod\n```\n\nThe production E2E script requires `BLOB_READ_WRITE_TOKEN`,\n`INTERNAL_API_SECRET`, and `TASTE_E2E_COOKIE` from a signed-in OpenRouter\nsession. Put local test images in\n`reference-images\u002F` or set `TASTE_REFERENCE_DIR`;\nreference images are intentionally gitignored.\n","Taste 是一个将参考图片集转换为可重用 `SKILL.md` 文件的技能创建工具。它通过TypeScript编写，核心功能包括从用户提供的JPG、PNG或WebP格式的图像中生成设计技能文档，并支持使用多种AI模型（如OpenAI和Anthropic）进行处理。项目提供了一个本地运行管道，允许开发者在不依赖外部服务的情况下私密地创建自己的设计技能文件。此外，还提供了在线演示版本，方便用户快速体验其功能。适用于需要根据视觉示例自动生成前端设计指导或技能文档的场景，特别适合UI\u002FUX设计师和技术团队协作时使用。",2,"2026-06-11 03:57:15","CREATED_QUERY"]