Back to shop
Changelog
0.0.32 — The brand is now "MightBuy"
Changed
- The name is styled
MightBuyeverywhere now (was "Mightbuy") — the logo wordmark, page titles, legal pages, and the extension all match the camel-case brand. Matches how the sign-in emails already sign off. Purely cosmetic — the web address (mightbuy.xyz) and your saved data are untouched.
21 files touched
- CHANGELOG-LLM.md
- CHANGELOG.md
- apps/extension/entrypoints/popup/App.tsx
- apps/extension/entrypoints/popup/config.ts
- apps/extension/entrypoints/popup/index.html
- apps/web/package.json
- apps/web/src/app/account/page.tsx
- apps/web/src/app/admin/page.tsx
- apps/web/src/app/categories/page.tsx
- apps/web/src/app/changelog/llm/page.tsx
- apps/web/src/app/changelog/page.tsx
- apps/web/src/app/how-we-make-money/page.tsx
- apps/web/src/app/layout.tsx
- apps/web/src/app/privacy/page.tsx
- apps/web/src/app/s/[slug]/page.tsx
- apps/web/src/app/terms/page.tsx
- apps/web/src/components/app-sidebar.tsx
- apps/web/src/components/logo.tsx
- apps/web/src/components/site-footer.tsx
- documents/NOW.md
- packages/shared/src/types.ts
0.0.31 — Login emails work, and everything points at mightbuy.xyz
Added
- Login emails now send from the domain. Finished wiring Resend into
sign-in — request a link and it arrives from
noreply@send.mightbuy.xyz. (First one lands in spam while the new domain builds trust; the login screen now tells people to check spam and mark "not spam".)
Changed
- Everything points at mightbuy.xyz now — the
extension saves to it, the app's security rules trust it, and sign-in
works on it. (The old
mightbuy.vercel.appstill works as a fallback.)
Fixed / confirmed
- The extension is confirmed working for real — saved an Argos kettle through it into the cloud shop, end to end. The headline "one-click save, no tab" feature is verified on a real machine, not just in theory.
14 files touched
- CHANGELOG-LLM.md
- CHANGELOG.md
- apps/extension/entrypoints/popup/config.ts
- apps/extension/wxt.config.ts
- apps/web/package.json
- apps/web/src/app/login/page.tsx
- apps/web/src/components/site-footer.tsx
- apps/web/src/lib/cors.ts
- documents/NOW.md
- documents/infra.md
- documents/launch.md
- documents/specs/extension/popup.md
- documents/specs/web/api-items.md
- documents/specs/web/login.md
0.0.30 — A real domain and real email (mightbuy.xyz)
Infrastructure, no app changes — but a big step toward launch.
Added
- Bought the domain: mightbuy.xyz. Wired straight
into the project —
wwwpermanently redirects to the bare domain so search engines see one site. (mightbuy.vercel.appkeeps working alongside while DNS settles.) - Email that reaches you —
hello@,privacy@, anything@mightbuy.xyz now forwards to Chris's inbox (via ImprovMX, free). The contact addresses the legal pages need are sorted. - Login email from the domain — nearly there. Set up Resend to send
Mightbuy's magic-link emails from the domain (via
send.mightbuy.xyz, kept separate to protect the main domain's reputation). Domain verification in progress; once it's verified, wiring it into sign-in is the last step — and that's the thing that lets other people actually log in.
8 files touched
- .claude/skills/session-wrap/SKILL.md
- CHANGELOG-LLM.md
- CHANGELOG.md
- apps/web/package.json
- apps/web/src/components/site-footer.tsx
- documents/NOW.md
- documents/infra.md
- documents/launch.md
0.0.29 — An admin dashboard for the owner
Added
- A private admin dashboard at
/admin, just for you. See the platform at a glance: how many users, items saved, lists and shares; a 14-day activity view; capture health (which extraction method is doing the work — a low-JSON-LD site is a candidate for a fix); most-saved stores; and a recent-signups table. From there you can revoke a user's API tokens or delete a user and all their data (which is also your "delete my account" tool for GDPR). Invisible to everyone else — anyone not on the allowlist gets a plain "not found".
15 files touched
- CHANGELOG-LLM.md
- CHANGELOG.md
- CLAUDE.md
- apps/web/package.json
- apps/web/src/app/admin/actions.ts
- apps/web/src/app/admin/page.tsx
- apps/web/src/app/admin/user-row.tsx
- apps/web/src/components/site-footer.tsx
- apps/web/src/lib/admin-data.ts
- apps/web/src/lib/admin.ts
- documents/NOW.md
- documents/infra.md
- documents/launch.md
- documents/specs/00-overview.md
- documents/specs/web/admin.md
0.0.28 — The extension saves without opening a tab
Added
- One-click saving from the extension, for real. Click the Mightbuy icon on a product page, hit save, and it goes straight into your cloud shop — no tab opening, no interruption. You get a "Saved ✓" with an Undo button right in the popup. First time, you paste a token from your account (once) so it can save as you. The extension now talks to the live site.
Fixed
- The old "keep browsing" mode that could silently drop saves is gone — replaced entirely by the direct save above.
17 files touched
- CHANGELOG-LLM.md
- CHANGELOG.md
- apps/extension/entrypoints/popup/App.css
- apps/extension/entrypoints/popup/App.tsx
- apps/extension/entrypoints/popup/config.ts
- apps/extension/wxt.config.ts
- apps/web/package.json
- apps/web/src/app/api/items/[id]/route.ts
- apps/web/src/app/api/items/route.ts
- apps/web/src/components/site-footer.tsx
- apps/web/src/lib/cors.ts
- documents/NOW.md
- documents/specs/00-overview.md
- documents/specs/data-model.md
- documents/specs/extension/popup.md
- documents/specs/extension/silent-add.md
- documents/specs/web/api-items.md
0.0.27 — Shared wishlists actually work now
Added
- Shared wishlist links now work for anyone — not just you. When you turn on sharing for a list (or your whole shop), the link you copy opens a clean, read-only page for whoever you send it to, on any device, signed in or not. Turn sharing off and the old link goes dead immediately. Only active items ever show — anything you've marked bought or archived stays private.
12 files touched
- CHANGELOG-LLM.md
- CHANGELOG.md
- apps/web/package.json
- apps/web/src/app/s/[slug]/page.tsx
- apps/web/src/components/public-list.tsx
- apps/web/src/components/site-footer.tsx
- apps/web/src/lib/shop-db.ts
- apps/web/src/lib/store.ts
- documents/NOW.md
- documents/specs/00-overview.md
- documents/specs/data-model.md
- documents/specs/web/share.md
0.0.26 — Sign-in works properly on the live site
Changed
- Live sign-in, configured and proven: the Supabase Site URL now points at the real site (it had quietly stayed on localhost — an unsaved form), and both sign-in emails switched to scanner-proof links that survive corporate mail filters and work across devices. Chris signed in on mightbuy.vercel.app with a real magic link — and his actual shop (10 items) migrated itself up to the cloud on first load, exactly as designed.
7 files touched
- CHANGELOG-LLM.md
- CHANGELOG.md
- apps/web/package.json
- apps/web/src/components/site-footer.tsx
- documents/NOW.md
- documents/auth-setup.md
- documents/specs/web/auth.md
0.0.25 — The backend era: your shop lives in the cloud
Added
- Your shop is now stored in the cloud (Supabase Postgres), not in one browser's localStorage. Sign in anywhere and your items are there. The first time you load the shop signed in, anything saved in this browser is migrated up automatically — with a local backup kept, just in case.
- A real save API —
POST /api/items. This is the key that unlocks the next tricks: the extension saving without opening a tab, Android share-menu saves, and the iPhone Shortcut. Retry-safe, and it tells the caller when a URL is already in your shop rather than double-saving. - Personal API tokens → Account. Create a token, paste it into an iOS Shortcut (or anything that can POST), and it can save to your shop. Shown once, stored hashed, revocable any time from the same card.
Changed
- The link fetcher grew up (
/api/extract): it now requires you to be signed in, allows 20 fetches a minute each, refuses to fetch private or internal addresses (so it can't be pointed at things it shouldn't see), follows redirects carefully re-checking every hop, and stops reading oversized pages part-way. On the public site this lands with the next release — worth shipping soon. - Export/Import on the account page now round-trips the cloud shop (heads up: an import doesn't restore My shop's public-share state — reshare to mint a fresh link).
28 files touched
- CHANGELOG-LLM.md
- CHANGELOG.md
- apps/web/package.json
- apps/web/src/app/account/page.tsx
- apps/web/src/app/api/extract/route.ts
- apps/web/src/app/api/items/[id]/route.ts
- apps/web/src/app/api/items/route.ts
- apps/web/src/app/api/tokens/[id]/route.ts
- apps/web/src/app/api/tokens/route.ts
- apps/web/src/components/shop.tsx
- apps/web/src/components/site-footer.tsx
- apps/web/src/lib/api-auth.ts
- apps/web/src/lib/net-guard.ts
- apps/web/src/lib/rate-limit.ts
- apps/web/src/lib/shop-db.ts
- apps/web/src/lib/store.ts
- apps/web/src/lib/supabase/service.ts
- apps/web/src/lib/tokens.ts
- documents/NOW.md
- documents/infra.md
- documents/specs/00-overview.md
- documents/specs/data-model.md
- documents/specs/extension/silent-add.md
- documents/specs/web/account.md
- documents/specs/web/api-extract.md
- documents/specs/web/api-items.md
- documents/specs/web/api-tokens.md
- documents/specs/web/shop.md
0.0.24 — Shipped to production + the mobile capture plan
Added
- Mobile capture, researched and planned → documents/mobile-capture.md. The short version: no app needed for saving — on Android the web app itself joins the phone's Share menu (as an installed PWA), and on iPhone a Shortcut can save silently without leaving the shop you're browsing. Decisions locked: confirm-dialog flow first, silent save once the real save API exists, and exactly one user setting ("After saving: keep browsing / open my Mightbuy") honoured by every capture client.
Changed
- Everything went live: production at mightbuy.vercel.app
jumped from 0.0.19 to 0.0.23 via the first
ship-to-mainrun — real sign-in, the Mightbuy name, the new logo, the lot. Verified serving.
145 files touched
- .claude/skills/session-start/SKILL.md
- .claude/skills/session-wrap/SKILL.md
- .claude/skills/session-wrap/references/spec-template.md
- .claude/skills/ship-to-main/SKILL.md
- .gitignore
- CHANGELOG-LLM.md
- CHANGELOG.md
- CLAUDE.md
- apps/extension/.gitignore
- apps/extension/README.md
- apps/extension/assets/react.svg
- apps/extension/entrypoints/background.ts
- apps/extension/entrypoints/content.ts
- apps/extension/entrypoints/popup/App.css
- apps/extension/entrypoints/popup/App.tsx
- apps/extension/entrypoints/popup/index.html
- apps/extension/entrypoints/popup/main.tsx
- apps/extension/entrypoints/popup/style.css
- apps/extension/package.json
- apps/extension/public/icon/128.png
- apps/extension/public/icon/16.png
- apps/extension/public/icon/32.png
- apps/extension/public/icon/48.png
- apps/extension/public/icon/96.png
- apps/extension/tsconfig.json
- apps/extension/wxt.config.ts
- apps/web/.gitignore
- apps/web/AGENTS.md
- apps/web/CLAUDE.md
- apps/web/README.md
- apps/web/components.json
- apps/web/eslint.config.mjs
- apps/web/next.config.ts
- apps/web/package.json
- apps/web/postcss.config.mjs
- apps/web/public/file.svg
- apps/web/public/globe.svg
- apps/web/public/next.svg
- apps/web/public/vercel.svg
- apps/web/public/window.svg
- apps/web/src/app/account/page.tsx
- apps/web/src/app/api/extract/route.ts
- apps/web/src/app/auth/callback/route.ts
- apps/web/src/app/auth/confirm/route.ts
- apps/web/src/app/categories/page.tsx
- apps/web/src/app/changelog/llm/page.tsx
- apps/web/src/app/changelog/page.tsx
- apps/web/src/app/globals.css
- apps/web/src/app/how-we-make-money/page.tsx
- apps/web/src/app/icon.svg
- apps/web/src/app/layout.tsx
- apps/web/src/app/login/page.tsx
- apps/web/src/app/page.tsx
- apps/web/src/app/privacy/page.tsx
- apps/web/src/app/s/[slug]/page.tsx
- apps/web/src/app/terms/page.tsx
- apps/web/src/components/add-item-dialog.tsx
- apps/web/src/components/app-sidebar.tsx
- apps/web/src/components/edit-item-sheet.tsx
- apps/web/src/components/item-card.tsx
- apps/web/src/components/item-fields.tsx
- apps/web/src/components/legal.tsx
- apps/web/src/components/logo.tsx
- apps/web/src/components/other-sellers-sheet.tsx
- apps/web/src/components/selection-bar.tsx
- apps/web/src/components/share-list-dialog.tsx
- apps/web/src/components/shop.tsx
- apps/web/src/components/site-footer.tsx
- apps/web/src/components/theme-provider.tsx
- apps/web/src/components/ui/alert-dialog.tsx
- apps/web/src/components/ui/alert.tsx
- apps/web/src/components/ui/avatar.tsx
- apps/web/src/components/ui/badge.tsx
- apps/web/src/components/ui/button.tsx
- apps/web/src/components/ui/card.tsx
- apps/web/src/components/ui/checkbox.tsx
- apps/web/src/components/ui/dialog.tsx
- apps/web/src/components/ui/dropdown-menu.tsx
- apps/web/src/components/ui/input.tsx
- apps/web/src/components/ui/label.tsx
- apps/web/src/components/ui/select.tsx
- apps/web/src/components/ui/separator.tsx
- apps/web/src/components/ui/sheet.tsx
- apps/web/src/components/ui/sidebar.tsx
- apps/web/src/components/ui/skeleton.tsx
- apps/web/src/components/ui/sonner.tsx
- apps/web/src/components/ui/switch.tsx
- apps/web/src/components/ui/tabs.tsx
- apps/web/src/components/ui/textarea.tsx
- apps/web/src/components/ui/tooltip.tsx
- apps/web/src/components/user-menu.tsx
- apps/web/src/hooks/use-mobile.ts
- apps/web/src/lib/changelog.ts
- apps/web/src/lib/demo-items.ts
- apps/web/src/lib/format.ts
- apps/web/src/lib/mock-sellers.ts
- apps/web/src/lib/prefs.ts
- apps/web/src/lib/session.ts
- apps/web/src/lib/store.ts
- apps/web/src/lib/supabase/client.ts
- apps/web/src/lib/supabase/proxy.ts
- apps/web/src/lib/supabase/server.ts
- apps/web/src/lib/utils.ts
- apps/web/src/proxy.ts
- apps/web/tsconfig.json
- documents/NOW.md
- documents/README.md
- documents/access-strategy.md
- documents/architecture.md
- documents/auth-setup.md
- documents/auto-categorisation.md
- documents/capture-strategy.md
- documents/capture-sweep.md
- documents/chrome-web-store.md
- documents/competitive-audit.md
- documents/concept.md
- documents/find-cheaper.md
- documents/infra.md
- documents/mobile-capture.md
- documents/open-questions.md
- documents/purchase-detection.md
- documents/specs/00-overview.md
- documents/specs/data-model.md
- documents/specs/extension/content-script.md
- documents/specs/extension/popup.md
- documents/specs/extension/silent-add.md
- documents/specs/web/account.md
- documents/specs/web/api-extract.md
- documents/specs/web/auth.md
- documents/specs/web/categories.md
- documents/specs/web/changelog.md
- documents/specs/web/legal.md
- documents/specs/web/login.md
- documents/specs/web/share.md
- documents/specs/web/shop.md
- package.json
- packages/shared/package.json
- packages/shared/src/categorise.ts
- packages/shared/src/extract.ts
- packages/shared/src/hosts.ts
- packages/shared/src/html.ts
- packages/shared/src/index.ts
- packages/shared/src/types.ts
- packages/shared/tsconfig.json
- pnpm-workspace.yaml
0.0.23 — Tidier sidebar, and changelog links that work anywhere
Changed
- Cleaner left sidebar — dropped the repeated icons that ran down every row (the same box next to every category, tag next to every brand, and so on). It's a clean, readable list now; the "shared" globe dot and the ⋯ rename/delete menu stay where they carry real meaning.
Fixed
- Changelog links now go to the right place. On the live/preview site, the "Try it" and page links inside the changelog were pointing at localhost. They're relative now, so they follow whatever site you're on — and there's a safety net that strips any stray localhost link at render.
Notes
- Dev workflow: session wraps now push to the
devbranch (a private preview build); going live is a separate, deliberate "ship to main" step.
0.0.22 — A logo of our own (and an extension crash fixed)
Added
- A real Mightbuy logo — a bespoke "M" monogram replaces the generic shopping-bag icon across the app (sidebar, sign-in, shared lists), the extension popup, and the browser tab. Vector, so it's crisp at any size.
Fixed
- Extension no longer crashes on some pages. After the rename, opening the extension on a tab left over from before could throw an error instead of showing the usual "try refreshing this page" message. Now handled gracefully. (Reload the extension to get the fix + the new logo.)
Notes
- The extension's toolbar icon and store artwork are still placeholder images — they need a proper export of the new logo before the Chrome Web Store submission (tracked in the store runbook).
0.0.21 — Maybuy is now Mightbuy
Changed
- The product is called Mightbuy now — "maybuy" was always a placeholder, and the might-buy list is literally what people call this ("it's a might-buy"). Renamed everywhere in one pass: the app, the extension, every page and document, the GitHub repo (github.com/iamchrisdykes/mightbuy) and the live site → mightbuy.vercel.app (maybuy.vercel.app is gone).
- Your saved items and settings survive — the app migrates your browser data to the new name automatically on first load.
- Older changelog entries below say "Maybuy"-as-was; they've been renamed wholesale rather than preserved, since the old name was never public.
0.0.20 — Real sign-in: magic links (and Google, nearly)
Added
- Proper authentication — the pretend login is gone. Enter your email, get a real magic link, click it, you're in; first-time emails create your account (no separate sign-up, no passwords). Sessions are secure cookies that survive restarts, powered by Supabase Auth. Tested end-to-end on localhost.
- Google sign-in, wired and waiting — the button appears automatically once the Google credentials are set up (the 10-minute walkthrough lives in documents/auth-setup.md, along with the other dashboard steps).
Changed
- Your profile name now saves to your real account (not this browser), and "sign out" genuinely ends the session everywhere the cookie reached.
- Heads-up: live-site login needs one dashboard step first (allow the
production URLs in Supabase) — do auth-setup.md §1 before merging
devintomain.
0.0.19 — Mightbuy is live: mightbuy.vercel.app
Added
- Mightbuy is on the public internet: mightbuy.vercel.app.
Every push to
maindeploys straight to it. All pages verified live — including the changelog pages, which turned out to work on Vercel after all (the build quietly bundles the repo files they read).
Changed
- The protected-preview deploy model from earlier today is gone — it misfired
repeatedly (deploys kept landing on the public URL anyway), and the simple
model won:
mainis production, public, done. The extract API hardening moves up to the top of the list as a consequence.
0.0.18 — Backend era: GitHub, Vercel & Supabase provisioned
Added
- The real infrastructure exists (documents/infra.md):
private GitHub repo (
iamchrisdykes/mightbuy), Vercel project buildingapps/webon every push, and a Supabase project in London (UK data residency — the privacy page's region question is now answered). Keys are wired into Vercel and local dev; the database is still empty — the schema build is next. - Safe-by-default deploys: pushes to
mainproduce preview URLs only you can view (Vercel login required); nothing goes public untilmainis merged into thereleasebranch — a deliberate launch switch, gated on the known blockers (extract-API hardening, legal decisions).
Changed
- A footer "Remove all" button briefly shipped and was removed the same day — the shop header's ⋯ → Clear all already does the job.
0.0.17 — Extension saves stay in your window
Fixed
- Saves no longer vanish into a hidden window. The extension used to reuse a Mightbuy tab from any Chrome window — if that window was minimised or on another desktop, the save landed there invisibly and looked like nothing happened (caught during the capture sweep). It now only reuses a Mightbuy tab in the window you're saving from, and opens a fresh one there otherwise. Reload the extension to pick this up.
Notes
- Sweep progress: Argos and Apple UK both capture perfectly — Argos blocks server fetches with a 403, but the extension path reads it fine, which is the whole thesis working. Three retailers tested, three green, still no adapters needed → documents/capture-sweep.md
- Known trap logged: "Keep browsing after saving" only pre-fills the add dialog in a background tab — nothing is saved until confirmed, and the next save overwrites it. Untick it for now; the real fix is the planned silent add.
0.0.16 — Lists decision, capture sweep & appliance keywords
Added
- Capture sweep — a pre-launch test plan for finding which shops need special capture handling: save one product from each of ~20 UK retailers and score the result → documents/capture-sweep.md. First result in: Currys captures perfectly (title, price, currency, image — no adapter needed).
- White goods now get a category suggestion — cookers, hobs, fridges, freezers, dishwashers, washing machines, tumble dryers and Airfryers are recognised as Kitchen (they previously fell through to Uncategorised) → How categories work
Changed
- Lists decision locked: one list per item stays — moving an item between lists rather than copying it. But the future database will store list membership in a way that can support items in several lists, so if real users ever need "For Dad and For Uncle Steve", it's a small UI change, not a data migration.
Notes
- Extension reloaded in Chrome (first time since 0.0.8) — the new save flow (tab reuse, "keep browsing" toggle, My Mightbuy link) is live for the sweep.
0.0.15 — Legal pages & competitive audit
Added
- Three plain-English legal pages, linked from the footer of every page: How we make money (our affiliate-transparency promise: links only become affiliate links when you click them, the extension never touches links, no checkout tricks), Privacy policy (honest wireframe-stage story: your data lives in your own browser today) and Terms of service. First drafts — every decision still to make is marked inline in bold red so none can slip through unresolved.
- Competitive audit of the save-to-wishlist landscape (Honey, Karma, Moonsift, Locker, Lyst, Klarna and more) — feature matrix, the post-Honey affiliate trust climate, Chrome Web Store affiliate rules, and where Mightbuy differentiates → documents/competitive-audit.md
- The mobile ladder written into the architecture doc — five cheap-to-dear rungs from paste-a-URL to a native app, and why an app is likely worth it eventually (phones are where products get spotted; push is the retention loop; every serious rival ships one).
Notes
- The audit reshaped the monetisation plan's guardrails: affiliate wrapping happens server-side in the web app on your click — never in the extension. That rule is now written into the money page and the architecture docs.
0.0.14 — Extension: one tab, keep browsing
Changed
- The extension stops piling up tabs. Saving used to open a brand-new Mightbuy tab every single time — save five things, get five tabs. Now it reuses the one Mightbuy tab, so you'll never have more than one.
- New "Keep browsing after saving" toggle in the popup. On (the default), saving tucks Mightbuy into a background tab so you stay on the page you're shopping. Off, it jumps you straight to your shop. Your choice sticks.
Added
- "My Mightbuy →" link in the popup, always there — a one-click way into your shop whether or not the toggle sends you there after a save.
Notes
- These are stepping-stones for the wireframe stage. Once Mightbuy has its own backend, the extension will save silently with a "Saved ✓" — no tab at all — and this tab-juggling goes away. That plan is written down.
- Reload the unpacked extension in Chrome to pick these up.
0.0.13 — Multi-select & bulk actions
Added
- Select multiple items and act on them together. Hover a card to reveal a checkbox, tick as many as you like, and a toolbar appears: add them to a list (or spin up a new list on the spot), mark bought, archive, or remove — all in one go. Try it
- The whole card is clickable now — click anywhere on a product to open it, not just the image. The ⋯ menu and the new checkbox still work on their own.
- More actions in the item panel — the side panel now also does mark bought / restore and remove, matching the card's ⋯ menu, and "Buy at …" is a proper link.
Changed
- The changelog no longer shows dates — a cleaner version history.
- Accessibility & polish pass — proper labels on every input, clearer focus rings, pointer cursors on everything clickable, and motion that respects "reduce motion".
Fixed
- Clear all now asks for confirmation before wiping your shop.
- In the Archived view, the bulk action now correctly reads Unarchive.
0.0.12 — Search & sort
Added
- Search and sort your shop. A search box filters as you type — by name, brand, store, category or notes — with a live result count and a one-click clear. A sort menu orders your items by recently saved (default), oldest first, price (low→high or high→low), or name A–Z. Both work within whatever list or category you're currently viewing. Try it
0.0.11 — Rename & delete lists
Added
- Rename and delete your lists. Hover a list in the sidebar and use the ⋯ menu. Rename edits it in place — anything in the list comes along, and its share link keeps working. Delete asks first and never throws anything away: the list's items just move back to your My shop. Empty test lists are now easy to clear out. Try it
0.0.10 — Shareable wishlists
Added
- Share a list as a public wishlist. Pick a list in the sidebar — your My shop, or a named one like "Wedding" or "Christmas" — and turn on Share this list. You get a link anyone can open to see a clean, read-only version of that list. Perfect for a wedding or Christmas list. Try it (open a list, then Share in the top bar)
- Sharing is safe by default. Bought and archived items never appear on a shared page, and the link uses a private, unguessable address — so only the people you send it to can find it.
- Turn sharing off any time — the old link stops working straight away (switching it back on creates a fresh link). Shared lists show a small 🌐 marker in the sidebar.
Changed
- Lists are now proper things that remember whether they're shared, not just names. Your existing shop upgrades automatically — nothing to do.
0.0.9 — Amazon capture (host adapters)
Added
- Amazon products now save properly. Amazon ships no structured product data, so the extension used to say "this doesn't look like a product." A new per-retailer capture layer reads the price, title, image and product code straight off the Amazon page — so an Amazon item saves with its real price, just like any other shop. Built to extend: adding another tricky retailer later is a one-file change.
Fixed
- The extension popup no longer opens blank. The "Add to list" feature added last session needed a browser permission that wasn't declared — without it the popup crashed the moment you opened it, on any site. Fixed the permission and hardened the code so a storage glitch can never blank the popup again. Reload the extension to pick up the fix.
0.0.8 — Lists: a shop per person
Added
- Lists — save things for different people. Your shop is now organised by who it's for: a default My shop for yourself, plus any lists you make ("Mum", "Dave"…). Pick a list in the sidebar to see just that person's stuff; categories, brands and counts all narrow to the list you're in. Try it
- Create a list from the sidebar (+ New list), or on the fly while saving an item.
- Choose the list when you save — from the web add box, and from the browser extension (with a remembered-names dropdown). New saves default to the list you set in Settings.
- Move items between lists instantly from the item view, and set your default list in Account → Saving. Account stats now show a Lists count.
- Demo items now include a couple of gift-list examples so the feature's visible as soon as you load them.
Changed
- Item cards show a 🎁 list badge when you're browsing across lists, so you can tell gift items apart at a glance.
0.0.7 — Brand & store, buy-first item view
Added
- Brand and store are now separate, editable fields — a store (nike.com, amazon.co.uk) sells many brands, so the item's brand (Nike, Sony) is captured and shown in its own Brands filter. Editable in both the add and edit forms
- Item view is now buy-first — clicking an item shows a big Buy at {store} → button and Find other sellers, with editing tucked into a collapsible "Edit details" section (was an edit form first)
Fixed
- Saved items were losing their brand — the add/extension flow extracted the brand but never wrote it to the item, so nothing ever showed under Brands. Now persisted (same for product identifiers used by find-other- sellers: GTIN, SKU, availability)
0.0.6 — Richer categories & changelog file lists
Added
- "N files touched" on each changelog version — a collapsible list (click the arrow) of every file that changed in that release, pulled straight from git so it's always accurate → Changelog
Changed
- Much smarter category suggestions — the keyword lists behind suggested collections went from ~130 to 830+ terms across 18 categories (added Pets, Office & Stationery, Automotive, Food & Drink, Music). Tested against 20 real products — all categorised correctly. See them
0.0.5 — Categories page, Uncategorised & product detection
Added
- "How categories work" page → /categories, linked in the footer — lists the exact keyword rules behind suggested collections, rendered live from the code so it can't go stale
- Uncategorised is now first-class: the no-collection option is labelled "Uncategorised", and the sidebar has an Uncategorised view for items without a collection
- Extension knows when a page isn't a product — on a homepage or article (e.g. bbc.co.uk) the popup says "This doesn't look like a product" with a quiet "Save it anyway →" instead of pretending
Fixed
- (none — clean audit this wrap)
0.0.4 — Suggested collections
Added
- Suggested collection when saving ✨ — Mightbuy reads the product's category and breadcrumb trail (e.g. "Men > Shoes") and pre-selects a likely collection with a "Suggested" badge — one click to change, never silently assigned. Your own collection names win over our canonical ones, and your default-collection setting always beats the guess
- Raw category signal now saved on every item — ready for the LLM classification upgrade at backend time (documents/auto-categorisation.md)
- Works in both capture paths: extension handoff and paste-a-URL
Fixed
- Keyword scorer double-counted plural keywords; user-collection matching was too greedy ("Kit" could capture "Kitchen"); a defaulted collection could wrongly show the Suggested badge on fallback paths — all caught by this wrap's independent audit
0.0.3 — Browser extension MVP
Added
- The Mightbuy browser extension 🧩 — visit any product page, click the
toolbar icon: it reads the product from the live page (JSON-LD → Open
Graph → page title), shows a preview, and Add to my shop → opens Mightbuy
with everything pre-filled. Load it via chrome://extensions → Load
unpacked →
apps/extension/.output/chrome-mv3 - Works on sites that block server fetching — proven live on Rapha (client-rendered) and Adidas
- session-start skill +
documents/NOW.mdstate-of-play dashboard —/session-startgets a fresh session up to speed and proposes next steps
Fixed
- Prices on Adidas/Nike-style stores — variant-heavy shops publish
ProductGroup(notProduct) with price hidden on size-level variants; the extractor now handles it (server paste-a-URL benefits too) - HTML entities inside product data (
'in titles) now decoded - Extension handoff draft could reappear in later "Add item" clicks (caught by this wrap's independent audit)
Changed
- Session-wrap skill: commits are now part of every wrap; precise since-last-wrap scoping via git tree hashes; independent audit by default
0.0.2 — Documentation audit & process hardening
Added
- In-app changelogs — footer on every page links to /changelog and /changelog/llm; entries now versioned (0.0.x per wrap)
- Full per-surface specs in
documents/specs/(9 docs: shop, login, account, api-extract, changelog, data model, overview, extension popup + content script), each with a verification stamp
Changed
- session-wrap skill hardened after a live audit: verification stamps that only move after claim-by-claim comparison, proof-of-work reporting, per-file accounting, independent adversarial auditors by default, typecheck/lint sanity checks, and precise "since last wrap" scoping via git tree hashes (multiple wraps per session now work)
Fixed
- Two independent auditors reviewed all 9 specs against the code: drift found and corrected in 5 (wrong click target, wrong failure-path claims, stale site map, over-claimed toasts, one-way cross-link described as two-way)
- Real bug caught by the audit: add-item fallback form ignored your default currency/collection preferences
0.0.1 — First full wireframe session
Added
- The shop — visual grid of saved items with left sidebar: filter by category, brand or store (with counts), plus Bought and Archived views. Open the shop
- Add by pasting a link — fetches title, price and image from the page (JSON-LD → Open Graph), preview & edit before saving, duplicate warning, manual-entry fallback
- Accounts (demo) — sign in with Google or magic link (fake, localStorage), auth-gated pages → Login
- Account & settings page — profile, shop stats (incl. total value), theme, saving defaults, housekeeping (auto-archive stale items), purchases (what happens when you buy), alerts (demo), export/import JSON, danger zone → Account
- Mark as bought on every card — badge/archive/remove per your setting, plus restore
- Find other sellers — per-item price comparison sheet with best-price highlight, savings and match confidence (demo data until affiliate integration; the extractor already captures GTIN/MPN/SKU for real matching)
- 20 realistic demo items across UK stores; black placeholder image areas
- Docs: concept, architecture, capture/access strategy, purchase
detection, find-cheaper — plus full per-page specs in
documents/specs/ - /session-wrap skill — end-of-session doc verification + this changelog
Fixed
- App crashed when typing a non-URL then choosing manual entry
- Signed-in users were bounced to login on hard refresh (hydration gate bug)
- Collection dropdown showed raw
__none__instead of "None" - Avatar menu crashed (Base UI menu label must sit inside a group)
- Geist font loading broken by shadcn init (circular CSS variable)
Earlier the same day
- Monorepo scaffold: Next.js 16 web app + WXT extension + shared extraction
package (commit
51225fd)