CASE 12 / Product & systems
Your next move, straight from the source.
A solo-built career discovery workspace: find roles from company career pages, follow employers, and track applications. Live public preview, starting with India.
- THE PROJECT
- Rolecall
- THE CONTEXT
- Independent product
- THE CHAPTER
- Live public preview
- THE PROBLEM
- Job hunting across company career pages leaves discovery and application tracking scattered.
- WHAT I OWNED
- Solo product design, ingestion pipeline, PostgreSQL search, API, interface, and private career workspace.
- THE RESULT
- A live India-first preview with real listings, direct employer links, and application tracking.
From the live product

Public Rolecall search, captured 28 October 2026 without signing in. Listing counts and availability are a point-in-time view.
My contribution: Solo implementation of the discovery interface, source-backed job index, search API, and connected career workspace.
COMPONENTS / RESPONSIBILITIES / SCOPE
How the parts fit together.
The ingestion foundation and public product share a PostgreSQL job index. The hosted preview serves an imported snapshot; its continuous ingestion worker is not running.
01
Company sources
Adapters read public ATS APIs first, structured JobPosting data second, and use a browser fallback where needed.
- The boundary
- Each source and job retains a stable identity and its original application destination.
- Implementation note
- API-first collection reduces browser work, but source availability and indexing permissions still vary.
02
Ingestion and storage
PostgreSQL holds the source registry, leased work queue, normalized jobs, and fetch logs.
- The boundary
- Expiring leases and owner checks prevent a stale worker from completing another worker's assignment.
- Implementation note
- One database keeps the system small. The scheduler exists in the foundation but is not a continuous service in the public preview.
03
Search and discovery
FastAPI combines full-text search, trigram matching, normalized locations, filters, and deterministic sorting.
- The boundary
- Public results link back to the employer and show source-check information rather than promising a role is still open.
- Implementation note
- The product disables the POC's page-one company cap to keep one consistent ordering across pages.
04
Private career workspace
Next.js connects account-backed saved jobs, application stages, notes, company follows, saved searches, and an inbox.
- The boundary
- Browsing is public; personal workspace operations require an authenticated account.
- Implementation note
- Alerts are future-only and in-app, not job-alert email. Account export gives users a copy independent of the free preview.
Conceptual responsibility map. Not a production deployment diagram or a screenshot.
01 / The problem.
I built Rolecall to help me, my friends, and other people looking for their next opportunity. Finding a role meant moving between company career pages and keeping a separate record of applications. I wanted to bring discovery and a private career workspace together, preserve the original source, and send applications directly to the employer.
02 / My role.
I designed and built Rolecall solo, from the Python ingestion pipeline and PostgreSQL search to the FastAPI backend and Next.js product interface. My scope includes source discovery, job normalization, search and filters, company pages, account and application workflows, saved searches, employer follows, in-app alerts, and the free public deployment.
- My contribution
- Solo product design and end-to-end implementation across ingestion, search, the web interface, private workspaces, and deployment.
- Shared scope
- Job listings belong to their company sources. Next.js, FastAPI, and PostgreSQL provide the application foundation; Vercel, Render, Supabase, and Brevo provide hosting and email services.
- What changed
- A live India-first public preview with real indexed listings, direct employer application links, and private career tracking.
03 / Start at the company, not another repost.
I began with a career-page ingestion POC, then built a product around its real job database. Sources are identified by their platform and source key; jobs are upserted by source and external job ID. Greenhouse, Lever, and Ashby can expose public structured endpoints, so a browser crawl is a fallback rather than the default.
The public interface adds India-first discovery, filters, shareable role pages, and company pages. A source-check timestamp helps people judge freshness, and the apply link goes to the employer. It is not a guarantee that a vacancy remains available or that every remote role accepts applicants from every location.
04 / Make the result list behave like one list.
PostgreSQL handles both full-text retrieval and trigram title matching. Ingestion normalizes role categories and locations; the query parser recognizes synonyms and location intent. Explicit filters override inferred values, and result counts use the same search conditions.
The original POC limited how many jobs from one company appeared on the first page. Combining that first-page-only rule with offset pagination could omit or repeat roles on later pages. The public product disables that cap and uses job ID as a final sort tie-breaker, preserving a complete, stable ordering for an unchanged index.
05 / Keep the search public and the next steps private.
People can browse without an account. Signing in adds saved jobs, application stages, and private notes, so the product supports the work after finding a promising listing. Company follows and saved searches connect discovery to a future-only in-app inbox.
I also built verification and password-recovery email, password changes, JSON account export, and password-confirmed deletion. Verification and recovery use Brevo in the public deployment; job alerts stay in the application and are generated when alert processing runs.
06 / Ship the product without hiding the preview limits.
The public deployment uses Vercel, Render, and Supabase free services. Only public job-index and logo data was transferred from the local environment, not local accounts or private workspaces. Public users create their own accounts.
I kept collection separate from the public product. Source-check timestamps stay visible, and account exports let users retain a copy of their workspace. The current hosting and refresh limits are listed below.
07 / The result.
- Turned a career-page ingestion POC into a hosted discovery product with real company-source listings.
- Connected public search, filters, company pages, and direct application links.
- Built private application tracking, employer follows, saved searches, and an in-app inbox.
- Shipped account recovery, export, and deletion alongside explicit source-freshness and free-hosting limits.