TORONTO, CANADA
00 : 00 : 00

HI, I'M AIZ!

BUILDING SCALABLE AND EFFICIENT FULL-STACK APPLICATIONS

I'm a Full Stack Developer passionate about creating robust, scalable solutions with modern technologies.

Kyo Discord Bot

Kyo Discord Bot

A powerful Discord bot built with TypeScript, featuring Supabase as the backend/database and hosted on Digital Ocean.

TypeScript
Supabase
Digital Ocean

Key Features

100+ commands across 15+ major modules

Core Infrastructure
Dual command system (Slash & Prefix)
TypeScript codebase
PostgreSQL & Supabase integration
Redis caching layer
Rate-limited error tracking
Modular architecture
Dynamic command registry
Ticket System
Private thread tickets
Auto-close (2hr inactivity)
Button-based ticket panel
Configurable support roles
Multi-staff support
Ticket management (join/leave/claim/close)
Event logging & notifications
Music System
RainLink integration
Spotify & YouTube support
Queue management
Rich now playing embeds
Vote to skip
Role-based access control
Leveling System
Message-based XP tracking
Customizable XP requirements
Server-wide leaderboards
Rank cards with progress
Automatic role rewards
Channel/role blacklisting
Integrations
Valorant (stats, MMR, matches)
Sports (NBA, Soccer, ESPN)
Steam profile lookup
Instagram content
LastFM scrobbling
Crypto price tracking
Google search & translate
Urban Dictionary, Anime (MAL)
Information & Utilities
User info (avatar, banner, stats)
Server statistics
Discord status
Color extraction & OCR
Timezone utilities
Birthday tracking
Message snipe
AFK system
Additional Systems
Event logging system
Boost role management
Vanity roles (custom status)
Welcome messages
Ping on join notifications
Automated server setup
Module & command toggling
Permission & cooldown systems
Kyo Social Platform

Kyo Social Platform

A modern social platform with customizable profiles, music playlists, and image albums. Built with Next.js 15 and self-hosted Supabase.

Next.js
TypeScript
Tailwind CSS

Key Features

A comprehensive social platform with rich content editing, music management, and image organization

User Profiles & Authentication
Supabase-based auth with Discord OAuth and email/password
Customizable profiles: Avatar, banner, username, bio, location
Custom profile URLs (e.g., kyo.gg/@username)
Privacy controls: Public/private profiles and activity visibility
Rich Content Editor (Home Tab)
BlockNote Editor for rich text profile content
Media embedding: Songs, playlists, albums, and images
Customizable home page creation and editing
Manual save system with unsaved changes indicator
Music Management
Create, edit, and manage playlists
Spotify integration: Import playlists and view recently played tracks
Global track database with album art
Track previews via Spotify
Public/private playlist privacy controls
Right-click context menus for playlists
Image Albums
Create and organize image albums
Privacy controls: Private/public albums
Custom album covers
Image organization with tags and categories
Grid/list viewing modes
Filters & sorting: By date, name, size, favorites
Activity Feed
Social activity tracking and interactions
Activity visibility controls
Interactive elements: Clickable activities linking to content
Settings & Customization
Theme customization: Custom accent colors with color picker
Cursor styles: Custom cursor options
Profile settings: Username, location, bio management
Privacy settings: Profile and activity visibility controls
Connections: Manage external account connections
Gallery
Image browsing and viewing
Album viewing and collections
Tag system for image organization
Sorting options by various criteria
Admin Features
Admin dashboard with tools and statistics
Data management: Import/export tools, data fixes
Spotify integration tools for admin
Additional Features
Multi-step onboarding (username, avatar, banner, bio, location)
Public profiles: View other users' public profiles
Responsive design with modern UI and Tailwind CSS
Self-hosted Supabase backend
Image storage: Album art, avatars, banners, and user uploads
Personal Portfolio

Personal Portfolio

A modern, responsive portfolio website showcasing my projects and skills. Built with Next.js 15, TypeScript, and Tailwind CSS with a clean component-based architecture.

Next.js
TypeScript
Tailwind CSS

Key Features

A modern portfolio showcasing projects with clean architecture

