Logo

Pastplied

Personal project
Pastplied is a job application tracking system built with Next.js, TypeScript, Clerk and Convex that helps job seekers manage applications efficiently. Features AI-powered job data extraction using Google's Generative AI to automatically parse data, eliminating manual data entry.
Pastplied

Pastplied – A Smart Job Application Tracking System

Pastplied is a modern web application I built while actively searching for a job. During that process, I ran into a surprisingly common problem: job postings started to look familiar, but I couldn’t remember if I had already applied. There were no emails, no confirmations, and no reliable way to verify whether an application had already been sent.

That moment of confusion became the motivation behind Pastplied — a tool designed to track job applications clearly, reliably, and without friction, so every application is documented and easy to revisit.

Why I Built Pastplied

When applying to many roles across different platforms, it’s easy to lose track. Job boards don’t share data, confirmation emails get buried, and job titles often repeat across companies. I found myself hesitating before applying, wondering:

  • Did I already apply to this position?
  • When did I apply, if at all?
  • Which companies have I already contacted?

Pastplied solves this by giving me a single source of truth for my job search — a dashboard where every application is stored, searchable, and timestamped.

What the Project Does

Pastplied is a job application tracking system that lets users save and manage job applications with minimal manual input. Instead of filling out long forms, users simply paste a job listing URL, and the app takes care of the rest.

Using AI-powered extraction, Pastplied automatically detects:

  • Job title
  • Company name
  • Job location

Each application is then stored with an application date and can be edited, updated, or removed at any time.

The goal was to make tracking applications faster than applying itself.

Smart Job Import With AI

The most distinctive feature of Pastplied is its smart job import. I wanted the process to feel effortless, so I integrated AI-based extraction that reads job listings directly from their URLs.

In the initial version, I implemented job extraction by directly fetching and parsing the HTML of a job listing page. This worked well for static websites, but I quickly ran into a limitation where some job boards rely on client-side rendering.

As a result, some pages returned incomplete or empty HTML, causing the extraction process to fail entirely.

Instead of trying to handle dozens of edge cases across different sites, I rethought the approach.

I introduced an external content retrieval layer using Jina AI. Instead of fetching the page directly, the application now sends a request to:

text
https://r.jina.ai/<job-url>

Jina AI handles the page rendering and returns a clean, structured markdown version of the content. This completely bypasses issues with client-side rendering and inconsistent HTML structures.

From there:

  • The markdown content is passed to Google Generative AI
  • The model extracts key job details such as title, company, and location
  • The structured data is stored in the application

This change made the extraction process significantly more reliable and consistent across different job platforms, regardless of how the page is built.

Flexible Job Entry

While automation is a core feature, I also recognized that it shouldn’t be a limitation.

In the original version, users could only add jobs through automatic extraction. This created friction when extraction failed or when users wanted to log applications manually.

To solve this, I added a manual entry flow via a modal form.

Users can now:

  • Manually input job details when needed
  • Quickly log applications without relying on a URL
  • Use it as a fallback when automation isn’t necessary

This small addition significantly improved usability by giving users full control, instead of forcing a single workflow.

Clean Dashboard for Job Search Clarity

Once applications are added, they appear in a clean, minimal dashboard designed for clarity. From there, users can:

  • See all applications at a glance
  • Track when each application was submitted
  • Edit details as needed
  • Remove outdated or irrelevant applications

The interface is fully responsive and supports dark mode, making it comfortable to use during long job search sessions.

How It’s Built

Pastplied is built as a modern full-stack application using the same production-grade tools I’d use in a real-world product.

Frontend

The frontend is built with Next.js (App Router) and React, using TypeScript for type safety. Styling is handled with Tailwind CSS and shadcn/ui, allowing for a clean, accessible design system with reusable components.

Form handling is implemented with React Hook Form and Zod, ensuring fast performance and strong validation.

Backend & Authentication

The backend is powered by Convex, providing real-time database updates and serverless functions without unnecessary complexity. Clerk handles authentication, keeping user data private and securely scoped to each account.

AI & Data Processing

For job data extraction, I initially relied on direct HTML fetching and parsing using Cheerio, combined with Google Generative AI to interpret the content.

While this approach worked for server-rendered pages, it proved unreliable for modern websites that depend on client-side rendering, where the HTML response is often incomplete or empty.

To address this, I redesigned the extraction pipeline by introducing an external content retrieval step using Jina AI.

Instead of parsing raw HTML directly:

  • The job listing URL is sent to Jina AI
  • Jina retrieves and renders the page content
  • The response is returned as clean, structured markdown

This markdown is then passed to Google Generative AI, which extracts key job details such as title, company, and location.

By separating content retrieval from data extraction, the system became significantly more robust and capable of handling a wider range of websites with consistent results.

What I Learned From This Project

Building Pastplied helped me explore:

  • AI-assisted data extraction in real-world, unreliable environments
  • Handling inconsistencies between server-rendered and client-rendered content
  • Designing fallback systems when automation isn’t enough
  • Real-time full-stack architecture
  • Secure authentication flows
  • UX design for high-friction workflows

Most importantly, it reinforced that good products don’t just automate, they adapt. The combination of automation and manual control turned out to be far more powerful than either approach alone.

Final Thoughts

Pastplied is a project born directly from experience. It’s a practical solution to a problem many job seekers face but rarely track properly. By combining automation, AI, and a simple interface, the app turns job application tracking into something effortless and reliable.

This project showcases my ability to identify real user pain points and turn them into polished, production-ready applications.

Project Gallery