Independent publication
Writing
and notes
What I learned building this site and working on my projects. A notebook, not marketing.
- 01The Turkish dotted İ, CSS and uppercase English termsInterface2026.106 minOn a Turkish page, text-transform: uppercase turns i into İ. Right for Turkish words, wrong for JavaScript or Firebase. On this site I solved it with the bilingual data itself rather than a hand-kept word list, and the same rule runs on the share cards too.
- 02Making a Vue SPA visible to search engines and AI crawlersSearch & GEO2026.105 minA single-page app shows an empty div to any crawler that does not run JavaScript. On this site every route becomes real HTML in two languages at build time; hreflang, JSON-LD, the sitemap, robots.txt and llms.txt come from the same content, and the build checks itself at the end.
- 03A separate share card for every page and language, drawn with SatoriSearch & GEO2026.106 minEvery page on this site has two 1200×630 share cards, one in Turkish and one in English, all drawn with Satori at build time. The hard part was not the layout but the fonts: ş, ğ and İ first came out as boxes. The fix was to drop font subsets and switch to full TTF files.
- 04Syne's g: not a bug but the design, and I still replaced two lettersDesign & interaction2026.105 minThe lowercase g and ğ of Syne, the site's display font, looked broken to us at large sizes. I checked the font file; it was not a bug but the design itself. The fix was a patch of a few KB that takes only these two letters from Archivo, plus the browser choosing fonts letter by letter.
- 05Moving the loading screen jank to the compositorInterface2026.105 minThe DEVILYXRD boot screen stuttered in its first version. The fix was not faster JavaScript, but leaving no work at all for the main thread: four real milestones, parts that move only with transform, and timers that step in when things go wrong.
- 06x³: keeping the Mauve hidden mode discoverable and cheapDesign & interaction2026.106 minClick the x in the devilyxrd wordmark in the footer three times and the site switches to Mauve mode. In this note I explain how the secret gives itself away, what changes when it turns on, and how I kept all of it cheap, with a class and a few variables, while respecting reduced motion.
- 07Language lives in the URL: Turkish at the root, English under /enInterface2026.106 minWhen I made the site bilingual I did not leave the language to localStorage or the browser setting; I put it in the address. Turkish sits at the root, English under /en; the router reads the language from the URL and LocLink keeps every link in the language you are reading.
- 08From an XSLT-styled sitemap.xml to a real HTML sitemap pageSearch & GEO2026.105 minI first dressed up sitemap.xml with an XSLT stylesheet so that people could read it too. When browsers set out to remove XSLT support, I dropped it: the XML stayed for machines only, and for people I wrote a bilingual, prerendered /sitemap page.
- 09I stopped chasing the pointer: a native SVG cursor with CSS cursorDesign & interaction2026.106 minOn most sites a custom cursor is an element chasing the mouse, and it always lags a little. On this site the browser draws the cursor itself: an SVG data URI in the cursor property, two CSS variables and an x for hidden mode. The JavaScript disc that remains only carries a label.
- 10Pause what you cannot see: sleeping loops offscreen and behind overlaysInterface2026.106 minA lot moves on this site: the hero field, the rings, the scrolling word band, the cover art in the menu. In this note I write down the rules they run by: transform and opacity only, rAF loops that bypass Vue, and small mechanisms that stop anything you cannot see.
- 11From design prototype to production code: porting controlled chaos to VueDesign & interaction2026.105 minThis site did not start as code but as an interactive design prototype: devilyxrd, Controlled Chaos. In this note I describe how I ported that prototype page by page into Vue 3 and TypeScript, what I took over as it was, and what I added and changed afterwards.
- 12Moving from npm to pnpm, and why I kept TypeScript at ~5.9Engineering2026.105 minThe project started with npm, and later I moved the package manager to pnpm. In this note I go through what the switch involved: converting the lockfile, the packageManager and engines fields, the strict node_modules layout, and why I pinned TypeScript to the ~5.9 range.
- 13One platform, many sites: the content model in a multilingual CMSEngineering2026.095 minYEE CMS is a multisite, multilingual platform built to manage the content of Yunus Emre Institute's different centers on a shared foundation. In this article I explain why the content model sits at the center of a system like this, and how I think about the relationship between its layers.
- 14One product, three surfaces: web, service and mobile in one monorepoEngineering2026.085 minMotice is a CRM/ERP product for pilates, yoga, personal training and wellness studios. The administration app, customer portal and mobile app are different faces of the same business processes. This article is about what it means to keep them in one TypeScript monorepo.
- 15Blockchain on real devices: 72 hours with three Raspberry PisR&D and hardware2026.075 minDevilyxrd Blockchain is my personal R&D project that combines a blockchain core written in Go with TypeScript and NestJS services. I ran it not as a local process but on three Raspberry Pis for 72 hours. This article covers what I measured, and what I did not.
- 16Before writing code: clarifying decisions in MentorualProduct & analysis2026.065 minIn Mentorual, the current centre of the work is not code but the decisions code will rest on. In this note I explain why drawing the boundaries of the first release through requirements, use cases, screen families and a role-permission matrix is part of building the product.
- 17Shared identity, separate rules: notes from the OYS & TYS monorepoEngineering2026.055 minIn OYS & TYS, students, instructors, candidates and administrators share the same identity infrastructure, but each domain has its own data and business rules. In this note I gather my thoughts on keeping domain boundaries clear while sharing common packages inside Turborepo.
- 18End-to-end responsibility: how layers affect each other in BGBEngineering2026.045 minBGB is a digital product aimed at reducing gambling-related harm. Taking end-to-end responsibility across the mobile app, services, management panel and website let me see how a decision in one layer reflects on the others. This note is about that experience.
- 19Same data, four users: notes on the Turkish Art PlatformEngineering2026.035 minIn the Turkish Art Platform, the main center and subsidiary platforms live inside the same product. Visitors, artists, applicants and administrators approach the same data with different needs; in this note I write about thinking through those differences together in a multitenant structure.
- 20Publishing in two languages: content, workflow and interface in NoktaTRProduct & analysis2026.025 minNoktaTR brings the culture, art and literature content of .tr magazine into a Turkish and English digital publication. In this note I explain why content structure, editorial workflow and interface hierarchy are not independent decisions.
- 21The process behind the form in a clinic application systemProduct & analysis2026.015 minIn the system I am building for Kadir Yücebaş, the application form is only the visible part of the work. In this note I explain how I think about applications reaching the clinic team, how their status is followed, and how bilingual interfaces share one data model.
- 22From software to hardware: a building-washing drone and Raspberry Pi displaysR&D and hardware2025.125 minAt IOTROCOP I built two projects end to end on my own: a drone designed for washing buildings, and phone-managed advertising displays for cafés and markets. Both taught me the same thing: in hardware there is no single component, only the system.
- 23A telemetry interface on Raspberry Pi: staying smooth while data flowsR&D and hardware2025.115 minIn a vehicle tracking and navigation system running on Raspberry Pi, I brought live GPS, an interactive map and real-time telemetry into one interface. In this note I describe what changes when data collection and interface performance are considered together on an embedded device.
- 24Data from the field: edge processing and connectivity in smart agricultureR&D and hardware2025.105 minGAIA / AgroBlock is an R&D effort that treats sensors, camera nodes and edge devices in agricultural settings as one system. In this note I collect my thoughts on how the physical environment and connectivity conditions shape software architecture.
- 25From analysis to infrastructure: owning the whole freelance processProduct & analysis2025.095 minOn the e-commerce, congress and corporate websites I built as a freelancer, analysis, design, software and technical infrastructure were all mine. In this note I describe what carrying the whole process alone makes easier, and what it makes harder.