WallpaperMachine
The wallpapers you love. A new home on your Mac.
AI-assisted outfit planner — suggestions only. You make the final call.
LifestyleTypeScript · CSSGitHub @thatemocoderOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
AI-assisted outfit planner: the AI does the combinations; you keep taste, dress-code judgement and spending decisions.
Taken from the repository README
Loading the full README.
Read the full README ↗Plan outfits from clothes you already own, and think twice before buying more.
Live: https://rewear-henna.vercel.app (no login)
Rewear is a small AI-assisted outfit planner. It is a prototype for UNSW INFS5706 AI in Action, where the brief is to design and test a clear boundary between what the AI does and what the human keeps.
The AI does the combinations. The human keeps taste, dress-code judgement and spending decisions.
Most of us wear a small share of what we own and still feel we have "nothing to wear". That feeling drives repeat purchases of things we already have. Rewear works on both ends:
| AI may | Draft tags (type, colour, formality, warmth, notes) from a photo of one garment. Combine catalogue items into up to 3 outfits with a one-line reason, using the venue type and forecast as context. Refine looks in conversation as Hem, a clearly labelled AI persona. Show overlap between a possible purchase and the wardrobe, with an estimate of new combinations. Summarise trends only from the supplied articles and map them to owned items. |
| AI must not | Use items outside the catalogue. Save anything. Recommend buying or not buying, or comment on price. Give body-shape, size, fit or "flattering" advice. Suggest shopping when the wardrobe falls short. Claim to be human. Invent trends, brands or sources. |
| AI hands to the human when | The dress code is "not sure" or ambiguous, or the occasion is high-stakes (interview, formal event): a Your call note says what to check. A photo isn't a single garment: no tags, just the reason. Every purchase check ends with "This is information, not a recommendation. Your call." (fixed UI text, not AI-generated). The venue type suggests a different formality from the chosen dress code: the dress code wins and a Your call note asks them to check. |
| Human then | Checks and edits every drafted tag field, and nothing saves without Save. Edited fields are marked · edited. Picks the venue from search results, and can overwrite the forecast temperature (their number wins). Chooses which outfit, if any, to wear. Decides whether to buy, and whether a trend is for them. |
| How the user knows AI is involved | Everything AI-generated carries an oxblood label (AI suggestion, AI tags — check before saving). Oxblood is used for nothing else. The prompt version is in the footer, a session log lists every AI call, and an About dialog explains it all. |
Browser (components/, app/*/page.tsx)
│ catalogue (seed JSON + this browser's additions) and form inputs
│ photos re-encoded on a canvas first: EXIF/GPS stripped, ≤1024px, never stored on a server
▼
/api/plan · /api/stylist · /api/tag · /api/buy · /api/trends (AI routes)
└─ lib/runFeature.ts: validate → daily cap → versioned prompt → Gemini → parse
/api/locate · /api/venue · /api/forecast (no AI: lib/place.ts)
/api/trends also reads lib/feeds.ts (fashion media RSS) before calling the AI
├─ lib/prompts.ts prompts/<feature>_<version>.md, bundled at build time
├─ lib/gemini.ts the only module that calls the API (key is server-side only)
└─ lib/parse.ts all AI-response parsing in one place
app/globals.css), @google/genai. No database, no accounts.gemini-3.5-flash-lite, set in one constant in lib/gemini.ts. During the build, gemini-3.8-flash returned constant 503 "high demand" errors on the free tier, and gemini-3.6-flash allowed only 20 requests a day; Flash-Lite allows about 500. Transient 500/503 errors are retried twice. When Gemini's per-minute limit is hit, the photo queue waits and retries; when the daily quota is used up, the app says when it resets.lib/ and the API routes, so the front end can be redesigned without touching AI logic.data/catalogue.json. Items you add live in your browser's localStorage (rewear.added.v1); edits and removals of shipped items are kept separately (rewear.edits.v1). Export catalogue (JSON) downloads the full wardrobe in the seed format, and Reset to my catalogue undoes all local changes.RATE_LIMIT_PER_IP, default 80; , default 200). It's per server instance; cost safety comes from using a free-tier key with no billing attached.Versioned prompts. Each feature's system prompt is its own file in prompts/: plan_v1.md, plan_v2.md (adds venue, time and forecast context), stylist_v1.md (Hem's persona and rules), tag_v1.md, buy_v1.md and trends_v1.md. The active version is set in prompts/config.json:
{ "plan": "v2", "tag": "v1", "buy": "v1", "stylist": "v1", "trends": "v1" }
To test a redesign, add a new version file (e.g. prompts/plan_v3.md) and change one line in the config. The build fails if the config points to a file that doesn't exist. The active version shows in the footer (Prompt: plan v1) and is recorded with every call.
Session log. The footer's Session log panel lists every AI call in the current browser tab: timestamp, feature, prompt version, model, status, the inputs (never images) and the AI's raw output, including failures and responses that couldn't be parsed. Download log as CSV exports it for the test log. The log stays in sessionStorage and is never sent anywhere.
Requires Node 20+ and a Gemini API key from Google AI Studio.
npm install
cp .env.example .env.local # then set GEMINI_API_KEY=...
npm run dev # http://localhost:3000
npm run build bundles the prompts and makes a production build.
GEMINI_API_KEY (Production and Preview). Optionally add RATE_LIMIT_PER_IP and RATE_LIMIT_GLOBAL.main redeploys.To be completed. Test cases, inputs, expected and actual behaviour, with session-log CSV excerpts.
| # | Feature | Input | Expected | Actual | Pass? |
|---|---|---|---|---|---|
To be completed. What failed in testing, what changed (prompt version, code), and the result.
| Issue found | Before (v1) | Change | After | Evidence |
|---|---|---|---|---|
Student prototype for UNSW INFS5706 AI in Action. Uses a third-party AI API (Google Gemini); on the free tier, Google may use submitted content to improve its services. Suggestions can be wrong. AI-assisted build: made with Claude Code.
RATE_LIMIT_GLOBAL