<?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: Prateek Kalra</title>
    <description>The latest articles on DEV Community by Prateek Kalra (@prateekk07).</description>
    <link>https://dev.to/prateekk07</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3235651%2F75d8090c-3668-46fb-bd78-6901a4704c27.png</url>
      <title>DEV Community: Prateek Kalra</title>
      <link>https://dev.to/prateekk07</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/prateekk07"/>
    <language>en</language>
    <item>
      <title>I Built an Office Intranet with 100+ Features</title>
      <dc:creator>Prateek Kalra</dc:creator>
      <pubDate>Sun, 27 Jul 2025 21:22:37 +0000</pubDate>
      <link>https://dev.to/prateekk07/i-built-an-office-intranet-with-100-features-27fc</link>
      <guid>https://dev.to/prateekk07/i-built-an-office-intranet-with-100-features-27fc</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend/axero"&gt;Frontend Challenge: Office Edition sponsored by Axero, Holistic Webdev: Office Space&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Remember those clunky office intranets from the early 2000s? The ones that looked like they were designed by someone who thought "user experience" was a type of office furniture? Well, I decided to build the complete opposite.&lt;/p&gt;

&lt;p&gt;Meet &lt;strong&gt;Lumino&lt;/strong&gt; - an office intranet that actually makes you &lt;em&gt;want&lt;/em&gt; to check your company dashboard. I'm talking about a fully customizable workspace with drag-and-drop widgets, real-time search across everything, and enough features to make your head spin (in a good way).&lt;/p&gt;

&lt;p&gt;Here's the kicker: I built this entire thing with just React, Tailwind CSS, and shadcn/ui. No complex backend, no enterprise frameworks, no selling your soul to corporate software vendors. Just modern web tech doing what it does best.&lt;/p&gt;

&lt;p&gt;The goal was simple: create an intranet that doesn't suck. Turns out, that's harder than it sounds when you end up building 100+ features along the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&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.amazonaws.com%2Fuploads%2Farticles%2F8qy7c31kpxw2omv75o53.png" 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.amazonaws.com%2Fuploads%2Farticles%2F8qy7c31kpxw2omv75o53.png" alt=" " width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🚀 &lt;strong&gt;&lt;a href="https://lumino-intranet.netlify.app" rel="noopener noreferrer"&gt;Live Demo&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
📁 &lt;strong&gt;&lt;a href="https://github.com/prateekkalra/lumino-intranet" rel="noopener noreferrer"&gt;Source Code&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  How I Accidentally Built a Mini-Enterprise Platform
&lt;/h3&gt;

&lt;p&gt;This started innocently enough. "I'll just make a nice dashboard with a few widgets," I thought. "How hard could it be?"&lt;/p&gt;

&lt;p&gt;Famous last words.&lt;/p&gt;

&lt;p&gt;What began as a weekend project spiraled into something that would make enterprise software developers weep with joy (or envy). Here's what happened when I couldn't stop adding "just one more feature":&lt;/p&gt;

&lt;h3&gt;
  
  
  The Widget Wonderland (8 Interactive Dashboards)
&lt;/h3&gt;

&lt;p&gt;Each widget became its own mini-application:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Welcome Widget&lt;/strong&gt;: Because saying "Good morning, Sarah" hits different when it knows the weather and your schedule&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quick Actions&lt;/strong&gt;: 9 color-coded buttons that actually do things (not just look pretty)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Company News&lt;/strong&gt;: A social feed where Karen from HR can finally get the engagement her cat photos deserve&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Task Board&lt;/strong&gt;: Started as a simple list, ended up as a full Kanban system because... why not?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team Widget&lt;/strong&gt;: Live status indicators so you know if Dave is actually "in a meeting" or just avoiding emails&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Calendar&lt;/strong&gt;: Events that you can actually interact with (revolutionary, I know)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analytics&lt;/strong&gt;: Charts that respond when you click them (take that, static dashboards!)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recognition Feed&lt;/strong&gt;: Because everyone needs more workplace validation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Dialog Dimension (22 Modal Universes)
&lt;/h3&gt;

