diff --git a/backend/internal/infrastructure/database/migrations/20260627161855_password_reset_tokens.sql b/backend/internal/infrastructure/database/migrations/20260627161855_password_reset_tokens.sql
new file mode 100644
index 0000000..ddecfc4
--- /dev/null
+++ b/backend/internal/infrastructure/database/migrations/20260627161855_password_reset_tokens.sql
@@ -0,0 +1,13 @@
+-- +goose Up
+CREATE TABLE password_reset_tokens (
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
+ email TEXT NOT NULL,
+ token TEXT NOT NULL UNIQUE,
+ expires_at TIMESTAMPTZ NOT NULL,
+ used_at TIMESTAMPTZ,
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
+);
+CREATE INDEX idx_password_reset_tokens_token ON password_reset_tokens(token);
+
+-- +goose Down
+DROP TABLE IF EXISTS password_reset_tokens;
diff --git a/web/components/common/Logo.tsx b/web/components/common/Logo.tsx
new file mode 100644
index 0000000..e8d4304
--- /dev/null
+++ b/web/components/common/Logo.tsx
@@ -0,0 +1,9 @@
+import Link from 'next/link'
+
+export function Logo({ className }: { className?: string }) {
+ return (
+
+ App
+
+ )
+}
diff --git a/web/components/common/container.tsx b/web/components/common/container.tsx
index e0df43c..baee791 100644
--- a/web/components/common/container.tsx
+++ b/web/components/common/container.tsx
@@ -1,7 +1,7 @@
import { cn } from "@/lib/utils";
const Container = ({ children, className }: { children: React.ReactNode; className?: string }) => {
- return
{children}
;
+ return
{children}
;
};
export default Container;
diff --git a/web/components/layout/AppSidebar.tsx b/web/components/layout/AppSidebar.tsx
index a98295a..6ab7f0e 100644
--- a/web/components/layout/AppSidebar.tsx
+++ b/web/components/layout/AppSidebar.tsx
@@ -1,5 +1,5 @@
-import Link from 'next/link'
import { LayoutDashboard, Settings } from 'lucide-react'
+import { Logo } from '@/components/common/Logo'
import {
Sidebar,
SidebarContent,
@@ -13,6 +13,7 @@ import {
SidebarMenuItem,
} from '@/components/ui/sidebar'
import { UserMenu } from '@/features/auth/components/UserMenu'
+import Link from 'next/link'
const navItems = [
{ title: 'Dashboard', url: '/dashboard', icon: LayoutDashboard },
@@ -23,9 +24,7 @@ export function AppSidebar() {
return (
-
- App
-
+
diff --git a/web/components/layout/header.tsx b/web/components/layout/header.tsx
index a47a50e..94d0982 100644
--- a/web/components/layout/header.tsx
+++ b/web/components/layout/header.tsx
@@ -1,13 +1,11 @@
-import Link from "next/link"
+import { Logo } from "@/components/common/Logo"
import { NavAuth } from "./NavAuth"
export default function Header() {
return (
-
- App
-
+
diff --git a/web/public/file.svg b/web/public/file.svg
deleted file mode 100644
index 004145c..0000000
--- a/web/public/file.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/public/firebase-messaging-sw.js b/web/public/firebase-messaging-sw.js
deleted file mode 100644
index 48406f9..0000000
--- a/web/public/firebase-messaging-sw.js
+++ /dev/null
@@ -1,17 +0,0 @@
-importScripts('https://www.gstatic.com/firebasejs/12.0.0/firebase-app-compat.js')
-importScripts('https://www.gstatic.com/firebasejs/12.0.0/firebase-messaging-compat.js')
-
-// Firebase config is injected by the page before registering this worker,
-// via postMessage, or you can hardcode NEXT_PUBLIC_* values here at build time.
-// For development, populate these from your .env.local file.
-self.addEventListener('message', (event) => {
- if (event.data?.type === 'FIREBASE_CONFIG' && !firebase.apps.length) {
- firebase.initializeApp(event.data.config)
- firebase.messaging()
- }
-})
-
-// Background message handler — called when the app is not in the foreground.
-self.addEventListener('push', () => {
- // firebase-messaging-compat handles push events automatically once initialised.
-})
diff --git a/web/public/globe.svg b/web/public/globe.svg
deleted file mode 100644
index 567f17b..0000000
--- a/web/public/globe.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/public/next.svg b/web/public/next.svg
deleted file mode 100644
index 5174b28..0000000
--- a/web/public/next.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/public/vercel.svg b/web/public/vercel.svg
deleted file mode 100644
index 7705396..0000000
--- a/web/public/vercel.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/public/window.svg b/web/public/window.svg
deleted file mode 100644
index b2b2a44..0000000
--- a/web/public/window.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file