Design & UI
Modern dark theme with green accents
Responsive design for all screen sizes
Smooth animations and transitions
Clean, minimalist interface
Architecture
Modular component structure
Separated project components
Reusable shared components
Type-safe TypeScript implementation
Features
Real-time clock display
Expandable project details
Tabbed project information
Tech stack icons
Project showcase with images

Technologies

Technologies I work with

TypeScript
JavaScript
Node.js
Next.js
React
Python
PowerShell
Bash
Supabase
Tailwind CSS
Digital Ocean

Patterns & Utility Scripts

Small scripts and patterns I use

Dell Ownership Tag Utility

·Enterprise automation utility·
PowerShell·
Windows

Description

Automates Dell BIOS ownership tag configuration during device provisioning. Eliminates manual BIOS entry and ensures consistent asset tagging across enterprise deployments in both WinPE and full Windows environments.

Patterns Demonstrated

Environment detectionBIOS automationError handling & validation

Key Features

WinPE Detection
Automatic environment detection (WinPE vs full Windows)
USB-based module deployment for WinPE environments
Zero-configuration module management
BIOS Automation
Direct BIOS ownership tag configuration via DellBIOSProvider
Automatic model number detection from multiple WMI sources
JSON-driven configuration for country codes and model suffixes
Validation & Reliability
Post-set validation to ensure tag was written correctly
Idempotent operation (skips if tag already correct)
Comprehensive error handling with proper exit codes

Selected Code Excerpts

WinPE Detection & Module Management
function Test-IsWinPE {
    return (Test-Path 'X:\Windows') -and (Get-PSDrive -Name X -ErrorAction SilentlyContinue)
}

function Ensure-DellBIOSProvider {
    param([bool]$IsWinPE)
    if ($IsWinPE) {
        Write-Log "WinPE detected." "INFO"
        # Auto-copy DellBIOSProvider from USB root to WinPE
        $dest = 'X:\Windows\System32\WindowsPowerShell\v1.0\Modules'
        foreach ($dl in 'C','D','E','F'...) {
            $candidate = "$dl`:\DellBIOSProvider"
            if (Test-Path $candidate) { 
                Copy-Item -Path $candidate -Destination $dest -Recurse -Force
                break
            }
        }
        Import-Module DellBIOSProvider -ErrorAction Stop
    }
}
BIOS Automation & Validation
function Set-OwnershipTag {
    param(
        [Parameter(Mandatory)][string]$Tag,
        [bool]$IsWinPE
    )
    if ($IsWinPE) {
        Set-Item -Path 'DellSmbios:\SystemInformation\OwnershipTag' -Value $Tag
    } else {
        Set-ItemProperty -Path 'DellSmbios:\SystemInformation\OwnershipTag' 
                         -Name 'CurrentValue' -Value $Tag
    }
}

# Automatic validation after setting
$validated = Get-CurrentOwnershipTag
if ($validated -eq $ownershipTag) {
    Write-Log "Ownership Tag successfully set to '$validated'." "SUCCESS"
} else {
    throw "Validation mismatch. Expected '$ownershipTag', got '$validated'."
}
Model Detection & Tag Building
function Get-DellModelNumeric {
    $fields = @(
        (Get-CimInstance Win32_ComputerSystem).Model,
        (Get-CimInstance Win32_BaseBoard).Product,
        (Get-CimInstance Win32_BIOS).SMBIOSBIOSVersion
    ) | Where-Object { $_ }
    
    foreach ($f in $fields) {
        if ($f -match '\b(\d{3,4})\b') { return $Matches[1] }
    }
    throw "Unable to determine Dell model."
}

# Build ownership tag from country code + model suffix
$model = Get-DellModelNumeric
$suffix = $models[$modelKey]
$ownershipTag = "$countryCode$suffix"

Lenovo Warranty Lookup Utility

·API integration utility·
Node.js·
Express·
JavaScript

Description

Node.js/Express backend utility that queries Lenovo's support API to retrieve model and warranty status for device serial numbers. Demonstrates external API consumption with defensive parsing and error handling.

Patterns Demonstrated

Upstream API consumptionError handling & data validationSimple service-oriented design

Highlights

