<?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>Forem: Harshith Reddy</title>
    <description>The latest articles on Forem by Harshith Reddy (@harshith_reddy_73c61a3e0c).</description>
    <link>https://forem.com/harshith_reddy_73c61a3e0c</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%2F3789254%2Faae6f5d7-22d8-430f-82de-58afe7799a46.png</url>
      <title>Forem: Harshith Reddy</title>
      <link>https://forem.com/harshith_reddy_73c61a3e0c</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/harshith_reddy_73c61a3e0c"/>
    <language>en</language>
    <item>
      <title>KATHI CORP – A Simple Hackathon Tracker for Student Builders published</title>
      <dc:creator>Harshith Reddy</dc:creator>
      <pubDate>Sun, 01 Mar 2026 16:56:38 +0000</pubDate>
      <link>https://forem.com/harshith_reddy_73c61a3e0c/kathi-corp-a-simple-hackathon-tracker-for-student-builderspublished-9n9</link>
      <guid>https://forem.com/harshith_reddy_73c61a3e0c/kathi-corp-a-simple-hackathon-tracker-for-student-builderspublished-9n9</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/weekend-2026-02-28"&gt;DEV Weekend Challenge: Community&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Community
&lt;/h2&gt;

&lt;p&gt;I built this for student developers and beginner hackers in my local tech community.&lt;/p&gt;

&lt;p&gt;We participate in hackathons regularly — both online and offline — but we struggled with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keeping track of upcoming hackathons
&lt;/li&gt;
&lt;li&gt;Managing deadlines (registration, submission, demo day)
&lt;/li&gt;
&lt;li&gt;Tracking ideas across multiple events
&lt;/li&gt;
&lt;li&gt;Remembering which teammates joined which hackathon
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most of us used scattered tools like notes apps, Discord messages, or spreadsheets. There wasn’t a simple, focused tool built specifically for hackathon participants.&lt;/p&gt;

&lt;p&gt;As someone who actively participates in hackathons, I wanted to build something tailored to our workflow.&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;HackTrack&lt;/strong&gt;, a lightweight hackathon tracker designed specifically for student builders.&lt;/p&gt;

