惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Spread Privacy
Spread Privacy
K
Kaspersky official blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Forbes - Security
Forbes - Security
Hacker News - Newest:
Hacker News - Newest: "LLM"
The Last Watchdog
The Last Watchdog
SecWiki News
SecWiki News
Attack and Defense Labs
Attack and Defense Labs
Google DeepMind News
Google DeepMind News
Security Archives - TechRepublic
Security Archives - TechRepublic
S
Secure Thoughts
WordPress大学
WordPress大学
Microsoft Security Blog
Microsoft Security Blog
P
Proofpoint News Feed
云风的 BLOG
云风的 BLOG
V
Visual Studio Blog
Security Latest
Security Latest
TaoSecurity Blog
TaoSecurity Blog
Cyberwarzone
Cyberwarzone
S
SegmentFault 最新的问题
Cloudbric
Cloudbric
aimingoo的专栏
aimingoo的专栏
S
Schneier on Security
N
Netflix TechBlog - Medium
MyScale Blog
MyScale Blog
T
The Blog of Author Tim Ferriss
H
Hacker News: Front Page
C
Cybersecurity and Infrastructure Security Agency CISA
小众软件
小众软件
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
AWS News Blog
AWS News Blog
AI
AI
G
GRAHAM CLULEY
IT之家
IT之家
P
Privacy & Cybersecurity Law Blog
L
Lohrmann on Cybersecurity
Last Week in AI
Last Week in AI
D
Docker
Recent Announcements
Recent Announcements
O
OpenAI News
T
Threat Research - Cisco Blogs
GbyAI
GbyAI
S
Security @ Cisco Blogs
T
Troy Hunt's Blog
C
Check Point Blog
博客园 - 三生石上(FineUI控件)
A
About on SuperTechFans
The Cloudflare Blog
阮一峰的网络日志
阮一峰的网络日志
N
News and Events Feed by Topic

KIRUPA | Designers and Developers Unite

Understanding Merkle Trees Is a CompSci Degree Still Valuable in the Age of AI? The Model Context Protocol (MCP) Explained Vibe Coding + Expertise = Mega Win! 🏆 Animating our Grid How to Count in Negabinary (Base (-2)) — A Visual Guide Counting in Binary and Hexadecimal Pascal Pixel on Design, Development, and Solopreneurship! Do we really need to know how things work? 🧠 Drawing Sharp Lines on the Canvas Bloom Filter: A Deep Dive Hash Functions Deep Dive Advanced Glitch Effect with Sound AI Killed the Content Creator...Star 🤩 Measuring the Distance Between Two Points by using the Pythagorean Theorem Detecting Browser Zoom Changes in JavaScript Creating a Fullscreen Grid Drawing a Perfect Grid on the Canvas Preserving the Pixel Art Look in Web Content Ensuring our Canvas Looks Good on Retina/High-DPI Screens Finding Prime Numbers Using a Sieve of Eratosthenes Two-Dimensional (2D) Arrays in JavaScript Two-Dimensional (2D) Arrays in JavaScript Animations: From Biology to JavaScript! 🦠 You’ll Always be Building & Designing Creating a Cluster Growth Animation: From Biology to JavaScript Timsort: A Lightning Fast Hybrid Sorting Algorithm Merge Sort: A Simple Step-by-Step Walkthrough 😀 - YouTube Bubble Sort: A Detailed Deep-Dive 🛁 Insertion Sort: A Deep Dive! 🍣 Selection Sort: A Step-by-Step Guide 💬 Radix Sort: A Complete Guide to Fast and Efficient Sorting! ⚡️ Career Growth Secrets Counting Sort : A Friendly (yet Detailed!) Deep Dive! 🎯 Bogosort: Sorting in the Slow Lane! 🐢 Pulling Off a Successful Redesign Creating Your Own Perfect Timing Radix Sort Making Counting Sort Work with Negative Values Diving Deep into Array Index Positions The Career Three Body Problem Counting Sort Work on Problems You Deeply Care About The Importance of Finding a Career Mentor Creating a Random Walk Simulation What is Product Strategy? Thinking about an 8K Resolution Future! 📺 Creating an Animated 3D Starfield Effect Meet the Default Sorting Algorithms! Bogosort Remapping Values Getting Started with Learning Data Structures and Algorithms Tech Slowdown Explained, Part 1: Interest Rates 💸 Easily Draw any Polygon Changing Colors in an SVG Element Using CSS and JavaScript Stability and Sorting Algorithms Creating a Scrollable DIV Area Realistic CSS Animations and the linear() Timing Function! 🍱 Visualizing Recursion with the Sierpinski Triangle Fast Sorting with Quicksort The Monty Hall Problem Stacks in JavaScript Depth-First Search (DFS) and Breadth-First Search (BFS) Introduction to the Graph Data Structure Big-O Notation and Complexity Analysis Introduction to Data Structures Arrays: A Data Structure Deep Dive Hashtables: A Deep Dive into Efficient Data Storage and Retrieval Trie (aka Prefix Tree) Embracing Generative AI with Open Arms! 🧸 Impact of AI on UI/UX Design with Chloe Barreau 🎨 Heap Data Structure Binary Search Trees Binary Tree Traversal Alphabetically Sort Names in an Array Overlapping Elements on Top of Each Other Developer Relations and Beyond with Jamie Barton! 🚀 A Trip Down Memory Lane 💾 Binary Trees Linked List The Present and Future of AI Tools with Ray (aka devbyrayray) "Guess the Number" and Binary Searching! 🔍 Switching Web Hosts in 2023 😱 SVG: Converting Shape to Path The Versatility of SVGs 🌀 Spinning Circular Text Introduction to Trees Faster Searching with Binary Search Search Algorithms and Linear Search Fibonacci and Going Beyond Recursion Guess the Number Game
The KIRUPA Tech Stack : It
Kirupa Chinnathambi · 2025-03-14 · via KIRUPA | Designers and Developers Unite

