Astrolab: how I built free, method-based career guidance — and grew it to five countries
It started with my teenage nephew, whom every free quiz handed a label instead of an answer. So I built a service that computes your profile from a real method, matches professions with no AI invention, and shows honest salary and admission paths — now in five languages, with per-country data.
Astrolab is free, method-based career guidance — not fortune-telling. A RIASEC test computes your profile, matches professions (the AI explains the fit but never invents one), and honestly shows salary and admission paths — for each of five countries. Below is how I built it, starting with Russia, and the part that took the most work to get right: the salary data.
It started with my nephew. A teenager, time to choose what to study — and every free quiz we found did the same thing: it handed back a label (“you’re a humanities type”) or a list of forty job titles, and stopped exactly where the hard part begins. Who to actually become, and how to get there — figure it out yourself.
I built him something better. And while I was at it, I noticed adults have it worse. People in their 30s, 40s, 50s know they want out of their current work but have no idea what to move toward. The tools that could help either entertain, or make you finish the whole test and only then charge for the result. So I built that side too — the career-change track.
The service is called Astrolab. Free, no signup.
A method, not a mood
At its core: RIASEC (John Holland’s interest model, published in 1959; it powers O*NET, the U.S. Department of Labor’s occupation database today), Klimov’s typology, work values, and a short AI interview. You answer quick cards — there are no right answers — and get a visual radar profile instead of a single verdict-label.
A formula computes, AI only explains
This is a product about a life-shaping choice, so it has no right to hallucinate. A deterministic engine computes the profession match — from interests, subjects and values. The AI re-ranks the top and writes a warm “why you”, but it cannot add a profession outside the vetted catalog: anti-hallucination is built into the architecture. If the model is down, you still get a result, just without the text notes. AI assists, but never blocks.
Professions arrive in three baskets: “core” is a direct hit, “nearby” is adjacent, “dark horses” are unexpected but on-profile.
An honest “how to get in”
Picking a profession isn’t enough — between “I want” and “I got in” stands a wall of unclear steps. So every profession carries a path: field of study, which exams to sit, what deadlines to file by. Salary comes with an honest “estimate” badge, not “the exact number”. Where there’s no vetted data, it says so — no invented paths.
Five languages and per-country data
I started with Russia — salaries from Rosstat, later from live hh.ru, and admission paths from the national classifiers and postupi. Today Astrolab runs in five languages, and each version is localized to its country rather than machine-translated:
- Salaries: Russia — Rosstat and hh.ru; USA — BLS; Spain — Adzuna and INE; France — Adzuna and INSEE; Germany — Adzuna and Entgeltatlas (Bundesagentur für Arbeit).
- Admission: Russia — postupi.online; USA — College Scorecard; Spain — TodoFP; France — ONISEP and Parcoursup; Germany — BERUFENET.
Every number carries a source and a date. On the French profession page the salary comes in euros from Adzuna; on the U.S. page, in dollars from the BLS. No ruble ever leaks onto another country’s page — that’s wired into the API as a country filter.
The fiddly part — per-country salaries
It looks tidy in a list. In reality, honest per-country salaries were the part that resisted the most — each country a separate wrestle with its own source, and almost none came easy.
Russia — where I started. I wanted live job ads, but hh.ru’s open API is OAuth-gated and the state “Trudvsem” board kept flaking. So the first honest version came not from ads but from the official Rosstat wage survey (pay by occupation group): I took the group means, scaled them from October 2023 to now by Rosstat’s own economy-wide wage growth (×1.34), and turned the mean into a band. Airline pilot and fitness trainer I left on their prior estimate — their occupation group doesn’t fit the job. Coverage 88 of 90. Later I did get live hh.ru working (an app token, salaried postings only): p25–p75 percentiles, net→gross adjustment, professions with fewer than 30 postings skipped — 72 re-measured for real. What I threw out as lies: real-estate agent (commission fantasies in the ads), statistician (matched the wrong occupation), airline pilot (no real postings).
USA. The BLS has no usable API — only OEWS flat-file spreadsheets. I parsed those, joined them by occupation code, and returned a 25th–90th percentile annual band. Actors and musicians are counted hourly-only in OEWS — so I left them with no salary rather than a fabricated annual one. 46 of 49.
Spain, France, Germany — this is where I hit the wall. National statistics (INE, INSEE, Entgeltatlas) only give coarse group averages. To show a salary for a specific profession you need live ads. For Spain — the first international country — I first went to InfoJobs.net (Spain’s biggest job board): I registered for the API, and it just said “API keys temporarily unavailable”. I didn’t wait — I switched to Adzuna (which has an open API). And here’s where it got messy:
- Spanish ads rarely state a salary. Of 90 professions, only 17 cleared the minimum ad count. Of those, 8 I threw out by hand as unrepresentative: dev / qa / data-science skewed toward international remote work, realtors quoted commission instead of a wage, teachers were a mess between academia and oposición. That left 9 honest ones (accountant, electrician, lawyer, physician, managers…).
- I didn’t settle for nine — I cranked it up to 24: hand-curated queries per profession (Spanish + English variants for IT roles), exclude-regexes against noise (software architects leaking into “arquitecto”, party entertainers into “animador”), a foreign-country filter (Spanish boards are full of “Enfermero/a en Suiza” offers), and a plausibility window of €12k–150k/yr (mis-parsed monthly wages show up as 300k+). Where solid ads are thin, I keep the INE figure — I don’t invent.
- France and Germany use the same hybrid model: an INSEE / Entgeltatlas base plus a live-Adzuna override where the data is there.
And a cross-cutting problem — data leaking between countries. Ruble bands leaked onto the Spanish catalog and the landing page — the example profession showed rubles on any locale. I fixed it with country-scoping at the API level: one country’s numbers physically can’t reach another country’s page.
This is the boring part of the work that the polished happy-ending stories never show. But it’s exactly what separates “one more quiz” from a service you can trust.
A journal appeared
Astrolab has also grown a journal — articles on how to choose a profession: what RIASEC is, why the highest salary isn’t the first question, how to choose by method rather than guesswork. Not SEO filler, but write-ups that cite real research (Holland, 1959; O*NET; BLS). Each article is self-contained and localizes its data to the reader’s country.
Why free
Because I can. I like building systems that quietly help people — this is one of them. The test needs no account, the result lives on a link; minors’ data isn’t collected by default: privacy as a decision, not a checkbox.
Two honest notes, because career quizzes make a living reselling hope:
- It’s an estimate built on the RIASEC model — a good place to start thinking, not a diagnosis or a prophecy.
- It’s actually free and anonymous. No account, no “unlock your report”, no ads.
The full architecture write-up is in the Astrolab case.
Frequently asked questions
What is Astrolab?
A free career-guidance platform built on the RIASEC + Klimov method: a test computes your profile, matches fitting professions, and honestly shows salary and admission paths for each of five countries.
Is Astrolab paid?
No. Completely free, the test needs no signup, the result lives on a link. Minors' data isn't collected by default.
What languages does Astrolab support?
Five: Russian, English, Spanish, French, German. Each version is localized to its country rather than machine-translated.
Where do the salaries come from?
Per country, from separate sources: Russia — Rosstat and hh.ru; USA — BLS; Spain — INE and Adzuna; France — INSEE and Adzuna; Germany — Entgeltatlas and Adzuna. Every number carries a source and a date, and the figure itself is badged as an estimate.
Does the AI invent professions?
No. A deterministic engine computes the match from interests, subjects and values. The AI only re-ranks the top and writes the explanation — it cannot add a profession outside the vetted catalog.
Is it an exact salary for the profession?
No, it's an estimate — a range from the market or official statistics. A good place to start thinking, not a guarantee of a specific figure.