Douha Assafiri

Software developer with a focus on web, mobile, desktop, and game development.

About Icon

About Me

I am drawn to coding for its mix of logic, creativity, and problem-solving. I enjoy breaking down complex ideas into clear, workable solutions, particularly when building something useful with others. I focus on writing code that's maintainable, readable, and designed with long-term usability in mind.

Tech Stack

C C++ C# Python Ruby HTML JavaScript TypeScript PHP SQL CSS Swift

Projects

SecureScan

SecureScan

A full-stack web app for detecting and analysing spam messages.

  • FastAPI
  • React
  • scikit-learn

SecureScan

SecureScan is a full-stack web application for real-time spam analysis in cybersecurity scenarios. Users can scan messages live, receive a percentage-based spam risk score, and explore how individual tokens contribute to the model's decision through interactive visualisations.

Features

  • Live spam risk scoring with percentage-based confidence
  • Delta risk line chart showing spam probability progression
  • Interactive bubble map highlighting word-level model contributions
  • Category-based contribution bars for high-level rationale
  • Saved scan history with export support

Built With

  • FastAPI (Python)
  • React + MUI
  • scikit-learn (TF-IDF + classifier)

Notes
SecureScan is built as a full-stack application with a FastAPI backend and a React-based frontend. Spam prediction is handled using a TF-IDF and Logistic Regression pipeline, with supporting endpoints for explanation, saving results, and export. The interface focuses on clearly presenting prediction output and related analysis through live updates and structured visualisations.

View on GitHub
ChatApp

ChatApp

A basic messaging app with an offline mini-game.

  • C#
  • WPF
  • FastAPI
  • SQLite

ChatApp

ChatApp is a messaging app that lets users send and receive messages in real time. It includes friend management, offline support, and a built-in unicorn mini-game when the server is unreachable.

Features

  • User login and registration
  • Real-time messaging between friends
  • Message history with timestamps
  • Local message deletion with sync on reconnecting
  • Offline mode with local queuing
  • Unicorn mini-game when offline
  • Friend system (add, accept, reject requests)
  • Soft, pastel-themed UI with custom WPF windows

Built With

  • Frontend: C#, WPF, .NET Framework, XAML
  • Backend: Python, FastAPI, SQLite
  • Communication: RESTful API with JSON

Storage
Messages and user data are stored locally with SQLite and synced with the server. Offline messages and deletions are queued and pushed once back online.

Notes
All windows and server logic were implemented using WPF and FastAPI. Animations, game logic, and syncing were implemented manually without third-party libraries beyond the main frameworks.

View on GitHub
ImmuniBuddy

ImmuniBuddy

An educational Unity game about immune system mechanics.

  • C#
  • Unity
  • WebGL

ImmuniBuddy

ImmuniBuddy is an educational platformer built in Unity that models key mechanisms of the innate immune response, including phagocytosis and antibody-mediated opsonisation. The game progresses through three 2D levels and a bonus 3D level, and is designed for WebGL deployment.

Features

  • Platformer-style gameplay with combat and traversal mechanics
  • Three 2D levels and one 3D level with a unified progression flow
  • Enemy interactions representing pathogen encounters
  • Health and status effect systems tied to immune behaviour
  • Profile-based progress system with save support

Built With

  • Unity 6 (LTS)
  • 2D URP + 3D Additive
  • WebGL

Notes
The project combines 2D and 3D gameplay to represent different stages of immune response, using Unity's Universal Render Pipeline for lighting and effects. Gameplay systems were implemented with a focus on reflection of immune mechanisms while maintaining smooth WebGL performance.

View on GitHub Play WebGL Build
GZDoom AI Showcase

GZDoom AI Showcase

A custom GZDoom mod that explores enemy AI behaviour.

  • ZScript
  • NPC AI
  • Modding

GZDoom AI Showcase

GZDoom AI Showcase is a custom AI project built in the GZDoom engine using ZScript. It demonstrates modular enemy behaviours and state logic through five unique agent types, each designed to test a different kind of game AI—from ambient wanderers to tactical turrets. All AI systems were implemented in ZScript with a custom map for showcasing each agent in action.

Features

  • Custom finite state machines (FSMs) for each AI
  • Line-of-sight detection using A_LookEx and vector math
  • Event-based behaviours like healing triggers and proximity-based ambushes
  • Dynamic patrol using editor-defined patrol points
  • Offline-friendly and lightweight—designed for smooth performance

Built With

  • GZDoom Engine
  • ZScript for custom AI and state logic
  • Ultimate Doom Builder (map editing)
  • CLion + CMake for development workflow

Included Agents

  • PatrolZombie: Patrols predefined points and transitions to chase mode if it detects the player.
  • WandererSoul: Non-hostile ambience agent that roams randomly to make the map feel alive.
  • AllyHealer: Follows the player and heals when health is low. Activated via player interaction.
  • TurretArachnotron: Stationary unit that rotates and fires at the player if in line of sight, using cooldown timers.
  • Ambusher: Hides until the player comes close, then activates to pursue and attack, showing stealth logic.

