diff --git a/web-app/src/pages/Home.jsx b/web-app/src/pages/Home.jsx
index 1b8ed1df..935e79d1 100644
--- a/web-app/src/pages/Home.jsx
+++ b/web-app/src/pages/Home.jsx
@@ -1,6 +1,6 @@
import { useState, useEffect } from 'react';
import { Link } from 'react-router-dom';
-import { Search, Filter, Book, AlertCircle, ArrowRight, Star, RefreshCw } from 'lucide-react';
+import { Search, Filter, Book, AlertCircle, ArrowRight, Star, RefreshCw, ArrowUpDown } from 'lucide-react';
import { motion, AnimatePresence } from 'framer-motion';
import { supabase } from '../lib/supabase';
@@ -11,6 +11,7 @@ export function Home() {
const [categoryFilter, setCategoryFilter] = useState('all');
const [loading, setLoading] = useState(true);
const [stars, setStars] = useState({});
+ const [sortBy, setSortBy] = useState('default');
const [syncing, setSyncing] = useState(false);
const [syncMsg, setSyncMsg] = useState(null);
@@ -105,8 +106,17 @@ export function Home() {
result = result.filter(skill => skill.category === categoryFilter);
}
+ // Apply sorting
+ if (sortBy === 'stars') {
+ result = [...result].sort((a, b) => (stars[b.id] || 0) - (stars[a.id] || 0));
+ } else if (sortBy === 'newest') {
+ result = [...result].sort((a, b) => (b.date_added || '').localeCompare(a.date_added || ''));
+ } else if (sortBy === 'az') {
+ result = [...result].sort((a, b) => a.name.localeCompare(b.name));
+ }
+
setFilteredSkills(result);
- }, [search, categoryFilter, skills]);
+ }, [search, categoryFilter, sortBy, skills, stars]);
// Sort categories by count (most skills first), with 'uncategorized' at the end
const categoryStats = {};
@@ -202,6 +212,17 @@ export function Home() {
))}
+
+