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

Projects

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
Everything is built from scratch without any external libraries beyond Qt. The UI layout, logic, and styles were all manually created and tweaked to match a soft aesthetic.

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 even 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 custom-built—from the login screen to the chat interface. Animations, game logic, and syncing were implemented manually without using third-party libraries beyond the main frameworks.

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
  • No external frameworks—everything written from scratch

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
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. Everything was built from scratch in ZScript with a custom map for showcasing each agent in action.

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.

Built With

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

Key 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

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
Portfolio Website

Portfolio Website

A personal website to display projects and skills.

  • HTML
  • CSS
  • JavaScript

Portfolio Website

This website was built from scratch 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.