feat: add use cases marketing product with AI-generated content

Transform qualifying scenarios into marketing-ready use cases with:
- AI-generated titles, descriptions, ROI estimates, business value
- Persona/industry/category taxonomy for targeting
- Browseable feed with filtering and ranking
- SEO-optimized case study pages
- Daily cron job for generation and ranking

Database:
- Add Persona, Industry, Category lookup tables
- Add UseCase model with marketing content fields
- Add junction tables for personas/industries/categories
- Add SocialProof model for cached metrics

API:
- GET /api/use-cases - Global directory with filtering
- GET /api/use-cases/[id] - Individual use case details
- GET /api/public/users/[username]/collections/[slug]/use-cases
- POST /api/cron/use-cases - Nightly generation job

Frontend:
- /use-cases - Global feed with persona dropdown
- /use-cases/[slug] - SEO case study page
- /[username]/collections/[slug]/use-cases - Collection feed
- UseCasesFeed component - Sortable table component
- UseCaseCaseStudy component - Full case study layout
This commit is contained in:
Ajax Davis 2026-01-20 16:17:35 +10:00
parent 5fafc90e3e
commit 48c41e8733
245 changed files with 4734 additions and 2075 deletions

View file

@ -5,44 +5,40 @@
// Changes feed
export {
fetchChanges,
type Change,
type ChangesFeedResponse,
type FetchChangesOptions,
type FetchChangesResult,
fetchChanges,
} from './changes';
// Keyword search
export {
searchByKeyword,
searchAllByKeyword,
type SearchPackage,
type SearchResult,
type SearchResponse,
type SearchByKeywordOptions,
} from './search';
// Package metadata
export {
fetchPackageMetadata,
fetchLatestPackageVersion,
fetchLatestPackageWithMetadata,
fetchPackageTpmjsField,
type PackageVersion,
type PackageMetadata,
type PackageVersionWithReadme,
} from './package';
// Download statistics
export { fetchDownloadStats, fetchBulkDownloadStats, type DownloadsResponse } from './stats';
// GitHub statistics
export {
fetchGitHubStars,
fetchGitHubStarsFromRepository,
parseGitHubUrl,
type GitHubRepoResponse,
parseGitHubUrl,
} from './github';
// Package metadata
export {
fetchLatestPackageVersion,
fetchLatestPackageWithMetadata,
fetchPackageMetadata,
fetchPackageTpmjsField,
type PackageMetadata,
type PackageVersion,
type PackageVersionWithReadme,
} from './package';
// Rate limiting
export { delay, RateLimiter, npmRateLimiter, retryWithBackoff } from './rate-limiter';
export { delay, npmRateLimiter, RateLimiter, retryWithBackoff } from './rate-limiter';
// Keyword search
export {
type SearchByKeywordOptions,
type SearchPackage,
type SearchResponse,
type SearchResult,
searchAllByKeyword,
searchByKeyword,
} from './search';
// Download statistics
export { type DownloadsResponse, fetchBulkDownloadStats, fetchDownloadStats } from './stats';