Tangier, Morocco +

Chahin Boudra.

From the interface
to the infrastructure

I’m a software engineer.
I build interfaces and the systems behind them.

Have something in mind? Let’s talk
A view beneath the interface
Make the complex usable

React and Next.js turn a system into something people can understand.

Curiosity, translated into working softwareA little further down

The question
behind the click

Interfaces ↔ systems

A useful interface is only
the beginning.

I’m Chahin, a software developer and computer engineering graduate in Tangier. I build useful web applications, then follow the details all the way down to the API, the database, and the infrastructure.

I like knowing what happens after the click. Where does a request go? What makes a query slow? What happens when two systems disagree? Those questions keep pulling me further into software engineering.

My route has taken me from IT support and information systems to client websites, full-stack applications, and a degree in Computer Software Engineering. Working across these layers has shaped how I build: start with a real need, understand the constraints, and make the pieces work together.

Today, I’m putting that curiosity into API tooling and systems with more demanding boundaries: compatibility, tenant isolation, asynchronous work. I’m also developing my Java and Spring Boot skills, adding another way to think about backend engineering.

Follow my journey

A path through
the layers

Learning, building, and taking on
more of the system.

Showing 8 journey entries

Jul 2023 — PresentExperienceIndependent Full-Stack DeveloperSelf-employed · Remote
TypeScript/JavaScript applications, REST integrations, authentication, and database-backed workflows. Client delivery from requirements through deployment and support, including OcarTrans engagements in 2024 and 2026.
Oct 2025 — Jul 2026EducationBachelor’s Degree in Computer Software EngineeringSUPMTI · Rabat · Graduated 2026
École Supérieure de Management de Télécommunication et d’Informatique. Building on my information systems background with further study in software engineering.
Jun 2025 — Sep 2026ExperienceFull-Stack Web DeveloperTop PC Maroc · Tangier · On-site
Developed and maintained web-based solutions, improving functionality, performance, and user experience.
Jan 2025 — Mar 2025ExperienceFull-Stack Web DeveloperSTE VALUENEXT CONSULTING SARL AU · Tangier
Contributed to web application development, feature updates, interface improvements, and ongoing maintenance.
Mar 2024 — Feb 2025ExperienceCo-founder & Web DeveloperCartelwebs · Morocco
Developed PHP/JavaScript and WordPress solutions, handled integrations and deployment, and worked through post-launch technical issues.
May 2023ExperiencePoint-of-Sale Developer InternYastar S.A.R.L.
Built VB.NET point-of-sale features supporting sales records, invoices, and business workflows.
Oct 2021 — Jul 2023EducationBTS (BAC+2), Développement des Systèmes d’InformationLycée Abi Yacoub Al Badissi · Al Hoceima
A foundation in information systems development that led into independent work and further computer engineering studies.
May 2021ExperienceIT Support InternHighers Computing · 15-day placement
Assisted with technical support and Windows Server configuration; an early introduction to the systems behind everyday software.
Keep the full picture · Download CV

Selected work

Useful tools. Deliberate decisions.
A closer look at how I build.

APIShift

API contracts, made legible

An API can look right and still break a client. APIShift compares OpenAPI specifications and makes those compatibility risks visible before a change ships.

  • TypeScript
  • React
  • OpenAPI 3.0 / 3.1
  • Web Workers
  • Vitest
Actual APIShift results interface showing severity totals and compatibility findings for the bundled example
Actual interface · cropped comparison results
Read the engineering case study

The problem

API reviewers need to understand what a contract change means for existing consumers. A diff alone does not explain whether a narrower request or a wider response will break them.

The approach

A deterministic comparison engine, separated from the interface, parses and validates two specifications and produces ordered findings with before/after values, explanations, and suggested actions.

Decisions that matter

1
Keep the contracts in the browser

Parsing and comparison run in a dedicated Web Worker. Specification files stay in tab memory; the tool makes no external requests after load.

2
Make uncertainty visible

Advanced schema semantics and unsupported features are reported explicitly. A partial understanding never becomes a false clean bill of health.

3
Make reviews repeatable

Stable ordering and identifiers produce byte-identical JSON and Markdown reports for identical inputs. An eight-second watchdog bounds worker execution.

Evidence & boundaries

The CV and public README document 99 unit tests and 14 browser workflow tests, with lint, type checks, builds, and browser tests in GitHub Actions. These are repository-reported results, not a fresh test run of APIShift.

A compatibility analyzer for a documented subset of OpenAPI, rather than a full schema validator or a guarantee of runtime compatibility.

Read the source documentation

OpsDesk

