I’m an international student at Monash University in Australia. A few months ago I was trying to figure out whether my career plan actually made financial sense — is my target job in shortage, does it qualify for a 482 visa, can I afford to live in Melbourne on a student visa income, how long does my degree take to pay off.
The answer to all of these questions existed in public Australian government data. But it was spread across six different websites with no way to combine them. So I built Trajectra.
What it does


Trajectra is a free planning tool that combines Australian government datasets into one place for international students. You can search 916 occupations from the 2025 Jobs and Skills Australia occupation shortage list, see ABS median salary data for each job, check visa eligibility for the 482 Skills in Demand visa, calculate cost of living across 8 Australian cities, find and compare all 42 Australian universities, and build a financial plan combining your career, city and university to see if it’s viable.
The plan builder is the main feature. You pick a job, a city and a university, set your part-time working hours and wage, and it tells you your weekly surplus or deficit while studying, your total estimated study cost after part-time income, and how many years of graduate salary it takes to pay off your degree.
The data sources
Every dataset is from Australian government open data:
Jobs and Skills Australia Occupation Shortage List 2025 — 916 occupations with national and state-by-state shortage status
ABS Employee Earnings and Hours survey — median weekly salary at the 4-digit ANZSCO occupation level
LIN 24/089 — the 456 ANZSCO codes eligible for the 482 Core Skills visa stream
LIN 19/051 — the Specialist Skills stream determination based on ANZSCO major group
Department of Home Affairs — visa costs, stay durations and eligibility requirements
Study Australia — cost of living estimates by city across accommodation, food, transport and lifestyle categories
Universities Australia — all 42 member universities with locations and classifications
Fair Work Commission — minimum wage rates ($24.10/hr part-time, $30.13/hr casual)
The tech stack
Frontend is vanilla JavaScript and CSS on Cloudflare Pages. No framework — the whole thing is HTML files with ES modules. I wanted it to be fast and simple to deploy.
The backend is a Cloudflare Worker that does two things. First it handles job search — the entire OSL 2025 dataset and ABS salary data is embedded directly in the Worker as a JavaScript array. When you search, the Worker filters and returns matching jobs with salary data attached. Second it proxies all Anthropic API calls so the API key never hits the frontend.
Auth and data persistence is Supabase. Users sign in with Google and their plans are stored in four tables — plans, plan_jobs, plan_living and plan_unis. Row level security means users can only read and write their own data.
AI features use Claude Haiku via the Anthropic API routed through the Worker. There are three AI features — university descriptions generated on demand, a plan score out of 10 with a circular SVG ring indicator, and a plan comparison recommendation that picks a winner from up to three plans with pros, risks and alternatives.
The interesting technical decisions
Embedding the dataset in the Worker rather than a database was a deliberate choice. The OSL data is static — it updates once a year. Querying a database on every search adds latency and cost. Embedding 916 jobs as a JavaScript array in the Worker means search is instant and free.
The CORS handling took longer than expected. Anthropic’s API blocks direct browser requests so everything AI-related has to go through a proxy. Cloudflare Workers are perfect for this — they sit at the edge, add the API key from a Wrangler secret, and forward the request.
The Supabase RLS policies for plan_unis caused a specific gotcha worth documenting. A unique constraint on plan_id means the join returns a single object instead of an array. Every query that touches plan_unis needs an Array.isArray check or it breaks silently.
What I’d do differently
I’d set up proper analytics from day one. I launched without Cloudflare Web Analytics enabled and lost the first day of traffic data from a Reddit post that got 2000 views.
I’d also think more carefully about the Supabase schema before building the frontend. I had to add columns to plan_jobs mid-build (state shortage columns, is_csol, is_specialist, weeks_per_year) which meant updating the insert logic, the RLS policies and the frontend all at once.
Where it is now
Trajectra launched a week ago. It’s at trajectra.org — completely free, no ads, no account needed to browse. The plan builder requires a Google sign-in to save plans.
If you’re building something with Australian government open data or have questions about the Cloudflare Worker and Supabase setup I’m happy to answer questions in the comments.
Top comments (0)