Demo Map
All agents are placed in a custom showcase map called DEMOMAP. Each area demonstrates the behaviour of a different AI in action.

Notes
Each agent was designed modularly to focus on different AI concepts, from state-driven logic to tactical reasoning.

View on GitHub
Klondike Solitaire

Klondike

A macOS Klondike Solitaire game built with SwiftUI.

  • Swift
  • SwiftUI
  • macOS

Klondike

Klondike is a macOS Solitaire implementation built with SwiftUI. It supports standard tableau/foundation rules, with tap + drag-and-drop moves, scoring, undo, hints, and a win animation.

Features

  • Draw from stock to waste, with stock recycle when empty
  • Tableau rules: descending ranks with alternating colours
  • Foundation rules: Ace → King by suit
  • Drag-and-drop moves
  • Tap-to-move shortcuts
  • Undo system using full-state snapshots
  • Hint system that scores and suggests the best available move
  • Auto button that repeatedly moves obvious cards to foundations
  • Win overlay with card-particle fountain animation

Built With

  • Swift
  • SwiftUI
  • macOS SDK

Notes
The game state is managed through an ObservableObject with move validation for tableau and foundations, plus scoring and move counting. A winnable deal option generates a repeatable deck layout and rotates it so each new game feels different. The win screen uses a SwiftUI Canvas-based particle system and positions emitters from the foundation pile frames.

View on GitHub
Taskie

Taskie

A simple app for managing to-do lists.

  • Python
  • PySide6
  • QSS

Taskie

Taskie is a soft and simple desktop to-do app built with Python and PySide6. I designed it to feel minimal, calming, and enjoyable to use.

Features

  • Add tasks with categories and priorities
  • Emoji labels for quick task types
  • Filter tasks by category or priority
  • Local file-based task saving (no setup needed)
  • Double-click to delete tasks quickly
  • Pastel-themed interface styled with custom QSS

Built With

  • Python 3.7+
  • PySide6 (Qt for Python)
  • Qt Style Sheets (QSS)

Storage
Tasks are saved to a local tasks.txt file in the app folder. It's private and ignored by Git.

Notes
UI components and application logic were implemented using PySide6. The UI layout, logic, and styles were created with Qt Style Sheets (QSS) to match a soft aesthetic.

View on GitHub
Space Invaders

Space Invaders

A remake of the classic arcade game.

  • C#
  • SplashKit

Space Invaders

Space Invaders is a modern reimagining of the classic arcade game, built using C# and SplashKit. The game features multiple enemy types, power-ups, level progression, and a final boss fight—all wrapped in an object-oriented structure that reflects good design principles.

Gameplay Features

  • Waves of alien enemies with different movement and attack patterns
  • Player ship can shoot, move, and collect power-ups
  • Power ups grant benefits like extra lives or spread shots
  • Enemies like AlienChaser actively pursue the player
  • BossAlien appears on later levels and requires strategy to defeat
  • Custom collision and state management system for fluid gameplay

Design Structure

  • Entity-Based Inheritance: All game objects (player, enemies, projectiles) extend from a shared Entity class
  • Factory Pattern: Used to spawn enemies and power-ups based on level logic
  • Observer Pattern: ScoreManager updates UI when events occur (e.g., enemy destroyed)
  • State Interface: IGameState interface handles transitions like playing, paused, or game over

Built With

  • C# with SplashKit
  • Custom game loop and rendering logic

UI Screens

  • Main menu, gameplay, pause, and victory screens
  • In-game display includes score, level, lives, and bullet count

Notes
The project was a solo build done entirely in C#, with a focus on demonstrating OOP concepts like inheritance and polymorphism. The codebase was designed for modularity and clarity, using interfaces and patterns where appropriate. All graphics and logic were implemented manually.

View on GitHub
Portfolio Website

Portfolio Website

A personal website to display projects and skills.

  • HTML
  • CSS
  • JavaScript

Portfolio Website

This website was developed to showcase my projects, skills, and experience. It's designed to be clear, responsive, and visually engaging while staying lightweight and easy to navigate.

Features

  • Single-page layout with smooth anchor-based navigation
  • Interactive flip-card system to display project details
  • Responsive design for both desktop and mobile users
  • Canvas-based animated background using JavaScript

Built With

  • HTML5 and CSS3
  • Vanilla JavaScript
  • SwiperJS for the horizontal scrolling project view
  • Canvas API for the animated connecting dots background

Notes
The entire site was designed and coded manually without any templates or frameworks. The canvas animation was inspired by particle network effects to give a modern and professional touch without affecting performance.

View on GitHub

Contact

I'm always open to new opportunities and collaborations. Feel free to reach out via email or explore my work on GitHub and LinkedIn.