<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: melik bağrıyanık</title>
    <description>The latest articles on DEV Community by melik bağrıyanık (@melik_bynk).</description>
    <link>https://dev.to/melik_bynk</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4065893%2Fc826e6a1-3b74-49c5-81e1-b20a45f1f81b.png</url>
      <title>DEV Community: melik bağrıyanık</title>
      <link>https://dev.to/melik_bynk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/melik_bynk"/>
    <language>en</language>
    <item>
      <title>Demlik — a Turkish Tea House Landing Page</title>
      <dc:creator>melik bağrıyanık</dc:creator>
      <pubDate>Sat, 15 Aug 2026 20:07:10 +0000</pubDate>
      <link>https://dev.to/melik_bynk/demlik-a-turkish-tea-house-landing-page-g6a</link>
      <guid>https://dev.to/melik_bynk/demlik-a-turkish-tea-house-landing-page-g6a</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend"&gt;Frontend Challenge: Comfort Food Edition&lt;/a&gt;, Perfect Landing: Comfort Food.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Inspiration
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Demlik&lt;/strong&gt; — the word means "teapot" — is a Turkish tea house that exists only in my head: four tables, one wood stove, a cat named Poğaça, and Black Sea tea brewed the slow way — twenty minutes, two pots, no shortcuts. It's every neighborhood tea house in Türkiye at once, and the landing page tries to feel the way those places feel: warm, unhurried, and a little playful.&lt;/p&gt;

