Douha Assafiri
Software developer with a focus on web, mobile, desktop, and game development.
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
Projects
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.
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.
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
AlienChaseractively 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
Entityclass - 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:
IGameStateinterface 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.
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_LookExand 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.
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.
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.