>Board and company filters: a real "Apply filters" button now sits at the bottom of the filter panel, with a "Reset filters" button under it, replacing the tiny checkmark.
>Your active filters (including the search query) now show as removable chips above the results. Clear any one with a click, or all of them at once.
>Mobile: one menu instead of two. The avatar and the hamburger merged into a single button that opens the main menu, with your account, credits and sign out inside it.
July 20, 2026v0.137.0
>ATS Keyword Match: every job now shows how many of the posting's key terms appear in your resume, and names the ones that do not. If you keep more than one resume, pick which one it scores against. English-language postings for now.
>Job board: the selected job's actions (Open, + Queue, Tailor) moved into a header band on the reading pane, next to the match score, so the controls sit with the job they act on.
>Match: filtering by location works again. Type a city, state, or country and pick from the suggestions, the same way the board does. An empty deck under a filter now says so and offers to search anywhere.
>Cover letters export as a PDF from the tailor Review step, next to Copy.
>QuickApply shows your credit balance and tells you when you have run out, instead of quietly doing nothing. The extension now links straight to a top-up.
>QuickApply billing: a retried result could charge a second credit for a single application. It now bills exactly once.
>Applications: your interview and offer rates count every application that ever reached that stage, not just the ones sitting there right now. Sent applications also record the keyword match they went out with.
>Resume Builder: score a resume and go straight into tailoring it to a job, with that resume already picked.
>Buying credits returns you to whatever you were doing when you stopped.
>New accounts no longer come with free credits. Credits you have already earned are untouched.
>The feedback button moved into the top bar, where it no longer covers page content.
>ATS Keyword Match: the missing-terms list no longer includes the company name, the job's city, salary figures or filler words like "highly", so what it lists is something you can actually act on.
>Search: every word now has to match. Searching ai engineer returns jobs mentioning both, not jobs mentioning either, so a second word narrows your results instead of widening them.
>Search: wrap a phrase in quotes ("software engineer") to match those words together, in that order.
>Search: keyword results are capped at the 400 freshest matches so searches stay fast. A capped count shows as 400+.
July 17, 2026v0.135.2
>Board: the header Clear button is now labelled Clear All, so it is clear it wipes your search term along with every filter. To clear just the search term, use the x inside the search box.
July 16, 2026v0.135.1
>Tell us what you think: signed-in users now get a feedback button in the app. Report a bug, request a feature, or flag a UX, performance, or content issue, with an optional screenshot. Real people reply.
>Board: Open, Add to Queue and Tailor now sit in the page header next to the job you picked, with Report tucked into a More menu.
>Fixed an issue that could sign you out or show errors while you were browsing.
>QuickApply now goes quiet when nothing is running. The page used to refresh constantly in the background, which could trip rate limits and show errors elsewhere on the site. The live feed still updates step by step while an application is in flight, and pauses entirely when the tab is hidden.
>Page header buttons are now solid white on the black band (and flip in dark mode) instead of outlines.
>Removed the little keyboard hint chips from buttons and search fields across the app, along with the UI preferences toggle that hid them. The shortcuts themselves still work.
July 14, 2026v0.133.1
>Match: swipe through jobs picked for your resume, right to save and queue them, left to skip. Your location filter is now remembered.
>QuickApply: our browser extension pre-fills Greenhouse and Lever applications with your details, learns the answers you type for next time, and can draft answers with AI. You review and submit.
>Add to Queue: line up Greenhouse and Lever jobs straight from the board for QuickApply.
>Track: a new page with a pipeline graph and a drag-and-drop board for every application, filterable by time range. Your application history now lives here.
>Get the extension: a new page that points you to the right browser, with a direct Firefox install.
>Updated our privacy policy to cover the browser extension.
>Click a job status pill in the QuickApply queue to set its state by hand (Queued, Ready to submit, Submitted, Failed). Marking it Submitted moves it to Track.
>Connecting the browser extension now confirms success and takes you straight to Match.
>On a supported job application, the extension now prompts you to sign in when it is not connected yet, instead of doing nothing.
>The Match location filter now filters as you type, no need to click Apply.
>QuickApply learns from your edits: change any field it prefilled (including your name or preferred name) and it remembers your version for future applications.
>QuickApply more reliably records applications you finish (it was missing some Greenhouse submissions that jump straight to the confirmation page).
>After you submit an application, QuickApply confirms it was recorded and offers a "Next in Queue" button to move to the next job when you are ready.
July 11, 2026v0.123.0
>Opening a resume now zooms its preview card up into the editor, and the back button reverses the animation.
>Polished the resume library and editor: soft page shadows, a gradient backdrop, and the current top-nav section highlighted while the others dim.
>The Resume Builder is now the home for all your resumes: create, manage, and optimize them in one place.
>Your resume library shows a live preview of every resume, so you can spot the one you want at a glance.
>Tailoring is smoother: pick a resume, then review and edit the tailored result right in the builder before exporting, with a cover letter you can copy.
>Resume scoring now lives inside the builder. Score a resume and get dismissable, per-section suggestions floating next to the relevant part.
>Cleaner navigation and consistent page headers across Jobs, Resumes, Trends, and Intel.
>A lot of mobile polish: the header, logo, breadcrumbs, and page content now line up, with a taller top bar and a tidier account menu.
July 5, 2026v0.120.0
>A fresh look across the whole site: a clean black and white design system with Inter type, pill-shaped buttons, and flat, high-contrast surfaces (no more drop shadows on buttons, inputs, and cards).
June 27, 2026v0.119.0
>Tapping a job on a phone now opens it. The highlighted row in the list used to ignore your tap; every job now opens its detail page.
>The job board remembers your last search and filters. Reopen the board (or sign back in) and you land right where you left off.
>Tighter spacing on phones: a shorter header, slimmer page margins, and a denser job board (the freshness line is hidden on small screens to save room).
June 26, 2026v0.118.1
>Polished the new paste-a-resume flow: the Create button now waits until you have pasted enough text (so you no longer get a "too short" error after clicking), and the resume-score Turn this into a persona button only lights up when there is a resume to build from.
>Create a persona without a PDF: a new Paste text option (next to Upload PDF) on the onboarding step and the Add new persona dialog lets you paste your resume text instead of uploading a file.
>Resume Score now has a Turn this into a persona button, build a persona straight from the resume you just scored, no re-upload.
>Lined up the job board and companies content with the top navigation so the margins match.
>The homepage now leads with the live board: a Fresh on the board row of real, recent listings, each one click from the board.
>Tailor straight from a job posting: the resume tailor reuses the description you are already reading (no second fetch) and jumps right to picking a voice once you choose a persona.
>Added a freshness line by the listings (when we last updated and how many ATS sources we pull from) and a source tag on every job card.
>Tailored resumes now use short, clean job titles with no accidental duplicates.
>Filter rail polish: icons on the left to match the side rail, and the filters button is now a compact toggle that turns blue with a count when filters are active.
>Rebuilt the job board: it now scrolls like a normal page, with a sticky search bar, a Show / Hide filters button, and a docked filter rail (a slide-in drawer on mobile). Job cards show more at a glance, the location, how long ago a role was posted, a NEW tag for fresh listings, and the salary and remote / hybrid / on-site type when we have them. The job details open in a floating pane that follows you as you scroll.
>Cleaner filters: drill into any filter and apply it with a single checkmark, no more button bar at the bottom.
>The companies page now matches the job board layout, with the company profile and its open roles in the same floating pane.
>Refreshed the market pages: lighter backgrounds, the stats row and charts sit in clean cards, the metric picker stays pinned as you scroll, and the section cards pick up the brand blue.
>Unified breadcrumbs across the site into one consistent pill and chevron style.
>Tidied the top navigation (a lighter look) and slimmed the Tools menu down to a compact dropdown.
June 25, 2026v0.115.1
>Fixed the new homepage search so it reliably shows live matches for busy queries (it was timing out and reporting no results on broad searches like "product designer").
>Redesigned the homepage hero around search: a centered headline and a wider search field that shows live job matches as you type. Pick a result, or press enter, to jump straight into signup, with the demo animation now playing full width below.
>Company directory by country is cleaner: each country now has a single page (the old duplicate "US" / "USA" / "United States" pages are merged into one), and old links redirect to it.
>Company profiles and cards now show the full country name (United States) instead of the bare country code (US).
>Fixed the job board location filter: drilling into the United States now reliably lists its states again instead of coming up empty under load.
June 24, 2026v0.113.3
>Profile photos from Google and LinkedIn sign-in are now saved to our own storage at signup, so they no longer break or disappear over time.
>New Resume Score tool: upload or paste your resume for a free, instant ATS check. You get your rejection odds, a plain-language verdict, and a per-section breakdown with a suggested fix wherever your resume is weak.
>Added a Tools menu to the top navigation, so the Resume Tailor, Job Market Chat, Resume Score, and Personas are all one click away.
>The Resume Tailor now opens straight into your full, searchable persona list (the same view as the Personas page) instead of a dropdown.
>Added a Companies link to the site footer, and tidied up how the company and source pages are indexed so search engines credit the main page instead of duplicates.
>The job listing data we hand to search engines now only ever uses a role's real details, never auto-filled placeholders, so job results stay accurate.
June 23, 2026v0.112.1
>Creating a persona is simpler, both in first-run setup and on the Personas page: the cover letter is now optional (your resume is all we need), and we name the persona for you from the resume instead of asking you to type one. You can still rename it anytime. The upload boxes also pick up a clear selected style once a file is chosen.
>Refreshed the job board filter panel: a compact header with a funnel mark that lights up when filters are active, a primary Back button, and Apply / Clear buttons with icons. The cover-letter voice picker in Tailor now matches the board, with each voice as a card that fills in when selected.
>Filtering the job board by a busy facet (a country, language, or work type with thousands of matches) now loads quickly: the result count tops out at "1,000+" instead of tallying every match, so the page returns right away.
>Redesigned the homepage: a two column hero with a "Sign up now" button and an animated walkthrough of the job to tailored CV flow, the four tools laid out as compact columns right below it, and the company logos in their own strip.
June 22, 2026v0.110.1
>Job board searches that pair a city or state with other filters (remote roles in Boston, say) no longer time out: the board now steers the database to the most specific filter, so those searches return quickly instead of erroring.
>Redesigned the job board filters into one panel: pick everything you want, then apply it all together with the Apply and Clear buttons at the bottom, instead of the list reloading on every single change. Work type, company, language, and seniority are now clear multi-select checkboxes.
>The location filter drill-down (country to state to city) is much faster and stays populated even when the database is busy, so the list of states and cities loads quickly instead of occasionally coming up empty.
>Job board search is now reliable across every filter combination: filtering by state, city, region, language, or work type (on its own or combined with a keyword) is fast and no longer risks timing out, and a slow query degrades gracefully instead of erroring.
>The announcement bar above the top navigation is now sage green, so it reads as its own distinct band rather than blending into the blue nav.
>Cleaner location filters: duplicate city spellings are merged (Bengaluru and Bangalore, Gurgaon and Gurugram), junk entries like "Any Location" and "Field Based" no longer show up as places, more messy source formats (Workday-style codes, multi-location strings) parse correctly, and the country is kept on three-part addresses.
>Job board search is faster and more reliable: searches that combine a keyword with filters (a role plus a country, say) no longer time out, and results now stream in as they are found, so the first matches appear almost instantly instead of waiting for the whole search to finish.
>A search the database cannot run quickly no longer shows an error page: you now get a clear "search took too long" message with a one-click reset, and the filters stay usable.
>City-filtered job searches now return quickly: added a database index so filtering by a city no longer risks timing out on large result sets.
>Location filter drill-down now works for every country: countries without states (like India) show their cities instead of a dead-end "No options" message, and drilling into the United States now lists just the real states, DC, and territories (we were showing mislabeled cities and junk as "states").
>Temporarily removed the persona picker from the job board filters while we improve location-based search.
June 21, 2026v0.107.1
>Two free credits to get you started: one when you sign up, and one when you complete onboarding by building your first persona (existing accounts get them too).
>Onboarding is now optional and lives in a modal you open from a "Complete onboarding" prompt (in the top bar and your account menu, with a reminder dot until it is done) instead of a forced full-screen step on sign up.
>Building your first persona now happens in the background: a progress bar shows "Building your persona" while you keep browsing, and a confirmation pops up when it is ready. The Tailor and Personas pages show the same progress.
>Your credit balance is now always visible in the top navigation, next to your profile picture.
>Search engine fixes: every page now serves a single, correct canonical link (we were shipping duplicate and conflicting ones that Google ignores), and tidied up the crawler rules, including explicitly welcoming AI search engines like ChatGPT and Perplexity, so pages get indexed properly.
>Homepage: added a features table under the pricing that lays out every tool and whether it is free or paid (the job board, company intel, market trends, and posting a job are free; Market Chat and the CV Tailor are paid).
>Removed the soft blue glow beneath the top navigation bar, so it now has a clean flat edge.
>Homepage: replaced the small logo above "Try being less miserable" with a happy illustration that pairs with the one at the top of the section.
>Job board and companies list: the hovered and selected rows now use the same rounded corners as the buttons, for a more consistent look.
>Fixed a double scrollbar on individual job listing pages; the page now scrolls as one, with the action bar staying pinned at the top.
>Added the site footer to individual job listing pages, so the usual navigation and links are there at the bottom.
>Improved the search-engine data on job listing pages so Google reads each role's country, location, employment type, and expiry, helping listings show up as rich job results in search.
>Redesigned the social share preview cards (the image shown when you share a link) to match the new homepage look, with a fresh illustration. Company pages now get their own version too.
>Fixed first-run onboarding never appearing, new accounts now reliably land in the welcome flow after signing up.
>Onboarding now follows your light or dark theme, with a theme toggle in the corner.
>Removed duplicate job cards from the homepage and onboarding backdrops.
>Dark mode: the homepage job-card backdrop now uses dark blues that sit better on the dark background.
>Fixed gaps in the homepage and onboarding job-card backdrops; the scrolling rows now always fill the full width with no gaps, on any screen size.
>Fixed the homepage job-card backdrop showing large gaps or blank rows in Safari and Firefox; the rows now fill correctly in every browser.
>Top navigation bar is now a solid blue (removed the gradient on the logo panel).
>Redesigned filtering on the job board and companies pages into a single panel. It slides in from the left on phones, and sits in the filter rail on desktop. Tap a filter to drill into its options, use the back arrow to step up one level at a time, and selected options are now highlighted. The persona picker lives in the same panel, and the mobile Filters button gained a funnel icon.
>Centered the main navigation links in the top bar.
>Filters follow-ups: the location list no longer collapses to a single state when a work type is selected, a breadcrumb lets you jump back to any level or to all locations, and the panel spacing, type sizes, and radius buttons were tidied up.
June 20, 2026v0.103.2
>Reworked the homepage: a bold illustrated hero with a faded, live wall of real jobs drifting behind it, and one search to jump straight to the board.
>New 'Get ahead of the competition' section laying out the four tools (Jobs inbox, CV Tailor, Company Intel, Market Trends) with a link into each.
>Redesigned the 'what you're doing now isn't working' comparison into a clean, aligned table.
>Refreshed the top navigation: a brand blue bar with the Miserably Unemployed wordmark and a built-in job search.
>The top bar's job search now fades in as you scroll past the hero search.
>Fixed the homepage job backdrop sometimes not appearing after a deploy.
>Added a big batch of Middle East jobs (Qatar, the UAE, and Saudi Arabia), from Gulf enterprises like Aramco, SABIC, ADNOC, and Emirates to regional tech startups.
>Added a Pricing link to the top navigation.
>Refreshed the 'how it works' page with a simpler header and a cleaner, tighter feature layout.
>Fixed the job board location search hanging or not showing places you know are there; results are now instant.
>Mobile job board polish: the selected listing no longer renders as a stray boxed card, and the job detail action bar now stays pinned to the top as you scroll.
>Tidied the job detail page: Open and Tailor resume buttons swapped, and the reactions and comments (part of the upcoming feed) are hidden until it ships.
June 19, 2026v0.101.0
>Fixed a bug that could prevent you from deleting your account.
>Refreshed modals with a subtle bounce, plus cleaner segmented controls, toggles, and buttons across the app.
>Fixed the job board returning an error when you combined a text search with a region filter (like LATAM); those searches now return quickly.
June 18, 2026v0.99.0
>Added a Telegram Jobs Firehose link on the homepage, going to our public Telegram channel.
>The homepage job wall now loads instantly instead of popping in.
>Renamed 'Board' to 'Jobs' in the top navigation.
>The job board's pagination arrows now match the rest of the app's buttons.
>The homepage is now a full-screen hero: a faded, live wall of real jobs behind a big search with the value props as pills, and the company logos in their own brand-blue band below.
>Fixed the top navigation letting page content show through it on some browsers; it is now solid.
>A second pass on the visual refresh: inputs, dropdowns, panels, and modals across the app now share one consistent style, with matching focus and hover states.
>In the feed, a combined job title like 'Co-Founder & Chief Product Officer' now splits into two separate filter pills.
>Lighter hover state in the job and company lists.
>The feed leads with your persona and lets you toggle each of your past job titles on or off to widen or narrow the jobs it recommends. Your persona title is on by default.
>Delete your own posts straight from the feed.
>A visual refresh across the app: lighter buttons and cards with a soft shadow, a cleaner selected state in the job and company lists, and a refined feed composer. Shadows no longer carry a blue tint in dark mode.
>New accounts get a guided first-run setup: claim a username, set your location, and build your first persona from your resume, all on a focused full-screen welcome.
>Sign up or log in with an email and password, alongside the social sign-in buttons.
>The feed now recommends jobs that match the job titles from your resume, with a toggle for each past title so you can widen or narrow what you see.
>Open the job board and it lands on your active persona, with your location already applied.
>You can read the Terms and Privacy Policy without leaving the signup flow, and the location field suggests real places from our listings as you type.
>Upload, change, or remove your profile photo right from your profile page. Your picture now shows on your posts and in the top bar.
>Redesigned the top-of-feed composer: your photo on the left, a tap-to-write field in the middle, and a persona picker on the right that shows each persona icon.
>Each feed item shows its time again in the top right, in relative form (1h, 1d).
>The feed composer now sticks to the top and hides as you scroll down, reappearing when you scroll back up.
>Polished popups with a softer, gradient header and lighter framing.
June 17, 2026v0.92.1
>A new social feed: fresh job postings plus short posts from people in the job hunt, newest first. Like and comment on anything, with comments inline.
>Write posts with light formatting (bold, italics, headings, lists, links) in a quick compose window.
>The feed tailors jobs to your persona. Without one it shows posts only and points you to create a persona so we can recommend jobs.
>Your public profile now lists the posts you have written.
>Job listings open as a single page: description on the left, comments and reactions on the right, a Tailor button, and a back link that returns you to the board or the feed depending on where you came from.
>A refreshed top bar with the main navigation by the logo, a jobs search box, and a contextual side menu for sections that have sub-pages.
>A single, consistent set of line icons across the site, and profile photos now show on feed posts and profiles.
>The whole site now renders in your system font, so pages load instantly with no web font to download.
>On mobile, the top bar shows a Start now button with the theme toggle tucked into the menu, the post composer stacks vertically, and the feed has tighter spacing.
>Feed polish: reaction and comment icons now stay grey until someone uses them, and feed cards are tighter and shorter on mobile.
>Job cards in the feed now have Open and Tailor buttons, so you can open a listing or start tailoring right from the feed.
>Refreshed the feed composer (bigger avatar, primary persona selector) and gave the top bar a frosted, translucent look.
>The feed is now grouped by day, with a date header and the time shown beside each item.
>The top bar stays readable in Firefox, which does not render the backdrop blur that powers the frosted look in other browsers.
June 16, 2026v0.88.0
>Sign in or create an account with an email and password, in addition to Google. New email accounts verify their address first.
>Added "Sign in with LinkedIn".
>Sign-in now opens in a window where you can switch between creating an account and signing in, with a forgot-password flow.
>Signed-out visitors now get clearer prompts to sign in: a "Sign in to Tailor" button on the job board, and a "Get hired today" sign-up banner across the market and company pages.
>When a job posting cannot be read automatically (some sites block automated reading), the tailor now says so clearly and lets you paste the description. It remembers those postings and sends you straight to paste next time.
>More resilient sign-in: a brief database or API hiccup no longer flips you to a signed-out view, your session now rides through it.
June 15, 2026v0.87.5
>Market charts now spotlight the single line you are hovering, with the tooltip following your cursor.
>A fresh look for the popular pricing plan.
>The featured company logos on the homepage now only show companies that currently have open jobs.
>Consistent page margins across the site, plus a tidied-up, simpler footer.
>The layoffs filings over time chart renders correctly again.
>The site typeface now loads in Firefox (it was briefly falling back to a system font).
June 14, 2026v0.87.1
>The whole site now renders in a single typeface, Pliant, for a cleaner, more consistent look.
>Fixed an issue that could briefly sign you out (and then let you back in after a refresh or two) during short database maintenance windows. Your session now rides through those blips instead of dropping.
June 12, 2026v0.86.2
>Reliability: background services (job scraper, company intel, email, Telegram) now keep far fewer idle database connections open, leaving more database headroom for serving the site under load.
June 11, 2026v0.86.0
>The Telegram jobs channel now only posts roles in our core categories (design, software, marketing, sales, support, writing and content, and leadership), so off-target listings like retail floor roles no longer come through.
>More reliable job collection. The background process that pulls in new postings was repeatedly hitting its memory limit and restarting mid-run, which could stall fresh jobs from appearing. It now works through its sources in bounded phases that stay well under the limit, so new roles keep flowing onto the board steadily.
>Searching the job board by keyword no longer errors out on common terms. Broad searches (like "intelligence analyst") could time out when the site was under load, search now returns matches reliably and shows the freshest matching roles first.
>Added a link to our Telegram jobs channel in the site footer, so you can follow new roles from any page.
>Filled and stale jobs now leave the board on their own. A listing is hidden a few days after its source stops posting it (its page then shows a brief closed notice) and is removed entirely within about a week, so the board reflects what is actually open instead of piling up roles that are no longer available.
>The job scraper now uses far less memory. For listings it already has, it refreshes them in place instead of re-downloading every description each run, so job collection stops stalling or restarting from running out of memory and the board stays fresher and more complete.
>The companies directory and the job board load faster, especially when sorting or filtering. The pages were missing the database indexes those views rely on, so sorting companies by name, funding, or open roles, and filtering the board by location, no longer scans the whole collection.
>Board location search is more precise. Typing matches the start of any word in a place name, so "york" still finds "New York" and "francisco" finds "San Francisco", but a search no longer surfaces cities whose name only appears buried inside an unrelated word.
>Reliability: the job board now stays up through deploys and database maintenance instead of briefly erroring, and stale listings are retired in steady, capped batches so a hiccup in our scraper can never empty the board.
>Writing and content roles (writers, editors, copywriters) are now their own category on the job board and market breakdowns, instead of being grouped under marketing.
>Telegram jobs channel: tapping a role now opens its full listing page, which loads reliably on mobile, and the channel keeps streaming new roles steadily.
June 10, 2026v0.83.2
>Fixed the real wages chart on the labor market pulse page. It was accidentally plotting average weekly hours instead of hourly earnings, which made real pay look like it was steadily collapsing. It now uses the correct earnings series over a wider history, so the real trend (small long run gains, with a dip during the 2021 to 2023 inflation surge) reads accurately.
>New: a public Telegram channel that posts fresh jobs the moment they land on the board. Follow https://t.me/miserablyunemployed to get new roles in your feed, no account or signup needed.
>Job alert emails are more reliable. Fixed a slow query that could time out and delay a daily or weekly digest, each alert now scans a bounded recent window, and one alert failing no longer holds up everyone else's.
>Reliability: the site now recovers on its own from brief database connection hiccups, so the job board keeps loading through transient blips instead of intermittently erroring.
>The Telegram job channel now runs as its own dedicated service and recovers on its own, so new roles keep flowing to the channel reliably instead of quietly stalling.
>The site now rides through routine database maintenance. A brief database failover used to intermittently break pages until a manual restart, the job board and pages now keep serving through it and the app reconnects on its own.
June 9, 2026v0.80.0
>The homepage company logos are now a centered, clickable grid. Hover any logo to see how many roles are open there right now (for example "See 31,745 jobs"), and click to browse them on the board. Added more big employers (CVS Health, Advance Auto Parts, Dollar Tree, TJX, Citi, T-Mobile, ABB, Humana, and others), fixed a couple that used to link to nothing, and moved the section up directly under the search.
>Removed the small uppercase labels that sat above content sections across the site, for a cleaner, less busy read.
June 8, 2026v0.79.1
>/market/pulse methodology now explains the "Education and health" row: it is a single BLS supersector that bundles private education with health care and social assistance (health care dominates), while public education sits under Government, which is why it reads as one large bar.
>/market/remote-jobs is more honest: cells now need both enough postings and at least five distinct companies to show (so one employer cannot stand in for an industry), the colour scale is anchored to a labelled percentage instead of an unlabelled max, and the methodology spells out the biases (postings not hires, unknown-location skew, an ATS-sourced sample that leans remote-friendly, mixed geographies, and that "industry" means what a company hires for).
>/market/entry-level adds a "US software roles by experience" chart that builds forward over time, with a share / number toggle (share answers whether the junior slice is shrinking faster). The "right now" bars now show the share of postings that state no requirement, and the methodology notes the requirement-stated sample skew and the smoothed, lagging nature of the rolling-window series.
>New page: /market/remote-jobs. A heatmap of how remote-or-hybrid job postings are, by industry (rows) and job family (columns), built from our live board. Darker means more flexible, a toggle switches between remote-or-hybrid, remote only, and hybrid only, and clicking any cell opens those exact jobs in the board. Industry is inferred from each company's own postings (not a scraped profile), so it stays accurate. Coverage and a minimum-sample floor are stated on the page; postings, not people.
>Onboarding tip emails (the short follow-up nudges after you sign up) now send by default instead of being off unless you found the toggle. They were never reaching most people. You can still turn them off any time under Settings, Email preferences (or the unsubscribe link in any of them).
>Hardened the company website crawl so it cannot exhaust memory: response bodies are now read with a hard size cap and non-HTML content is skipped, and the verification backfill runs as a bounded, low-concurrency stream instead of crawling everything at once.
>Company website links are now verified at the source. The website crawl only treats a domain as the company homepage when the fetched page actually mentions the company name, so a guessed domain that lands on a parked page or an unrelated company is rejected (and no longer pollutes the description or HQ either). Company pages link out only to a verified homepage, a human-entered URL, or the curated funding-data domain, and show no link rather than a wrong one.
>Company pages no longer show a guessed website link. Previously the link fell back to a fabricated <slug>.com (and the crawl trusted any domain that returned a page), so it was often wrong. Now a website link is shown only when the domain is verified (curated from funding data, or human-entered); otherwise no link is shown rather than a wrong one. Restoring broader verified coverage is a planned follow-up.
>The market hub cards now reflow to two columns on narrower screens (and one on phones) instead of staying three-up and cramped.
>/market/entry-level now measures seniority by the years of experience required in the posting body, not the job title. Titles badly undercounted juniors (most early-career roles are titled just "Software Engineer" with the real bar buried in the text), which made entry-level look like ~1.5% of demand. Read by required experience, junior-friendly roles (two years or less) are roughly one in five of the postings that state a requirement, far higher, with the share of postings that state any requirement reported as explicit coverage.
>The same page now counts the flow of new postings (first seen in the last 30 days) instead of the open stock, since slow-to-fill senior roles linger and would over-state seniority. Added clearer caveats throughout: new-grad hiring is seasonal and flows through channels we do not scrape, the software-demand backdrop is all seniorities (and indexed to a 2020 peak), and the AI line is demand for AI skills (adoption), not jobs replaced.
June 7, 2026v0.73.0
>New page: /market/entry-level. The state of US software, devops, and creative hiring by seniority, and how junior roles have fared as AI spread through tech. A live cut from our own job board shows entry-level is a tiny share of demand (software 1.5%, devops 0.9%, product 0.8%, data 2.2%, design 4.0%). The multi-year backdrop is Indeed Hiring Lab open data (CC-BY): US software postings sit around 72% of their February 2020 level and never recovered, while the share of postings mentioning AI has climbed to roughly 5%. The page is explicit that this is correlation with the AI era, not proof of cause (the 2022 to 2023 layoffs, rate hikes, and pandemic over-hiring all hit juniors first).
>Footer now lists every market sub-page (employment, pulse, wages, layoffs, offshore, enrollment, entry-level, funded), not just two of them.
>/market/enrollment charts now start in 2013. Earlier years had incomplete UNESCO level coverage (master's-level enrollment is missing for several countries until 2013), which made the graduate and per-1,000 views spike artificially at the start. Trimming to 2013 keeps every line on consistent data.
>Mobile polish on the market charts. On phones the plot now uses the screen width (trimmed internal padding), the x-axis shows fewer, smaller date labels so the years stop running together, and the section padding on /market/enrollment is reduced so charts are not boxed in. The two toggles on the undergraduate vs graduate section sit centered on one line instead of wrapping or drifting to opposite edges.
>New page: /market/enrollment. University (tertiary) enrollment and international student mobility across the US, Canada, Germany, France, the UK, China, and India, sourced from UNESCO UIS and the World Bank. All annual (no comparable semester-level data exists as free open data, and the page says so). Four cuts: total enrollment, an undergraduate vs graduate split (ISCED 5+6 vs 7+8, which reconcile to the total), inbound internationally mobile students, and a directed chord diagram of who studies where. Each section opens with a plain-English read above the technical note, matching /market/pulse.
>Enrollment, level, and mobility charts each carry a "per 1,000 people" view (population-adjusted via World Bank total population) so growth reads against population growth, not just raw headcount. Section 1 also defaults to the enrollment ratio to strip out country size up front. A directed chord and a net importer/exporter table show the direction of student flows among the seven, with an explicit note that they capture only intra-group movement (the US, for instance, draws most of its inbound students from countries not shown). The flow diagram defaults to the most complete pre-pandemic year since 2020 and 2021 enrollment was distorted by travel restrictions.
June 6, 2026v0.71.0
>Typography swap site-wide: Merriweather (variable serif) replaces JetBrains Mono as the brand display face. Every page header, section header, .serif call site, and explicit --font-mono / --font-serif consumer now renders in Merriweather. The negative letter-spacing tuned for the old mono (75 declarations across components and app.css) reset to 0 so the serif sits at its natural tracking. Code blocks and textareas keep system mono for their functional spacing needs.
>New SearchBar component: the hero input and "Find jobs" button are now one joined control with medium corner radii on the outer edges, zero gap between them, and full pill-rounding on both halves when they stack on phones. Drop-in at $lib/components/SearchBar.svelte.
>Landing hero rewrite. New headline: "Find a job, tailor your resume, and get hired asap". The "Free job board · No ads · No subscription" fineprint moves above the headline as a small mono eyebrow. The "live roles" pill below the search is gone (the open-jobs count now lives where it belongs, in the board demo and the real /app/board topbar).
>Homepage board demo top bar: the head-logo glyph is gone and a brand-blue "14,772 open jobs" pill now sits next to "Job board", matching the real /app/board topbar count pill exactly (same tint, mono, baseline alignment).
>/market/wages choropleth gains a "Nominal / Cost-of-living adjusted" toggle. Adjusted mode divides each state's median by its BEA Regional Price Parity (US average = 100) so a $130k San Francisco median lands around $108k in cost-of-living-adjusted dollars and an $80k Cleveland median lands around $89k. Affects the map and the per-state table; the per-role trend chart stays nominal because BEA periodically rebases the index and a real-wage trend would compound two moving reference points across years. New BEA SARPP ingest covers 2008 to latest, 51 states + DC.
>/market/pulse Movement 4 ("wage bill") now uses real BLS QCEW total quarterly wages per NAICS supersector instead of the prior CES Δemployment × industry-median estimate. For each sector: latest published quarter minus the same quarter a year earlier, multiplied by 4 to annualise. Government (Public administration) and Other services rejoin the diverging bar (both have clean QCEW counterparts), and the methodology block now spells out the QCEW vs CES scope difference instead of footnoting an "excluded sectors" caveat.
>/market/pulse Movement 2 ("Hidden slack") now sums the BLS-standard disjoint pair of underemployed groups: marginally attached (LNU05026642, people OUT of the labor force who want a job) plus part-time for economic reasons (LNS12032194, people IN the labor force working fewer hours than they want). Previously the tile showed marginally attached alone with a methodology note that PTER wasn't ingested; PTER landed in the BLS national pull and the tile switched to the full disjoint sum. Movement 2's headline reworded to "What the unemployment rate leaves out", which describes the actual content better than the prior framing.
>/market/wages industry aggregates now use a population-weighted mean of medians instead of a plain median of medians, weighted by each SOC's OES employment count in the area. A small high-paying SOC no longer counts the same as a giant low-paying one; e.g. the Software & IT aggregate stops being pulled up by tiny specialist roles and reflects what the typical industry worker actually earns. The choropleth, per-state table, and trend chart all use the weighted aggregate; any area/year where the employment counts haven't been ingested yet falls back to the plain median-of-medians so the page never blanks.
>/market/offshore main chart gains a "Headcount / Share of employment" toggle. Headcount keeps the existing stacked-area view (US band ~150M at the bottom, India ~250M and others stacked above). Share flips to per-country lines with a 0..100% y-axis, showing the structural composition story: US sits ~80% services, India ~33%. Same ILOSTAT data underneath, different lens. Toggle only on the main curated chart since the share denominator (total employment) is the same number regardless of which services subset the numerator picks, so a J+M-as-percent-of-everything view would be misleading.
>/market/employment cross-country snapshot table gains a per-row Source column. Each row carries a small mono badge naming the publishing agency (BLS / OECD / Eurostat / WB); click on a badge anchors to the methodology section below where the "5% US unemployment is not the same as 5% Spanish unemployment" caveat already explained the definitional gaps. Makes that caveat navigable from the data itself. YoY arrows in the same table swap from Unicode glyphs to stroked SVG line icons matching the rest of the site's icon family.
>/market hub stat row adds a "currently open" tile sitting left of "lifetime postings observed", so the two numbers (live count vs archive size) read side by side instead of being conflated. The "Jobs in our database" explainer below points at the new tile when distinguishing the apply-now count from the archive size.
>Style polish across the market pages: text-wrap balance applied to every explanatory paragraph (block-explain / block-sub / section-explain / section-sub / lede / lede-foot / chart-caption) so descriptive copy stops ending on awkward last-line orphans. Trailing periods stripped from every h1 hero title (Layoffs, Employment, Funded, Pulse).
June 5, 2026v0.69.0
>Time-series charts on /market/employment, /market/pulse (Movements 1 and 2), and /market/layoffs now shade NBER-dated US recessions (1981-82, 1990-91, 2001, 2007-09, 2020) as faint vertical bands so the current reading sits in historical context. A muted caption under each opted-in chart names the source so the shading is never mystery noise. The chart component (Graph.svelte) grew two opt-in props (recessionBands, referenceLine) so any future chart can join.
>Every /market page got a plain-English layer above the methodology. Each chart now opens with a paragraph explaining what is being measured and why it matters (in regular language, no jargon), with the dense source notes (BLS series IDs, formula caveats, scope exclusions) demoted to a smaller muted footnote underneath. /market/pulse Movements rewritten in this shape end-to-end. Methodology blocks expanded across employment, wages, layoffs, funded, and offshore (OES top-coding and exclusions, WARN state coverage corrected to 43 + DC, Fisher real-wage identity, LAUS smoothing, JOLTS response rate, Form D contemporaneous-not-causal framing). Hidden slack count on /market/pulse fixed to avoid double-counting (LTU is already inside U-3, discouraged is already inside MATL).
>/market hub "Jobs in our database" chart now shows real 30-day growth. Previously it pulled from the `marketStatsSnapshots` collection, which only carried the last few days of points at a high cadence and made the chart read as a short, flat segment. The line now derives from the same 30-day per-day-fresh-listings array the bar chart underneath uses, back-computed so the endpoint matches today's lifetime total tile and each prior day walks it back day-by-day. Range switcher auto-hides options whose window is wider than the data span, so 1m / 6m / 1y only appear once there's enough history for them to actually filter (no more clicking buttons that do nothing visible).
>/market hub gets the unified Graph component (matches every other chart on the site), a real section header ("Jobs in our database") with copy describing the source breadth (ATS platforms + aggregators + WARN + government boards, refreshed every 12 hours), and a stripped-down range switcher in the footer (1m / 6m / 1y / Max sits flush-right with no wrapping pill).
>New hero background on /market: a sonar-pulse variant of the /market/pulse ASCII rain. Same glyph atlas + grid + light brand-blue tint, but instead of a single trend line, twelve concurrent ping waves radiate outward from random points across the grid, fading as they expand. Sibling to the pulse hero without telling the same story.
>New page: /market/pulse. The editorial cut on US labor, deliberately opinionated and separate from the encyclopaedic /market/employment. Four movements: prices (nominal wages vs CPI, side-by-side YoY% and real-dollar charts), slack (U-3 vs U-4/U-5/U-6 plus long-term unemployed, discouraged, and marginally-attached counts), composition (every CES supersector ranked by 12-month job change in a diverging bar list, government and healthcare top, Information and Professional & business services bottom), and wage bill (each sector's job change multiplied by the matching /market/wages industry median to estimate the dollars flowing into and out of the economy). Three.js hero background renders a grid of cycling ASCII glyphs in light brand-blue with a declining market trend line undulating through them, masked to fade behind the editorial prose. Linked from the /market hub as a new CTA card.
>Every chart on the site now shares one underlying component (Graph.svelte) instead of four near-clones, so the axis grid, the dashed column-hover guide, the tooltip card, and the per-series legend are consistent across /market hub, employment, wages, layoffs, offshore, funded, pulse, companies, history, and admin. Stacked-area charts on /market/offshore got a new look in the process: same hover guide, same tooltip shape as everything else.
>/market/offshore: full-width pull quote between the "non-US share" and "India and China" bullets, set in the biggest serif type as a chapter break. The redundant "What the chart actually says" subtitle is gone.
>/market hub CTA cards rebuilt. Whole-card links instead of card-with-Button, icon on the left and text on the right, smaller typography, brand-blue hover inversion (background flips to brand blue and the icon + text flip to the page surface colour). Each card carries a small mono kbd-style chip with its route slug above the title.
>Nav rail text bumped up a step: section headers from xs to sm, link labels from sm to md. Easier to read at glance.
>/market/wages choropleth polish. The colour ramp now stretches across the actual data range (min-max normalisation) instead of share-of-max, so the lowest-paying state pales toward the surface tint and the highest stays full brand-blue. Before, every state landed in the dark half of the ramp because the wage floor (~$60k) sits well above zero and crushed contrast. Also disabled mouse-wheel zoom on the map so the cursor crossing the map no longer hijacks page scroll; drag-pan and double-click-reset still work. Layoffs map keeps its existing scaling and wheel-zoom behaviour (different distribution shape, different page).
>New page: /market/wages. Roughly a hundred occupations grouped into six industries (Software & IT, Healthcare, Business & finance, Design & creative, Skilled trades & construction, Service & retail), each backed by ~15-18 BLS Occupational Employment and Wage Statistics SOC codes. Two-level sticky picker at the top of the page lets you flip industry and (optionally) a specific role within that industry; defaults to the cross-occupation median for Software & IT. National headline tiles, a brand-blue US choropleth coloured by median annual wage, a sortable per-state table, and a year-over-year trend chart with an area picker (national or any state). The aggregate views compute the median of medians across each industry's SOCs per area/year so the picture isn't skewed by a single role. Linked from the /market hub as a new CTA card alongside Funded, Employment, Layoffs, and Offshore.
>OAuth sign-in fix. A copy-paste in COOKIE_DOMAIN (taking the value from UI_URL, which includes the http:// scheme and a port) produced an RFC-invalid cookie Domain attribute that Firefox and Chrome both silently reject. With no auth cookies in the jar every Google sign-in fell into a `state_mismatch` error on callback. The auth handler now strips scheme and port from COOKIE_DOMAIN with a boot-time warning, and .env.example calls out the bare-hostname requirement explicitly.
>Cookie preferences panel redesigned. Instead of a full-width bar across the bottom of the page (which fought the side rail and pushed real content off-screen on short viewports), it now reads as a compact 24rem card pinned to the bottom-right corner. Buttons stack vertically with the primary action anchored at the bottom, and the card scrolls internally so the Customize panel still works on tiny screens.
June 4, 2026v0.66.3
>Sign-in stability fix. Removed the cookie-attribute override on the auth handler that was racing Better-Auth's session-cookie expiration and causing random sign-outs (the kind where you reload the page and the session is gone for no apparent reason). Trusts the library defaults now, same shape that ships in sessionsight where the same sign-in flow has been stable for months.
>/market/employment metric picker (Unemployment rate / Labor force participation / Employment rate / Job openings / Hires / Quits rate / Layoffs rate) now sits in a sticky bar between the hero and the US section. Stays pinned to the top of the viewport while scrolling, so the picker is reachable from anywhere on the page. Semi-transparent surface with 8px backdrop blur, single-row layout, horizontal scroll on narrow viewports if the pill exceeds the width.
>/market/layoffs chart gains a day / week / month bucket toggle next to the existing range tabs. Default bucket is now Week. Resampling is client-side over the same daily series the API already returns; weekly + monthly buckets switch the curve from step to monotone so the smoothed shapes read at the larger granularity.
>Side rail Market section collapses to a single "Learn about the market" link (renamed from "Overview"). Funded, Employment, Layoffs, and the new Offshore hiring page are linked as CTA cards on /market itself instead of crowding the rail.
>New page: /market/offshore. Stacked-area chart of services-sector employment by country, sourced from ILOSTAT labour-force surveys, annual back to 1991. Default view overlays the US against eight headline arbitrage destinations (Mexico, India, China, Poland, Philippines, Vietnam, Brazil); a year-over-year table below locks every row to the latest year-pair so the comparison is fair. A second chart at the bottom shows the full 100+ country corpus. A focused "knowledge-work" section narrows onto ISIC J (information and communication) plus ISIC M (professional services) for the US and India. Colorblind-safe Okabe-Ito palette throughout.
>/market/layoffs timeline gains a 1m / 6m / 1y / 5y / Max range switcher in the top-right, mirroring the /app/history chart. Picking a tab re-fetches the window through the existing `/v1/market/layoffs` endpoint so the headline tiles, map, and rankings all stay in sync with the chart.
>Homepage hero: dropped the brand mark above the headline (the top nav already carries the logo), gave the section extra vertical breathing room on desktop, and the headline now uses `text-wrap: balance` so the two-line break sits where it reads, not where the viewport happens to cut.
>Mobile top nav: theme toggle moved into the menu drawer as a dedicated Theme row, freeing the row for brand + Start now + menu. Brand padding is left-only, the inter-item gap is 0, and the menu button has a tight 8px spacer from the sign-up CTA so it stops drifting toward the centre on narrow viewports.
>Buttons no longer leave a phantom gap to the right of the label when their trailing icon-slot is hidden. The Start-now CTA in the mobile top nav drops the `free` pill (it stays in the side rail and full-width drawer button), and any keyboard-hint chip hidden under 1200px or by the UI-preferences toggle now collapses its wrapper instead of reserving empty flex space.
June 3, 2026v0.65.3
>Sign-in is more reliable. The browser now always talks to the API on the same origin as the page it is on, instead of a separate subdomain. A stale host setting was routing the Google sign-in handshake through the wrong origin, which Chrome rejected (you would land back on the sign-in screen, or get logged out on refresh). Existing sessions are unaffected.
>Added a guard that refuses to run the app on any domain that is not ours. If someone mirrors the site under a different address, visitors now get a takeover screen telling them they are not on the real site and pointing them back to miserablyunemployed.com.
>Welcome emails and job-alert digests now actually send. The shared email orchestrator was looking up the recipient in `authUsers` with the hex-string id, but Better-Auth's Mongo adapter stores `_id` as a real ObjectId, so every send since 0.62.0 returned "user-not-found" before reaching Resend. Drip emails were caught by the same bug. All three paths now coerce through the shared `authUserIdFilter` helper.
>/companies search bar is now semi-transparent with an 8px backdrop blur so rows ghost under it as you scroll, matching /app/board. The list pane drops the preview pane entirely below 1200px (clicks route to /companies/<slug>) so the search + rows claim the full available width on tablets and narrow laptops.
>/companies also collapses to a full-width list + search when filters return zero matches, instead of leaving an empty preview track on the right.
>Responsive overhaul for /app/board and /companies. Under 1400px the side rail shrinks (200px, wordmark hidden) and the filter + inbox columns drop a tier to keep the preview pane usable. Under 1200px the filter rail collapses into a "Filters" button + a drawer modal mirroring the desktop stack; a single "Clear" button next to it resets every filter at once.
>JobPreview action bar restructured: vertical-ellipsis menu pinned to the left (Report and Research live in its dropdown that opens upward), with "Open" + the primary "Tailor" CTA grouped on the right via `space-between`. The previous four-button row is gone.
>Keyboard hints toned down to opacity 0.35 (white at 0.35 on primary surfaces). Hide breakpoint raised from 600px to 1200px so the chips drop off entire narrow-desktop range.
>Buttons lost one step of horizontal padding on every size so labels sit closer to the chrome.
>Detail / preview panes (`pane-detail` on /companies, `pane-right` on /board) now carry a permanent `border-left` hairline so the divider reads even when the resizer column is hidden.
>SplineChart highlight tracks the cursor across the whole plot area: LayerChart's Tailwind utility classes for `.TooltipContext` were no-ops here (project does not load Tailwind) so bisect tracking ran on a wrong-shape element; replaced with explicit `position: absolute`.
>History page chart now uses the shared SplineChart with hover-only dots, brand-blue line, and the range tabs sit top-right above the chart without surrounding pill chrome.
June 3, 2026v0.64.2
>Mobile drawer + page menu now mirror the desktop side rail: sans `--font-md` body links, uppercase tracked-out `--font-sm` section headers with the hairline underline, brand-blue active link on `--surface-2`. The guest Pricing chip folds into Main under Home (no separate trailing entry), the Admin section is filtered out (its segmented control on /app/admin owns that nav), and the leftover "Actions / Tailor queue" plus the duplicate bottom-of-drawer Settings link are removed. Job alerts now carries a count pill in both the dropdown and the drawer to match the side rail.
June 3, 2026v0.64.1
>New UI preferences tab under /app/settings with a "Show keyboard hints" toggle. Stored per device in localStorage. With the toggle off, every kbd-hint chip across the app hides; shortcuts still work.
>Keyboard-hint chips bumped to a darker `--text` border and glyph at 0.35 opacity so they read as quiet metadata against any button surface instead of disappearing into the hairline.
June 3, 2026v0.64.0
>SplineChart redesign: left y-axis with a floating "Hours"-style label, brand-blue line, hover-only dot, white-card tooltip (title + hairline + label + big value) that follows the bisected column above the data point, and an optional "This week"-style highlighted band on the rightmost column via a new `currentBandLabel` prop. Hover column snaps to each data step and centres on the dot. Pointer-tracking fixed across the whole plot area (the underlying Tailwind utility classes LayerChart depends on were silently no-ops since the project does not load Tailwind, so the tooltip context and tooltip card had been getting wrong positioning).
>History page chart now uses the shared SplineChart instead of a hand-rolled LayerChart stack. Range tabs (7d / 1m / 6m / 1y / Max) sit at the top-right above the chart, no outer pill chrome.
>Side rail: when signed out, the Pricing link sits inside the Main section right under Home rather than as a standalone trailing chip.
>"Try for free" button replaced everywhere (hero, side rail, top nav, mobile drawer) with "Start now" plus a small inline "free" pill. New shared `.cta-pill` class drives the chip so future variants ("new", "beta", etc.) reuse the same shape.
>Mobile homepage hero tightened: shorter vertical rhythm between elements, hero outer padding pulled in, input and button both stretch full-width on their own rows, and the input radius matches the button (10px) instead of the desktop pill.
>Hero byline copy dropped to keep the above-the-fold lighter.
>"Apply to top companies today" headline hides on mobile, and the top-companies strip drops its `--space-3xl` padding to `--space-lg` so it no longer pushes the rest of the page down.
>Carousel arrows on the top-companies strip now use the default secondary Button colours (surface-2 fill, text-coloured glyph) instead of the dark accent fill.
>Mobile top-nav brand now lines up the regular logo, a small gap, and the "Miserably Unemployed" wordmark in mono at one size smaller than the side rail. The wordmark wraps to two lines so the brand fits without competing with the page-switcher.
>Typography pass across the whole app. Every button, input, select, multi-select, toggle, label, and body line now renders in Roboto Flex at the same small size with no bold weights. Page headers stay in JetBrains Mono at one step up; section headers (modal titles, settings subsections, landing-page section headlines, /vs blocks) sit one step above that. The mix of weights and faces that had accumulated across the codebase is gone.
>New TableData component is now the single source of truth for every structured list. The open-roles table on company pages, saved job alerts on /app/alerts, settings purchase history, /app/history timeline, employment country list, layoffs recent filings, and both admin tables (users + LinkedIn jobs) all render through it. One CSS change rolls through every list in the app.
>New StatTiles component for hero stat rows (the bordered card with hairline-divided cells used on /market, /market/funded, /market/employment, /market/layoffs and now /app/history). Same look, one component.
>New FilterSection component owns the filter-rail row pattern (title + control + trigger overrides). Board and /companies both consume it so visual changes propagate.
>Count pills unified into one style: small oblong chip with a tinted brand-blue background and brand-blue text. Side rail "Job alerts" badge, top-nav history queue, multi-select trigger counts, location drill-down summary pill, /companies and /app/board page-header counts, and the new slider readout pills (Freshness · Any age, Minimum salary · Any) all share the look.
>Filter sliders restyled as wide compact toggles: surface-2 pill track with a brand-blue circular thumb inside. The current value pops out as a small brand-blue pill next to the section title rather than under the slider.
>Pressed state on default Button variants (used by every multi-select dropdown trigger and the active persona pill) now fills brand-blue instead of black, matching primary CTAs and selected rows.
>Hero search on the homepage uses the design-system Input at large size + Button at large size, with locked min-heights so the input and the "Find jobs" button line up exactly. Button + Input heights are now standardised across all sizes wherever they sit next to each other.
>Clear filters on /app/board now also drops the implicit English language default. With nothing filtered, both "Save alert" and "Clear" disappear from the filter footer.
>Mobile top-nav brand now shows the regular logo plus "Miserably Unemployed" wordmark instead of the black square. The hero logo on the homepage hides under 768px so the page has one logo, not two.
>Admin overview charts (New users + Revenue) and the /app/history applications chart now use the shared SplineChart component: brand-blue lines, span-aware date ticks (no more "May 5 May 7 May 9..." smudge), one tooltip pattern.
>BoardDemo on the homepage retyped to match the rest of the app (body in sans, headers in mono at the new sizes, no leftover weight-500 / 600 declarations).
>New DESIGN.md at the repo root documents the typography rules, every token (colors, sizes, spacing, chrome), the full primitive list (Button, Input, Select, MultiSelectDropdown, SegmentedControl, Toggle, Modal, PageTopBar, TableData, StatTiles, FilterSection, SaveAlertModal), and the utility classes (.field-label, .kbd-hint, .muted, .err, .serif, .page-wrap).
June 2, 2026v0.62.0
>Saved job alerts. On /app/board, apply filters you want to keep an eye on and hit "Save as alert" (or press q) and we mail you a digest of new matches on a daily, weekly, or instant cadence. Manage the list at /app/alerts (rename, pause, change cadence, delete). Each digest links straight back to the board with the alert's filters reapplied. Toggle the master switch under Email preferences in /app/settings to opt out of every alert at once.
>"Save as alert" and "Clear filters" stack vertically in the filter rail footer at small size so two CTAs share the strip without crowding each other.
>Resume Tailor no longer hard-redirects when you have no personas. /app/tailor, /app/personas, and /app/alerts now each render a vertically centered primary CTA (Add new persona / Open job board) with a short explainer, and the redundant page-header Add button on /app/personas hides while the library is empty.
>Count pills unified across the app. The side rail "Job alerts" entry carries a saved-count, plus the top nav history queue, board filter triggers, and page-header totals all share one tinted brand-blue style: small, oblong, transparent fill, brand-color text.
>Companies filter pane brought into line with the job board. Industry and Funding stage use the same multi-select dropdown shell as the board, the three trigger labels render in matching mono small typography, the page-header count pill picks up the new tint and drops the redundant "companies" label when nothing is filtered, and Clear filters matches the board's stacked small-default style.
>Salary disclosed-only filter on the board uses the design-system Toggle and the small-caps mono section-title style, matching the email preferences row pattern.
>Delete account buttons now read in proper red via a new Button danger variant; the confirm dialog's destructive action picks it up automatically.
>Side rail typography matches the footer (sans body links, uppercase tracked-out section headers). Admin section dropped from the side rail since /app/admin owns its own segmented control.
>Dropped the WARN button on /market/layoffs recent filings. The per-row source URL didn't reliably resolve to the actual agency filing (only to each state's general WARN page or the upstream aggregator), so the button was pointing readers at the wrong destination. Recent-filing rows are now just a clickable card linking into the company page when we track it, or a static card when we don't. The Kadoa intel source stops stamping its aggregator URL into stored rows too.
>/market/employment hero backdrop now tints every country we have employment data for in brand-blue, not just USA. USA stays the zoom anchor on the right side of the masked map; every country with BLS, OECD, Eurostat, or WDI coverage joins it as an in-scope silhouette so the page reads "we cover everywhere on this map" at a glance. CountryMapBackdrop grew an optional `highlightIso3s` prop to support this pattern; other backdrops (per-country, /market/layoffs) keep their single-country highlight.
>/market/employment split into two labelled sections under one hero. A "United States" block leads with the BLS national chart plus a single "US scope" dropdown that hops between US national and any US state in one control (the old separate country + state selectors are gone); an "International employment" block hosts the cross-country choropleth and the country table, where clicking a country opens its dedicated /market/employment/<iso3> page. Each section gets a brand-blue 2px left rail so the boundary between the US story and the international story is unmistakeable.
>Recent-filings WARN action on /market/layoffs now opens the state labor department's own WARN page in a new tab. Previously every row from the Kadoa-aggregator backfill (which covers 45 states for us) stored "https://layoffs.kadoa.com" as its source URL; the WARN button now rewrites that to the correct state's official agency page (edd.ca.gov, dol.ny.gov, etc.) and hides the button for states with no maintained URL. The button itself is now a real design-system Button instead of a hand-rolled pill.
>Country employment pages (/market/employment/<iso3>) got a full pass. A US-style map backdrop now sits in the hero, masked left-to-right and tinted in the brand-blue, with the target country highlighted. A toolbar between the breadcrumb and the hero hosts a Back button (icon-only on mobile) on the left and a native country switcher dropdown on the right. Switching countries is instant: the page renders skeleton tiles immediately while the World Bank profile indicators load client-side, instead of blocking the navigation behind the WB API.
>/market/employment hub hero and /market/layoffs hero both got the same US map backdrop, so every page in the /market tree opens with a consistent geographic visual.
>Stat tile chrome unified across /market, /market/funded, /market/employment, /market/employment/<iso3>, /market/layoffs, and /market/layoffs/<region>. Every "hero tiles" row now renders as one bordered, rounded card with hairline dividers between cells, matching the country profile tile pattern instead of the previous loose top-hairline strips.
>UsStateMap and WorldCountryMap choropleths repainted in the brand-blue (--selected). The layoffs hub state map, the layoffs region map, the global employment world map, and the layoffs rank bars all read in one palette with the existing chart lines and progress bars.
>/market/layoffs reframed as US-only ("Who's cutting in the US.") since WARN is a US-only statutory filing, the previous "Layoffs around the world" hero overpromised global coverage we don't have.
>Country switcher dropdown filters out noise from the index: US-state codes (which live on the dedicated state picker) and World Bank regional / income / lending-group aggregates (HIPC, IDA & IBRD, Least Developed Countries, etc.) no longer appear in the country list.
>Side rail active link reads in brand-blue text on its surface-2 fill, so the current page reads at a glance.
>/market/funded gets a chart above the daily list. Per-day sum of open roles across companies that filed a Form D on each date, gap days zero-filled across the full window so the line drops to a baseline between funding events instead of cutting from spike to spike. Same brand-blue line style as the /market overview chart.
>Charts now paint their lines in the brand-blue (--selected) instead of plain foreground. New-per-day bars, top-country / top-company / top-source horizontal bars, and the Remote / Hybrid / On-site / Unspecified work-type progress bars all match. The interactive globe's busy-country fill tweens up to brand-blue too, so every visualization on /market reads in one palette.
>Fixed the time-scope picker on the /market open-jobs chart. 6m and 1y were rendering tick labels as a run of "2026 2026 2026..." because the formatter always returned year-only; it now picks granularity from the actual span of visible data (MMM d for short windows, MMM or MMM YYYY for medium, year-only for multi-year). Default scope is now Max so you see the full history we have collected, not the narrowest 2-point window.
>Same span-aware tick formatting now lives in the shared SplineChart component, so the layoffs timeline, BLS employment chart, per-country employment chart, regional layoffs chart, and per-company funding chart all benefit without any caller changes.
>/market hero CTA cards (These companies have money / Understand the labor market / Dig deep on layoffs) got 60px line icons above each title (wallet, bar chart, trending-down), painted in the brand-blue. The Unicode arrow on each button became a stroked SVG arrow so it matches the line-icon style.
>Fixed Tailor when the URL fetch comes back empty (JS-rendered pages we can't parse). The paste box would accept the description, but Tailor was still handing the model the empty cached body, and the model came back with "The job post body is empty, I can't fetch URLs." Now editing or pasting after a thin fetch correctly resends the new text.
>Homepage hero copy now reads "Job board with a built-in AI-powered resume tailoring service." Hero byline second line is no longer bolded.
>Modals across the app (Personas add / rename, Tailor add / rename, Report a job, confirm dialogs) restyled with 20px rounded corners, a banded header and footer that take the side-rail background tint, a deeper drop shadow, and a one-step-smaller title size so the action area reads as primary.
>Form labels on /app/post-job, /app/tailor, and the Report-a-job modal now use the same mono / xs / muted typography as the filter section headers. The label-to-input gap and the gap between field groups are unified, so every signed-in form surface reads consistently.
>Cancel buttons in modals all match now: the Report-a-job Cancel was rendering as a transparent label only; it now uses the same default chip style as every other Cancel in the app. Tertiary "ghost" Button variant removed from the design system entirely.
>Fixed the Location filter dropdown on /app/board getting clipped by the filter-rail scroll container that landed in 0.55.0. LocationDrillDown's panel now uses `position: fixed` with JS-computed viewport coordinates, matching the pattern Work type / Company / Seniority / Language already used. Mobile sub-pane height also got the same `max-height: 100dvh` override so the JS-driven cap doesn't shrink it.
>/app/history, /app/tailor, /app/settings, and /app/post-job all now use the shared PageTopBar component, so the topbar treatment (sticky offset, padding, title typography) is identical across every signed-in surface. Tailor's per-letter bouncing wizard title became a `bouncing` flag on PageTopBar itself, off by default everywhere else.
>Per-company OG share preview (the /companies/<slug>/og.png card LinkedIn / Twitter / Slack pull for unfurls) and the site-wide /og-image.png both got their primary CTA repainted in the new brand-blue, matching the live primary buttons after the 0.56.0 selection rollout.
>Industry taxonomy. Every company now maps onto a fixed 18-category list (Software, Consumer Tech, Financial Services, Healthcare, Retail, Manufacturing, Transportation, Aerospace and Defense, Energy, Real Estate, Food and Beverage, Hospitality, Media, Telecommunications, Professional Services, Education, Public Sector, Other). Replaces the free-text "Pharmaceutical retail" / "Ride-sharing" chaos with stable categories. New companies auto-classify as they're enriched; existing rows backfill once on next deploy.
>New brand-blue (#0057fe) for primary CTAs and selected states. Primary buttons, the selected job-board row, the active persona pill, and tabular hover all now read in the same brand-blue instead of black or grey. New `--selected` design token, separate from `--accent` (which keeps the black text/utility colour).
>/market overview restructured. Hero is text-only on top with three CTA cards under it (Just raised / Labor market / Who's cutting), each linking into one of the deep market hubs. Open-jobs-over-time chart moved to its own row below. The "Market stats · 634,059 jobs open right now" headline is gone; the live count is in the topbar pill now.
>Job board topbar count pill drops the "filtered" word. When a filter is active the pill just shows the number.
>Mobile /app/board: "Add a job" collapses to a single `+` icon so the topbar stays compact on phones.
>Single-job page (/app/board/<id>) wrapped in the standard rounded card chrome to match other public pages, with a single hairline divider between the header and body instead of two stacked card surfaces. Tailor / Open buttons sit centered at equal widths with `t` and `o` keyboard shortcuts. Closing the page (Esc, X, or "All listings") returns to the board with the same job pre-opened in the side pane.
>Homepage board demo updated to match the new live design. Dropped the four-line stats panel (it lives in the topbar pill now), turned the terminal-style search into a plain search input with a `/` keyboard hint, and bumped button corner radii to match the DS Button.
>Chart x-axis labels on mobile dropped to year-only ("2020 2021 ... 2026") so the unemployment-rate and layoffs workers-affected lines stay readable on a phone instead of running together as a smear of "Jan 2020Jan 2021Jan 2022...". Hover tooltips keep the full "MMM d, YYYY" date so precision isn't lost when you actually want it.
>Fixed the unreadable tick labels on the /market overview chart in the 1m range, which used to render runs of "30 30 31 31 06.2026 06.2026..." (a leftover gimmick that mixed day-of-month numbers with month-boundary banners). Now: short month + day ("Jun 2", "Jun 9", ...) for the 1m view, year-only for 6m / 1y / Max.
>/market/funded hero stat tiles ("57 companies funded", "2,116 open jobs", "90d window") stack one-per-row on phones instead of compressing into a three-column row.
June 1, 2026v0.55.0
>New Minimum salary filter on /app/board, with a snapping slider (Any / $40k+ / $60k+ / ... / $200k+) and a "Disclosed salary only" toggle. Listings pull salary from Y Combinator, Breezy HR, and Welcome to the Jungle when employers disclose it; values are normalised to annual USD via a 16-currency mid-market table (refreshed quarterly). Listings without a disclosed salary disappear as soon as you raise the threshold off zero. New partial compound index keeps the query as a fast range scan over the disclosed-salary subset only.
>Keyboard shortcuts across /app/board and /companies. `/` focuses search, `Esc` clears all filters, `←` and `→` page through the inbox. /app/board adds `a` to jump to Add a job. The job preview footer became a four-column grid (Report / Open / Research / Tailor) and each button has its own letter: `x` `o` `r` `t`. Every shortcut shows a tiny key pill on its trigger so you can find them without memorising.
>Live count pill next to the page title on /app/board and /companies, reads "N filtered" when any filter is active, "N open jobs" / "N companies" otherwise. Replaces the four-line terminal stats panel that used to sit at the top of the filter rail.
>Search box on /app/board and /companies is now a plain search input instead of the terminal-style prompt. Recent-search history is gone (the `/` shortcut + your URL bar are both faster). Absolute positioning lets the inbox scrollbar reach the very top of the column, with rows sliding under the search bar as you scroll.
>Filter rail on /app/board now scrolls when the section list overflows the viewport. "Clear filters" stays pinned at the bottom regardless of scroll position. Filter dropdowns use fixed positioning so they keep working when the rail is scrolled.
>/how-it-works now has a primary CTA under each feature row: "Browse the job board" (Fresh from the source), "Add your first persona" (Knows who you are), "Ask the job market" (Query with AI), "Tailor your resume" (Beat the ATS). Each links straight into the relevant app surface so the page doubles as an onboarding ramp instead of being a dead-end essay.
>Side rail nav sections (Main / Market / User / Admin) now sit inside their own rounded cards with hairline borders, so the four groupings read as four distinct blocks instead of one long unstructured stack.
>Killed the last of the old cream colour. `#f7f4ee` was still hiding in the `theme-color` meta tag, the pre-paint inline script, the theme swatch, and the OS-default text-selection highlight, which made the iOS Safari overscroll bounce zone and macOS Safari text selections render in the old palette. All four now use the current cool-white. New `::selection` rule uses `--surface-2` so highlighted text reads in our palette regardless of OS theme.
>Homepage copy: the why-not section headline is now "Try being less miserable", and the board link reads "The jobs board is free and always will be."
>Mobile responsive pass across the site. Every page-wrap goes flush to the device edges (no more rounded card with margins around it on phones), the hamburger drawer locks the page behind it and fills the full viewport, and segmented controls collapse to a Select dropdown so filter rows stop overflowing.
>/companies on mobile: tapping a row now opens the company page (instead of being a no-op against the hidden detail pane), the inbox list stays visible (was being hidden along with the filters), and the search terminal collapses to a single line.
>/companies/<slug> on mobile: TopNav added (was missing the hamburger entirely), back/website actions collapse to icon-only buttons that match the "X jobs" pill in height and padding, "open roles" relabelled to "jobs", the open-roles table breaks out of the page padding and scrolls horizontally so columns keep their natural widths, and the lower-grid spacing tightens up.
>/market/employment, /market/employment/<iso3>, /market/layoffs, /market/layoffs/<region> hero stat tiles stack one-per-row on phones instead of compressing into a three-column row that wraps the period text onto two lines.
>/how-it-works on mobile: feature illustrations now use a 5/3 aspect ratio (more room for the animations) and reach into their inner padding to give moving pieces breathing space.
>Inputs, selects, and buttons share one size on mobile with tighter `--space-md` horizontal padding so toolbar rows fit.
>Landing: the desktop job-board screenshot is hidden on phones (it was shrinking to an illegible postage stamp), credit pricing cards get real breathing room around the dividers when stacked, hero placeholder reads "What job do you want?".
>Fixed iOS Safari auto-inflating text inside horizontally-scrolling tables (`-webkit-text-size-adjust: 100%`).
>New per-country details table below the world map on /market/employment. Every covered country listed with its latest value, period, and a year-over-year % change pill (up/down arrow, green when the trend is good for the labor market, red when it isn't, direction flips for unemployment and layoff rates). Rows link straight into the per-country page.
>Per-country page (/market/employment/<iso3>) now opens with a country-profile block sourced from World Bank WDI: total population, working-age population (15-64), labor force, participation rate, working-age share, GDP per capita, each tagged with its WDI reporting year. Page title now reads "Unemployment rate in <country>" (or whichever metric is selected) so the headline matches what the chart actually shows.
>Methodology section on /market/employment rewritten to cover every data source the page reads from: BLS national + LAUS state series, OECD DSD_KEI, Eurostat une_rt_m and lfsi_emp_q, and World Bank WDI SL.UEM.TOTL.ZS. Each row shows the actual series ID, the agency, and what the value measures.
>New methodology section on /market/layoffs documenting the WARN-Act scope (what triggers a filing, the 60-day notice rule, the 50-employee threshold) and the roadmap for adding OECD layoff/separations rates and analogous statutory filings outside the US.
>Hover on any line chart (employment, layoffs, market, per-company funding, ...) now shows a tooltip with the exact date and value at the cursor, instead of only the dashed crosshair.
>Fixed: picking a US state on /market/employment used to 400 the API ("country (ISO-3) and kind are required"); the endpoint now accepts both ISO-3 codes and the US-<USPS> form the state picker emits.
>Removed the "See the whole market" / "See every country" CTA button from /market/employment, /market/employment/<iso3>, /market/layoffs, and /market/funded. The breadcrumb already points back to /market so the dark pill was redundant.
>World Bank WDI annual unemployment added for emerging markets the monthly sources don't reach: India, Brazil, Indonesia, Nigeria, Pakistan, Egypt, Vietnam, Bangladesh, plus ~180 more. Skips countries already covered at monthly cadence by BLS/OECD/Eurostat so the higher-resolution series never gets overwritten. The world choropleth now colours 230+ countries instead of the previous ~80.
>Eurostat employment dataset now yields two indicators in one pull: working-age employment rate (EMP_LFS) AND labor force participation rate (ACT). LFPR for 31 EU/EFTA countries now available alongside the existing US national series.
>New US-state picker on /market/employment, separate from the country dropdown. Lets you switch the chart to California, Texas, New York, or any of the 50 states + DC without polluting the global country list.
>OECD monthly unemployment added: 37 OECD economies including Australia, Canada, Korea, Mexico, Israel, Chile. Pulled via the new sdmx.oecd.org DSD_KEI dataflow.
>New world map on /market/employment: countries shaded by the latest value for the selected metric, hover for the exact number + period + source, click to switch the chart to that country.
>New per-country pages at /market/employment/<iso3> (e.g. /market/employment/deu, /market/employment/jpn). Hero stat tile, breadcrumb, metric picker filtered to whichever metrics that country actually has, with the chart driving on real source data.
>The country dropdown now opens directly below the trigger and caps its height to match the chart underneath, instead of flying off to the right.
>US states are filtered out of the global country picker (they belong on a future state picker, not next to Australia and Belgium).
>mu-intel scheduler now drives every market-data source on its own cron: Kadoa (daily), BLS national + state (daily), OECD unemployment (daily), Eurostat unemployment (daily), Eurostat employment-rate (weekly), Eurostat vacancies (weekly). Boot delays stagger the first runs so all six don't race the same network second after a restart.
>Employment hub gained a country picker. The chart now defaults to the US national series but flips to Germany, France, the UK, California, or any of 84 covered countries / US states via the new dropdown above the metric switcher. The metric switcher hides tabs the selected country doesn't have data for, and snaps to the first available metric when a country only carries one.
>BLS state-level unemployment series added. All 50 states + DC, monthly, seasonally adjusted, from a 50-series-budget-aware chunked BLS API call. Each state appears as its own row in the country picker (California, Texas, New York, ...).
>Eurostat quarterly job-vacancy rate added: all NACE activities, all firm sizes, seasonally adjusted, 14 countries with reporting (336 points). Shown under the same "Job openings" metric as US JOLTS.
>New interactive US state map on /market/layoffs, below the workers-affected timeline. Each state is shaded by filings (or workers affected when available); hover for the exact numbers, drag to pan, scroll to zoom, double-click to reset, click a state to drill into its detail page.
>Eurostat monthly unemployment rate added to the employment data pipeline. 2,363 monthly observations across 32 EU and EFTA countries flow into the same market collection as the BLS series, so the US-vs-Europe comparison story is data-ready.
>Layoffs feed expanded from 4 US states to 45 via the open Kadoa dataset. Single fetch pulls every public WARN-Act notice (~44,000 records covering 1998-present) and lands them in our market collection alongside the direct state pulls. The hub now charts actual workers-affected numbers (1.18M tracked across the 5-year window) instead of falling back to filing counts.
>Layoff hub is general market data now. Every WARN filing the scrapers parse lands on /market/layoffs, whether or not the company is on our job board. Filings from board companies still link out to their /companies/<slug> profile; everyone else reads as plain text in the same row. Default window widened from 90 to 365 days so the page renders out of the box even when the most recent state filings are several months stale.
>/market/employment picker swapped to the shared SegmentedControl (matches the market range switcher). Labels trimmed (no more "(JOLTS)" suffix); title and picker now stack vertically and align left.
>/market/employment now shows real BLS data. Seven monthly US labor metrics from the Bureau of Labor Statistics: unemployment rate, labor force participation, employment population ratio, plus the JOLTS suite (openings, hires, quits rate, layoffs rate). Pickable via a top-of-page control; the chart redraws with the right axis format (percent vs thousands) for whichever metric you pick. Five years of history loaded by default. OECD and Eurostat country coverage joins next.
>Per-state layoff pages at /market/layoffs/<state> (e.g. /market/layoffs/california, /market/layoffs/new-york). Same hero, timeline chart, top-affected companies, and recent filings as the hub, scoped to one state. Each region row on the hub now links to its detail page. Sitemap updated so search engines can crawl all 51 region URLs.
>/market/layoffs now shows real WARN-Act data. New hub layout: workers-affected timeline chart, per-state ranking, top affected companies, and a day-grouped recent filings feed. Each company name links to its profile. Hub is sourced from California, New York, Texas, and Washington WARN feeds today; further state coverage lands as Phase A continues.
>A bit more breathing room around the rail brand header.
>Job board and Companies page each got a sticky top bar: page title on the left, primary action on the right. The "+ Add a job" button moved out of the rail nav into the Job board top bar where it lives next to the listings it affects.
>Personas, Market Chat, and Admin page top bars all now share one component, so a single tweak to the bar style updates every page at once.
>New /market/layoffs and /market/employment pages. Layout, breadcrumb, meta, and source documentation are live so the routes can be linked, shared, and indexed while the WARN, Layoffs.fyi, Eurostat, BLS, and OECD data pipes come online.
>Rail nav restructured into four labelled sections (Main, Market, User, Admin) with a small mono header above each group. Mobile drawer + page-menu dropdown use the same sections so the structure is consistent across breakpoints. Sub-pages highlight their own child via longest-prefix matching.
>Post-a-job page now uses the same rounded card frame as the rest of the public pages.
>Tightened the contrast on the company intel sidebar: descriptions, chips, and rows now read in the muted grey instead of full-contrast black, so the open-roles table stays the visual anchor of the page.
>Share previews now look bespoke per company. Posting a /companies/<slug> link on LinkedIn, Twitter, Slack, or anywhere else with link unfurls renders a custom 1200x630 card with the company name, headcount, HQ, latest funding round, and a "View N open roles" CTA, instead of the generic brand image.
>Refreshed the homepage share image to match the current site palette (cool-white background, JetBrains Mono headline) and dropped the old cream/serif look.
>Company pages now show two "more like this" blocks above the open-roles table: other companies in the same industry, and other companies in the same HQ country. Each block links to up to five sibling profiles plus a "See all" out to the matching hub page.
>Bing, Yandex, Seznam, Naver, and DuckDuckGo learn about company-page changes within minutes via IndexNow instead of waiting on their crawl schedule. Fires fire-and-forget from the company-doc upsert path with a 1-hour per-slug debounce so a sync run doesn't spam.
>Removed the source-and-date superscripts ([AI, Jun 2026], [derived, Jun 2026], etc.) from the company intel chips, description, funding, layoff and hiring-velocity rows on the right pane. Cleaner read; the provenance is still tracked under the hood.
>Performance: preload the variable woff2 fonts on every public route so first paint doesn't wait on the font CSS to parse. Added explicit width/height on the homepage why-stage images and the company-logo carousel to prevent layout shift while they load.
>Each release group on /releases now ships Schema.org Article structured data so search engines can render the changelog as article rich results.
>/companies directory and the /market top-companies tile no longer surface the "Unknown" and "Non renseigné" buckets. Those slugs aren't real companies, they're per-feed placeholders the scraper assigned when the source posting had no company name, and they were dominating both rankings. /companies/<catchall> pages also 404 now.
>Company pages now show their industry as a link to a new browse page that lists every company in that industry.
>New hub pages at /companies/industry/<name>, /companies/country/<name>, and /companies/funding/<stage> so you (and search engines) can browse companies by sector, headquarters country, or funding stage.
>Funding history on company pages got a cumulative dollars-raised chart above the rounds table. Each round reads as a clear step up the line so it's obvious when and how a company's money came in.
>Breadcrumbs added across the public site (home, market, companies, about, releases, terms, privacy, how it works, recently funded) so you can trace back up the path with one click.
>Fixed the company website button: was linking at Wikipedia for some AI-described companies. Now it only trusts URLs from the actual website crawl, with the slug-based guess as a fallback.
>Every open role on a company page now ships a JobPosting structured-data block so Google Jobs can index it.
May 31, 2026v0.38.1
>Funding history on /companies/<slug> now merges rounds from every source we know about (SEC Form D, SEC 8-K Item 3.02, Y Combinator, AI synth, OpenVC imports) deduped by round + year + amount, with the higher-confidence source winning on collisions.
>Funding table now shows the round kind (Seed, Series A, etc.) and a comma list of lead and notable investors when known.
>New Y Combinator source pulls the public YC companies feed and stamps a seed round on every tracked YC alumni company.
>New SEC 8-K source scans daily filings for Item 3.02 (Unregistered Sales of Equity Securities) and captures public-company private placements / PIPE deals that Form D doesn't cover.
>About, releases, terms, privacy, market, recently funded, the company intel page, and the in-app history, personas, chat, and tailor surfaces now sit inside a single rounded card frame so the chrome stays consistent across the site.
>Personas redesigned with a sticky top bar (page title + Add new persona) and a sticky bottom bar (active persona + Search with selected). The selected persona shows as a dark fill with light text. Per-row application history was dropped to keep the list scannable.
>History redesigned with the same sticky top-bar pattern (title + Tailor another).
>Chat redesigned with a sticky top bar (Chat title + New conversation) and the action moved out of the conversation sidebar.
>Input focus state replaced the outline ring with a subtle background tint that adapts to theme.
>Fixed a blank gap below the "A smarter way to land the job" scroll section on the homepage.
>New /sitemap.xml advertises every public route plus every enriched company page so search engines can discover and re-crawl them on their own. Listed in robots.txt.
>Company rows on /companies are now real links to /companies/<slug>, so they open in new tabs with the standard browser shortcuts and so crawlers can follow them.
>Every /companies/<slug> page now ships a full SEO head: dynamic title, description, keywords, canonical, Open Graph (with site image), Twitter large-image card, and a richer Schema.org Organization (headcount, sameAs links). /companies index gets the same suite.
>Split /sitemap.xml into a sitemap index plus chunked child sitemaps (10K URLs each), so crawlers no longer time out fetching a single 12 MB / 60K-URL file. Google reported "Couldn't fetch" against the monolithic version.
May 30, 2026v0.30.0
>Company pages now have an About section and a Culture section, written in our own voice by Claude Haiku off Wikipedia summaries and the company's own about pages. Each runs once per company so the same paragraph keeps showing up after the first read.
>Wikipedia source feeds factual infobox data (founding year, HQ, industry, headcount) into the company profile when our other sources don't carry it.
May 30, 2026v0.29.0
>Every profiled company now has its own public page at /companies/<slug>: about paragraph, profile facts, full funding history, full layoff history, and a link to the company website. Each page is server-rendered with canonical, OG and schema.org Organization metadata so search engines can index them. Open the page from the /companies right pane via "View company intel".
>/companies open-roles table is now horizontally aligned to the header above (var(--space-xl) outer inset, var(--space-md) between cells).
May 30, 2026v0.28.0
>Company intel panel now surfaces more of what we already know: industry chip, ownership type, VC backers, age in years next to founding year, total raised across all rounds, total employees laid off across all WARN filings, and repost rate when significant.
>Website crawl now falls back to a domain guess (<slug>.com) when no curated domain is on file, so the description / HQ / founding year light up for many more companies on the next 30-day cadence.
May 30, 2026v0.27.5
>New Companies directory at /companies (also in the side nav under Market). Same three-pane chrome as the job board: filter sidebar, searchable inbox with pagination, profile + sortable Open roles table on the right. Click any column header in the roles table to re-sort.
>Company pages now show a Company intel panel above the open roles, with funding history and hiring velocity, each tagged with its source and as-of date.
>Layoff history (state WARN Act filings from CA, NY, TX and WA) and a company description / HQ pulled from each company website now feed into the same panel.
May 29, 2026v0.26.0
>The job board now defaults to English postings only, so non-English listings no longer crowd the inbox on a fresh visit. Pick other languages from the Language filter to include them.
May 28, 2026v0.24.1
>We're adjusting our plans to fit Madrigal
May 27, 2026v0.24.0
>Job descriptions in the board preview pane now keep their original formatting (headings, bullet lists, links, bold text) instead of being flattened into a wall of plain text
>Fixed shared links to a specific job so they reliably open that exact listing, instead of falling back to the newest job on the board
>Security hardening pass: tightened how external job links are rendered (any non-http link is no longer clickable) and how the sign-in callback URL is validated, so a tampered link can no longer redirect you off the site after sign-in
May 26, 2026v0.21.1
>The Funded Companies page now reaches back over two weeks of filings each refresh, so recently funded companies keep showing up even across long holiday weekends
May 26, 2026v0.21.0
>Company pages now show who backs the company, like "Backed by Andreessen Horowitz, Sequoia Capital", for venture-backed names we track
>Added hundreds of new venture-backed companies to the job board, pulled fresh from their own careers pages
>Simplified the signed-out homepage hero
May 26, 2026v0.20.3
>The footer copyright is now a full-width bar that lines up with the sidebar account area
>The How it works page now closes with the same sources strip and "Find a job now" button as the homepage
May 26, 2026v0.20.2
>The Market and Funded Companies headers now stack on narrower screens, with the chart and stats sliding below the intro instead of getting squeezed
May 26, 2026v0.20.1
>Tidied the footer: dropped the FAQ link and fixed Pricing so it jumps to the pricing section from any page
May 26, 2026v0.20.0
>New Funded Companies page: companies that just raised money (matched from public SEC filings) and are hiring, with their open jobs one click away. Refreshed every 12 hours
>Reworked the footer with a Market section linking to Market Statistics and Funded Companies, on a lighter background
May 26, 2026v0.19.0
>The homepage board preview is now fully clickable and takes you straight to the job board, with its buttons matching the real ones
>Fixed the Market page globe rendering as a flat grey or black ball after a refresh in dark mode
>Fixed the board preview buttons getting clipped or vanishing at the bottom, especially in Firefox
May 26, 2026v0.18.0
>Unified the credit-pack pricing so it looks identical everywhere it appears: the homepage, the chat paywall, and the resume tailor
>Cleaner pricing cards: borderless with dividers, a "popular" tag on the recommended pack, and tighter, better-behaved spacing on smaller screens
May 26, 2026v0.17.1
>Tidied the pricing section: matched its spacing to the section above and gave the credit packs clean vertical dividers instead of boxed borders
May 26, 2026v0.17.0
>Reworked the "A smarter way to land the job" story into a full-screen scrolling experience: each step pins for a moment while its photo wipes in and slowly zooms
>"Fresh on the board" now adapts how many roles it shows to your screen size
>The strip above the footer now tells you how many companies we pull jobs from and links you straight to the board
>Polished the homepage comparison section and made the company-logo carousel arrows clearer, looping back around at the ends
May 26, 2026v0.16.1
>Sharpened the copy on the new homepage comparison section so it speaks to what is actually working against you out there
May 26, 2026v0.16.0
>New homepage section laying out why Miserably Unemployed beats scrolling LinkedIn or leaning on a generic AI chatbot, with pricing built right into it
>The Market page now shows how many companies we are currently pulling jobs from
>Fixed the interactive globe on the Market page failing to render in dark mode
May 26, 2026v0.15.0
>Roughly doubled the companies we pull jobs from: now tracking 9,500+ employers across Greenhouse, Lever, Ashby, SmartRecruiters, Personio, Workable, Recruitee and Breezy
>The job board now refreshes every 12 hours
May 25, 2026v0.14.0
>Pick a persona on the Personas page and a "Search for jobs" bar lets you jump straight to the board pre-filtered to that persona
>The mobile menu now matches the sidebar styling and no longer lingers on screen once the sidebar is visible
>Polished the board: straight hairline dividers between listings, a fade on older searches instead of a scrollbar, and lighter filter labels
>Consistent footer/action bars throughout, and dialogs now sit above the sidebar instead of behind it
May 25, 2026v0.13.0
>Moved site navigation into an expanded left sidebar that always highlights the page you are on; the top bar is gone on larger screens
>Job previews now have a "Research" button that opens the AI chat already asking for more jobs like the one you are viewing
>Reworked the Market page: a cleaner intro with the open-jobs trend chart up top, then the headline stats below
>Consistent button styling across the site, plus a tidier sign-in flow from the sidebar and job previews
May 25, 2026v0.12.0
>Redesigned the homepage around one big "What job are you looking for?" search and a clearer "Your AI recruiter" pitch
>Added a live, self-playing preview of the job board to the homepage so you can see how it works before signing in
>New "Fresh on the board" strip showing the latest listings
>Fix: the job board no longer errors out when the total job count is slow to tally; it stays up and shows the latest known count instead
May 25, 2026v0.11.7
>If resume tailoring stalls, it now times out and automatically refunds your credit so you can retry
>Stricter request validation and tighter database query limits for a more stable, harder-to-abuse board
>Security and reliability hardening across uploads, sessions, and our database connections
>Hardened how posted job descriptions are cleaned before they are shown, and application links on posted jobs must now be secure (https)
May 24, 2026v0.11.4
>Fix: deleting your account now fully removes it, your sign-in records included, instead of leaving the login behind
>Reporting a job now opens in a tidy popup instead of an inline panel
>Bigger, easier-to-scan job titles in the board and homepage lists
>Simplified the market chart to a single clean line tracking open jobs over time
May 23, 2026v0.11.0
>Search the job board by US ZIP code with an adjustable radius (10 to 100 miles)
>Cleaner job lists on the homepage and board: more breathing room, Mail-style divider lines, and a rounded highlight on the active listing, with job titles back in Roboto
>You can now report a job posting that looks like spam, a scam, or a duplicate, straight from its preview
>Polish: the main nav menu and avatar menu now use the same rounded corners as the buttons and other dropdowns
>Fix: jobs with several locations no longer overflow and break the row; the location now truncates cleanly (job board and homepage)
>Fix: the bottom of the job board (and post-a-job page) is no longer clipped a few pixels short of the screen
>Unified every browser-tab title to a single "Page | Miserably Unemployed" format
>SEO: every page now has a proper title (page name plus the brand), a description, and keywords; fixed a leftover placeholder browser-tab title on the homepage
>Added a small byline under the homepage headline: "No ads. No nonsense. Just hope."
>New homepage strip of top company logos (Amazon, Apple, OpenAI, and more), each linking straight to that company's open jobs
>Pricing is now one clear call to action: browse free, apply with AI-tailored resumes, buy a pack and start in 90 seconds
>Out-of-credits and signed-out states now show the same banner and gating across the homepage, chat, and resume tailor, with one consistent pricing screen
>Homepage feature rows now alternate zoom direction as they scroll into view
>Mobile: the homepage jobs list no longer scrolls inside its panel
>The "How it works" feature rows now match the homepage's rounded image-and-text panels, with an animated illustration in each
>Pricing: "Browsing the board is free" now links straight to the job board
>New "How it works" page (linked from the menu and footer) that walks through what the product does for you: fresh sourcing, personas, AI market queries, and ATS-beating tailoring, each with its own animated illustration
>Fix: clicking a link now lands you at the top of the next page instead of slowly scrolling there
>Homepage chat no longer asks you to sign up and then hits you with a paywall. You only see the chat box when you have credits; otherwise a clear banner tells you up front that querying the market needs an account and a credit pack
>New homepage section, "A smarter way to land the job": four reasons a job board alone won't get you hired and how we help, with imagery
>Reframed the pricing section around what credits actually pay for, and moved the list of job sources we parse down near the footer with a "Tailor a resume" call to action
>Fix: closed a gap that appeared below the nav on the Resume Tailor page, and the homepage hero now fills the screen exactly with no sliver beneath it
May 22, 2026v0.5.1
>Fix: removed 72 duplicate company entries that made the scraper fetch the same job board twice every cycle (no listings lost, just wasted work)
>New employers: 1,556 more companies added to the board, sourced by a much-expanded discovery pipeline that mines startup directories (YC, VC portfolios, unicorn lists) and Hacker News hiring threads, then verifies each against its live careers board before listing it
>New employers: 67 companies added to the board via automated ATS discovery, including ClickHouse, Astranis, One Medical, Duolingo, Whoop, Hopper, Writer, and Persona
>Fix: the new Content-Security-Policy was blocking the job board from loading its data (the board calls the API on the www host while the page is on the bare domain); the policy now allows both, so the board works again
>Added an llms.txt index at the site root, a machine-readable table of contents that helps AI crawlers find the board, market, and key pages
>Faster: the site now serves over HTTP/2, so the browser can fetch many resources over one connection at once instead of queuing them, speeding up page loads
>Security: the site now tells browsers to always use HTTPS (HSTS), closing the brief window where a first visit could be downgraded to an insecure connection
>Security: the site now sends a Content-Security-Policy, which tells your browser to only run scripts and load data from trusted sources, adding a layer of protection against injected or malicious code
May 21, 2026v0.4.5
>Snappier homepage: the chat suggestion typewriter now starts after the page loads and animates more efficiently, so the page responds to clicks sooner (and is skipped entirely if you prefer reduced motion)
>Faster homepage: job-market stats and recent listings are cached briefly on the server, so the page responds without waiting on a fresh database round-trip each visit
>SEO: added Schema.org structured data (Organization plus site search), so search engines understand the site better and it can qualify for richer results
>Faster first paint: the page now ships its critical styles inline instead of fetching a stack of separate stylesheets, so content shows up sooner
>SEO: every page now declares a canonical URL, and social-share (Open Graph / Twitter) links point at the canonical address
>Faster homepage: removed a heavy animated background and made the headline render instantly, so the page paints and becomes interactive much sooner
>Fonts now load from our own domain instead of Google's CDN, so first paint no longer waits on a third party (and no font requests leak your IP to Google)
>Fix: signing out now fully clears your session, so signing back in with a different Google account no longer leaves you logged in as the previous one
>New: opt-in session replay, heatmaps, and conversion goal tracking (SessionSight), behind its own "Session replay (SessionSight)" toggle in the cookie banner, so nothing records until you accept (you may see the banner again to confirm your choices)
>New employers: AstraZeneca, Pearson, Informa, and Bupa added to the board
>Fix: GSK was listed but returning no jobs (stale careers address); corrected (~700 postings)
>Fix: signing in now works when you visit the www version of the site (some visitors were getting stuck on the login screen)
>Board: filter jobs by language, auto-detected per posting, so you can narrow to English, Spanish, German, Portuguese, Chinese, Japanese, and more
>New source: Radancy / TalentBrew, an enterprise careers platform (Arm, ING to start)
>New employers: ABB, H&M, and NAB added to the board (roughly 4,200 more postings)
>New employers: Takealot (South Africa) and Nuvei (Canada fintech) added to the board
>Market page: the "Where we get the data" section now charts every ATS source by volume, not just the top 5
>Fix: H&M and NAB were already listed but silently returning no jobs (wrong slug/board); corrected both
>Fix: stop the language backfill from running at server boot (it was crash-looping the API/scraper on deploy); now run out of band
>Market stats: record the snapshot before the scrape so the chart stays fresh even if a scrape tick fails
>Started versioning the apps; pm2 now shows a version for the UI process (was N/A)