<?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: Sandeep Kahawatta</title>
    <description>The latest articles on DEV Community by Sandeep Kahawatta (@sandeep_kahawatta).</description>
    <link>https://dev.to/sandeep_kahawatta</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%2F4092577%2F69209246-0324-45d7-bc44-899a903381bc.jpg</url>
      <title>DEV Community: Sandeep Kahawatta</title>
      <link>https://dev.to/sandeep_kahawatta</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sandeep_kahawatta"/>
    <language>en</language>
    <item>
      <title>How I Built a Vintage Newspaper Developer Portfolio in React (with a Day/Night "Evening Edition" Toggle)</title>
      <dc:creator>Sandeep Kahawatta</dc:creator>
      <pubDate>Mon, 24 Aug 2026 20:50:23 +0000</pubDate>
      <link>https://dev.to/sandeep_kahawatta/how-i-built-a-vintage-newspaper-developer-portfolio-in-react-with-a-daynight-evening-edition-5h9d</link>
      <guid>https://dev.to/sandeep_kahawatta/how-i-built-a-vintage-newspaper-developer-portfolio-in-react-with-a-daynight-evening-edition-5h9d</guid>
      <description>&lt;p&gt;As developers, we all know the standard portfolio formula: dark mode, neon accents, a floating 3D object, and a terminal typing animation. They look great, but after looking at hundreds of them, they start to blur together.&lt;/p&gt;

&lt;p&gt;When I transitioned from marketing into software engineering a few years ago, I learned one universal truth: you need a good hook to stand out.&lt;/p&gt;

&lt;p&gt;I wanted my developer portfolio to be instantly memorable while still showcasing my frontend skills. So, I decided to build a digital broadsheet—a vintage newspaper-style portfolio, complete with a functional "Evening Edition" (Day/Night mode) toggle.&lt;/p&gt;

&lt;p&gt;Here is a breakdown of how I designed and built it using React and plain CSS.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Layout Strategy: CSS Grid is Your Typesetter
A newspaper is defined by its columns, rigid borders, and varied headline sizes. To achieve this, CSS Grid is absolutely non-negotiable. Flexbox is great for alignment, but Grid is necessary for that rigid, blocky masonry look of a 1920s newspaper.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here is a simplified version of the main layout structure:&lt;/p&gt;

&lt;p&gt;CSS&lt;br&gt;
.newspaper-container {&lt;br&gt;
  display: grid;&lt;br&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br&gt;
  gap: 20px;&lt;br&gt;
  max-width: 1200px;&lt;br&gt;
  margin: 0 auto;&lt;br&gt;
  border-top: 4px solid var(--ink-color);&lt;br&gt;
  border-bottom: 4px solid var(--ink-color);&lt;br&gt;
  padding: 10px 0;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.front-page-headline {&lt;br&gt;
  grid-column: span 12;&lt;br&gt;
  text-align: center;&lt;br&gt;
  border-bottom: 2px solid var(--ink-color);&lt;br&gt;
  margin-bottom: 20px;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.article-main {&lt;br&gt;
  grid-column: span 8;&lt;br&gt;
  column-count: 2; /* Creates the classic multi-column reading flow */&lt;br&gt;
  column-gap: 20px;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.sidebar-ad { /* Perfect for the 'Skills' section */&lt;br&gt;
  grid-column: span 4;&lt;br&gt;
  border-left: 1px solid var(--ink-color);&lt;br&gt;
  padding-left: 20px;&lt;br&gt;
}&lt;br&gt;
By utilizing column-count inside the main article grid span, the text naturally flows from one column to the next, just like print.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The "Evening Edition" (Dark Mode)
A vintage newspaper is usually off-white (sepia) with dark gray ink. But I still wanted a dark mode for late-night readers. I branded this the "Evening Edition."&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I used CSS Variables bound to a data-theme attribute on the root HTML element, controlled by a simple React state hook.&lt;/p&gt;

&lt;p&gt;The CSS Variables:&lt;/p&gt;

&lt;p&gt;CSS&lt;br&gt;
:root {&lt;br&gt;
  --paper-color: #f4f1ea; /* Sepia white &lt;em&gt;/&lt;br&gt;
  --ink-color: #2b2b2b;   /&lt;/em&gt; Faded black ink */&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;[data-theme='evening'] {&lt;br&gt;
  --paper-color: #1a1a1a; &lt;br&gt;
  --ink-color: #e0dcd3;&lt;br&gt;
}&lt;br&gt;
The React Hook:&lt;/p&gt;

&lt;p&gt;JavaScript&lt;br&gt;
import { useState, useEffect } from 'react';&lt;/p&gt;

&lt;p&gt;const ThemeToggle = () =&amp;gt; {&lt;br&gt;
  const [isEvening, setIsEvening] = useState(false);&lt;/p&gt;

&lt;p&gt;useEffect(() =&amp;gt; {&lt;br&gt;
    document.documentElement.setAttribute(&lt;br&gt;
      'data-theme', &lt;br&gt;
      isEvening ? 'evening' : 'morning'&lt;br&gt;
    );&lt;br&gt;
  }, [isEvening]);&lt;/p&gt;

&lt;p&gt;return (&lt;br&gt;
    
      className="theme-toggle-btn"&lt;br&gt;
      onClick={() =&amp;gt; setIsEvening(!isEvening)}&lt;br&gt;
    &amp;gt;&lt;br&gt;
      Read the {isEvening ? 'Morning' : 'Evening'} Edition&lt;br&gt;
    &lt;br&gt;
  );&lt;br&gt;
};&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Typography and Texture
The design falls apart without the right fonts.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Headlines: I used Playfair Display (Google Fonts) tightly kerned for that dramatic, bold broadsheet look.&lt;/p&gt;

&lt;p&gt;Body Copy: I went with Lora or Merriweather to mimic the classic serif readability of print media.&lt;/p&gt;

&lt;p&gt;To make it feel tactile, I applied a very subtle CSS SVG noise filter across the background to give it a "recycled paper" grain.&lt;/p&gt;

&lt;p&gt;CSS&lt;br&gt;
.noise-overlay {&lt;br&gt;
  position: fixed;&lt;br&gt;
  top: 0; left: 0; width: 100vw; height: 100vh;&lt;br&gt;
  pointer-events: none;&lt;br&gt;
  background: url('/noise.svg');&lt;br&gt;
  opacity: 0.4;&lt;br&gt;
  z-index: 999;&lt;br&gt;
}&lt;br&gt;
The Final Result&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnkbl7wmhxtt5o6y5yqao.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnkbl7wmhxtt5o6y5yqao.gif" alt=" " width="600" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Building this was a massive shift from standard enterprise UI components. It forced me to think deeply about typography, semantic HTML, and CSS Grid. Currently, I have it deployed smoothly via GitHub Pages.&lt;/p&gt;

&lt;p&gt;Has anyone else built a portfolio that breaks away from the standard layout? Drop your links below—I would love to read through your code and see your designs!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>css</category>
      <category>ui</category>
    </item>
  </channel>
</rss>
