
Hasan Yahşi
A Systems Administrator 🖥️ & Open-source Developer with 13 years of technical work, running hospital systems in İzmir since 2022.
Work Experience
- 2022–nowKarataş Hospital · Çankaya Medical CentreSystems Administrator
- 2018–2022TurkcellTechnical Field Manager
- 2016–2018Karhan HukukIT Support & Hardware Repair
- 2025–nowFreelanceIndependent Software Work
Recent Projects
All Projects Open Source
paintcheckContrast measured from rendered pixels, for the cases CSS-based checkers leave open. This Site
hasanyahsi.comA static personal site measured with its own tooling, with a booking system wired to Google Calendar.
My Expert Area
- Next.js
- TypeScript
- Node.js
- Firebase
- Cloudflare
- Puppeteer
- GitHub
- n8n
- Claude
- Gemini
- Chrome
- React
- Expo
- Git
- npm
- Android
- Sass
- VMware
- Linux
- Vercel
- GPTChatGPT
- VSVS Code
What I Do
More About Me- Systems AdministrationWindows Server, Active Directory, VMware, network and firewall for a hospital and a medical centre.
- Open-source ToolingSmall tools with tests and a benchmark; paintcheck is the first.
- WebsitesStatic sites for small businesses on Next.js, Firebase and Cloudflare.
- Automationn8n flows and a WhatsApp assistant, ready as a service.
Let's 👋
Work Together
Book a Call Notes
All notes- paintcheck: what two wrong versions taught me about measuring contrast from pixels
The idea was simple, screenshot the page and read the colours. The first two implementations were confidently wrong in opposite directions. What the fixtures caught, and the method that held.
- Catching a contrast failure on my own site with paintcheck
paintcheck found 12 contrast findings on the new home page: the accent blue I copied from a design reference measures 4.09:1 on white. Lighthouse also surfaced 26 prefetch 404s from a Next.js 16 static export quirk. Both fixed, both measured again.
- Two weeks of work on AI visibility, and Cloudflare was turning the bots away at the door
I wrote service pages and added schema so ChatGPT and Perplexity could read the site. Then I measured; every AI bot was getting 403. The cause was not the content, it was a rule enabled with one click.