diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx
index ffaa97f..a6564e5 100644
--- a/frontend/src/App.jsx
+++ b/frontend/src/App.jsx
@@ -5,6 +5,7 @@ import Feed from './pages/Feed'
import CreatePost from './pages/CreatePost'
import History from './pages/History'
import Settings from './pages/Settings'
+import Search from './pages/Search'
import { api } from './api'
export default function App() {
@@ -16,6 +17,7 @@ export default function App() {
const [isRegistering, setIsRegistering] = useState(false)
const [loginError, setLoginError] = useState(null)
const [searchQuery, setSearchQuery] = useState('')
+ const [headerSearchQuery, setHeaderSearchQuery] = useState('')
// Check for saved user on mount
useEffect(() => {
@@ -38,10 +40,10 @@ export default function App() {
setLoginError(null)
try {
- const response = isRegistering
+ const response = isRegistering
? await api.register(loginEmail, loginPassword, loginEmail.split('@')[0])
: await api.login(loginEmail, loginPassword)
-
+
setUser(response.user)
localStorage.setItem('voicevault_user', JSON.stringify(response.user))
setShowLogin(false)
@@ -61,7 +63,7 @@ export default function App() {
const handleSearch = async (query) => {
setSearchQuery(query)
-
+
if (query.trim() && user?.user_id) {
try {
const results = await api.searchRAG(query, user.user_id)
@@ -73,6 +75,11 @@ export default function App() {
}
}
+ const handleNavigateToSearch = (query) => {
+ setActiveTab('search')
+ setHeaderSearchQuery(query)
+ }
+
const handlePostCreated = () => {
// Switch to feed after creating a post
setActiveTab('feed')
@@ -90,6 +97,8 @@ export default function App() {
switch (activeTab) {
case 'create':
return
+ case 'search':
+ return
case 'history':
return
case 'settings':
@@ -165,8 +174,8 @@ export default function App() {
}}
className="text-sm text-gray-600 hover:text-gray-900"
>
- {isRegistering
- ? 'Already have an account? Log in'
+ {isRegistering
+ ? 'Already have an account? Log in'
: "Don't have an account? Register"}
@@ -178,10 +187,10 @@ export default function App() {
// Main App
return (
-
+
-
+
{renderPage()}
diff --git a/frontend/src/components/AudioPostCard.jsx b/frontend/src/components/AudioPostCard.jsx
index a36b40d..5dc8a2c 100644
--- a/frontend/src/components/AudioPostCard.jsx
+++ b/frontend/src/components/AudioPostCard.jsx
@@ -178,6 +178,12 @@ export default function AudioPostCard({ post }) {
}`}>
{post.status}
+ •
+ {post.language && (
+
+ {post.language.toUpperCase()}
+
+ )}
{post.status === 'ready' && (
@@ -205,6 +211,8 @@ export default function AudioPostCard({ post }) {
+
+
{/* Description */}
{post.description && (
@@ -212,6 +220,7 @@ export default function AudioPostCard({ post }) {
)}
+
{/* Audio Player - Only show if ready */}
{post.status === 'ready' && (
<>
@@ -325,15 +334,6 @@ export default function AudioPostCard({ post }) {
Failed to process this recording. Please try uploading again.
)}
-
- {/* Language Tag */}
- {post.language && (
-
-
- {post.language.toUpperCase()}
-
-
- )}
)
diff --git a/frontend/src/components/Header.jsx b/frontend/src/components/Header.jsx
index 63c26b4..ca291f5 100644
--- a/frontend/src/components/Header.jsx
+++ b/frontend/src/components/Header.jsx
@@ -1,13 +1,21 @@
import { Search, LogOut } from 'lucide-react'
import { useState } from 'react'
-export default function Header({ onSearch, onLogout }) {
+export default function Header({ onSearch, onLogout, onNavigateToSearch }) {
const [searchQuery, setSearchQuery] = useState('')
const handleSearch = (e) => {
- const query = e.target.value
- setSearchQuery(query)
- onSearch?.(query)
+ e.preventDefault()
+ if (searchQuery.trim()) {
+ onNavigateToSearch?.(searchQuery.trim())
+ onSearch?.(searchQuery.trim())
+ }
+ }
+
+ const handleKeyPress = (e) => {
+ if (e.key === 'Enter') {
+ handleSearch(e)
+ }
}
return (
@@ -24,18 +32,19 @@ export default function Header({ onSearch, onLogout }) {
{/* Center: Search Bar */}
-
+
{/* Right: Logout */}
diff --git a/frontend/src/components/Sidebar.jsx b/frontend/src/components/Sidebar.jsx
index 3ade81c..753c1e1 100644
--- a/frontend/src/components/Sidebar.jsx
+++ b/frontend/src/components/Sidebar.jsx
@@ -1,9 +1,10 @@
-import { Plus, Home, History, Settings } from 'lucide-react'
+import { Plus, Home, History, Settings, Search } from 'lucide-react'
export default function Sidebar({ user, activeTab, onTabChange }) {
const navItems = [
{ id: 'create', label: 'Make an Archive Post', icon: Plus },
{ id: 'feed', label: 'My Feed', icon: Home },
+ { id: 'search', label: 'Search Archives', icon: Search },
{ id: 'history', label: 'History', icon: History },
{ id: 'settings', label: 'Settings', icon: Settings }
]
@@ -23,7 +24,7 @@ export default function Sidebar({ user, activeTab, onTabChange }) {
}
return 'U'
}
-
+
return (