&lt;p&gt;It helps users:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🗓 Track upcoming hackathons
&lt;/li&gt;
&lt;li&gt;⏰ Monitor registration &amp;amp; submission deadlines
&lt;/li&gt;
&lt;li&gt;💡 Store project ideas for each event
&lt;/li&gt;
&lt;li&gt;👥 Keep track of teammates
&lt;/li&gt;
&lt;li&gt;✅ Mark hackathons as registered, submitted, or completed
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Help builders stay organized so they can focus on building instead of scrambling at the last minute.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;br&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Kathi Corp — Hackathon Tracker&lt;br&gt;



  :root {
    --gold: #c9a84c;
    --gold-light: #e8c97a;
    --gold-dim: rgba(201,168,76,0.18);
    --gold-glow: rgba(201,168,76,0.35);
    --crimson: #8b0000;
    --crimson-light: #c0000a;
    --bg: #07090f;
    --surface: rgba(255,255,255,0.035);
    --surface-hover: rgba(255,255,255,0.065);
    --border: rgba(201,168,76,0.18);
    --border-strong: rgba(201,168,76,0.45);
    --text: #ede8df;
    --muted: #7a7160;
    --muted2: #a89e88;
    --danger: #c0392b;
  }
  * { margin:0; padding:0; box-sizing:border-box; }
  body { background:var(--bg); color:var(--text); font-family:'Inter',sans-serif; min-height:100vh; overflow-x:hidden; }
  body::before {
    content:''; position:fixed; inset:0;
    background: radial-gradient(ellipse 70% 50% at 15% 10%, rgba(139,0,0,0.12) 0%, transparent 60%),
                radial-gradient(ellipse 60% 40% at 85% 90%, rgba(201,168,76,0.08) 0%, transparent 55%);
    pointer-events:none; z-index:0;
  }
  .swords-bg {
    position:fixed; inset:0; display:flex; align-items:center; justify-content:center;
    pointer-events:none; z-index:0; opacity:0.35;
    filter: drop-shadow(0 0 18px rgba(139,0,0,0.8));
  }
  body::after {
    content:''; position:fixed; inset:0;
    background-image:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,0,0,0.03) 2px,rgba(0,0,0,0.03) 4px);
    pointer-events:none; z-index:0;
  }
  *{ position:relative; z-index:1; }

  /* HEADER */
  header {
    border-bottom:1px solid var(--border);
    padding:2rem 3rem;
    display:flex; align-items:center; justify-content:center; gap:1.5rem;
    background:rgba(7,9,15,0.85); backdrop-filter:blur(32px);
    position:sticky; top:0; z-index:100;
  }
  header::after {
    content:''; position:absolute; bottom:0; left:0; right:0; height:1px;
    background:linear-gradient(90deg,transparent,var(--gold),transparent); opacity:0.5;
  }
  .crest {
    width:48px; height:48px; border:1.5px solid #8b0000; border-radius:50%;
    display:flex; align-items:center; justify-content:center; font-size:1.4rem;
    box-shadow:0 0 20px rgba(139,0,0,0.5),inset 0 0 12px rgba(139,0,0,0.15);
    flex-shrink:0; background:rgba(139,0,0,0.08); filter:drop-shadow(0 0 6px rgba(139,0,0,0.7));
  }
  .brand { display:flex; flex-direction:column; gap:0.1rem; }
  .brand-name {
    font-family:'Cormorant Garamond',serif; font-size:1.65rem; font-weight:600;
    color:#ede8df; letter-spacing:0.12em; text-transform:uppercase; line-height:1;
    text-shadow: none;
  }
  .brand-sub { font-size:0.6rem; letter-spacing:0.25em; text-transform:uppercase; color:var(--muted); }
  .divider-v { width:1px; height:36px; background:linear-gradient(to bottom,transparent,var(--border-strong),transparent); margin:0 0.5rem; }
  .total-pill {
    font-family:'Cormorant Garamond',serif; font-size:1.1rem; color:#ede8df;
    letter-spacing:0.06em; border:1px solid var(--border); padding:0.4rem 1.1rem;
    border-radius:40px; background:var(--gold-dim); box-shadow:0 0 12px var(--gold-glow);
  }

  /* MAIN */
  main { max-width:1000px; margin:0 auto; padding:3rem 2.5rem; }

  /* STATS */
  .stats {
    display:grid; grid-template-columns:repeat(3,1fr); gap:1px;
    margin-bottom:2.5rem; border:1px solid var(--border); border-radius:16px;
    overflow:hidden; background:var(--border); box-shadow:0 8px 48px rgba(0,0,0,0.5);
  }
  .stat { background:rgba(7,9,15,0.96); padding:2rem 2rem 1.75rem; display:flex; flex-direction:column; gap:0.5rem; transition:background 0.3s; }
  .stat:hover { background:rgba(201,168,76,0.04); }
  .stat-num { font-family:'Cormorant Garamond',serif; font-size:3.5rem; font-weight:700; line-height:1; letter-spacing:-0.02em; }
  .form-title { font-family:'Cormorant Garamond',serif; font-size:1.2rem; letter-spacing:0.18em; text-transform:uppercase; color:#ede8df; margin-bottom:1.75rem; display:flex; align-items:center; gap:1rem; }
  .stat:nth-child(1) .stat-num { color:#ede8df; text-shadow:none; }
  .filter-btn.active { color:#ede8df; background:rgba(201,168,76,0.08); text-shadow:none; }
  .card-date-row.event-date { color:#ede8df; opacity:0.85; }
  .modal-title { font-family:'Cormorant Garamond',serif; font-size:1.3rem; letter-spacing:0.18em; text-transform:uppercase; color:#ede8df; margin-bottom:1.75rem; display:flex; align-items:center; gap:1rem; }
  .card-name { font-family:'Cormorant Garamond',serif; font-size:1.2rem; font-weight:600; color:#ede8df; letter-spacing:0.01em; line-height:1.3; }
  .btn-primary { background:linear-gradient(135deg,rgba(201,168,76,0.15),rgba(201,168,76,0.08)); border-color:var(--gold); color:#ede8df; box-shadow:0 0 20px rgba(201,168,76,0.15); }
  .btn-primary:hover { background:linear-gradient(135deg,rgba(201,168,76,0.25),rgba(201,168,76,0.12)); box-shadow:0 0 30px rgba(201,168,76,0.3); color:#fff; }
  .edit-btn { color:#ede8df; }
  .edit-btn:hover { color:#fff; background:rgba(201,168,76,0.12); border-color:rgba(201,168,76,0.35); }
  .stat:nth-child(2) .stat-num { color:#e8b84b; text-shadow:0 0 40px rgba(232,184,75,0.4); }
  .stat:nth-child(3) .stat-num { color:var(--muted2); }
  .stat-label { font-size:0.62rem; letter-spacing:0.2em; text-transform:uppercase; color:var(--muted); font-weight:500; }
  .stat-line { width:32px; height:1.5px; border-radius:1px; margin-bottom:0.25rem; }
  .stat:nth-child(1) .stat-line { background:var(--gold); box-shadow:0 0 8px var(--gold-glow); }
  .stat:nth-child(2) .stat-line { background:#e8b84b; }
  .stat:nth-child(3) .stat-line { background:var(--muted); }

  /* ADD BUTTON */
  .add-btn {
    width:100%; margin-bottom:1.5rem; padding:1rem 2rem;
    background:transparent; border:1px solid var(--border-strong); border-radius:12px;
    color:#ede8df; font-family:'Cormorant Garamond',serif; font-size:1.1rem;
    letter-spacing:0.2em; text-transform:uppercase; cursor:pointer;
    display:flex; align-items:center; justify-content:center; gap:1rem;
    transition:all 0.35s; position:relative; overflow:hidden;
  }
  .add-btn::before { content:''; position:absolute; inset:0; background:linear-gradient(135deg,transparent 40%,rgba(201,168,76,0.06) 100%); opacity:0; transition:opacity 0.35s; }
  .add-btn:hover { border-color:var(--gold); box-shadow:0 0 30px var(--gold-glow),inset 0 0 20px rgba(201,168,76,0.05); color:#fff; text-shadow:none; }
  .add-btn:hover::before { opacity:1; }
  .add-btn .ornament { font-size:1rem; letter-spacing:0; color:#8b0000; text-shadow:0 0 10px rgba(139,0,0,0.6); }

  /* FORM */
  .add-section {
    background:rgba(201,168,76,0.03); border:1px solid var(--border-strong);
    border-radius:16px; padding:2.25rem; margin-bottom:1.75rem;
    animation:reveal 0.4s cubic-bezier(0.16,1,0.3,1);
    box-shadow:0 20px 60px rgba(0,0,0,0.6),0 0 60px rgba(201,168,76,0.04);
    backdrop-filter:blur(12px);
  }
  @keyframes reveal { from{opacity:0;transform:translateY(-20px) scale(0.98)} to{opacity:1;transform:translateY(0) scale(1)} }
  .form-title {
    font-family:'Cormorant Garamond',serif; font-size:1.2rem; letter-spacing:0.18em;
    text-transform:uppercase; color:var(--gold); margin-bottom:1.75rem;
    display:flex; align-items:center; gap:1rem;
  }
  .form-title::before,.form-title::after { content:''; flex:1; height:1px; background:linear-gradient(to right,transparent,var(--border-strong)); }
  .form-title::after { background:linear-gradient(to left,transparent,var(--border-strong)); }
  .form-grid { display:grid; grid-template-columns:1fr 1fr; gap:1.25rem; }
  .form-group { display:flex; flex-direction:column; gap:0.55rem; }
  .form-group.full { grid-column:1/-1; }
  label { font-size:0.6rem; font-weight:600; letter-spacing:0.2em; text-transform:uppercase; color:var(--muted); }
  input,select,textarea {
    background:rgba(255,255,255,0.03); border:1px solid var(--border);
    border-radius:8px; color:var(--text); font-family:'Inter',sans-serif;
    font-size:0.85rem; padding:0.8rem 1rem; outline:none;
    transition:border-color 0.25s,box-shadow 0.25s;
  }
  input:focus,select:focus,textarea:focus { border-color:var(--gold); box-shadow:0 0 0 3px rgba(201,168,76,0.12),0 0 20px rgba(201,168,76,0.08); }
  input::placeholder,textarea::placeholder { color:var(--muted); font-size:0.8rem; }
  select option { background:#0f1117; color:var(--text); }
  textarea { resize:vertical; min-height:72px; }
  .btn-row { display:flex; gap:0.75rem; justify-content:flex-end; margin-top:1.5rem; }
  .btn { font-family:'Cormorant Garamond',serif; font-size:0.95rem; letter-spacing:0.15em; text-transform:uppercase; padding:0.7rem 1.75rem; border-radius:8px; cursor:pointer; border:1px solid; transition:all 0.25s; }
  .btn-primary { background:linear-gradient(135deg,rgba(201,168,76,0.15),rgba(201,168,76,0.08)); border-color:var(--gold); color:var(--gold-light); box-shadow:0 0 20px rgba(201,168,76,0.15); }
  .btn-primary:hover { background:linear-gradient(135deg,rgba(201,168,76,0.25),rgba(201,168,76,0.12)); box-shadow:0 0 30px rgba(201,168,76,0.3); color:#fff; }
  .btn-ghost { background:transparent; border-color:var(--border); color:var(--muted2); }
  .btn-ghost:hover { border-color:var(--muted2); color:var(--text); }

  /* FILTERS */
  .filters { display:flex; gap:0; margin-bottom:1.5rem; border:1px solid var(--border); border-radius:12px; overflow:hidden; background:rgba(255,255,255,0.02); backdrop-filter:blur(8px); }
  .filter-btn { flex:1; background:transparent; border:none; color:var(--muted2); font-family:'Cormorant Garamond',serif; font-size:0.9rem; letter-spacing:0.12em; text-transform:uppercase; padding:0.75rem 1rem; cursor:pointer; transition:all 0.25s; border-right:1px solid var(--border); position:relative; }
  .filter-btn:last-child { border-right:none; }
  .filter-btn:hover { color:var(--gold); background:rgba(201,168,76,0.04); }
  .filter-btn.active { color:var(--gold-light); background:rgba(201,168,76,0.08); text-shadow:0 0 20px var(--gold-glow); }
  .filter-btn.active::after { content:''; position:absolute; bottom:0; left:0; right:0; height:1.5px; background:var(--gold); box-shadow:0 0 8px var(--gold-glow); }

  /* BLOCK GRID */
  #hackList { display:grid; grid-template-columns:repeat(2,1fr); gap:1.25rem; }

  /* CARDS */
  .card {
    display:flex; flex-direction:column;
    background:rgba(255,255,255,0.025); border:1px solid var(--border);
    border-radius:16px; animation:cardIn 0.4s ease; cursor:default;
    backdrop-filter:blur(4px); position:relative; overflow:hidden;
    transition:all 0.3s cubic-bezier(0.16,1,0.3,1);
  }
  .card::before { content:''; position:absolute; top:0; left:0; right:0; height:2px; background:linear-gradient(90deg,transparent,var(--gold),transparent); opacity:0; transition:opacity 0.3s; }
  .card:hover { background:rgba(201,168,76,0.04); border-color:rgba(201,168,76,0.35); transform:translateY(-4px); box-shadow:0 12px 48px rgba(0,0,0,0.5),0 0 30px rgba(201,168,76,0.06); }
  .card:hover::before { opacity:1; }
  @keyframes cardIn { from{opacity:0;transform:translateY(14px) scale(0.97)} to{opacity:1;transform:translateY(0) scale(1)} }

  .card-header { padding:1.4rem 1.4rem 1rem; display:flex; flex-direction:column; gap:0.5rem; flex:1; }
  .card-footer { padding:0.9rem 1.4rem; border-top:1px solid var(--border); display:flex; align-items:center; justify-content:space-between; background:rgba(0,0,0,0.15); }

  .card-name { font-family:'Cormorant Garamond',serif; font-size:1.2rem; font-weight:600; color:var(--text); letter-spacing:0.01em; line-height:1.3; }
  .card-platform { font-size:0.7rem; color:var(--muted); letter-spacing:0.1em; text-transform:uppercase; }
  .card-dates { display:flex; flex-direction:column; gap:0.25rem; margin-top:0.5rem; }
  .card-date-row { display:flex; align-items:center; gap:0.5rem; font-size:0.72rem; color:var(--muted2); }
  .card-date-row .dot { width:4px; height:4px; border-radius:50%; background:var(--muted); flex-shrink:0; }
  .card-date-row.event-date { color:var(--gold); opacity:0.85; }
  .card-date-row.event-date .dot { background:var(--gold); box-shadow:0 0 6px var(--gold); }

  .card-notes { font-size:0.73rem; color:var(--muted2); font-style:italic; line-height:1.6; padding:0.75rem 1.4rem; border-top:1px dashed rgba(201,168,76,0.12); display:none; }
  .card:hover .card-notes { display:block; }

  .card-actions { display:flex; align-items:center; gap:0.4rem; }

  .status-badge { display:inline-flex; align-items:center; gap:0.4rem; font-size:0.6rem; font-weight:600; letter-spacing:0.15em; text-transform:uppercase; padding:0.3rem 0.75rem; border-radius:20px; border:1px solid; }
  .status-badge::before { content:''; width:5px; height:5px; border-radius:50%; background:currentColor; box-shadow:0 0 6px currentColor; }
  .status-waitlisted { background:rgba(201,168,76,0.08); color:#d4aa50; border-color:rgba(201,168,76,0.3); }
  .status-withdrawn { background:rgba(120,113,108,0.1); color:#92877c; border-color:rgba(120,113,108,0.25); }
  .status-applied { background:rgba(59,130,246,0.08); color:#6baed6; border-color:rgba(59,130,246,0.25); }
  .status-accepted { background:rgba(34,197,94,0.08); color:#6fcf97; border-color:rgba(34,197,94,0.25); }
  .status-rejected { background:rgba(239,68,68,0.08); color:#f87171; border-color:rgba(239,68,68,0.25); }

  .icon-btn {
    background:transparent; border:1px solid transparent; border-radius:8px;
    cursor:pointer; font-size:0.75rem; padding:0.35rem 0.5rem;
    display:flex; align-items:center; justify-content:center;
    opacity:0; transition:all 0.2s;
  }
  .card:hover .icon-btn { opacity:1; }

  .edit-btn { color:var(--gold); }
  .edit-btn:hover { color:var(--gold-light); background:rgba(201,168,76,0.12); border-color:rgba(201,168,76,0.35); }

  .delete-btn { color:#8b0000; text-shadow:0 0 8px rgba(139,0,0,0.5); }
  .delete-btn:hover { color:#ff1a1a; background:rgba(139,0,0,0.15); border-color:rgba(139,0,0,0.4); text-shadow:0 0 12px rgba(139,0,0,0.8); }

  /* EDIT MODAL */
  .modal-overlay {
    position:fixed; inset:0; background:rgba(0,0,0,0.75); backdrop-filter:blur(8px);
    z-index:500; display:flex; align-items:center; justify-content:center;
    animation:fadeOverlay 0.25s ease;
  }
  @keyframes fadeOverlay { from{opacity:0} to{opacity:1} }
  .modal {
    background:#0e1219; border:1px solid var(--border-strong); border-radius:20px;
    padding:2.5rem; width:min(580px,92vw); box-shadow:0 40px 100px rgba(0,0,0,0.8),0 0 60px rgba(201,168,76,0.06);
    animation:modalIn 0.35s cubic-bezier(0.16,1,0.3,1);
    position:relative; overflow:hidden;
  }
  .modal::before { content:''; position:absolute; top:0; left:0; right:0; height:2px; background:linear-gradient(90deg,transparent,var(--gold),transparent); }
  @keyframes modalIn { from{opacity:0;transform:translateY(-24px) scale(0.96)} to{opacity:1;transform:translateY(0) scale(1)} }
  .modal-title { font-family:'Cormorant Garamond',serif; font-size:1.3rem; letter-spacing:0.18em; text-transform:uppercase; color:var(--gold); margin-bottom:1.75rem; display:flex; align-items:center; gap:1rem; }
  .modal-title::before,.modal-title::after { content:''; flex:1; height:1px; background:linear-gradient(to right,transparent,var(--border-strong)); }
  .modal-title::after { background:linear-gradient(to left,transparent,var(--border-strong)); }
  .modal-close { position:absolute; top:1rem; right:1rem; background:transparent; border:none; color:var(--muted); font-size:1rem; cursor:pointer; padding:0.4rem 0.6rem; border-radius:6px; transition:all 0.2s; }
  .modal-close:hover { color:#ff1a1a; background:rgba(139,0,0,0.12); }

  /* EMPTY */
  .empty { text-align:center; padding:6rem 2rem; }
  .empty-seal { font-family:'Cormorant Garamond',serif; font-size:5rem; font-weight:700; color:var(--gold); opacity:0.06; letter-spacing:0.1em; line-height:1; text-transform:uppercase; margin-bottom:1.5rem; }
  .empty p { font-size:0.78rem; letter-spacing:0.15em; text-transform:uppercase; color:var(--muted); }
  .empty .ornament { font-size:1.5rem; color:#8b0000; opacity:0.6; display:block; margin:1rem 0; letter-spacing:0.3em; text-shadow:0 0 12px rgba(139,0,0,0.6); }

  ::-webkit-scrollbar { width:4px; }
  ::-webkit-scrollbar-track { background:transparent; }
  ::-webkit-scrollbar-thumb { background:var(--border-strong); border-radius:2px; }

  @media(max-width:640px){
    header{padding:1.25rem 1.5rem;}
    main{padding:1.5rem 1rem;}
    #hackList{grid-template-columns:1fr;}
    .form-grid{grid-template-columns:1fr;}
    .stats{grid-template-columns:repeat(3,1fr);}
  }




&lt;p&gt;⚔️&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Kathi Corp
Hackathon Intelligence
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;&lt;span&gt;Private Registry&lt;/span&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;span id="totalCount"&amp;gt;0&amp;lt;/span&amp;gt; Entries
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;&lt;br&gt;
  &lt;br&gt;
    0Total Logged&lt;br&gt;
    0Waitlisted&lt;br&gt;
    0Withdrawn&lt;br&gt;
  &lt;/p&gt;

&lt;p&gt;&lt;br&gt;
    &lt;span&gt;✦&lt;/span&gt; Log New Hackathon &lt;span&gt;✦&lt;/span&gt;&lt;br&gt;
  &lt;/p&gt;


&lt;br&gt;
    New Entry&lt;br&gt;
    &lt;br&gt;
      Hackathon Name *&lt;br&gt;
      Platform / Organizer&lt;br&gt;
      Application Date&lt;br&gt;
      Event Date&lt;br&gt;
      Status&lt;br&gt;
        &lt;br&gt;
          Waitlisted&lt;br&gt;
          Withdrawn&lt;br&gt;
          Applied&lt;br&gt;
          Accepted&lt;br&gt;
          Rejected&lt;br&gt;
        &lt;br&gt;
      &lt;br&gt;
      Notes&lt;br&gt;
    &lt;br&gt;
    &lt;br&gt;
      Dismiss&lt;br&gt;
      Record Entry →&lt;br&gt;
    &lt;br&gt;
  


&lt;br&gt;
    All&lt;br&gt;
    Waitlisted&lt;br&gt;
    Withdrawn&lt;br&gt;
    Applied&lt;br&gt;
    Accepted&lt;br&gt;
    Rejected&lt;br&gt;
  


&lt;br&gt;





  
    ✕
    Edit Entry
    
      Hackathon Name *
      Platform / Organizer
      Application Date
      Event Date
      Status
        
          Waitlisted
          Withdrawn
          Applied
          Accepted
          Rejected
        
      
      Notes
    
    
      Cancel
      Save Changes →
    
  



  let data = JSON.parse(localStorage.getItem('kc-hacks') || '[]');
  let filter = 'all';
  let editId = null;

  const save = () =&amp;gt; localStorage.setItem('kc-hacks', JSON.stringify(data));

  function toggleForm() {
    const f = document.getElementById('addForm');
    f.style.display = f.style.display === 'none' ? 'block' : 'none';
    if (f.style.display === 'block') document.getElementById('f-name').focus();
  }

  function setFilter(f, btn) {
    filter = f;
    document.querySelectorAll('.filter-btn').forEach(b =&amp;gt; b.classList.remove('active'));
    btn.classList.add('active');
    render();
  }

  function addEntry() {
    const name = document.getElementById('f-name').value.trim();
    if (!name) { flash('f-name'); return; }
    data.unshift({
      id: Date.now(), name,
      platform: document.getElementById('f-platform').value.trim(),
      date: document.getElementById('f-date').value,
      event: document.getElementById('f-event').value,
      status: document.getElementById('f-status').value,
      notes: document.getElementById('f-notes').value.trim()
    });
    save();
    ['f-name','f-platform','f-notes'].forEach(id =&amp;gt; document.getElementById(id).value = '');
    ['f-date','f-event'].forEach(id =&amp;gt; document.getElementById(id).value = '');
    document.getElementById('f-status').value = 'waitlisted';
    toggleForm();
    render();
  }

  function openEditModal(id) {
    const h = data.find(x =&amp;gt; x.id === id);
    if (!h) return;
    editId = id;
    document.getElementById('e-name').value = h.name;
    document.getElementById('e-platform').value = h.platform || '';
    document.getElementById('e-date').value = h.date || '';
    document.getElementById('e-event').value = h.event || '';
    document.getElementById('e-status').value = h.status;
    document.getElementById('e-notes').value = h.notes || '';
    document.getElementById('editModal').style.display = 'flex';
    setTimeout(() =&amp;gt; document.getElementById('e-name').focus(), 50);
  }

  function closeEditModal() {
    document.getElementById('editModal').style.display = 'none';
    editId = null;
  }

  function closeModal(e) {
    if (e.target === document.getElementById('editModal')) closeEditModal();
  }

  function saveEdit() {
    const name = document.getElementById('e-name').value.trim();
    if (!name) { flash('e-name'); return; }
    const idx = data.findIndex(x =&amp;gt; x.id === editId);
    if (idx === -1) return;
    data[idx] = {
      ...data[idx], name,
      platform: document.getElementById('e-platform').value.trim(),
      date: document.getElementById('e-date').value,
      event: document.getElementById('e-event').value,
      status: document.getElementById('e-status').value,
      notes: document.getElementById('e-notes').value.trim()
    };
    save();
    closeEditModal();
    render();
  }

  function del(id) {
    data = data.filter(h =&amp;gt; h.id !== id);
    save();
    render();
  }

  function flash(id) {
    const el = document.getElementById(id);
    el.style.borderColor = 'var(--danger)';
    el.style.boxShadow = '0 0 0 3px rgba(192,0,10,0.15)';
    setTimeout(() =&amp;gt; { el.style.borderColor = ''; el.style.boxShadow = ''; }, 1600);
  }

  function fmt(d) {
    if (!d) return null;
    const [y,m,day] = d.split('-');
    return `${['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'][+m-1]} ${+day}, ${y}`;
  }

  function esc(s) {
    return String(s).replace(/&amp;amp;/g,'&amp;amp;amp;').replace(/&amp;lt;/g,'&amp;amp;lt;').replace(/&amp;gt;/g,'&amp;amp;gt;').replace(/"/g,'&amp;amp;quot;');
  }

  function render() {
    const counts = {};
    data.forEach(h =&amp;gt; counts[h.status] = (counts[h.status]||0)+1);
    document.getElementById('s-total').textContent = data.length;
    document.getElementById('s-waitlisted').textContent = counts.waitlisted || 0;
    document.getElementById('s-withdrawn').textContent = counts.withdrawn || 0;
    document.getElementById('totalCount').textContent = data.length;

    const list = document.getElementById('hackList');
    const filtered = filter === 'all' ? data : data.filter(h =&amp;gt; h.status === filter);

    if (data.length === 0) {
      list.innerHTML = `&amp;lt;div class="empty" style="grid-column:1/-1"&amp;gt;
        &amp;lt;div class="empty-seal"&amp;gt;No Records&amp;lt;/div&amp;gt;
        &amp;lt;span class="ornament"&amp;gt;— ✦ —&amp;lt;/span&amp;gt;
        &amp;lt;p&amp;gt;Your registry awaits its first entry&amp;lt;/p&amp;gt;
      &amp;lt;/div&amp;gt;`; return;
    }
    if (!filtered.length) {
      list.innerHTML = `&amp;lt;div class="empty" style="grid-column:1/-1"&amp;gt;&amp;lt;p style="padding:3rem 0"&amp;gt;No entries match this filter&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;`; return;
    }

    list.innerHTML = filtered.map(h =&amp;gt; `
      &amp;lt;div class="card"&amp;gt;
        &amp;lt;div class="card-header"&amp;gt;
          &amp;lt;div class="card-name"&amp;gt;${esc(h.name)}&amp;lt;/div&amp;gt;
          ${h.platform ? `&amp;lt;div class="card-platform"&amp;gt;${esc(h.platform)}&amp;lt;/div&amp;gt;` : ''}
          &amp;lt;div class="card-dates"&amp;gt;
            ${h.date ? `&amp;lt;div class="card-date-row"&amp;gt;&amp;lt;span class="dot"&amp;gt;&amp;lt;/span&amp;gt;Applied: ${fmt(h.date)}&amp;lt;/div&amp;gt;` : ''}
            &amp;lt;div class="card-date-row event-date"&amp;gt;
              &amp;lt;span class="dot"&amp;gt;&amp;lt;/span&amp;gt;Event: ${h.event ? fmt(h.event) : '&amp;lt;span style="color:var(--muted);font-style:italic"&amp;gt;TBA&amp;lt;/span&amp;gt;'}
            &amp;lt;/div&amp;gt;
          &amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
        ${h.notes ? `&amp;lt;div class="card-notes"&amp;gt;${esc(h.notes)}&amp;lt;/div&amp;gt;` : ''}
        &amp;lt;div class="card-footer"&amp;gt;
          &amp;lt;span class="status-badge status-${h.status}"&amp;gt;${h.status}&amp;lt;/span&amp;gt;
          &amp;lt;div class="card-actions"&amp;gt;
            &amp;lt;button class="icon-btn edit-btn" onclick="openEditModal(${h.id})" title="Edit"&amp;gt;✎&amp;lt;/button&amp;gt;
            &amp;lt;button class="icon-btn delete-btn" onclick="del(${h.id})" title="Remove"&amp;gt;✕&amp;lt;/button&amp;gt;
          &amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
      &amp;lt;/div&amp;gt;
    `).join('');
  }

  document.addEventListener('keydown', e =&amp;gt; {
    if (e.key === 'Escape') closeEditModal();
    if (e.key === 'Enter') {
      if (document.getElementById('addForm').style.display !== 'none' &amp;amp;&amp;amp; document.activeElement.id === 'f-name') addEntry();
      if (document.getElementById('editModal').style.display !== 'none' &amp;amp;&amp;amp; document.activeElement.id === 'e-name') saveEdit();
    }
  });

  render();




&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;index.html&lt;/code&gt; – App structure
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;style.css&lt;/code&gt; – UI styling
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;script.js&lt;/code&gt; – Application logic &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;--Architecture:-&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hackathons are stored as JavaScript objects.&lt;/li&gt;
&lt;li&gt;Data is saved to localStorage as JSON.&lt;/li&gt;
&lt;li&gt;The UI dynamically renders using DOM manipulation.&lt;/li&gt;
&lt;li&gt;Countdown logic recalculates time remaining on page load.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&amp;lt;!-- Team Submissions: Please pick one member to publish the submission and credit teammates by listing their DEV usernames directly in the body of the post. --&amp;gt;This was a solo project built entirely by me during the weekend challenge.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
