How pgramer1/hivenote works
Purpose and Entry Points
HiveNote is a Next.js App Router academic resource-sharing platform. Users browse scoped university content, upload resources, interact socially, and chat with PDF content. The application shell and public landing entry are src/app/layout.tsx and src/app/page.tsx; route pages under src/app/resources, src/app/university, src/app/me, and src/app/admin define primary user surfaces.
Application and Route Layer
Server-rendered App Router pages organize the main navigation: resource discovery/detail/upload at src/app/resources/page.tsx, src/app/resources/[id]/page.tsx, and src/app/resources/upload/page.tsx; hierarchical catalog browsing at src/app/university/page.tsx and src/app/university/[department]/[batch]/[semester]/[subject]/page.tsx. Shared providers are mounted through src/app/providers.tsx.
Identity, Sessions, and Access Control
NextAuth supports Google OAuth and credentials through src/app/api/auth/[...nextauth]/route.ts, with auth configuration in src/lib/auth.ts. Password and email-verification lifecycle endpoints live under src/app/api/auth/*. Authorization boundaries are centralized in src/lib/permissions.ts; admin routes (src/app/admin/page.tsx) manage academic taxonomy and require the ADMIN role.
Resource Lifecycle and Social Interactions
Resource creation and mutation are implemented as server actions, principally src/actions/resources.ts, while uploads are driven from src/app/resources/upload/UploadForm.tsx. Resources store metadata, classification, extracted content, and engagement state. Votes, favorites, comments, and views flow through src/actions/vote.ts, src/actions/favorites.ts, src/actions/comments.ts, and src/actions/incrementView.ts; detail-page client features render these interactions in src/components/features/ResourcePageClient.tsx and src/components/features/ResourceDiscussion.tsx.
Academic Taxonomy and Administration
Resources are classified along university → department → batch → semester → subject. The persistent model and relations are defined in prisma/schema.prisma. Administrative CRUD actions for these structural entities are separated into src/actions/admin-departments.ts, src/actions/admin-batches.ts, and src/actions/admin-subjects.ts, surfaced by corresponding routes under src/app/admin/.
AI Retrieval and PDF Chat
The PDF/chat boundary is the HTTP API at src/app/api/chat/route.ts, consumed by src/components/features/ResourceChatBot.tsx. Retrieval and generation orchestration reside in src/lib/rag.ts; embedding generation is isolated in src/lib/embeddings.ts. Schema migrations include RAG chunks, hybrid retrieval/citations, embeddings, and persisted chat history under prisma/migrations/20260321000100_add_rag_pipeline through prisma/migrations/20260327154530_restore_hnsw_index. Gemini and Groq are the model providers via Vercel AI SDK.
Persistence and External Infrastructure
Prisma (src/lib/prisma.ts) connects the Next.js server to PostgreSQL, intended for Neon; prisma/schema.prisma and prisma/migrations/ are the schema source of truth. Cloudinary integration is contained in src/lib/cloudinary.ts for stored files. Brevo transactional mail is mediated by src/lib/email.ts. Deployment targets Vercel; runtime configuration is supplied through environment variables documented in .env.example.
Main entry points: prisma.ts Prisma data access · rag.ts RAG orchestration · layout.tsx App shell · page.tsx Resource routes
Components 22
Next.js application
App Router pages, clients, and server actions.
- App shell
src/app/layout.tsx - Shared providers
src/app/providers.tsx - Resource routes · Discovery, detail, and upload surfaces.
src/app/resources/page.tsx - University catalog · Scoped academic browsing hierarchy.
src/app/university/page.tsx - Upload form
src/app/resources/upload/UploadForm.tsx - Resource actions · Creates and mutates resource records.
src/actions/resources.ts - Social actions · Votes, favorites, comments, and views.
src/actions/vote.ts - Resource interactions
src/components/features/ResourcePageClient.tsx
Identity and access
- Admin area · ADMIN-only taxonomy management.
src/app/admin/page.tsx - NextAuth API · Google OAuth and credentials entry point.
src/app/api/auth/[...nextauth]/route.ts - Auth configuration
src/lib/auth.ts - Authorization rules
src/lib/permissions.ts
Data and taxonomy
- Taxonomy admin actions · Department, batch, and subject CRUD.
src/actions/admin-departments.ts - Prisma data access
src/lib/prisma.ts - Academic and RAG schema · Resources, taxonomy, social state, chunks, and chat history.
prisma/schema.prisma
PDF chat and retrieval
- PDF chat API
src/app/api/chat/route.ts - Resource chat UI
src/components/features/ResourceChatBot.tsx - RAG orchestration · Hybrid retrieval, citations, generation, and chat history.
src/lib/rag.ts - Embedding generation
src/lib/embeddings.ts
External services
- PostgreSQL / Neon
- Gemini and Groq · Accessed through Vercel AI SDK.
- Cloudinary
src/lib/cloudinary.ts
Connections 25
- App shell → Shared providers: mounts
- App shell → Resource routes: serves
- App shell → University catalog: serves
- Shared providers → NextAuth API: session access
- Resource routes → Upload form: renders
- Upload form → Resource actions: submits
- Resource actions → Prisma data access: persists metadata
- Resource actions → Cloudinary: stores files
- Resource routes → Resource interactions: renders detail features
- Resource interactions → Social actions: interacts
- Social actions → Prisma data access: persists engagement
- University catalog → Prisma data access: queries scoped catalog
- Admin area → Authorization rules: requires ADMIN
- Admin area → Taxonomy admin actions: manages taxonomy
- Taxonomy admin actions → Prisma data access: updates hierarchy
- NextAuth API → Auth configuration: uses
- Auth configuration → Prisma data access: loads identities
- Prisma data access → Academic and RAG schema: maps
- Prisma data access → PostgreSQL / Neon: connects
- Resource interactions → Resource chat UI: hosts
- Resource chat UI → PDF chat API: sends chat requests
- PDF chat API → RAG orchestration: orchestrates
- RAG orchestration → Embedding generation: embeds and retrieves
- RAG orchestration → Prisma data access: reads chunks and history
- RAG orchestration → Gemini and Groq: generates answers