💼
Personal tools
Personal project

Job Dev — Application Tracker

Job Dev is my personal tool for organising a web development job search in Italy. It brings job listings, target companies, applications, follow-ups and CV versions into a private workspace. It addresses a practical need: keeping a reliable record of each application and identifying the next action to prepare.

Dashboard and application tracking

The overview shows saved opportunities, submitted applications, interviews and follow-ups due. Each opportunity retains its title, company, location, source link and description. A status workflow follows the application from reviewing the listing through to an offer, rejection or withdrawal.

  • Application and follow-up dates, notes and recruiter feedback.
  • Change history and retention of the CV actually attached to an application.
  • Text search, status and priority filters, and sorting by technical match, date or company.

Technical matching and job search

A weighted score compares technologies mentioned in a listing with the profile’s skills. Matching skills and technologies to check are explained; several technology filters can be combined using “any” or “all” logic. The score helps prioritise the review of opportunities and does not estimate the likelihood of being hired.

The Adzuna connector searches for Italian job listings using the profile’s keywords and location. It supports multiple queries, deduplication and locking of concurrent synchronisations. New listings do not overwrite existing application tracking. The search requires API keys configured on the server; a Symfony command can also run a synchronisation.

Target companies and speculative applications

A company directory stores locations, websites or careers pages and notes. Excel/CSV import handles up to 5,000 rows in a 5 MB file and skips duplicates. A saved company can be used as the starting point for a speculative application.

Reference profile and PDF CVs

The reference profile contains experience, projects, skills, education and languages. For each opportunity, the application creates a fixed CV version, puts relevant skills first and selects projects from that profile. Dompdf exports the document as a one-page A4 PDF. Information is neither invented nor rewritten by AI. The PDF used to apply can be attached to the application and retained as a fixed record.

Architecture, security and mobile use

The PHP 8.4+, Symfony 8.1, Doctrine and MySQL backend exposes private routes and an API on the same domain as the React 19 and TypeScript frontend, built with Vite and Tailwind CSS 4. Inputs are validated and mutations protected with CSRF. Access uses an administrator account, secure sessions and login rate limiting. CVs are stored outside the public directory and downloaded through an authenticated route.

The responsive interface provides touch navigation and a manifest for installation on a phone. The service worker displays an offline page without caching private application data. Internet access is required to view and save data. Deployment uses a Linux VPS, Apache, a dedicated PHP-FPM pool and HTTPS.

My role and project status

I designed the data model, APIs, interface, import workflow, matching calculation, CV versions and deployment. Functional and service tests check workflows and the connector with simulated responses. The application is deployed and access remains private. It does not submit applications automatically or read emails; Adzuna search and scheduling depend on server configuration.

Screenshots show the real interface with demonstration data and do not disclose personal applications.