From 48cc6af6200b84bd38dd8b31b9c31b7e45879cba Mon Sep 17 00:00:00 2001 From: GRACENOBLE Date: Fri, 10 Jul 2026 02:25:16 +0300 Subject: [PATCH 1/2] feat(web): extract shared Logo component and clean up unused assets Replace duplicated header/sidebar logo links with a single reusable Logo component, add container padding, and remove unused default Next.js public assets. --- web/components/common/Logo.tsx | 9 +++++++++ web/components/common/container.tsx | 2 +- web/components/layout/AppSidebar.tsx | 7 +++---- web/components/layout/header.tsx | 6 ++---- web/public/file.svg | 1 - web/public/firebase-messaging-sw.js | 17 ----------------- web/public/globe.svg | 1 - web/public/next.svg | 1 - web/public/vercel.svg | 1 - web/public/window.svg | 1 - 10 files changed, 15 insertions(+), 31 deletions(-) create mode 100644 web/components/common/Logo.tsx delete mode 100644 web/public/file.svg delete mode 100644 web/public/firebase-messaging-sw.js delete mode 100644 web/public/globe.svg delete mode 100644 web/public/next.svg delete mode 100644 web/public/vercel.svg delete mode 100644 web/public/window.svg 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 From d1c993bc58dc545432a9fa1d729af9822bff6b29 Mon Sep 17 00:00:00 2001 From: GRACENOBLE Date: Fri, 10 Jul 2026 02:25:25 +0300 Subject: [PATCH 2/2] feat(backend): add password_reset_tokens migration --- .../20260627161855_password_reset_tokens.sql | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 backend/internal/infrastructure/database/migrations/20260627161855_password_reset_tokens.sql 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;