Avanish JhaStart a project

WorkEnterprise platform at CMS Computers

Enterprise platform at CMS Computers

What I work on at my day job: a multi-tenant platform for incidents, maintenance and contracts, used by operations teams and the contractors who do the work.

Role
Java full stack developer
Stack
Spring Boot, Angular, PostgreSQL
Status
In production
Years
2024 to now
Features and fixes shipped
160+
Faster API responses
~30%
Database migrations
9+
Products worked on
4

Field teams report faults, supervisors assign and track them, and contracts decide who gets paid for the repair and what it costs if it runs late. Every customer sees only their own data.

  • Inventory, from scratch

    Eight kinds of stock movement on a ledger that can only be added to, never edited, with locking so two people can't spend the same stock at once.

  • Billing and invoices

    Invoices generated from finished work orders, itemised with tax, approved in stages and closed automatically once they're paid.

  • SLA penalties

    Each contract has its own working hours and holidays. When a repair runs late the penalty is worked out automatically, and only the right people can waive it, on the record.

  • The main dashboard

    Rebuilt as a drag-and-drop grid of eleven widgets each person can arrange, with live updates. The new version is under a third of the old code.

  • Fewer, smarter queries

    Removing N+1 queries, indexing the right columns and paginating cut API response times by about 30%.

  • Load less, not more

    The incident heat map loaded about 100,000 rows per customer to draw 500. Moving the filter into the database fixed the speed, and made two widgets agree on their numbers for the first time.

SecurityConfig.java
@Configuration
@EnableWebSecurity
@EnableMethodSecurity
public class SecurityConfig {

  @Bean
  public SecurityFilterChain filter(HttpSecurity http) throws Exception {
    return http
      .csrf(AbstractHttpConfigurer::disable)
      .cors(Customizer.withDefaults())
      .sessionManagement(s -> s.sessionCreationPolicy(STATELESS))
      .authorizeHttpRequests(a -> a
        .requestMatchers("/api/auth/**").permitAll()
        .requestMatchers("/api/admin/**").hasRole("ADMIN")
        .anyRequest().authenticated())
      .addFilterBefore(jwtFilter, UsernamePasswordAuthenticationFilter.class)
      .build();
  }
}

A licence server for a health app (Spring Boot and Vue.js), and a portal for configuring energy meters (Spring Boot and Next.js) behind Keycloak single sign-on.

Next stop

CONQR →Challenge pools with real stakes

Let's build yours.

A few lines is enough. I'll reply with questions or a time to talk.