&lt;p&gt;This is where things got... ambitious. Each dialog is basically a separate app:&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Employee Directory&lt;/strong&gt; isn't just a list - it's a full contact management system with search, filters, and organizational charts. The &lt;strong&gt;HR Portal&lt;/strong&gt; has everything from payroll to performance reviews. The &lt;strong&gt;Task Modal&lt;/strong&gt; transforms into a complete project management suite.&lt;/p&gt;

&lt;p&gt;I may have gotten carried away when I realized I could build an entire &lt;strong&gt;Time Tracking System&lt;/strong&gt; inside a modal. And don't get me started on the &lt;strong&gt;Knowledge Base&lt;/strong&gt; dialog that became its own mini-Wikipedia.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Search System That Actually Works
&lt;/h3&gt;

&lt;p&gt;You know what's broken about most enterprise software? Search. You type "John" and get results about printer toner from 2019.&lt;/p&gt;

&lt;p&gt;So I built a search system that doesn't hate its users:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hit &lt;code&gt;⌘K&lt;/code&gt; (or &lt;code&gt;Ctrl+K&lt;/code&gt; for the Windows folks) and search &lt;em&gt;everything&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Fuzzy matching powered by Fuse.js because typos are human&lt;/li&gt;
&lt;li&gt;Real-time indexing that updates as you work&lt;/li&gt;
&lt;li&gt;Results grouped by type with actual helpful previews&lt;/li&gt;
&lt;li&gt;Works on mobile without making you want to throw your phone&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Drag-and-Drop That Doesn't Drop the Ball
&lt;/h3&gt;

