Enterprise Recruitment SystemSpring Boot 4 + Angular 21 + PostgreSQL

Welcome back!

See hiring momentum, act on trends, and keep every pipeline moving.

5,000
Total Candidates
8,000
Total Contracts
500,000
Salary Events

Key Metrics

Active Candidates
Currently in pipeline
3,534
Active Contracts
Currently employed
4,790
Average Salary
Across all contracts
$115,339.00
Total Bonuses
All time paid
$3,828,170,102.00
Last updated: Mar 11, 2026, 8:03:17 PM

Tech Stack Showcase

Proof points that keep the platform fast under real workloads.

PostgreSQL Optimizations

Table Partitioning

salary_events table partitioned by month (created_at)

PARTITION BY RANGE (created_at)
Materialized Views

Pre-computed aggregations for dashboard and reports

REFRESH MATERIALIZED VIEW CONCURRENTLY
BRIN Index

Block Range Index for time-series data on created_at

USING BRIN (created_at)
Partial Index

Index only active contracts for faster queries

WHERE status = 'ACTIVE'
Estimated Counts

Fast approximate row counts from pg_class.reltuples

SELECT reltuples FROM pg_class

Spring Boot Optimizations

N+1 Prevention

EntityGraph annotations for eager fetching relationships

@EntityGraph(attributePaths = {{"{"}"candidate"{"}"})
DTO Projections

Interface projections for selecting only needed columns

SELECT c.id, c.firstName FROM Candidate c
Caffeine Caching

In-memory caching with configurable TTL and eviction

expireAfterWrite=5m, maximumSize=1000
Dual Datasource

Separate connections for OLTP and OLAP workloads

@Transactional("olapTransactionManager")

Angular 21 Optimizations

Signals

Fine-grained reactivity with automatic dependency tracking

readonly page = signal(0)
httpResource

Reactive data fetching with automatic request management

httpResource(() => ({ url: API_URL }))
@for + track

Optimized list rendering with identity tracking

@for (item of items; track item.id)
Virtual Scrolling

Render only visible items for large lists

<cdk-virtual-scroll-viewport>

Architectural Patterns

OLTP/OLAP Separation

Isolate transactional and analytical workloads

OLTP: 10 connections, OLAP: 5 connections
Pragmatic CQRS

Read from materialized views, write to tables

Queries: Views, Commands: Tables
Workload Isolation

Prevent heavy reports from affecting CRUD operations

Reports: statement_timeout = 30s