Tracking Internship Applications Turned Out to Be More Valuable Than Recommending Them
I started with recommendations
Initially, I focused on building a recommendation system.
Suggest internships based on skills.
But quickly realized something:
Recommending is easy. Tracking is hard—and more useful.
What the system does
The internship module:
stores applications
tracks status (applied, interview, rejected)
analyzes patterns
First approach: static recommendations
const jobs = await getJobs();
const filtered = jobs.filter(job =>
matchesSkills(user.skills, job)
);
This works—but it ignores user history.
The real insight: applications are events
Instead of treating internships as static data, I stored them as events:
await saveEvent(userId, {
type: "application",
company: "CompanyX",
role: "Backend Intern",
status: "applied"
});
Now we have a timeline.
Using memory for tracking
const history = await hindsight.retrieve(userId);
const applications = history.events.filter(
e => e.type === "application"
);
This allows:
progress tracking
pattern detection
What changed
Instead of:
“Here are internships”
We can say:
“You applied to 5 backend roles but didn’t clear interviews”
That’s a completely different level of guidance.
Where Hindsight fits
We rely on
👉 https://github.com/vectorize-io/hindsight
to persist and retrieve application history.
Docs:
👉 https://hindsight.vectorize.io/
Overview:
👉 https://vectorize.io/features/agent-memory
What worked
event-based storage
timeline tracking
pattern recognition
What didn’t
static job lists
ignoring past applications
Lessons
history is more valuable than suggestions
tracking enables insight
memory enables continuity
Final thought
Recommending opportunities is useful.
Understanding what happened after applying is more powerful.
Top comments (0)