&lt;p&gt;Building a customizable dashboard sounds simple until you realize users will try to break everything. My drag-and-drop system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prevents widgets from overlapping (because chaos isn't productive)&lt;/li&gt;
&lt;li&gt;Provides visual feedback that actually makes sense&lt;/li&gt;
&lt;li&gt;Remembers your layout so you don't have to rebuild it every day&lt;/li&gt;
&lt;li&gt;Works on touch devices without fighting you&lt;/li&gt;
&lt;li&gt;Includes satisfying animations because life's too short for boring interfaces&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Technical Stuff (For the Code Nerds)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;State Management Without the Headache&lt;/strong&gt;: Three Zustand stores handle everything. No Redux boilerplate, no context hell, just clean state that makes sense.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance That Doesn't Tank&lt;/strong&gt;: Debounced search, memoized components, and smart re-renders keep everything smooth even with 100+ features running.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Accessibility That Actually Exists&lt;/strong&gt;: Full keyboard navigation, proper ARIA labels, and color contrast that won't strain your eyes during late-night deadline crunches.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Responsive Design That Responds&lt;/strong&gt;: The same interface works on your 4K monitor and your phone. The drag-and-drop becomes touch-friendly, dialogs stack properly, and nothing breaks when you resize your browser window like a maniac.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Moment I Realized I'd Gone Too Far
&lt;/h3&gt;

&lt;p&gt;It was 2 AM, and I was implementing emoji reactions for the recognition feed. That's when it hit me: I'd built an enterprise platform that people might actually enjoy using.&lt;/p&gt;

&lt;p&gt;The search system alone indexes content from 8 different widgets. The task management system rivals tools that charge $50/month per user. The employee directory has features that HR departments dream about.&lt;/p&gt;

&lt;p&gt;And it all started with "let me just add a weather widget."&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Actually Learned
&lt;/h3&gt;

&lt;p&gt;Building 100+ features taught me that good software isn't about feature count - it's about how features work together. The search system becomes powerful when every widget feeds into it. Task management becomes useful when it integrates with team status. Recognition feeds become engaging when they connect to real profiles.&lt;/p&gt;

&lt;p&gt;Also, modern web development is genuinely amazing. React hooks, Tailwind utilities, and shadcn components let you build enterprise-grade UIs faster than ever. No jQuery spaghetti, no CSS nightmares, just clean code that does cool things.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Stack That Saved My Sanity
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;React 18&lt;/strong&gt;: Because hooks make everything better&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS&lt;/strong&gt;: Utility classes that don't make you cry&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;shadcn/ui&lt;/strong&gt;: Components that look professional out of the box&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Framer Motion&lt;/strong&gt;: Animations that don't suck&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zustand&lt;/strong&gt;: State management for humans&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fuse.js&lt;/strong&gt;: Search that finds what you actually want&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React Beautiful DnD&lt;/strong&gt;: Drag-and-drop that feels magical&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Verdict
&lt;/h3&gt;

&lt;p&gt;I set out to build a simple intranet and accidentally created a digital workspace that makes office software fun. Yes, fun. I know that sounds impossible, but here we are.&lt;/p&gt;

&lt;p&gt;The best part? It's all built with standard web technologies. No proprietary platforms, no vendor lock-in, no sacrificing your firstborn to enterprise licensing agreements.&lt;/p&gt;

&lt;p&gt;Sometimes the best way to solve a problem is to completely ignore how it's "supposed" to be done and just build something that works.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want to see what happens when you give a developer too much creative freedom? Check out the demo. Your productivity (and your sanity) will thank you.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;P.S. - Yes, I know I got carried away. No, I'm not sorry. Yes, the source code is available. No, I don't know why I thought adding a wellness tracker was necessary. Yes, it works anyway.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>frontendchallenge</category>
      <category>css</category>
      <category>javascript</category>
    </item>
    <item>
      <title>From Lecture Videos to Research PDFs: How I Built My Personal Knowledge Companion</title>
      <dc:creator>Prateek Kalra</dc:creator>
      <pubDate>Sun, 27 Jul 2025 08:25:22 +0000</pubDate>
      <link>https://dev.to/prateekk07/from-lecture-videos-to-research-pdfs-how-i-built-my-personal-knowledge-companion-4gnn</link>
      <guid>https://dev.to/prateekk07/from-lecture-videos-to-research-pdfs-how-i-built-my-personal-knowledge-companion-4gnn</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/algolia-2025-07-09"&gt;Algolia MCP Server Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Ever felt like you're drowning in digital content? Between lecture recordings, research papers, meeting notes, and that random screenshot you took six months ago with "important info" - finding what you need when you need it feels impossible. That's why I built &lt;strong&gt;Prism&lt;/strong&gt;: an AI-powered personal knowledge companion that transforms your scattered files into a searchable, conversational knowledge base.&lt;/p&gt;

&lt;p&gt;Prism isn't just another document manager. It's like having a personal research assistant who's read every file you've ever saved and can instantly recall any detail. Upload any file - PDFs, videos, images, audio recordings - and Prism analyzes it with Google's Gemini 2.5 Pro, indexes it with Algolia's blazing-fast search, and lets you chat with your content using natural language.&lt;/p&gt;

&lt;p&gt;The magic happens when you start asking questions. Instead of digging through folders or trying to remember which document contained that brilliant insight, you just ask: "What did my professor say about quantum entanglement in last week's lecture?" or "Compare the marketing strategies across all my competitor research files." Prism searches your entire knowledge base and provides contextual answers, complete with source references.&lt;/p&gt;

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

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/NFodeVwFN-0"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/prateekkalra/prism-algolia" rel="noopener noreferrer"&gt;Github repository&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem That Sparked Prism
&lt;/h2&gt;

&lt;p&gt;The idea for Prism came from a personal pain point. As someone juggling multiple projects, research papers, and learning materials, I found myself constantly frustrated by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The 3am Panic&lt;/strong&gt;: Knowing I read something important but having no idea which of the 200 PDFs it was in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Video Paralysis&lt;/strong&gt;: Hour-long lecture recordings that I knew contained gold but didn't have time to rewatch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context Amnesia&lt;/strong&gt;: Great insights scattered across documents with no way to connect the dots.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search Futility&lt;/strong&gt;: File search that only matches filenames, not the actual content I'm looking for.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Traditional solutions weren't cutting it. Cloud storage gives you a digital filing cabinet, but you still need to remember where you filed things. Note-taking apps require manual effort to organize. What I needed was something that could understand my content as deeply as I do - or better.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Utilized the Algolia MCP Server
&lt;/h2&gt;

&lt;p&gt;Here's where Algolia's Model Context Protocol (MCP) server became the hero of this story. MCP is a game-changer for AI applications because it provides a standardized way for AI models to interact with external tools and data sources. The Algolia MCP server specifically gives AI models the superpower of enterprise-grade search.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Technical Magic
&lt;/h3&gt;

&lt;p&gt;The integration works through two critical MCP tools:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. &lt;code&gt;saveObject&lt;/code&gt;&lt;/strong&gt;: Every time you upload a file, Prism:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Analyzes it with Gemini 2.5 Pro (extracting themes, summaries, key points).&lt;/li&gt;
&lt;li&gt;Structures the analysis with metadata (file type, size, upload date).&lt;/li&gt;
&lt;li&gt;Saves it to your Algolia index via MCP.&lt;/li&gt;
&lt;/ul&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Simplified flow&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;analysis&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;analyzeFileWithGemini&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;mcpClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;callTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;saveObject&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;applicationId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ALGOLIA_APP_ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;indexName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;prism-data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;requestBody&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;resourceDetails&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;analysis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;resourceType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;fileName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;uploadDate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;toISOString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. &lt;code&gt;searchSingleIndex&lt;/code&gt;&lt;/strong&gt;: When you ask a question, the magic unfolds:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Extract key terms from your natural language query.&lt;/li&gt;
&lt;li&gt; Search your entire knowledge base in milliseconds.&lt;/li&gt;
&lt;li&gt; Retrieve the most relevant content.&lt;/li&gt;
&lt;li&gt; Provide this context to the AI for a comprehensive answer.&lt;/li&gt;
&lt;/ol&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Every chat query triggers this flow&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;searchTerms&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;extractKeyTerms&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userMessage&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;searchResults&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;mcpClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;callTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;searchSingleIndex&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;applicationId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ALGOLIA_APP_ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;indexName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;prism-data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;requestBody&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`query=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;searchTerms&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;hitsPerPage=3`&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why Algolia MCP Changes Everything
&lt;/h3&gt;

&lt;p&gt;What makes this integration special isn't just the search speed (though sub-50ms response times are &lt;em&gt;chef's kiss&lt;/em&gt;). It's how MCP enables a new paradigm:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Semantic Bridge&lt;/strong&gt;: Your files aren't just stored; they're understood. The AI analysis creates a semantic layer that Algolia can search.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context Injection&lt;/strong&gt;: Every query automatically retrieves relevant context from your knowledge base. The AI doesn't just answer questions - it answers them using YOUR specific content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time Knowledge Building&lt;/strong&gt;: As soon as you upload a file, it's instantly searchable and part of your AI's knowledge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool Transparency&lt;/strong&gt;: You can see exactly when and how Algolia is being used, building trust in the AI's responses.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Architecture That Makes It Tick
&lt;/h3&gt;

