All projects
2026Solo project

Yeti Jobs

A production job portal connecting seekers and recruiters

Node.jsExpressPostgreSQLReactTypeScriptDockerSupabase

Video walkthrough coming soon

Yeti Jobs is a full-stack production job portal built from scratch to connect job seekers, recruiters, and administrators through a scalable hiring workflow. The platform was designed as a complete software system rather than a simple CRUD application, covering authentication, role-based access control, job discovery, applications, company management, resume handling, and recruiter operations.

I designed and implemented the complete backend architecture using Node.js, Express.js, PostgreSQL, and TypeScript. The system contains 50+ REST APIs covering authentication, user profiles, companies, jobs, applications, bookmarks, and administrative operations. The database schema was designed around real application requirements, including relational modeling, foreign key relationships, indexing strategies, and optimized queries.

One of the main engineering challenges was building a fast job search experience. I implemented PostgreSQL full-text search with GIN indexing and optimized database queries, reducing search latency from 7ms to 0.9ms. The application also uses pagination, filtering, and optimized API responses to handle larger datasets efficiently.

Authentication and authorization were built with security in mind. The platform supports multiple user roles including job seekers, recruiters, and administrators. JWT-based authentication protects private routes, while middleware controls access based on permissions and ownership. Recruiters manage companies, publish jobs, review applicants, and maintain hiring workflows, while candidates manage profiles, resumes, saved jobs, and applications.

The frontend was developed using React, TypeScript, and Tailwind CSS with a focus on responsive user experience. The interface includes role-based navigation, protected routes, dynamic dashboards, job search with debouncing, application tracking, profile management, resume uploads, and recruiter tools. I built reusable components, custom hooks, centralized API handling with Axios, and optimized data fetching using request cancellation with AbortController.

Performance optimization was a major focus throughout development. The frontend uses lazy loading, pagination, optimized rendering patterns, and efficient state management with React Context API. Search requests are optimized through debouncing to reduce unnecessary API calls. Images and Docker configurations were optimized, reducing container image size by 74%, from 1.99GB to 520MB through multi-stage Docker builds and Alpine-based images.

The project includes an AI-powered resume scoring system that evaluates resumes against job descriptions and provides ATS-style feedback with a score from 0 to 100. This helps candidates understand resume gaps and improve their chances during applications.

For reliability testing, I performed load testing with Apache Bench and verified system behavior under concurrent traffic. The application sustained 67 requests per second with 100 concurrent users while maintaining zero failed requests. During testing, I identified and fixed backend issues such as connection pool management problems before deployment.

The application is deployed using modern cloud infrastructure with Vercel for frontend hosting, Render for backend services, and Supabase for database and storage services. CI/CD automation was added using GitHub Actions to improve deployment workflow and maintain code quality.

Building Yeti Jobs helped me understand how real-world applications are designed, optimized, tested, and maintained. The project combines frontend engineering, backend architecture, database optimization, security practices, cloud deployment, and performance testing into a complete production-style system.

Key features

Fault-tolerant architecture

Designed for component-level resilience — connection pooling, rate limiting, and error handling prevent single faults from becoming system failures

Idempotent job applications

A per-user, per-job idempotency key (rotated every 5 minutes) means a dropped connection and retry during a flaky network can't create a duplicate application or race against itself

Full-text job search

Composite and GIN indexing cut query time from 7ms to 0.9ms

Role-based access

JWT auth with separate dashboards for seekers, recruiters, and admins

AI resume scoring

OpenAI-backed ATS feedback scored 0 to 100 against a job posting

Container optimized

Multi-stage Docker builds shrank images from 1.99GB to 520MB

Load tested

67 req/sec sustained with zero failures at 100 concurrent users