← My work

Full-stack web product · Job-search operating system

Roleway

Roleway gives each focused job search its own Workspace, connecting Jobs, Opportunities, next actions, interviews, contacts, documents, and outcomes while an optional Agent prepares work that users approve.

Contribution
Designed and built independently
Current state
Live · Open source · Self-hostable
Built with
Next.js · TypeScript · Supabase · PostgreSQL · Turborepo · Zod · Vitest · Playwright

Product showcase

Inside Roleway

Selected product surfaces from the live experience, presented without simulated chrome or scroll-driven effects.

Roleway Opportunities list showing an expanded Workspace rail, grouped stages, priorities, Next Actions, and due dates
01Workspace opportunitiesFull resolution ↗
Roleway Home view ordering overdue and current work beside Workspace details, pulse, and active Opportunities
02Workspace HomeFull resolution ↗
Roleway Agent preparing interview work and presenting an exact create-task proposal for user approval
03Agent approval flowFull resolution ↗

Problem and response

The problem

A serious job search spreads across browser tabs, spreadsheets, calendars, documents, and notes. Different career targets blur together, follow-ups are missed, preparation loses context, and it becomes difficult to decide what deserves attention next.

The approach

An Account owns a Career Profile and multiple Workspaces, each with its own Jobs, Opportunities, preferences, people, documents, goals, and results. Home orders current work, Opportunities retain the complete dossier and one Next Action, and Roleway Agent prepares grounded drafts or internal changes without taking external action.

Architecture

Roleway is a pnpm and Turborepo TypeScript monorepo. A Next.js application composes shared workflow rules and Zod schemas, while Supabase provides authentication, PostgreSQL, row-level security, and the durable records behind Workspaces and Agent runs.

  1. Next.js application

    Server Components load authenticated Workspace data and Server Actions handle mutations. Client components stay focused on interactive controls, editors, collection views, onboarding, and the installable PWA shell.

  2. Core and schema packages

    Opportunity transitions, workflow labels, Agent permissions, and Zod boundary schemas live in shared packages so domain rules can be tested independently of route components.

  3. Owner-scoped PostgreSQL

    Supabase migrations are the source of truth for Workspaces, Jobs, Opportunities, tasks, contacts, interviews, documents, notifications, analytics, and Agent records. Row-level security and server checks enforce ownership.

  4. Provider-neutral Agent boundary

    User-supplied provider credentials are encrypted server-side. Agent runs disclose their context, validate tool output, record steps and approvals, and keep external actions outside the available permission model.

Key product and engineering decisions

These decisions affect what users can do, where product rules live, and how the system handles failure or change.

Give each search its own Workspace

An Account can hold separate Workspaces for different career targets. Preferences, Jobs, Opportunities, documents, people, goals, notifications, and analytics stay isolated instead of becoming one shared junk drawer.

Separate discovery from committed work

A Job stores discovered listing data. Tracking it creates an Opportunity with a stage and one concrete Next Action, so the active list represents deliberate work rather than another bookmarks folder.

Prepare with Agent, approve every change

Core tracking works without AI. Roleway Agent reads disclosed context, prepares grounded work, and presents exact internal mutations for approval; it cannot apply to jobs or contact employers.

Protect data at two boundaries

PostgreSQL row-level security scopes records to their owner and Workspace, while server actions independently authenticate callers and constrain mutations by owner and Workspace IDs.

What you can inspect

The live product and public repository provide concrete evidence of the implemented features, architecture, tests, and documentation.