&lt;p&gt;Building Prism required careful orchestration of multiple technologies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Interface (React + TypeScript)
     ↓
Backend Orchestrator (Express + MCP Client)
     ↓
   ┌─────────────┬──────────────┐
   │             │              │
Gemini 2.5    Moonshot v1    Algolia MCP
(Analysis)    (Chat AI)      (Search/Storage)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Key Technical Decisions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Modal AI Strategy&lt;/strong&gt;: Gemini 2.5 Pro for file analysis (it handles images, videos, audio brilliantly) and Moonshot v1 for conversational AI (great at tool calling and streaming).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streaming Everything&lt;/strong&gt;: Real-time responses make the difference between a tool that feels alive vs one that feels like waiting for dial-up internet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP as the Backbone&lt;/strong&gt;: Instead of building custom integrations, MCP provides a standardized, extensible way to connect AI with tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client-Side Analysis&lt;/strong&gt;: Files are analyzed directly in the browser before saving results, keeping your data private while leveraging cloud search.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;p&gt;The Development Journey&lt;br&gt;
Building Prism was a masterclass in modern AI application development. Here are the big lessons:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. MCP is the Future of AI Integration&lt;/strong&gt;&lt;br&gt;
The Model Context Protocol isn't just another API - it's a paradigm shift. Instead of hardcoding integrations, MCP lets you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connect AI to any tool through a standard protocol.&lt;/li&gt;
&lt;li&gt;See exactly what tools are doing (no black box).&lt;/li&gt;
&lt;li&gt;Extend functionality without touching core code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Algolia MCP server specifically showed me how powerful specialized tools become when AI can use them natively.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Streaming Changes User Perception&lt;/strong&gt;&lt;br&gt;
Early versions waited for complete responses. Users thought it was broken. Adding streaming responses transformed the experience - suddenly the AI felt responsive and alive. The technical complexity was worth every millisecond of perceived performance gain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Context is King, but Retrieval is Emperor&lt;/strong&gt;&lt;br&gt;
Having a knowledge base is useless if you can't retrieve the right information at the right time. Algolia's search capabilities, exposed through MCP, made the difference between "neat demo" and "tool I use every day."&lt;/p&gt;

