pulp  /pʌlp/  ·  noun

1. A soft, moist, shapeless matter. The inner moist part of fruit. Something cheap but lurid — designed for maximum impact.

2. (adj.) Of or denoting popular entertainment in a simplified or sensationalized form. See: Tarantino. See: this portfolio.

— Merriam-Webster, abridged for dramatic effect

← Back
In Progress

Case Study · Automation · Backend

JOB AGGREGATION
SYSTEM

Python + Playwright scraper feeding a Flask REST API backed by PostgreSQL. Aggregates job listings across multiple boards, deduplicates, and tracks application status. Automated form-filling in progress.

PythonPlaywrightFlaskPostgreSQLSQLAlchemyAlembic

Architecture

WHAT'S BUILT

Scraper

Playwright + Python

Headless Chromium via Playwright scrapes job listings from multiple boards. Handles JavaScript-rendered pages that block simple HTTP scrapers. Randomised request timing and user-agent rotation to avoid rate limiting.

PythonPlaywrightChromium
API

Flask REST API

Flask serves scraped job data over a REST API. Endpoints for listing jobs, filtering by keyword/location, and marking applications. SQLAlchemy ORM manages PostgreSQL reads/writes.

FlaskPythonSQLAlchemyREST
DB

PostgreSQL

Jobs table stores listings with deduplication on (title, company, date_posted). Applications table tracks status per job (saved, applied, rejected, offer). Schema managed via Alembic migrations.

PostgreSQLAlembicdeduplication

Roadmap

WHERE IT'S GOING

DonePlaywright scraper — LinkedIn, Indeed, Workopolis
DoneFlask API with job listing + filter endpoints
DonePostgreSQL persistence with deduplication
DoneApplication status tracking (saved → applied → response)
In ProgressAutomated application form filling via Playwright
In ProgressResume tailoring per job description (keyword match)
PlannedEmail parser — ingest recruiter replies into application timeline
PlannedDashboard UI — React frontend for application pipeline view

First case study

RCAF Facial Recognition →
All Projects