External API Integration
Queries Lenovo support API for device information
Defensive parsing with optional chaining and fallbacks
Comprehensive error handling for API failures
Warranty Logic
Date-based warranty status evaluation
Normalized warranty end date handling
Clear boolean warranty status output
Service Design
Clear separation between backend logic and frontend UI
RESTful API endpoint with proper HTTP status codes
Lightweight Express server with static file serving

Selected Code Excerpts

External API Integration
async function fetchProductInfo(serialNumber) {
    const url = 'https://pcsupport.lenovo.com/ca/en/api/v4/upsell/redport/getIbaseInfo';
    const headers = { 'Content-Type': 'application/json' };
    const body = { serialNumber };
    
    try {
        const response = await axios.post(url, body, { headers });
        const data = response.data;
        const machineInfo = data?.data?.machineInfo;
        
        if (!machineInfo) {
            return { error: 'No machine information found for this serial number.' };
        }
        
        const model = machineInfo.productName?.split('(')[0].trim() || 'Unknown';
        const warrantyDetails = data.data.currentWarranty;
        const warrantyEndDate = warrantyDetails?.endDate || null;
        
        return {
            serialNumber,
            model,
            warrantyEndDate: warrantyEndDate || 'No warranty info available',
            underWarranty: isUnderWarranty(warrantyEndDate),
        };
    } catch (error) {
        console.error('Error fetching product info:', error.message);
        return { error: 'Failed to fetch product info.' };
    }
}
Warranty Status Logic
function isUnderWarranty(warrantyEndDate) {
    if (!warrantyEndDate) {
        return false;
    }
    const currentDate = new Date();
    const endDate = new Date(warrantyEndDate);
    return currentDate <= endDate;
}

// API endpoint with validation
app.post('/api/product-info', async (req, res) => {
    const { serialNumber } = req.body;
    if (!serialNumber) {
        return res.status(400).json({ error: 'Serial number is required.' });
    }
    const productInfo = await fetchProductInfo(serialNumber);
    if (productInfo.error) {
        return res.status(500).json(productInfo);
    }
    res.json(productInfo);
});
Frontend API Consumption
async function fetchProductInfo(serialNumber) {
    const apiUrl = 'https://product-info-api-production.up.railway.app/api/product-info';
    
    try {
        const response = await fetch(apiUrl, {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({ serialNumber }),
        });
        
        if (!response.ok) {
            throw new Error(`API call failed with status: ${response.status}`);
        }
        
        const data = await response.json();
        // Display results with proper error handling
    } catch (error) {
        resultDiv.innerHTML = `<p style="color: red;">Error: ${error.message}</p>`;
    }
}

Excel File Processor

·Data processing utility·
Node.js·
JavaScript·
HTML·
CSS

Description

Node.js utility for processing and manipulating Excel files. Handles file uploads, data extraction, and Excel file operations with a clean web interface for file management.

Patterns Demonstrated

File upload handlingData transformationError handling & validation

Highlights

File Processing
Excel file upload and parsing
Data extraction from multiple sheets
File validation and error handling
Data Management
Row-by-row data processing
Data normalization and transformation
Export processed data to various formats
User Interface
Clean web interface for file uploads
Real-time processing feedback
Download processed results

Selected Code Excerpts

Excel File Processing
// Excel file processing logic
const excelProcessor = require('./excelProcessor');
const fs = require('fs');
const path = require('path');

async function processExcelFile(filePath) {
    try {
        const workbook = await excelProcessor.readFile(filePath);
        const data = excelProcessor.extractData(workbook);
        return {
            success: true,
            data: data,
            rows: data.length
        };
    } catch (error) {
        console.error('Error processing Excel file:', error);
        return {
            success: false,
            error: error.message
        };
    }
}
File Upload Handling
// Express route for file upload
app.post('/upload', upload.single('excelFile'), async (req, res) => {
    if (!req.file) {
        return res.status(400).json({ error: 'No file uploaded' });
    }
    
    const filePath = req.file.path;
    const result = await processExcelFile(filePath);
    
    if (result.success) {
        res.json({
            message: 'File processed successfully',
            rows: result.rows,
            data: result.data
        });
    } else {
        res.status(500).json({ error: result.error });
    }
});
Data Extraction & Processing
// Extract and process Excel data
function extractData(workbook) {
    const worksheet = workbook.Sheets[workbook.SheetNames[0]];
    const data = XLSX.utils.sheet_to_json(worksheet);
    
    return data.map(row => {
        // Process and normalize data
        return {
            ...row,
            processed: true,
            timestamp: new Date().toISOString()
        };
    });
}