&lt;h3&gt;
  
  
  Technical Challenges Conquered
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Challenge 1: Multi-Modal File Handling
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Problem&lt;/strong&gt;: Supporting everything from PDFs to videos to audio files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solution&lt;/strong&gt;: Gemini 2.5 Pro's multi-modal capabilities + type-specific processing pipelines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learning&lt;/strong&gt;: One AI model that handles multiple formats beats multiple specialized models.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Challenge 2: Real-Time Search Integration
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Problem&lt;/strong&gt;: Making search feel instant and natural within chat.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solution&lt;/strong&gt;: Automatic query extraction + Algolia MCP's sub-50ms search.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learning&lt;/strong&gt;: Users don't want to write search queries - extract intent from natural language.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Challenge 3: MCP Server Management
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Problem&lt;/strong&gt;: Keeping MCP connections stable and monitoring tool usage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solution&lt;/strong&gt;: Built comprehensive status monitoring and automatic reconnection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learning&lt;/strong&gt;: Transparency builds trust - show users when tools are working.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What Surprised Me
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;File Analysis Quality&lt;/strong&gt;: Gemini's ability to extract meaningful insights from a blurry photo of whiteboard notes blew my mind.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search Context Magic&lt;/strong&gt;: Often, Algolia found connections I'd forgotten about. Asking about a concept brought up notes from months ago that I'd never have found manually.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool Calling Patterns&lt;/strong&gt;: Moonshot AI's ability to decide when to search vs when to answer directly created surprisingly natural conversations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Beyond Personal Use: The Bigger Picture
&lt;/h2&gt;

&lt;p&gt;While I built Prism for personal knowledge management, the architecture scales beautifully:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Small Teams&lt;/strong&gt;: Shared knowledge bases with role-based access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Researchers&lt;/strong&gt;: Citation tracking and cross-paper analysis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Students&lt;/strong&gt;: Lecture transcription and study material organization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content Creators&lt;/strong&gt;: Asset management and idea connection.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Algolia MCP integration means search performance doesn't degrade as your knowledge base grows from hundreds to millions of documents.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;Prism is just the beginning. The roadmap includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Collaborative Knowledge&lt;/strong&gt;: Share specific collections with teammates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart Notifications&lt;/strong&gt;: "Hey, this new paper relates to your research from last month".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge Graphs&lt;/strong&gt;: Visualize connections between your content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More MCP Tools&lt;/strong&gt;: Integration with other MCP servers for expanded capabilities.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Try It Yourself
&lt;/h3&gt;

&lt;p&gt;The beauty of open source is that you can take Prism and make it your own. Maybe you want to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add support for specific file formats.&lt;/li&gt;
&lt;li&gt;Integrate with your favorite note-taking app.&lt;/li&gt;
&lt;li&gt;Build team collaboration features.&lt;/li&gt;
&lt;li&gt;Create specialized analysis for your field.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The MCP architecture makes it surprisingly easy to extend.&lt;/p&gt;




