Hosam Tarade
0
Backend developer intern at Wahj — open to work

Hosam Tarade

I build the part of the product nobody sees: APIs, data models, and auth that hold up when the traffic arrives. Three NestJS systems in flight, including an inventory backend that holds its numbers under real concurrency. Hebron, Palestine.

scroll
NestJSTypeScriptPostgreSQLPrisma ORMREST APIsPHPMySQLDockerGitClean ArchitectureSOLIDC#
GET /about
Hosam Tarade

Hosam Tarade

tardehosam@gmail.com
Hosam is a BACKEND dev

Fourth-year computer science student who spends more time in the schema than the style sheet. I started with PHP and MySQL on a course registration system that had to stay honest under concurrent edits — that taught me why transactions and constraints matter more than clever code.

Now I work in NestJS and TypeScript: an inventory system that survives two customers buying the last item at the same millisecond, a job platform with rotating refresh tokens, and an HR system three of us are building for our graduation project. Role guards, versioned migrations, validated input, and docs the frontend can click through.

2027expected
graduation
3.04GPA
out of 4.00
1323IEEE-Xtreme 18.0
of 8,784 teams
0oversells under
concurrency tests
GET /experience

Where I've worked
and trained

Jul 2026 — now
Backend Developer Intern
Wahj · Hebron, on-site
  • Build and maintain REST APIs in NestJS and TypeScript.
  • Model data in PostgreSQL with Prisma ORM; implement authentication and authorization.
  • Work through Git and code review, applying Clean Architecture in production code.
Feb — Aug 2025
Software Development Trainee
Gaza Sky Geeks · Skill Stack Path · remote
  • Python fundamentals, data structures, algorithms, and object-oriented programming.
  • Sharpened problem solving through timed coding challenges.
  • Practised peer review and pair work across a distributed cohort.
Jul — Aug 2025
Game Development Trainee
Google DSC · Zarqa University · remote
  • Game programming fundamentals in C# and Unity.
  • Built gameplay mechanics and interactive systems end to end.
  • Sponsored by AlBarmjad with Polytechnic University and Google Developers.
GET /work

Systems I'm building

01 — distributed backend · core modules done

Multi-Branch Inventory System

A backend for a retail chain where every branch holds its own stock of every product variant, and one online store sells across all of them. The hard part isn't the CRUD — it's what happens when two customers buy the last unit in the same millisecond.

Stock adjustments run inside a transaction that takes a pessimistic write lock on the row, so the second request waits, re-reads the real quantity, and is rejected instead of overselling. I proved it rather than assumed it: a script fires two identical requests through Promise.all and exactly one succeeds. Three roles — admin, branch manager, staff — gate every endpoint that can move inventory.

NestJSTypeScriptPostgreSQLTypeORMJWTRBACDockerSwagger
View on GitHub
inventory.service.ts
// two buyers, one unit left, one winner
return this.dataSource.transaction(async (m) => {
  const record = await m.findOne(Inventory, {
    where: { id },
    lock: { mode: 'pessimistic_write' },
  });

  if (record.quantity + change < 0)
    throw new BadRequestException(
      'Insufficient stock in this branch');

  record.quantity += change;
  return m.save(record);
});
02 — graduation project · in development

Human Resource Management System

An HR system for small and medium companies that can't justify Workday or SAP pricing. It follows an employee from job application through attendance, leave and loan requests, tasks and performance review, all the way to payroll. Four roles inherit upward — Applicant, Employee, Manager, HR Admin — and every sensitive endpoint is gated by the role that owns it.

Built with two teammates under Dr. Hani Salah at Palestine Polytechnic University. I work on the backend: schema, migrations, auth, and the request approval flow.

NestJSTypeScriptMySQLTypeORMJWTRBACDockerSwagger
Private repository — available on request
departments.controller.ts
// only HR Admin may reshape the org chart
@Post()
@Roles(Role.HR_ADMIN)
@UseGuards(JwtAuthGuard, RolesGuard)
create(@Body() dto: CreateDepartmentDto) {
  return this.departmentsService.create(dto);
}

// login is throttled: 5 attempts per minute
@Post('login')
@Throttle({ default: { limit: 5, ttl: 60000 } })
login(@Body() dto: LoginDto) {
  return this.authService.login(dto);
}
03 — full stack · in development

Job & Internship Platform

Companies post roles, candidates apply and track where their application stands. Two account types share one auth system but see different halves of the product, and every application moves through a fixed lifecycle from submitted to reviewing to a decision.

The piece I care most about is the session handling: refresh tokens are hashed with bcrypt before they touch the database, so a leaked dump can't be replayed against the API. Logging out clears the stored hash, which kills every issued token at once.

NestJSTypeScriptPostgreSQLTypeORMJWTNext.jsReactDocker
View on GitHub
auth.service.ts
// a refresh token is never stored in the clear
async refresh(userId: string, token: string) {
  const user =
    await this.users.findByIdWithRefreshToken(userId);

  if (!user?.hashedRefreshToken)
    throw new UnauthorizedException('Access denied');

  const matches = await bcrypt.compare(
    token, user.hashedRefreshToken);

  if (!matches)
    throw new UnauthorizedException('Access denied');

  return this.issueTokens(user);
}
Student Course Registration

Course enrolment portal with authentication, course management, and AJAX updates. PHP, MySQL, JavaScript.

2D Platformer

Side-scrolling game with component-based movement and interaction logic. C#, Unity. Repository

Library Management

Console application for cataloguing and lending, written while learning Python fundamentals.

GET /process

How I work

Working code is the easy half. The other half is making it safe to change six months from now.

Every schema change goes through a numbered TypeORM migration instead of automatic sync, so the database has a history you can read and roll back. Errors leave the API in one shape — status, message, path, timestamp — and successful responses in another, so the frontend never has to guess. Incoming data is validated against DTOs before it reaches a service, and anything not on the whitelist is rejected outright.

On the security side: Helmet for standard headers, rate limiting across the API with a tighter cap on login to blunt brute force, and role guards on every endpoint that touches someone else's data. Endpoints are documented in Swagger and testable from the browser, which is faster than any Postman collection I could hand you.

Work happens on feature branches, merged through pull requests, with commit messages that follow Conventional Commits. It sounds like ceremony until three people are editing the same repository.

Migrationsversioned schema,
never auto-sync
RBACguards on every
sensitive endpoint
Swaggerlive API docs
at /api/docs
PR flowbranch, review,
then merge
GET /stack

The toolkit

LANGUAGES

  • TypeScript
  • PHP
  • C#
  • C++
  • JavaScript
  • Python

BACKEND & DATA

  • NestJS
  • REST APIs
  • PostgreSQL
  • MySQL
  • Prisma ORM
  • Sanctum
  • CORS

TOOLS

  • Git
  • GitHub
  • Docker
  • Postman
  • Unity

FOUNDATIONS

  • Data structures
  • Algorithms
  • OOP
  • SOLID
  • Clean Architecture
  • Software engineering
Palestine Polytechnic University

BSc Computer Science, fourth year. Database systems, algorithms, data structures, OOP, compiler design, web programming.

Competitions

IEEE-Xtreme 18.0, ranked 1323 of 8,784. Member of the IEEE Student Branch and Code Academy.

Community

Connect 360 in Ramallah, and joint training programmes with Birzeit and Khadouri universities.

POST /contact

Have a backend that needs building, or a team that needs a hand?

tardehosam@gmail.com
+972 59 596 4279 GitHub LinkedIn Hebron, Palestine