&lt;p&gt;(It's the companion piece to my CSS Art submission — same tea, different discipline.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://codepen.io/melik-baryank/pen/XJpwLap" rel="noopener noreferrer"&gt;https://codepen.io/melik-baryank/pen/XJpwLap&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Things to try:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Watch the hero on load — the copy rises line by line, the glass &lt;strong&gt;fills with tea&lt;/strong&gt;, the steam starts only after the pour, and an underline draws itself beneath the last word.&lt;/li&gt;
&lt;li&gt;Scroll — sections reveal with staggered timing, and in Chromium the hero art drifts with a &lt;strong&gt;scroll-driven animation&lt;/strong&gt; (&lt;code&gt;animation-timeline: scroll()&lt;/code&gt;, wrapped in &lt;code&gt;@supports&lt;/code&gt; so other browsers gracefully skip it).&lt;/li&gt;
&lt;li&gt;Hover a menu card — it lifts, a light sweep crosses it, and the dish icon wobbles.&lt;/li&gt;
&lt;li&gt;Toggle &lt;strong&gt;dark mode&lt;/strong&gt; — colors cross-fade smoothly, the choice persists, and with no choice made the page follows your system preference.&lt;/li&gt;
&lt;li&gt;Tab through the page — skip link, visible focus rings, and a keyboard-friendly mobile menu (Escape closes it).&lt;/li&gt;
&lt;li&gt;Check the &lt;strong&gt;opening hours&lt;/strong&gt; — today's row is highlighted with a pulsing dot and marked with &lt;code&gt;aria-current="date"&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Submit the form empty or with a typo — accessible inline errors via &lt;code&gt;aria-describedby&lt;/code&gt;/&lt;code&gt;aria-invalid&lt;/code&gt;; success pops in and is announced through a polite live region.&lt;/li&gt;
&lt;li&gt;Hover the scrolling ticker — it pauses. Hover the cat fact — 🐾.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;One HTML file, no frameworks, no build step: semantic HTML, vanilla CSS and ~70 lines of JavaScript.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Accessibility first.&lt;/strong&gt; Landmarks, a skip link, &lt;code&gt;:focus-visible&lt;/code&gt; rings on everything interactive, an hours table with &lt;code&gt;caption&lt;/code&gt; and &lt;code&gt;scope&lt;/code&gt;, form errors in a &lt;code&gt;role="alert"&lt;/code&gt; region wired with &lt;code&gt;aria-describedby&lt;/code&gt; + &lt;code&gt;aria-invalid&lt;/code&gt; (so they're announced even on an Enter-key submit), success in a polite &lt;code&gt;role="status"&lt;/code&gt; region, and &lt;code&gt;aria-pressed&lt;/code&gt; on the theme toggle. Every dish is named in English first with its Turkish original beneath, and those originals carry &lt;code&gt;lang="tr"&lt;/code&gt; so screen readers switch pronunciation instead of mangling them — nothing on the page is left untranslated for an English reader. Closing the mobile menu with Escape returns focus to the button that opened it. The auto-scrolling ticker is pausable by keyboard focus, not just hover (WCAG 2.2.2), and lists that lose their markers keep &lt;code&gt;role="list"&lt;/code&gt; for VoiceOver. Button and badge foregrounds are theme tokens (&lt;code&gt;--on-brand&lt;/code&gt;, &lt;code&gt;--on-accent&lt;/code&gt;) so text contrast clears WCAG AA in &lt;em&gt;both&lt;/em&gt; palettes — checked, not assumed. Every animation on the page — steam, drifting bread ring, ticker, reveals — is disabled under &lt;code&gt;prefers-reduced-motion&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Theming.&lt;/strong&gt; Design tokens as custom properties, defined light-first. Dark mode comes in three layers: system preference by default (&lt;code&gt;prefers-color-scheme&lt;/code&gt;), an explicit &lt;code&gt;data-theme&lt;/code&gt; override from the toggle, and &lt;code&gt;localStorage&lt;/code&gt; to remember the choice. The moon-cutout icon on the toggle only appears when dark is actually active.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The hero illustration.&lt;/strong&gt; A tulip glass, saucer, steam, and a sesame bread ring — all CSS gradients and clip-paths, no images. The sesame seeds are stacked &lt;code&gt;radial-gradient&lt;/code&gt;s positioned in percentages, so they scale with the ring at every viewport size.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Motion design.&lt;/strong&gt; The page opens with a choreographed hero: staggered &lt;code&gt;fade-up&lt;/code&gt; entrances, a tea-fill (&lt;code&gt;scaleY&lt;/code&gt; from the bottom, so the gradient surface rides up), delayed steam, and a self-drawing underline. Scroll-driven parallax on the hero art is a pure progressive enhancement — &lt;code&gt;animation-timeline: scroll()&lt;/code&gt; behind &lt;code&gt;@supports&lt;/code&gt;, so Firefox and Safari simply see the static composition. Menu-card light sweeps animate &lt;code&gt;background-position&lt;/code&gt; instead of a transformed overlay, so nothing leaks outside the rounded corners. And every single one of these — entrances, sweeps, pulses, parallax — is disabled under &lt;code&gt;prefers-reduced-motion&lt;/code&gt;, with end-states baked into the base styles so nothing gets stuck invisible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Little UX touches.&lt;/strong&gt; Today's opening hours highlighted (with a pulsing "open" dot) via one line of JS and one CSS attribute selector; a chalkboard-style dotted leader between dish and price; the ticker duplicated once so the loop is seamless; scroll reveals via &lt;code&gt;IntersectionObserver&lt;/code&gt; that unobserve after firing; the header grows a shadow only once you've scrolled.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code quality.&lt;/strong&gt; BEM-ish class names, tokens for every color and radius, one commented section per component, and JSON-LD (&lt;code&gt;CafeOrCoffeeShop&lt;/code&gt;) in the head — Demlik may be fictional, but its markup takes itself seriously.&lt;/p&gt;

&lt;p&gt;Afiyet olsun! 🫖&lt;/p&gt;

</description>
      <category>frontendchallenge</category>
      <category>devchallenge</category>
      <category>webdev</category>
      <category>css</category>
    </item>
    <item>
      <title>Çay &amp; Simit — a Turkish Tea Break in Pure CSS</title>
      <dc:creator>melik bağrıyanık</dc:creator>
      <pubDate>Sat, 15 Aug 2026 20:01:23 +0000</pubDate>
      <link>https://dev.to/melik_bynk/cay-simit-a-turkish-tea-break-in-pure-css-2h4p</link>
      <guid>https://dev.to/melik_bynk/cay-simit-a-turkish-tea-break-in-pure-css-2h4p</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend"&gt;Frontend Challenge: Comfort Food Edition&lt;/a&gt;, CSS Art: Comfort Food.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Inspiration
&lt;/h2&gt;

&lt;p&gt;For me, comfort food isn't a dish — it's a ritual. A tulip-shaped glass of &lt;strong&gt;çay&lt;/strong&gt; (Turkish tea), brewed dark "tavşan kanı" (rabbit's blood red, as we say), served on a red-and-white saucer with two sugar cubes, and a &lt;strong&gt;simit&lt;/strong&gt; — the sesame-crusted bread ring sold on every street corner in Türkiye. It's breakfast, it's a work break, it's what you're offered the moment you walk into someone's home.&lt;/p&gt;

&lt;p&gt;I wanted to see how close I could get to a &lt;em&gt;photograph&lt;/em&gt; of that moment using nothing but HTML and CSS. No images, no SVG, no data URIs, no icon fonts — every pixel is gradients, shadows, masks, and clip-paths.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://codepen.io/melik-baryank/pen/OPWYegq" rel="noopener noreferrer"&gt;https://codepen.io/melik-baryank/pen/OPWYegq&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When the scene loads, a porcelain demlik (teapot) floats in, tilts, and &lt;strong&gt;pours the tea in front of you&lt;/strong&gt; — the glass fills from empty, the level speeding up through the narrow waist and slowing in the wide sections, exactly like a real pour. Only when the teapot leaves does the steam start to rise.&lt;/p&gt;

&lt;p&gt;Then the scene becomes a &lt;strong&gt;playground&lt;/strong&gt; — little call-out labels point straight at each prop, and every prop keeps glowing until you've tried it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧊 &lt;strong&gt;Click a sugar cube&lt;/strong&gt; — it tumbles through the air in a real parabolic arc, plops through the glass mouth, rings the surface, and fizzes as it dissolves.&lt;/li&gt;
&lt;li&gt;🥄 &lt;strong&gt;Click the spoon&lt;/strong&gt; — it lifts off the saucer, dips into the glass, stirs (watch the surface swirl), and settles back where it was.&lt;/li&gt;
&lt;li&gt;🥯 &lt;strong&gt;Click the simit&lt;/strong&gt; — it shakes and sheds a few sesame seeds onto the table.&lt;/li&gt;
&lt;li&gt;⟳ &lt;strong&gt;"brew again"&lt;/strong&gt; re-brews everything from the empty glass, and moving your mouse tilts the whole scene in subtle 3D.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every pixel and every movement is CSS. JavaScript never animates anything — it's a small orchestrator that only adds and removes classes; with JS off or &lt;code&gt;prefers-reduced-motion&lt;/code&gt; on, you simply get the finished, steaming still life.&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;The whole scene is one HTML file: ~1050 lines of CSS and a ~15-line script. Everything is sized in &lt;code&gt;em&lt;/code&gt;, so a single &lt;code&gt;font-size: clamp(...)&lt;/code&gt; on the scene scales the entire artwork responsively.&lt;/p&gt;

&lt;p&gt;The parts I'm most proud of:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The pour choreography.&lt;/strong&gt; The entire opening sequence — teapot in, pour, fill, teapot out, steam up — runs on a &lt;em&gt;single 9-second CSS animation duration&lt;/em&gt; shared by every element. Each element encodes its own action window as keyframe percentages, so everything stays in perfect sync with zero JavaScript timing code. The tea level's keyframes are sampled from the same Bézier polygon as the glass silhouette: the surface ellipse animates its &lt;code&gt;top&lt;/code&gt;/&lt;code&gt;left&lt;/code&gt;/&lt;code&gt;width&lt;/code&gt; through the glass profile, and the fill &lt;em&gt;accelerates through the narrow waist and slows in the wide bulb&lt;/em&gt; — the constant-volume illusion. The stream inside the glass shrinks with a synchronized &lt;code&gt;scaleY&lt;/code&gt;, so it always ends exactly at the rising surface. And because the static CSS &lt;em&gt;is&lt;/em&gt; the final frame, the &lt;code&gt;.play&lt;/code&gt; class only describes the journey: no JS (or reduced motion) means you just see the finished glass.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The tulip glass (ince belli bardak).&lt;/strong&gt; The silhouette is a pair of polygons sampled from Bézier curves — one for the outer wall, one for the inner. The glass &lt;em&gt;wall itself&lt;/em&gt; is cut with &lt;code&gt;clip-path: polygon(evenodd, ...)&lt;/code&gt;: the outer path minus the inner path leaves just the glass "flesh". A third even-odd pair creates the dark band where the tea touches the wall. Inside the glass, &lt;code&gt;backdrop-filter: blur() saturate()&lt;/code&gt; refracts whatever is behind it, like real glass does.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The simit twist.&lt;/strong&gt; A simit isn't just a torus — the dough is rolled and twisted, so the ridges spiral. I built it from 7 &lt;code&gt;repeating-conic-gradient&lt;/code&gt; strips, each masked to a thin radial band, with the conic phase (&lt;code&gt;from&lt;/code&gt; angle) advancing as the radius grows. Ridges that shift angle with radius read as a spiral twist. On top of that: 325 sesame seeds and ~120 crust-bubble highlights/shadows, all layered &lt;code&gt;box-shadow&lt;/code&gt;s in three tone groups. The whole ring &lt;strong&gt;lies flat on the table&lt;/strong&gt;: a &lt;code&gt;scaleY(.54)&lt;/code&gt; perspective squash, plus a second copy of the ring shifted down and cut to its bottom half (the ring via &lt;code&gt;mask&lt;/code&gt;, the half via &lt;code&gt;clip-path&lt;/code&gt; — engine-proof, no &lt;code&gt;mask-composite&lt;/code&gt; required) for the visible front wall, and a dark crescent inside the hole for the far inner wall.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Making the interactions discoverable.&lt;/strong&gt; Interactive CSS art has an obvious problem: nothing tells you it's interactive. So each prop announces itself — a hairline leader line runs from a small label ("drop sugar", "stir", "shake") to the thing it names, the props take turns pulsing with a warm &lt;code&gt;drop-shadow&lt;/code&gt; glow, and hover or keyboard focus answers with the same glow. Each call-out and its glow retire the moment that prop is used (one &lt;code&gt;used-*&lt;/code&gt; class), so the scene quietly returns to being a photograph once you've explored it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The interactions.&lt;/strong&gt; Sugar, spoon and simit are real &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt;s (keyboard-accessible and labelled), but the physics is pure CSS. The sugar throw is a genuine parabola from two composed animations: linear X on the button, gravity-eased Y on the cube inside it — no JavaScript math anywhere. The stir is one long keyframe track (lift → two circular laps → settle) with a conic-gradient vortex spinning inside the surface ellipse, clipped by &lt;code&gt;overflow:hidden&lt;/code&gt;. JS is only an orchestrator: it toggles classes and resets state on replay.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Depth of field.&lt;/strong&gt; The café background is blurred with a masked &lt;code&gt;backdrop-filter&lt;/code&gt; strip near the horizon, so the subject stays sharp while the background falls out of focus — the CSS version of a wide aperture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The saucer.&lt;/strong&gt; Circles flattened with &lt;code&gt;transform: scaleY(.32)&lt;/code&gt; to fake perspective. The scalloped red rim is 54 box-shadow circles placed on a ring; the tick patterns are &lt;code&gt;repeating-conic-gradient&lt;/code&gt;s masked to thin annuli; the warm glow the tea casts on the porcelain is a pair of &lt;code&gt;mix-blend-mode: screen&lt;/code&gt; radial gradients.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The wood table.&lt;/strong&gt; Six stacked &lt;code&gt;repeating-linear-gradient&lt;/code&gt;s at slightly different angles for grain, a hand-tuned gradient for plank seams that get denser toward the horizon (perspective!), multiply-blended radial gradients for knots, and a sub-pixel dot grid for pores.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The finishing pass.&lt;/strong&gt; Like a photo, the scene gets a color grade (vignette + warm lift) and a very faint film grain overlay — two full-scene layers that pull everything together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Accessibility.&lt;/strong&gt; The scene is a &lt;code&gt;role="group"&lt;/code&gt; with a descriptive &lt;code&gt;aria-label&lt;/code&gt;, and every interactive prop inside it is a real, labelled &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt; you can reach with the keyboard. The replay control lives outside the scene, and under &lt;code&gt;prefers-reduced-motion&lt;/code&gt; every animation — pour, sugar, stir, ambient light — is replaced by the finished still frame.&lt;/p&gt;

&lt;p&gt;What I learned: &lt;code&gt;box-shadow&lt;/code&gt; is a particle system, &lt;code&gt;repeating-conic-gradient&lt;/code&gt; is a lathe, and the even-odd fill rule is the closest thing CSS has to boolean geometry. And that I can't look at this piece without craving a simit.&lt;/p&gt;

&lt;p&gt;Afiyet olsun! 🫖&lt;/p&gt;

</description>
      <category>frontendchallenge</category>
      <category>devchallenge</category>
      <category>css</category>
      <category>cssart</category>
    </item>
  </channel>
</rss>
