Project Info
Inspiration
As a researcher, I find literature review tedious and impersonal. Generic search yields piles of irrelevant results. What if an AI agent learns how you learn, captures your interests and dislikes, reads papers in parallel, and surfaces what matters? I built PaperTrail to bring deep personalization to research discovery.
What it does
PaperTrail uses multi-agent orchestration with persistent memory. Describe a research topic and it: Searches the papers Scores paper relevance against your interests, goals, expertise, and feedback Returns relevant, personalized recommendations Learns from feedback to refine future suggestions and become more personal Reads specific papers on demand and answers questions in real time Sleeptime compute generates insights over previous conversations, further personalizing the agent. All personalized through a memory layer that adapts to your workflow. How I built it Multi-agent orchestration (Letta): supervisor agent generates targeted queries; workers fetch papers via Jina AI and evaluate in parallel. Deep memory architecture (Letta): profiles store interests, dislikes, goals, expertise, explanation style; conversation history; and feedback tables linking votes to preferences. Personalized scoring: workers use memory blocks to align recommendations to your profile. Real-time learning: each vote updates the user model, shaping future recommendations. Challenges Latency: parallel worker evaluations enabled fast, accurate recommendations. Personalization: memory blocks encoding interests, dislikes, expertise, and style lifted precision. Threading fine-grained preferences into agent prompts reliably. Accomplishments Deep personalization with feedback loops. Smooth real-time paper reading and Q&A. Clear UX that hides multi-agent complexity. Results improve with usage. What I learned Modern LLM orchestration frameworks are powerful. Memory matters: persistent user context beats session-only approaches for quality. Multi-agent systems call for careful supervisor–worker coordination and state handling.
What's next
Broader coverage: expand beyond arXiv (Google Scholar, semantic scholar). Fine-tuning with user feedback data. Collaboration features to share recommendations. Read-paper sessions with collaborative learning and notes. Big picture: personalized research that learns with you.
This repository has no readme, or GitHub could not be reached.
Analysis
View
Metric
- 16
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- CSSIn code
- Next.jsIn code
- ReactIn code
- SQLIn code
- SupabaseIn code
- Tailwind CSSIn code
- TypeScriptIn code
- PostgreSQLClaimed
7 of 8 appear in the indexed code. 1 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
522 KB
Source files
93
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
thorchh/CalHacks-PaperTrail
102 files · 1.1 MB · @ a490cd1
Structure
Interface
58 files · 57%Screens, components and styles rendered to the user.
API & routing
13 files · 13%Request entry points: routes, handlers and controllers.
Application logic
5 files · 5%Domain rules, services and shared utilities.
Data & schema
14 files · 14%Schema definitions, migrations and data access.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- TypeScript57%
- YAML40%
- SQL1%
- CSS1%
- Markdown1%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
papertrail/package.json
npm · 31- @letta-ai/letta-client
- @radix-ui/react-avatar
- @radix-ui/react-checkbox
- @radix-ui/react-dialog
- @radix-ui/react-dropdown-menu
- @radix-ui/react-label
- @radix-ui/react-select
- @radix-ui/react-slider
- @radix-ui/react-slot
- @radix-ui/react-tabs
- @supabase/ssr
- @supabase/supabase-js
- class-variance-authority
- clsx
- lucide-react
- next
- next-themes
- react
- +13 more
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
Feature verification
Built with Letta, Jina, Supabase, Next.js/React/TypeScript, shadcn, Tailwind, Claude Sonnet 4.5Verified
Built With: claude, css, jina, letta, next.js, postgresql, react, shadcn, sonnet4.5, supabase, tailwind, typescript
Claimed on Devposthigh confidencepapertrail/package.json:19— Dependencies include @letta-ai/letta-client, @supabase/ssr, @supabase/supabase-js, next, react, typescript, tailwindcsspapertrail/lib/agents/letta.ts:134— Agents are created with model: 'anthropic/claude-sonnet-4-5-20250929', matching the Sonnet 4.5 / Claude claimpapertrail/components.json:2— shadcn schema config file present, confirming shadcn/ui usage
Learning from feedback (upvote/downvote) to refine future suggestionsVerified
Learns from feedback to refine future suggestions and become more personal; each vote updates the user model
Claimed on Devposthigh confidencepapertrail/app/api/paper-feedback/route.ts:76— On upvote/downvote, the paper_likes or paper_dislikes memory block on the user's Letta agent is fetched, appended with the paper id, and updatedpapertrail/db/migrations/20251028_paper_feedback.sql:1— paper_feedback table persists per-user, per-paper vote type
Multi-agent supervisor/worker orchestration for paper searchVerified
Multi-agent orchestration (Letta): supervisor agent generates targeted queries; workers fetch papers via Jina AI and evaluate in parallel
Claimed on Devposthigh confidencepapertrail/lib/agents/letta.ts:277— runSupervisorWorkerFlow creates a supervisor agent, generates search queries, spawns 1-4 worker agents via createWorker, distributes candidate papers across them, and evaluates in parallel with Promise.allpapertrail/lib/agents/letta.ts:244— createWorker instantiates a Letta agent per worker to evaluate paper relevance
On-demand paper reading and real-time Q&AVerified
Reads specific papers on demand and answers questions in real time
Claimed on Devposthigh confidencepapertrail/lib/agents/letta.ts:92— runReaderFlow detects a paper link/arXiv id in the message, fetches full content via Jina, and sends it to a persistent Letta agent for summarization; subsequent messages to the same agentId let the user ask follow-up questionspapertrail/lib/agents/letta.ts:170— chatWithAgent routes messages containing arXiv ids/URLs or reader keywords (summarize/analyze/explain/read) into Reader mode
Paper search via web search / JinaVerified
Searches the papers using Jina AI to fetch content
Claimed on Devposthigh confidencepapertrail/lib/agents/letta.ts:257— fetchJinaSummary builds a request to https://r.jina.ai/ to fetch paper HTML/content for arXiv IDs or URLspapertrail/lib/agents/letta.ts:193— Letta agents are created with tools: ['web_search'] used by the supervisor to find candidate papers
Persistent deep memory profile (interests, dislikes, goals, expertise, explanation style)Verified
Deep memory architecture (Letta): profiles store interests, dislikes, goals, expertise, explanation style; conversation history; and feedback tables linking votes to preferences
Claimed on Devposthigh confidencepapertrail/db/migrations/20251026_onboarding_profile.sql:4— profiles table has expertise_level and explanation_style columns in addition to interests/dislikes/goals from the init migrationpapertrail/lib/agents/letta.ts:220— Supervisor agent is created with memory blocks (human, persona, preferences, paper_interests, paper_likes, paper_dislikes, skip_rules, reading_history, learned) mirroring the claimed deep memory architecturepapertrail/db/migrations/20251028_paper_feedback.sql:1— paper_feedback table links user votes to paper ids, supporting the feedback-to-preference linkage claim
Personalized paper recommendations returned to userVerified
Returns relevant, personalized recommendations
Claimed on Devposthigh confidencepapertrail/lib/agents/letta.ts:415— Scores are sorted descending, top 6 selected, enriched with arXiv metadata, and returned as recommendations from runSupervisorWorkerFlowpapertrail/app/api/chat/route.ts:61— Recommendations are persisted to conversation_messages and returned to the client
Reading queue managementVerified
Curate personalized academic paper recommendations and manage a reading queue (implied by dashboard/reading-queue UI)
Claimed on Devposthigh confidencepapertrail/app/api/reading-queue/route.ts:32— Full CRUD API for a per-user reading_queue table (add, list unread, mark read, delete)papertrail/components/reading-queue.tsx:1— Dedicated UI component for the reading queue
Personalized relevance scoring against interests/dislikes/goalsCode-supported
Scores paper relevance against your interests, goals, expertise, and feedback
Claimed on Devpostmedium confidencepapertrail/lib/agents/letta.ts:365— Worker evaluation prompt includes user interests and dislikes and asks for a 0-100 relevance score; localScore() provides a fallback heuristic using the same fieldspapertrail/app/api/chat/route.ts:22— expertise_level and explanation_style are fetched from the profiles table but the UserProfile type/object passed into chatWithAgent only carries interests/dislikes/goals, so expertise is not actually threaded into scoring, only partially matching the claim
Sleeptime compute for generating insights across conversationsCode-supported
Sleeptime compute generates insights over previous conversations, further personalizing the agent
Claimed on Devpostmedium confidencepapertrail/lib/agents/letta.ts:136— Agents are created with enableSleeptime: true, delegating to Letta's built-in sleeptime feature, and a 'learned' memory block is provisioned to hold generated insightspapertrail/app/api/agent/learned/route.ts:26— Endpoint retrieves the 'learned' block value from the agent, presumably populated by Letta's sleeptime agent, but the actual insight-generation logic runs inside Letta's platform and is not implemented in this repo, so end-to-end behavior cannot be confirmed from code alone
An AI agent derived these features from the project’s Devpost page and readme, then searched the code for each one. Verified features are backed by cited code; claimed-only features had no supporting code, which is not by itself proof a feature is missing.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.