@RestController @RequestMapping("/api/courses") public class CourseController { @Autowired private CourseService service; @GetMapping @PreAuthorize("hasRole('STUDENT')") public Page<CourseDTO> getCourses( @RequestParam(required=false) String category, @RequestParam(defaultValue="0") int page, Pageable pageable) { return service.findAll(category, pageable); } @PostMapping @PreAuthorize("hasRole('INSTRUCTOR')") public ResponseEntity<CourseDTO> create( @Valid @RequestBody CreateCourseRequest req, @AuthenticationPrincipal UserPrincipal user) { return ResponseEntity.status(201) .body(service.create(req, user.getId())); } } // JWT filter — fires before every request @Component public class JwtAuthFilter extends OncePerRequestFilter { @Override protected void doFilterInternal( HttpServletRequest req, HttpServletResponse res, FilterChain chain) { String token = extractToken(req); if (token != null && jwtUtil.validate(token)) { SecurityContextHolder.getContext() .setAuthentication(buildAuth(token)); } chain.doFilter(req, res); } }
Ibadan, Nigeria — Full-Stack Software Engineer
Tamilore

BUILD
SYSTEMS
THAT HOLD

// Backend-first engineer   { Java · Spring Boot · Node.js · React }

Auth that can't be bypassed. Transactions that don't corrupt. APIs built for backend and full-stack systems that scale.

Scroll to explore
01
01

About.

I'm a Computer Science student and Full-Stack Software Engineer based in Ibadan, Nigeria. I build backend and full-stack systems that scale.

My focus is the engineering beneath the surface: auth that can't be bypassed, transactions that stay consistent under concurrency, relational schema design built for the query patterns that actually matter.

Currently mastering Java and Spring Boot — migrating from Node.js-first thinking to proper layered architecture with service/repository separation, JPA entity relationships, and Spring Security. Backed by a solid foundation in Data Structures and Algorithms: I solve problems daily with focus on pattern recognition, time complexity, and writing solutions that hold up under scale — not just in interviews.

Open to backend and full-stack roles where real engineering problems exist and clean solutions are valued.

4
Projects shipped
3
Backend APIs
1
Hackathon
Languages
JavaJavaScriptSQLHTMLCSS
Frameworks & Runtimes
Spring BootReactNode.jsExpressVite
Databases & Data
MySQLPostgreSQLSchema DesignIndexing
Security & Auth
JWTbcryptSpring SecurityRBAC
Tooling
GitPostmanVS CodeNodemailer
In Progress
JUnit 5MockitoRedisDocker
02

Projects.

// Hackathon — Fintech
GigConnect

Escrow-backed service marketplace connecting clients to local artisans. Payment trust is architectural, not cosmetic.

  • Interswitch API escrow — funds held until both parties confirm job completion, eliminating dispute risk without manual mediation
  • Webhook handler with idempotency key validation — prevents double-charging on API retries planned
  • Community price index aggregates average rates across the platform — anti-exploitation layer against price gouging
  • Geolocation routing connects clients to nearest available professional
  • Strict MVC — auth, job lifecycle, chat in independent, testable modules
Node.jsExpressMySQLInterswitch API
View on GitHub
// Backend API — Concurrency
Library Management API

Enterprise REST API for library inventory and patron lifecycle. Architecture prioritises data integrity over convenience.

  • Pessimistic locking on borrow transactions — concurrent requests for the last copy cannot both succeed; one blocks until the first commits planned: Spring Data JPA migration
  • JWT RBAC with distinct permission scopes — admin (inventory write) vs patron (borrow/view) enforced at middleware, not controller logic
  • Paginated, cursor-aware REST endpoints with indexed filtering — response times stay predictable as catalogue scales
  • Transactional rollback on partial borrow failures — inventory count never decrements without a matching borrow record
Node.jsExpressMySQLJWT
View on GitHub
// Security — Browser
Exam System

Secure assessment platform. Anti-cheat logic sits in a middleware layer — no UI action is trusted at face value.

  • Visibility API + fullscreen enforcement + input interception at the browser event level — tab switches and copy events are captured before they reach the DOM
  • Session state serialised to server on each answer — exam recovers in under 1s after network interruption without answer loss
  • Anti-cheat violations logged server-side with timestamp and event type — tamper evidence, not just prevention
JavaScriptNode.jsMongoDB
View on GitHub
Full-Stack Software Engineer — open to roles

LET'S BUILD
SOMETHING
REAL.

I know what production-grade looks like and I'm building toward it deliberately. If your team needs a backend-first engineer who thinks about locking strategies, token revocation, and idempotency — let's talk.