Ghost Device Cleanup Utility

·System remediation utility·
Batch·
Windows

Description

Automates removal of non-present display and USB devices to resolve driver conflicts during hardware troubleshooting in Windows environments.

Patterns Demonstrated

Privilege-aware executionSystem remediation automationHardware enumeration & cleanupDefensive scriptingManual-to-automated workflow conversion

Highlights

Privilege Management
Administrator privilege validation before execution
Prevents unsafe partial execution
Clear error messaging for privilege issues
Device Management
Enables display of non-present devices in Device Manager
Automated enumeration of ghost devices via WMI
Conditional filtering for display and USB devices
System Remediation
Automated removal of non-present devices
Hardware enumeration and cleanup
User feedback and completion confirmation

Selected Code Excerpts

Admin Privilege Check (Critical Context)
:: Ensure script is running as Administrator
net session >nul 2>&1
if %errorLevel% neq 0 (
    echo This script must be run as Administrator.
    pause
    exit /b
)
Enable Hidden / Non-Present Devices
:: Enable display of non-present devices
set devmgr_show_nonpresent_devices=1
start devmgmt.msc
Ghost Device Enumeration & Removal (Core Logic)
:: Remove ghost display devices
for /f "tokens=2 delims==" %%a in (
    'wmic path Win32_PnPEntity where "PNPDeviceID like '%%Display%%' and Status='Error'" get PNPDeviceID /value'
) do (
    echo Removing: %%a
    wmic path Win32_PnPEntity where PNPDeviceID='%%a' call Delete
)
Completion Feedback
echo Ghost device cleanup completed successfully.
pause

Asset Ping / DNS Resolver

·Network diagnostics utility·
PowerShell·
Windows

Description

PowerShell utility for validating asset reachability and DNS resolution. Processes asset lists with multi-strategy DNS resolution fallbacks and graceful failure handling for network diagnostics workflows.

Patterns Demonstrated

Input validation & normalizationResilient DNS resolutionNetwork diagnostics automation

Highlights

Input Processing
Configuration-driven asset list processing
Script-relative file path resolution
Input validation and early exit on errors
DNS Resolution
Multi-strategy DNS resolution with fallbacks
Resilient failure handling across methods
Automatic deduplication of resolved IPs
Network Diagnostics
Asset reachability validation
Pattern-based asset filtering
Operator-friendly progress feedback

Selected Code Excerpts

Input Validation & File-Based Configuration
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Definition
$assetFile = Join-Path $scriptDir "assets.txt"

if (!(Test-Path $assetFile)) {
    Write-Host "Asset list not found: $assetFile" -ForegroundColor Red
    exit
}
Asset Normalization & Filtering
$assets = Get-Content $assetFile |
    ForEach-Object { $_.Trim() } |
    Where-Object { $_ -match '^(WIN|WIND)' -and $_ -ne "" }

if ($assets.Count -eq 0) {
    Write-Host "No valid asset tags found." -ForegroundColor Yellow
    exit
}
Multi-Strategy DNS Resolution (Core Logic)
function Get-IPsFromName {
    param([string]$Name)
    
    $ips = @()
    
    try {
        $ips += Resolve-DnsName -Name $Name -Type A -ErrorAction Stop |
                Select-Object -ExpandProperty IPAddress
    } catch {}
    
    try {
        $ips += [System.Net.Dns]::GetHostAddresses($Name) |
                Where-Object { $_.AddressFamily -eq 'InterNetwork' } |
                ForEach-Object { $_.IPAddressToString }
    } catch {}
    
    return $ips | Select-Object -Unique
}
Operator Feedback
Write-Host "Pinging $($assets.Count) assets..."

WHAT I DO

FULL STACK DEVELOPMENT

Building end-to-end solutions with modern frameworks, databases, and cloud infrastructure. From APIs to user interfaces, I create complete, scalable applications.

INTERESTED?
CONNECT