The job board and the admin console were trying to wear the same clothes. It made both worse.
Job seekers need pages that load fast, expose real job content to search, and get out of the way. The people running the board need queues, bulk actions, record detail, and filters that stay put after they open a candidate or job.
I left the public side in Astro and put the protected operations work in a React Router app.
The public pages keep their crawlable listings, filters, and structured data. Employers still get focused paths for posting and managing jobs. None of that needs a giant client app.
Inside the console, jobs, sourcing runs, candidate review, indexing, companies, users, applications, and email each have their own screen. When someone opens a record, the app remembers the queue, filters, sort order, and scroll position they came from.
React does not get direct database access or provider secrets. Every read and action goes through a protected server endpoint, which checks the admin again. Publishing, matching, email, and indexing rules stay on the server.
The split is a little more explicit. Good. Public discovery and internal operations are different products.