&lt;p&gt;Special thanks to the Algolia team for making search accessible through MCP, and to the broader MCP community for showing us what's possible when we give AI the right tools.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tech Stack&lt;/strong&gt;: React, TypeScript, Express.js, Google Gemini 2.5 Pro, Moonshot v1, Algolia MCP, Tailwind CSS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License&lt;/strong&gt;: MIT&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Status&lt;/strong&gt;: Actively maintained and accepting contributions!&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>algoliachallenge</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>Office Culture Through the Decades: A Pure CSS Time Machine 🕰️</title>
      <dc:creator>Prateek Kalra</dc:creator>
      <pubDate>Sun, 20 Jul 2025 20:13:10 +0000</pubDate>
      <link>https://dev.to/prateekk07/office-culture-through-the-decades-a-pure-css-time-machine-47e</link>
      <guid>https://dev.to/prateekk07/office-culture-through-the-decades-a-pure-css-time-machine-47e</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend/axero"&gt;Frontend Challenge: Office Edition sponsored by Axero, CSS Art: Office Culture&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Eight decades of office evolution compressed into a single, interactive experience. From the cigarette smoke of Mad Men boardrooms to the Zoom fatigue of our hybrid era, office culture has transformed dramatically. I wanted to capture not just the visual changes - the shift from typewriters to laptops, rotary phones to video calls - but the cultural heartbeat of each decade.&lt;/p&gt;

&lt;p&gt;The inspiration struck me: what if you could literally &lt;em&gt;travel through time&lt;/em&gt; and witness how our relationship with work, technology, and each other has evolved? Every coffee machine tells a story. Every communication device reflects a revolution. Every desk setup reveals the values of its era.&lt;/p&gt;

&lt;p&gt;This isn't just CSS art - it's digital archaeology.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;🎯 &lt;a href="https://office-decades.netlify.app" rel="noopener noreferrer"&gt;&lt;strong&gt;Live Demo&lt;/strong&gt; - Experience all 8 decades&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📂 &lt;a href="https://github.com/prateekkalra/office-decades-css" rel="noopener noreferrer"&gt;View the code&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/VYPZXKO7k_o"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️ Journey
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🎨 The Creative Challenge
&lt;/h3&gt;

&lt;p&gt;Building this project meant becoming a historian, designer, and engineer all at once. I spent weeks researching authentic office elements from each decade - from the exact shade of IBM amber monitors to the precise button layout of 1960s touch-tone phones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The biggest challenge?&lt;/strong&gt; Making it all work with &lt;strong&gt;zero JavaScript&lt;/strong&gt;. This is pure HTML and CSS proving that modern CSS can create complex, interactive experiences without a single line of JS.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏗️ Technical Architecture
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Layout System
&lt;/h3&gt;

