Skip to content
Majd Kalthoum

Majd Kalthoum

Fullstack developer in Berlin

Hi, I’m Majd. I build web apps end to end: React and TypeScript in the browser, Node.js and Laravel on the server.

Most recently I built RTM, a real-time messenger with live typing and presence. It’s the first project below.

Open to full-time roles in Berlin or remote

Portrait of Majd Kalthoum

RTM

A real-time messenger

Direct and group chats that update live, with typing indicators, read receipts, online presence and reactions, all without a page refresh. A Laravel API and WebSocket server sit behind a React 19 and TypeScript app.

  • React 19
  • TypeScript
  • TanStack Query
  • Tailwind v4
  • Laravel
  • Reverb + Echo
  • Redis
  • PostgreSQL
  • Docker
  • Laravel Reverb delivers messages, typing and presence live; Redis holds that short-lived state so it never touches the main database.
  • Group roles with promote, demote and admin-only actions. Members who leave keep read access to the history up to that point.
  • PostgreSQL full-text search across message history, and private, short-lived signed URLs for attachments.
  • Sanctum cookie sessions, Google sign-in and a complete password-reset flow by email.
  • Light and dark themes, keyboard navigation and screen-reader live regions.
  • 128 backend tests with Pest, CI, and zero-downtime automated deploys to Docker Compose on Oracle Cloud.
RTM on desktop: a group chat with a shared PDF, an image with reactions, and the group info panelRTM on mobile: the chat list with unread counts and a live typing status

Designo

A CMS-driven agency website

A seven-page agency site where every page, menu and label is edited in Strapi instead of being hard-coded. Editors build each page from reusable sections.

  • Next.js 15
  • React 19
  • TypeScript
  • SCSS + Bulma
  • Framer Motion
  • Strapi 4
  • SQLite
  • Docker
  • Caddy
  • GitHub Actions

The visual design comes from a Frontend Mentor challenge. The build, CMS setup and deployment are my own.

  • Ten section types, rendered by a single catch-all Next.js route.
  • Pages are static and refresh every two minutes. If the API is down, the last good version stays online.
  • The contact API validates, length-limits and HTML-escapes input, and accepts 5 requests per 15 minutes per IP.
  • Strapi 4 is hardened: a middleware blocks filter queries on admin fields, and unused auth endpoints are closed on every start.
  • A push to master deploys through GitHub Actions and waits for a healthy container. SQLite is backed up daily.

Where I’ve worked

  1. 04/2025 – now

    Freelance and own projects

    Fullstack web development

    • Built RTM, a real-time chat app with a Laravel REST API and a React and TypeScript frontend.
    • Authentication and authorisation with Laravel Sanctum, plus OAuth2 social login with Laravel Socialite.
    • Real-time features with Laravel Reverb and Echo, including live typing indicators and Redis-backed presence.
  2. 06/2023 – 03/2025

    Aleks & Shantu GmbH

    Fullstack web developer, Berlin

    • Built and optimised web apps with React, Next.js, TypeScript, Node.js and the WordPress REST API.
    • Interactive animations and dynamic UI with Framer Motion; responsive builds from prototypes and style guides.
    • Accessible frontends following WCAG, external API integrations and ongoing maintenance in an agile team.
  3. 09/2021 – 05/2022

    Radscheit GmbH (happycoding)

    Fullstack web developer, Berlin

    • Websites with React (Gatsby) on headless WordPress.
    • WordPress theming and maintenance in PHP, SCSS and JavaScript, plus custom PHP API endpoints.
    • Performance optimisation, code reviews, and feature planning with the design and marketing teams.
  4. 05/2021 – 07/2021

    Jobvector GmbH

    Web development intern, Düsseldorf

    • Frontend features and UI changes in Vue.js and Nuxt, including a dashboard that shows incidents.
    • Testing, bug fixing and release preparation in a test-driven CI/CD setup.

“Majd was always helpful, easy to work with, and at the same time someone a less experienced developer could learn a lot from. […] I remember our time together very fondly and can recommend Majd without reservation, both professionally and personally.”

Christian GraumannSoftware Engineer, worked with Majd at Aleks & ShantuTranslated from GermanFull recommendation on LinkedIn (opens in a new tab)

What I work with

Each tool with where I’ve used it.

Frontend

  • ReactRTM, Designo, Radscheit, Aleks & Shantu
  • TypeScriptRTM, Designo, Aleks & Shantu
  • Next.jsDesigno, Aleks & Shantu
  • Tailwind CSS and SCSSRTM, Designo, Radscheit, Aleks & Shantu
  • Motion (Framer Motion)This site, RTM, Designo, Aleks & Shantu
  • Vue.js and NuxtJobvector
  • Accessibility (WCAG)RTM, Aleks & Shantu

Backend and real-time

  • LaravelRTM
  • PHPRTM, Radscheit, Aleks & Shantu
  • Laravel Reverb and EchoRTM
  • Node.jsRadscheit, Aleks & Shantu
  • REST APIsRTM, Designo, Radscheit, Aleks & Shantu
  • Sanctum and Google OAuthRTM
  • Strapi and headless WordPressDesigno, Radscheit, Aleks & Shantu

Data, testing and deployment

  • PostgreSQLRTM, with full-text search
  • RedisRTM
  • Pest and VitestRTM
  • Docker Compose and CaddyRTM, Designo
  • GitHub ActionsRTM, Designo
  • VercelThis site, RTM, Designo

Also worked with: React Native, Angular, Python and Django, GraphQL, Socket.io, JWT, MySQL, Gatsby, GitLab

Hiring for a fullstack or frontend role?

I’m open to full-time roles in Berlin or remote. Email me or book a 30-minute call, and I’m happy to walk you through any of the projects above.

Based in
Berlin, Germany
Languages
German, English, Arabic