One of the most common questions I get, especially from other content creators, is about how articles are written and published on the KIRUPA site. What is the process? What CMS am I using? What is the tech stack?

Whenever I give out my answer, there is usually a long shrieking scream. Given that this may or may not be close to Halloween, I figured I would answer more openly in the following sections (and share a sweet video!) so that all of you have some tales to scare your friends and family with! 🎃

Onwards!

Party Everyday Like it is 1998

To dive into all of these answers, the first thing to note is that this site was started in 1998. The world of web development was very different back then. What was cutting edge was a variation of HTML 3.0, the ability to specify some colors for the background and links, PHP for some backend magic, tables for layout, frames, and the free WYSIWYG web editors like FrontPage Express and Netscape Composer that came bundled with the browsers:

When it came to writing a tutorial or creating any page, there was no CMS-like system back then to separate the content from the actual structure of the pages. The solution was exactly what you would expect for that era. Each page on the site was a Save As copy of an existing page:

Once a page was created and saved, it was edited locally. All of the content writing was via FrontPage. I never wrote any HTML manually. I didn’t really know how to. I also wanted to write the content in the way I would write an article in Microsoft Word and not deal with HTML tags and other context-switching tasks. After the local edits were complete, I would tell FrontPage to upload the files to the web server via FTP.

So, what’s happening today?

Today, almost 26-ish years later, nothing much has changed from how the site was built in 1998. With Microsoft discontinuing FrontPage and its standards-friendly replacement, Expression Web, I switched over to using Adobe Dreamweaver:

New content still starts off as a Save As of an existing page, but somewhere in the early 2000s, I switched the common header/footer/navigation page elements to be served from a template:

The template serving mechanism is handled via Apache Server-Side Includes, so there isn’t any specialized middleware running. This is not because of any inherent dislike of middleware. The Apache web server existed in the late 1990’s, and (knock on wood) it still exists today. I never saw a need to change a process that has worked well for all these years.

Watch the Full End-to-End Workflow

For many of you, everything that I’ve described here probably sounds bizarre. To help you better understand and visualize what it takes to create a new article, I recorded a video of me going through the various steps of publishing a tutorial for this site:

Over these 17-ish minutes, you get to see every step, starting with copying/pasting the content from my draft writeup (from Quip), adding the images from Figma, fixing broken links, and more, all the way to creating the Open Graph metadata, and pushing this Sierpinski Recursion tutorial live. To make this more appealing, I sped up the actual steps by 3x and added some very calming background music! 😀

Conclusion

If I had to start from scratch today, knowing everything I know now, would I still use the workflow I described here for adding new content to KIRUPA? This is a tough one to answer. There are a lot of tedious steps, many of which I automate with some custom tools, and the process can break if any of the tools in my workflow end up becoming deprecated. Despite all of that, there is also over 25 years of muscle memory that kicks in. I can do all of these steps in my sleep! 😴

Looking at this differently, the end result is…just fine. Someone visiting any page on the KIRUPA site will get a really fast, accessible, and bloat-free experience. The design may have a retro 90’s look to it, but that is partly by design. It is largely my inability to have design sensibilities that evolved beyond the SNES video games I played so much growing up. From a logistical point of view, the very basic tech stack means that the site is very portable. When this site’s long-time host mediatemple shut down recently, I was up and running on another web host in a matter of hours without any complicated migration path.

Just a final word before we wrap up. What you've seen here is freshly baked content without added preservatives, artificial intelligence, ads, and algorithm-driven doodads. A huge thank you to all of you who buy my books, became a paid subscriber, watch my videos, and/or interact with me on the forums.

Your support keeps this site going! 😇

Kirupa's signature!