nachosanbenito.com

One list for every internship opening.

Radar reads the job boards companies already publish and ranks every opening against your CV. On your own disk, no API key.

Radar14 openings
HoyEmpresas Spring weeksMi CV
EYIntern - VAT, Customs (Indirect Tax) Advisory & TransformationGeneva
MicrosoftSoftware Engineer Intern, AI/ML & LLMRedmond, WAaillm
Oliver WymanBeca RRHHMadrid
DatabricksSoftware Engineering Intern (2027 Start)Berlinengineering
ArdianPrivate Equity Buyout Stage - Mars 2027Paris
CelonisIntern Applied AI Engineering / Strategic Consulting (CoE Tiger Team)Madridaiengineering
PwCTax & Legal - Beca TRS Madrid 2026Madrid
JP Morgan2027 Data & AI - Summer InternshipLondonai
Pai PartnersESG internship, 6 months, starting January 2027Paris
BlaBlaCarStrategy & Business Analyst InternParisbusiness
KPMGTech Program - Becario/a de IT Asset Management (ITAM)Madrid
Deutsche BankExport Finance Paris Intern (f/m/x)Parisfinance
NestléPraktikum Trade Marketing (m/w/d)Frankfurt
DoctolibStage - SEO : Contenu & recherche IA (x/f/m)Parisia
Real rows from the author's catalogue, 5 October 2026. The words next to each match are the ones the app shows.

The whole thing in 40 seconds.

Radar filling its catalogue, ranking it against a CV and opening a posting. It has sound.

Internship listings live in a hundred career pages, each showing a different slice. Newsletters throw the data away after sending it. Radar keeps one list on your own disk, and tells you which openings match your CV.

Ranked against your CV. No model, no tokens.

Paste your CV once. SQLite FTS5 and bm25() order the Para ti ("For you") tab by match and show the words that hit. Title matches come first.

The real app: Ofertas, then Para ti, then one posting with its matches.
db.pysearch()
SELECT j.*,
  bm25(jobs_fts, W_COMPANY, W_ROLE, 0.0) AS score,
  bm25(jobs_fts, 0.0, 0.0, 1.0)  AS score_txt
FROM jobs j JOIN jobs_fts
  ON jobs_fts.rowid = j.id
WHERE jobs_fts MATCH :your_cv
ORDER BY (score = 0) ASC,
  score + W_TIE * score_txt

Software Engineer Intern, AI/ML & LLM

Microsoft, Redmond, WA

Matches in the title
aillm
Matches in the posting text
promptusercomputerpythonproductsengineering

The rest of the job. Done while you sleep.

Fills itself

Walks 89 company boards on public ATS APIs plus community GitHub boards. A first run takes about five minutes; after that it refreshes when you open it, or nightly from source.

GreenhouseLeverAshbyWorkdaySmartRecruiters

Reads the posting for you

descr.py fetches the actual job description, so you can judge a role without leaving the app. Postings that can't be read say why.

Texto leído de la fuente

Europe first, by your rules

Filters by graduation year, summer-only, degree level and region, all set in one config file.

esukdebeneluxus

Tells you what's new

Shows what came in since your last visit and flags openings the source stopped confirming, instead of letting them rot in the list.

sin refrescar 34d

Prepares the application

One button builds a prompt with the posting and your CV inside. You paste it into any assistant; it marks what to fill in by hand rather than invent it.

[COMPLETAR]

From the author's own catalogue.

1,017internship openings
111companies
746with the full posting text (73%)
0accounts, API keys or pip installs

Snapshot of the local database on 22 September 2026, the same one the film shows.

Three files and a database. All standard library.

  1. ingesta.py

    Walks the boards and writes through db.upsert(), nothing else.

  2. db.py + jobs.db

    Every SQL statement in the project lives in one file, and FTS5 lives inside search().

  3. app.py + index.html

    A Python ThreadingHTTPServer on 127.0.0.1 and one HTML file. Nothing is ever exposed to your network.

Install on your Mac. About a minute.

The third step happens only the first time.

Free and open source. Apple Silicon and Intel, 20 MB, macOS 11 or later. The interface is in Spanish.

  1. Drag it into Applications

    Open Radar.dmg and drag Radar onto the Applications folder.

  2. Open it. macOS stops it. Click Done.

    macOS says Apple could not verify “Radar” is free of malware. It says that about every app that isn't notarized by Apple. Click Done, not Move to Trash.

  3. Open Anyway, once

    Open System Settings → Privacy & Security, scroll down to Security and click Open Anyway next to “Radar” was blocked. Confirm with your password or Touch ID. From then on it opens with a double-click.

  4. Then let it fill, and paste your CV

    The first time it reads every board (about 5 minutes, with a progress bar). Then paste your CV in Mi CV and open Para ti. It refreshes by itself when you open it.

Why the warning? Notarizing an app needs a paid Apple developer account ($99 a year). This is a free side project, so it isn't notarized. The full source code is on GitHub, and you can check that your download is exactly the file I built. In Terminal:

shasum -a 256 ~/Downloads/Radar.dmg

should print 8a5e582dc6603458bd5d41c67ef7482c263bc6d74919ddb61fc8bd928e158dfb

Prefer the Terminal for step 3?
xattr -dr com.apple.quarantine "/Applications/Radar.app"

Or run it from source.

There is no hosted demo, on purpose. Radar holds your CV and your applications, so it runs on your machine at http://localhost:8000 instead of on somebody's server. You need Python 3.9+ with SQLite FTS5, nothing else.

git clone https://github.com/nachoie123/radar.git
cd radar
chmod +x instalar.command Radar.command
./instalar.command      # macOS: sets up the nightly agents and opens the app

# Linux / Windows
python3 ingesta.py      # fills the catalogue (~5 min the first time)
python3 app.py          # serves http://localhost:8000