sync: Redis caching, progress bar rewrite, sentry filtering, UI improvements

- Add Redis caching to all pages and uncached API routes
- Rewrite progress bar with direct DOM manipulation for search/filters/navigation
- Filter generic network errors from Sentry client reporting
- Fix non-null assertion for repo.owner in popular-repos strategy
- Remove next-nprogress-bar dependency

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
airano
2026-02-22 12:58:16 +03:30
parent 0713607693
commit d19113795e
16 changed files with 353 additions and 151 deletions

View File

@@ -15,7 +15,7 @@ import { ShareButton } from '@/components/ShareButton';
import { createDb, skillQueries } from '@skillhub/db';
import { FORMAT_LABELS } from 'skillhub-core';
import { formatCompactNumber } from '@/lib/format-number';
import { shouldCountView } from '@/lib/cache';
import { shouldCountView, getOrSetCache, cacheKeys, cacheTTL } from '@/lib/cache';
import type { Metadata } from 'next';
import { getPageAlternates } from '@/lib/seo';
@@ -46,11 +46,13 @@ interface SkillPageProps {
params: Promise<{ locale: string; id: string[] }>;
}
// Get skill directly from database
// Get skill with Redis caching (1 hour TTL)
async function getSkill(skillId: string) {
try {
const db = createDb();
return await skillQueries.getById(db, skillId);
return await getOrSetCache(cacheKeys.skillDetail(skillId), cacheTTL.skill, async () => {
const db = createDb();
return await skillQueries.getById(db, skillId);
});
} catch (error) {
console.error('Error fetching skill:', error);
return null;