HTML & CSS
- Semantic HTML5
- BEM naming methodology
- Flexbox & Grid
- TailwindCSS
The Full-stack Developer who is a DevOps too! has had experiences and is willing to learn.
DevOps engineer with 7 months of production experience owning the full infrastructure of a hotel booking platform (yejayekhoob.com). Built CI/CD pipelines from scratch, Docker images compiled from source, a Go-based auth proxy and DNS failover system, and a Redis caching layer with SQL-aware invalidation — all while managing the sole technical responsibility for the company. Daily Linux user (Arch, 2+ years). Knows system design — can design durable, distributed systems. Comfortable across the entire stack: infrastructure, backend, and frontend.
Sole technical lead for a Persian hotel/tour booking platform. Infrastructure, CI/CD, backend, security, and reliability across two data centers (Iran & Finland).
Led migration of a messy legacy PHP codebase across three all-nighters, resolving breaking changes with zero production downtime. Rewrote .env loading from scratch in pure PHP — zero Composer deps, no framework lock-in.
Built complete CI/CD on Gitea Actions with self-hosted runners — sub-second deployments for a pure PHP stack. Multi-job workflows: file sync (rsync) + database sync (mysqldump) between Iran and Finland for disaster recovery. Automated database backups (2x daily, rotation of last 4, ntfy push). Generated system cron configs from JSON definition via CI.
SQL-aware cache that parses queries via regex to detect table changes (INSERT/UPDATE/DELETE) and invalidates only affected keys. Fallback logic — site works transparently if Redis goes down. ~50% of the site uses this cache with configurable TTL per function. Singleton pattern, lazy connection, SHA1-based key generation.
Lightweight HTTP auth proxy integrating with Nginx via auth_request — Alpine container, SQLite backend (WAL mode), API key management (env-injected). IP whitelisting with permanent entries (IP/CIDR) and TTL-based temporary entries with auto-expiry via background goroutine. Production-hardened Docker: multi-stage, non-root, read-only root FS, dropped capabilities.
Health-check daemon that monitors a primary BIND server and automatically swaps zone files (primary ↔ failover) with hysteresis — N consecutive failures before switching. State machine pattern (StatePrimary ↔ StateFailover) with configurable timeouts. Integrates via rndc reload. Runs as systemd. Zero external dependencies (pure Go stdlib).
Full production stack in Docker Compose: PHP 8.4 (FPM), Nginx, MariaDB (3.5 GB RAM limit), Redis (AOF), auth-proxy, Gitea, Next.js panels, phpMyAdmin, Uptime Kuma, Prometheus + Grafana. Custom images compiled from source (Nginx 1.29.3 on Alpine, PHP 8.5 on Alpine with security hardening). Nginx security: TLS 1.2/1.3, HSTS, rate limiting (30 r/s), security headers.
Two BIND9 DNS servers (Iran + Finland) with automatic failover synced via Gitea CI/CD. Backup automation script (cron). Authored thorough server migration guide (files, databases, SSL, DNS). Managed Iran-specific mirror workarounds for apt/Alpine to keep builds running under sanctions.