One workspace. Clear boundaries.

A multi-tenant support inbox and CRM prototype. Customer conversations, permissions, queues, and realtime updates brought into one coordinated system.

  • Next.js
  • NestJS
  • PostgreSQL
  • Prisma
  • Redis / BullMQ
  • Auth0
Actual OpsDesk staging inbox with sanitized fictional Northstar Support demo tickets
Actual interface · fictional demo workspace
Read the engineering case study

The problem

Support workflows go beyond storing tickets. Organizations need isolated data, appropriate permissions, dependable email processing, and updates that survive reconnects.

The approach

A TypeScript monorepo connects a Next.js frontend and backend-for-frontend to a NestJS REST API, PostgreSQL persistence, and a separately deployed BullMQ worker.

Decisions that matter

1
Enforce the organization boundary

Organization-scoped access, membership checks, and RBAC protect tenant data. Auth0 access tokens remain on the server behind the Next.js BFF.

2
Move work out of the request

Redis/BullMQ handles email and maintenance. Signed webhooks and idempotent processing prevent duplicate lifecycle handling.

3
Design the edges deliberately

R2 signed URLs handle attachments, while authorized Socket.IO rooms and refetching recover missed updates. An offline OpenAPI snapshot documents 38 HTTP operations.

Evidence & boundaries

The public case study records verified staging workflows: tenant denial, assignment, notes, approved sandbox email, signed uploads, cross-session updates, and reconnect recovery. CI covers application, security, Redis, database integration, and Docker checks.

A verified staging portfolio application. Access requires authorized membership. Production backup/restore, malware scanning, and unrestricted commercial email delivery are not certified.

Read the source documentation

LocaleLint

Small strings. Fewer surprises.

A browser-based preflight check for JSON translations. Compare locale files with a reference and find missing keys, mismatched types, and changed placeholders.

  • TypeScript
  • Next.js
  • JSON validation
  • In-memory analysis
Actual LocaleLint checker with en.json, fr.json, and de.json loaded, English selected as reference, and three translation findings
Actual interface · three sample locale files compared
Read the engineering case study

The problem

A missing translation key or a changed named placeholder can quietly break an otherwise finished interface. Teams need precise findings at the actual key path.

The approach

A pure comparison engine checks nested objects and arrays against a reference locale. The interface supports file upload, paste, filters, and JSON report export without sending translation content to a server.

Decisions that matter

1
Report precise paths

Unambiguous bracket-notation paths identify nested findings. Missing parent namespaces are reported once rather than flooding the result.

2
Avoid a false clean result

Invalid references stop comparison; malformed targets are reported while valid targets continue. Reports include overall completeness and per-locale status.

3
Keep the scope explicit

Named placeholders are compared as sets. The tool checks structure and token syntax, not semantic translation quality or full ICU grammar.

Evidence & boundaries

Capabilities and boundaries verified against the private project README. No public deployment or numerical test result is claimed.

Private source. Browser validator only; JSON objects and documented named placeholder formats. The screenshot shows a real local comparison using synthetic English, French, and German files.

Private project · source intentionally unlinked

Understand it.
Then build it.

The tools change.
The way I approach a problem carries through.

My approach

Trace the whole flow. Make the boundaries explicit. Test the behavior that matters. Keep the solution understandable enough to come back to.

Interfaces people can use

Responsive applications, purposeful interactions, and clear states from first input to final result.

React · Next.js · TypeScript · JavaScript

Services with clear contracts

REST APIs, authentication, role boundaries, integrations, and work that continues outside a request.

Node.js · NestJS · Express · OpenAPI

Data that holds together

Relational workflows, tenant-aware queries, background queues, and predictable persistence.

PostgreSQL · Prisma · Redis · BullMQ

The system around the software

Repeatable development environments, automated checks, debugging, and deployment workflows.

Docker · GitHub Actions · Linux · CI/CD

Practical digital solutions

Websites, commerce workflows, and integrations shaped around the needs of a business.

WordPress · PHP · WooCommerce

The next layer

Currently developing my Java and Spring Boot skills, extending my foundation in backend engineering.

Learning: Java · Spring Boot

Still curious,
away from the editor.

Some interests don’t need to become a job title. I enjoy the hardware behind a system, the mechanics of a car, and the way a photograph can make you notice something ordinary.

Servers & networks

Understanding what connects the pieces

Cars & mechanics

An interest in how things are put together

Photography

Paying attention to light, framing, and detail

Independent projects

Following an idea far enough to make it work

Let’s build
something useful.

For a role, a project, or a thoughtful
conversation about engineering.
Based in Tangier, Morocco