&lt;p&gt;I designed a "bento-style" grid layout with 6 distinct office zones surrounding a central timeline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Office wall&lt;/strong&gt;: Clocks and motivational posters that reflect each era's values
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workstation&lt;/strong&gt;: The evolution from manual typewriters to MacBooks
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Communication&lt;/strong&gt;: From rotary phones to Zoom calls
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage&lt;/strong&gt;: Filing cabinets morphing into smart lockers
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coffee Break&lt;/strong&gt;: Percolators evolving into artisanal espresso machines
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desk Decor&lt;/strong&gt;: Personal touches that tell the story of changing work culture
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📅 The Decades
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🕴️ 1950s – Mad Men Era
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;"TEAMWORK BUILDS TOMORROW"&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Traditional office clock
&lt;/li&gt;
&lt;li&gt;Manual typewriter
&lt;/li&gt;
&lt;li&gt;Rotary phone
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚀 1960s – Space Age
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;"THINK DIFFERENT"&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Atomic clock
&lt;/li&gt;
&lt;li&gt;Electric typewriter
&lt;/li&gt;
&lt;li&gt;Touch-tone phone
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🌼 1970s – Groovy Office
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;"POWER COMES FROM WITHIN"&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Harvest gold clock
&lt;/li&gt;
&lt;li&gt;Computer terminal
&lt;/li&gt;
&lt;li&gt;Earth tones
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📈 1980s – Power Decade
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;"SUCCESS NEVER SLEEPS"&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Digital LED clock
&lt;/li&gt;
&lt;li&gt;IBM PC
&lt;/li&gt;
&lt;li&gt;The rise of personal computing
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🌐 1990s – Dot-Com Boom
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;"THINK GLOBAL. WORK LOCAL."&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows interface
&lt;/li&gt;
&lt;li&gt;Email
&lt;/li&gt;
&lt;li&gt;The internet arrives
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📱 2000s – Millennium Office
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;"KEEP CALM AND LOG ON"&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LCD monitors
&lt;/li&gt;
&lt;li&gt;BlackBerry
&lt;/li&gt;
&lt;li&gt;Wireless everything
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚧 2010s – Startup Era
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;"HUSTLE. ITERATE. REPEAT."&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MacBooks
&lt;/li&gt;
&lt;li&gt;Slack chats
&lt;/li&gt;
&lt;li&gt;Startup culture
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🏠 2020s – Hybrid Era
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;"WORK FROM ANYWHERE. SUCCEED EVERYWHERE."&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remote work
&lt;/li&gt;
&lt;li&gt;Zoom meetings
&lt;/li&gt;
&lt;li&gt;Smart devices
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🏆 What I'm Most Proud Of
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Historical Accuracy&lt;/strong&gt;: Every element is period-authentic, from color palettes to typography to technology progression.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pure CSS Complexity&lt;/strong&gt;: 8 decades × 6 zones × multiple elements = hundreds of carefully orchestrated transitions, all without JavaScript.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smooth Animations&lt;/strong&gt;: 3-5 second morphing transitions that feel cinematic, not jarring.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cultural Storytelling&lt;/strong&gt;: It's not just about technology—it's about how we've changed as humans in our relationship with work.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance&lt;/strong&gt;: Under 100KB total file size while delivering a premium, interactive experience.
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🧪 Technical Innovations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CSS-Only Timeline Navigation&lt;/strong&gt;: Used radio buttons with advanced selectors to create decade switching without JavaScript.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Morphing Elements&lt;/strong&gt;: Objects don't just fade in/out—they actually transform shape, color, and function using &lt;code&gt;clip-path&lt;/code&gt; and complex transitions.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Responsive Storytelling&lt;/strong&gt;: The layout adapts to mobile while maintaining the narrative flow.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Period-Accurate Details&lt;/strong&gt;: Custom fonts, authentic color schemes, and even era-appropriate motivational quotes.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔮 What's Next
&lt;/h2&gt;

&lt;p&gt;This project opened my eyes to CSS's storytelling potential. I'm planning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sound integration using Web Audio API
&lt;/li&gt;
&lt;li&gt;Extended timeline (1940s office culture? 2030s predictions?)
&lt;/li&gt;
&lt;li&gt;Character animations showing how people dressed and moved
&lt;/li&gt;
&lt;li&gt;International variations (Japanese vs. American office culture)
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📚 Lessons Learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CSS is incredibly powerful&lt;/strong&gt; when you think architecturally. This project taught me that with careful planning, CSS can create experiences that rival JavaScript-heavy applications.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Research makes art&lt;/strong&gt; – The weeks spent studying office history made each element authentic and meaningful.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Constraints breed creativity&lt;/strong&gt; – The "no JavaScript" rule forced innovative CSS solutions I never would have discovered otherwise.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;👉 Try the demo and let me know:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Which decade resonates most with your work experience? I'd love to hear about the office elements that brought back memories or made you think about how far we've come!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;View the complete source code on &lt;a href="https://github.com/prateekkalra/office-decades-css" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; – MIT Licensed&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;#frontendchallenge #css #webdev #office #animation #design&lt;/strong&gt;&lt;/p&gt;

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