Back to shop
Changelog
0.0.52 — A landing page with personality
Added
- A proper brand look for the marketing page. MightBuy now has an indigo accent running through the hero, buttons, and highlights, in both light and dark. The app itself stays clean and neutral; the personality is on the front door where it counts.
- "One shop, two ways to fill it" — a new section giving the web app and the browser extension equal billing, so it's clear MightBuy is a proper web app with an optional extension, not "just an extension".
Changed
- The hero is bolder and clearer. Bigger headline, a real tagline ("For everything you haven't decided to buy yet"), and a confident indigo call to action.
- Saving is shown as two equal options — paste a link or use the extension, no longer extension-first.
- The whole page reads as one design now: consistent headings, elevated "made for the maybe" section, tidier cards. Refreshed the shop screenshot too.
- Removed em dashes across the site's writing so it reads like a person, not a machine.
- Softened how we describe affiliate networks — the "how we make money" page no longer names specific partners.
- Tightened the "no tracking" trust card — dropped the word "creepy" and the stray extension line so it reads clean and stays on one topic.
- Dropped the eyebrow "pill" and its icon from the hero (it read as AI-generated) — now plain text.
- The marketing page is now always light, with its own controlled brand look, instead of switching to dark for visitors whose device is in dark mode. Light/dark modes remain in the app itself.
3 files touched
- CHANGELOG-LLM.md
- CHANGELOG.md
- apps/web/src/components/landing.tsx
0.0.51 — ICO registration reference published
Changed
- The privacy policy now shows MightBuy's ICO registration reference (C1986846) in full, instead of the placeholder promising it "once the ICO issues it". The registration came through, so the page now keeps its own promise.
7 files touched
- CHANGELOG-LLM.md
- CHANGELOG.md
- apps/web/package.json
- apps/web/src/app/privacy/page.tsx
- apps/web/src/components/site-footer.tsx
- documents/NOW.md
- documents/specs/web/legal.md
0.0.50 — Tidier public footer
Changed
- "How categories work" is now a local-development link only. It's an internal explainer about how items get sorted, not something a visitor needs, so the public footer no longer shows it. The page still exists — it's just no longer linked on the live site.
7 files touched
- CHANGELOG-LLM.md
- CHANGELOG.md
- apps/web/package.json
- apps/web/src/components/site-footer.tsx
- documents/specs/00-overview.md
- documents/specs/web/categories.md
- documents/specs/web/changelog.md
0.0.49 — A landing page that shows, not just tells
Added
- The landing page now shows the product. Two real screenshots — your shop as a visual grid, and the browser extension saving a product in one click straight from a shop's page. Seeing beats describing.
- A proper step-by-step. "How it works" is now three numbered steps — spot something, save it in one click (extension or paste a link), and it lands in your shop — instead of a feature list.
- "Why MightBuy is different" front and centre: your data is never for sale, no creepy tracking, free and it stays free, and we only earn when you choose to buy. The things that make MightBuy trustworthy are now a headline, not fine print.
- A short FAQ (is it free? do I need the extension? does it work on my phone? is my data private?) and a use-case strip for the "maybe" moments.
- The demo shop ("Load demo items") now comes with real product photos, so a fresh shop looks like a real shop from the first click.
Changed
- The "how we make money" page makes its point about only-earn-when-you-buy positively now, without taking a swipe at other tools.
Fixed
- Owner pages (To-do, Admin) no longer 404 on localhost. Every footer link now works in local development regardless of whether you're logged in — while the dangerous admin actions (like deleting a user) stay locked to the real owner account, since local dev talks to the live database.
21 files touched
- CHANGELOG-LLM.md
- CHANGELOG.md
- apps/web/package.json
- apps/web/public/extension2.png
- apps/web/public/shop-preview.png
- apps/web/src/app/admin/page.tsx
- apps/web/src/app/how-we-make-money/page.tsx
- apps/web/src/app/layout.tsx
- apps/web/src/app/page.tsx
- apps/web/src/app/todo/page.tsx
- apps/web/src/components/landing.tsx
- apps/web/src/components/site-footer.tsx
- apps/web/src/lib/admin.ts
- apps/web/src/lib/demo-items.ts
- documents/NOW.md
- documents/launch.md
- documents/specs/web/admin.md
- documents/specs/web/landing.md
- documents/specs/web/legal.md
- documents/specs/web/shop.md
- documents/specs/web/todo.md
0.0.48 — Honest analytics, honest cookies
Added
- Vercel Web Analytics — cookieless, aggregate-only visit counts so we know if anyone's out there. Stores nothing on your device, no consent banner needed, and the privacy policy names it in plain English (keeping the promise it made to name any tool we enable).
Fixed
- A cookie audit found one undocumented cookie — the shop sidebar's open/closed preference. The privacy policy now mentions it. Anonymous visitors still get zero cookies; that stays true.
8 files touched
- CHANGELOG-LLM.md
- CHANGELOG.md
- apps/web/package.json
- apps/web/src/app/layout.tsx
- apps/web/src/app/privacy/page.tsx
- apps/web/src/components/site-footer.tsx
- documents/specs/web/legal.md
- documents/tech-stack.md
0.0.47 — A public footer that knows who's looking
Changed
- The footer now shows visitors only what's for them: the contact email (written out — no more dead-feeling "Contact" link), categories, and the legal pages. The owner tools — To-do and the three changelogs — appear only for Chris's own login (and always on localhost during development). Beta users get a clean consumer footer with no dev clutter.
8 files touched
- CHANGELOG-LLM.md
- CHANGELOG.md
- apps/web/package.json
- apps/web/src/components/footer-links.tsx
- apps/web/src/components/site-footer.tsx
- apps/web/src/components/todo-link.tsx
- documents/specs/web/changelog.md
- documents/specs/web/todo.md
0.0.46 — Login page polish
Changed
- The login card's logo is now centred and clicks through to the home page, and a "← Back to website" link sits under the card — no more dead ends for visitors who wandered in.
202 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-EXTENSION.md
- 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/config.ts
- apps/extension/entrypoints/popup/index.html
- apps/extension/entrypoints/popup/main.tsx
- apps/extension/entrypoints/popup/style.css
- apps/extension/icon-source.svg
- apps/extension/package.json
- apps/extension/public/icon/128.png
- apps/extension/public/icon/16.png
- apps/extension/public/icon/192.png
- apps/extension/public/icon/32.png
- apps/extension/public/icon/48.png
- apps/extension/public/icon/512.png
- apps/extension/public/icon/96.png
- apps/extension/scripts/gen-icons.mjs
- 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/icon/128.png
- apps/web/public/icon/16.png
- apps/web/public/icon/192.png
- apps/web/public/icon/32.png
- apps/web/public/icon/48.png
- apps/web/public/icon/512.png
- apps/web/public/icon/96.png
- 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/admin/actions.ts
- apps/web/src/app/admin/page.tsx
- apps/web/src/app/admin/user-row.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/sellers/route.ts
- apps/web/src/app/api/tokens/[id]/route.ts
- apps/web/src/app/api/tokens/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/extension/page.tsx
- apps/web/src/app/changelog/llm/page.tsx
- apps/web/src/app/changelog/page.tsx
- apps/web/src/app/coming-soon/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/manifest.ts
- apps/web/src/app/page.tsx
- apps/web/src/app/privacy/page.tsx
- apps/web/src/app/robots.ts
- apps/web/src/app/s/[slug]/page.tsx
- apps/web/src/app/share/route.ts
- apps/web/src/app/sitemap.ts
- apps/web/src/app/terms/page.tsx
- apps/web/src/app/todo/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/landing.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/public-list.tsx
- apps/web/src/components/save-from-phone.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/todo-link.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/admin-data.ts
- apps/web/src/lib/admin.ts
- apps/web/src/lib/api-auth.ts
- apps/web/src/lib/changelog.ts
- apps/web/src/lib/cors.ts
- apps/web/src/lib/demo-items.ts
- apps/web/src/lib/extract-product.ts
- apps/web/src/lib/format.ts
- apps/web/src/lib/net-guard.ts
- apps/web/src/lib/prefs.ts
- apps/web/src/lib/rate-limit.ts
- apps/web/src/lib/sellers/ebay-provider.ts
- apps/web/src/lib/sellers/mock-provider.ts
- apps/web/src/lib/sellers/search.ts
- apps/web/src/lib/sellers/types.ts
- apps/web/src/lib/session.ts
- apps/web/src/lib/shop-db.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/supabase/service.ts
- apps/web/src/lib/tokens.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/launch.md
- documents/mobile-capture.md
- documents/monetisation.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/admin.md
- documents/specs/web/api-extract.md
- documents/specs/web/api-items.md
- documents/specs/web/api-sellers.md
- documents/specs/web/api-tokens.md
- documents/specs/web/auth.md
- documents/specs/web/categories.md
- documents/specs/web/changelog.md
- documents/specs/web/coming-soon.md
- documents/specs/web/landing.md
- documents/specs/web/legal.md
- documents/specs/web/login.md
- documents/specs/web/mobile-capture.md
- documents/specs/web/share.md
- documents/specs/web/shop.md
- documents/specs/web/todo.md
- documents/tech-stack.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/title-from-url.ts
- packages/shared/src/types.ts
- packages/shared/tsconfig.json
- pnpm-workspace.yaml
0.0.45 — MightBuy becomes a real business — and goes live
Added
- A real business behind the site, all in one day: a Manchester business address (Swan Buildings, Northern Quarter — on the terms and privacy pages), ICO data-protection registration (paid, reference to follow), and a business bank account underway. MightBuy is officially Chris Dykes, sole trader, trading as MightBuy.
Changed
- The legal pages are finished. Every decision that was open a week ago is now made and written in: who runs MightBuy and from where, age 18, the liability cap, governing law, the no-tracking analytics promise, and the affiliate networks we plan to work with (Skimlinks and Awin). All draft markers and the "early draft" banner are gone — the pages read like they mean it, because they do.
- The coming-soon gate is off. mightbuy.xyz serves the real product to the world. Next stop: affiliate network applications.
- The iOS Shortcut experiment is retired — mobile capture stays paste-a-URL and Android share for now; a proper app waits for evidence people want it.
0.0.44 — Skimlinks-readiness audit: the site gets its paperwork in order
Added
- robots.txt and sitemap.xml — both were quietly 404ing (found by the affiliate-network readiness audit). Launch-shaped: public pages listed, /api and owner dashboards excluded, shared lists deliberately unlisted.
- Contact link in the footer (hello@mightbuy.xyz) — reviewers and visitors can always reach a human.
Changed
- Footer grew up: "wireframe" → "beta", and the To-do link now only appears when you're signed in — visitors no longer see a link that 404s on them.
- Local production builds are no more (good-practices decision): typecheck + lint locally, Vercel builds on every push — which also fixes the dev-server breakage the old local builds caused.
0.0.43 — Legal pages decided + your to-do list on the site
Added
- A To-do page, right in the footer — an owner-only dashboard at /todo that renders the project's live planning docs (state of play + launch checklist), topped with a TL;DR of what's on Chris vs what's still to code. Updated automatically every session wrap; 404 for anyone who isn't the owner.
Changed
- Every open legal decision is now made — the terms, privacy and how-we-make-money pages went from 12 red markers to 6, and the remaining 6 are all waiting on actions (virtual address, ICO registration, network signups), not choices. Decided today, in blue for review: sole trader identity (Chris Dykes t/a MightBuy), minimum age 18, £100 liability cap, England & Wales law, privacy-friendly analytics commitment, and an inline commission note on shared lists once affiliate links go live.
0.0.42 — "Find other sellers" grows a real engine
Added
- A live price-comparison backend behind the "Other sellers" sheet — no more fake data plumbing. Every lookup now goes through a real API that matches items by barcode (GTIN) first, then brand + part number, then title, and says which it used. Results are cached so repeat lookups are instant. Try it
- eBay as the first real source — built and verified against eBay's docs; switches on the moment we add API keys (free developer signup, no waiting for launch). Argos, Currys and friends arrive via the affiliate networks after relaunch — same engine, they just plug in.
- Real Visit links on offers that have them — opens the seller's listing in a new tab (affiliate wrapping comes later, server-side, on click only).
Changed
- The demo-data badge now only appears when demo data is actually showing (dev without keys) — real results come unbadged.
- The to-do docs now spell out the signups that unlock all of this (eBay now; Skimlinks + Awin at relaunch) — see documents/NOW.md.
0.0.41 — Saves from blocked stores no longer feel broken
Added
- A guessed title when a store won't talk to us — some big retailers (Argos, Currys, Next, ASOS, Etsy, Amazon) block automatic lookups, so pasting their links used to dump you into an empty form with a red error. Now the link carries through with a title guessed from the URL itself where possible ("…/nike-air-max-90-trainers…" → "Nike Air Max 90 Trainers"), and a calm note explains what happened — with a reminder that the browser extension captures these stores perfectly. Try it
- The same title guess now applies to saves from your phone (the share/Shortcut path), so bare links to blocked stores get a readable card instead of a blank one.
Fixed
- Mistyped URLs no longer dump you into an empty manual form — you stay on the URL step to correct them.
0.0.40 — Back behind the coming-soon page
Changed
- The site is private again — mightbuy.xyz is back behind the coming-soon holding page, the same one as before. Nothing was rebuilt: the page and the gate had been left in place, so this was purely a matter of switching the gate back on.
- The legal pages are no longer public, which was the point — the draft markers on /terms and /privacy had been readable by anyone since the relaunch this morning, and were the top beta blocker.
Note
- Saving still works while the site is dark. The gate deliberately lets the API through, so the extension keeps saving to your shop as normal — only the pages are covered.
0.0.39 — MightBuy is live, and saves from a link actually work
Changed
- The site is public — mightbuy.xyz is out from behind the coming-soon page so it can be tested for real.
Fixed
- Saving from just a link now fills in the details. Send MightBuy a bare product link (the iPhone Shortcut, or anything that can post one) and it fetches the page's title, price and image itself instead of saving an empty card. The extension is unaffected — it already reads the page and what it sends always wins.
Known limitation
- Some big retailers block us from reading their pages server-side — Amazon, Argos, Currys, Next, ASOS and Etsy all refuse; John Lewis, IKEA and eBay are fine. This affects every way of saving except the browser extension (which reads the page in your own browser and still works everywhere). Affiliate APIs are the real fix — see capture-sweep.md.
0.0.38 — Save from your phone (mobile capture)
Added
- Save products from your phone — a new "Save from your phone" card on the account page walks you through adding MightBuy to your phone's share menu. Android is one-tap: install the web app and "Share → MightBuy" just works. iPhone uses an Apple Shortcut (no App Store needed) — the card explains the steps.
- Under the hood: the app is now an installable web app (PWA) that Android
registers as a share target, and a new
/sharehandler receives shared links and drops them into the add dialog ready to confirm. Shares made while signed out survive the login round-trip.
Note
- The iPhone Shortcut button shows "coming soon" until the Shortcut file is authored and hosted — a manual step still to do.
0.0.37 — A proper front door (marketing landing page)
Added
- A landing page for signed-out visitors — arrive at MightBuy without an account and you now get a proper one-page pitch (what it is, how it works, why it's trustworthy) instead of being dumped straight on the login screen. Sign in and you go right to your shop, same as before. Free-to-use and affiliate-honesty messaging up front, with a link to the full story.
0.0.36 — Production goes dark + legal pages audited
Added
- A coming-soon page now fronts the live site — mightbuy.xyz shows a simple holding page while the legal groundwork is finished. The save API stays up (the extension keeps working), and dev previews and localhost are unaffected. Flipping one setting brings the full site back — no code change.
- "Your data is not for sale" — a dedicated privacy-policy section: under no circumstances do we sell, rent, or trade personal data.
Changed
- Legal pages audited against the real product — the terms and privacy policy no longer describe the old browser-only era. They now cover accounts, server-side storage in the UK (London), the extension's save API, sign-in cookies, and self-serve export/delete — plus real contact addresses (privacy@ / takedown@ mightbuy.xyz). Freshly written text shows in blue pending review; the decisions still open stay in red.
0.0.35 — Extension gets store-ready + its own changelog
Added
- The extension has its own changelog now, at /changelog/extension (linked in the footer) — with its own version line starting at 0.0.1, since it ships to the Chrome Web Store separately from the website.
Changed
- The extension asks for less — swapped the broad
tabspermission for the narrowactiveTab(it can only read the page you clicked it on). Better privacy, smoother store review. - Leaner shipped extension — testing-only code is now stripped from the released build; fixed a local-dev URL override that never actually worked; gave the extension a real version number (was stuck at 0.0.0).
0.0.34 — Real extension icons + brand-name fixes
Added
- The extension now has a proper icon — the MightBuy M-monogram, at every size the browser and store need (no more placeholder art). Generated from a source SVG, so it's easy to regenerate if the logo changes.
Fixed
- Brand name was wrong in a few places the earlier rename missed — most importantly the extension's own name (what shows in the Chrome Web Store) said "Mightbuy" not "MightBuy". Also the login and shared-list pages had a stray lowercase "mightbuy". All corrected — the name is consistent everywhere now.
0.0.33 — Tech-stack doc, and tidy-up
Added
- A tech-stack document (
documents/tech-stack.md) — one place listing everything MightBuy runs on: the frameworks, the libraries, and the services (Vercel, Supabase, Resend, ImprovMX). It'll be kept current going forward.
Changed
- Sign-in now defaults to the real domain — Supabase's site URL points at
mightbuy.xyz(the domain finished going live), not the old vercel.app one. - Internal docs now say "MightBuy" too — finished the rename so the whole project, not just the parts users see, uses the camel-case brand.
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.
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.
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.
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".
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.
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.
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.
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).
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.
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)