diff --git a/openspec/changes/user-accounts/tasks.md b/openspec/changes/user-accounts/tasks.md
index 11c5811..8d5cf1a 100644
--- a/openspec/changes/user-accounts/tasks.md
+++ b/openspec/changes/user-accounts/tasks.md
@@ -58,7 +58,7 @@
- [x] 10.1 `[sonnet]` Create `src/app/(public)/login/page.tsx` — login form matching Lovable design: email/password inputs, "Sign In" button calling `signIn("credentials")`, "Continue with Google" button calling `signIn("google")`
- [x] 10.2 `[haiku]` Add error state display for invalid credentials
-- [ ] 10.3 `[haiku]` Add "Forgot password?" link (shows toast: "Not yet available"), "Sign up" link to `/register`
+- [x] 10.3 `[haiku]` Add "Forgot password?" link (shows toast: "Not yet available"), "Sign up" link to `/register`
## 11. Register Page
diff --git a/package-lock.json b/package-lock.json
index 29a6b14..84c4d87 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -27,6 +27,7 @@
"pg": "^8.13.1",
"react": "^19.2.4",
"react-dom": "^19.2.4",
+ "sonner": "^2.0.7",
"tailwind-merge": "^3.4.0",
"zod": "^4.3.6"
},
@@ -7282,6 +7283,16 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/sonner": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.7.tgz",
+ "integrity": "sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc",
+ "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ }
+ },
"node_modules/source-map": {
"version": "0.6.1",
"dev": true,
diff --git a/package.json b/package.json
index 7e94c97..421c736 100644
--- a/package.json
+++ b/package.json
@@ -33,6 +33,7 @@
"pg": "^8.13.1",
"react": "^19.2.4",
"react-dom": "^19.2.4",
+ "sonner": "^2.0.7",
"tailwind-merge": "^3.4.0",
"zod": "^4.3.6"
},
diff --git a/src/app/(public)/layout.tsx b/src/app/(public)/layout.tsx
index 9bdb63f..f911136 100644
--- a/src/app/(public)/layout.tsx
+++ b/src/app/(public)/layout.tsx
@@ -1,5 +1,6 @@
import type { Metadata } from "next";
import { SessionProviderClient } from "./session-provider";
+import { Toaster } from "sonner";
export const metadata: Metadata = {
title: "Candle Annotator",
@@ -14,6 +15,7 @@ export default function PublicLayout({
return (