<?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: Ami Quejado</title>
    <description>The latest articles on DEV Community by Ami Quejado (@aqaq).</description>
    <link>https://dev.to/aqaq</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%2F1726730%2Fcdd8a297-763e-4fe1-82aa-6bd20e7d7044.jpg</url>
      <title>DEV Community: Ami Quejado</title>
      <link>https://dev.to/aqaq</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aqaq"/>
    <language>en</language>
    <item>
      <title>💍 I Couldn't Find My Dream Wedding Planner—So I Built One</title>
      <dc:creator>Ami Quejado</dc:creator>
      <pubDate>Sat, 11 Jul 2026 15:40:30 +0000</pubDate>
      <link>https://dev.to/aqaq/i-couldnt-find-my-dream-wedding-planner-so-i-built-one-2k90</link>
      <guid>https://dev.to/aqaq/i-couldnt-find-my-dream-wedding-planner-so-i-built-one-2k90</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-07-09"&gt;Weekend Challenge: Passion Edition&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I'm getting married later this year, and planning the wedding has made me realize something: I still haven't found a wedding planner app that fits how I actually plan.&lt;/p&gt;

&lt;p&gt;I've tried several apps, downloaded templates, and spent hours comparing different Google Sheets and Excel planners shared by other brides. Every one of them had something I liked, but &lt;em&gt;none had everything I needed&lt;/em&gt;. I found myself jumping between spreadsheets for budgets, notes, guest lists, supplier contacts, and checklists—and it quickly became overwhelming.&lt;/p&gt;

&lt;p&gt;As a software developer, I eventually thought, &lt;em&gt;why not build the planner I've been looking for?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That's how &lt;strong&gt;Passion Planner&lt;/strong&gt; started.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Passion Planner&lt;/strong&gt; is a full-featured wedding planning dashboard that brings every part of wedding planning into one place. Instead of juggling multiple spreadsheets, apps, and group chats, couples can manage everything from a single dashboard that's personalized to their wedding style.&lt;/p&gt;

&lt;p&gt;I also wanted it to feel personal. Weddings aren't just projects—they're milestones. That's why the app lets couples customize colors to match their motif, switch themes, and even use AI to make planning easier—from estimating a realistic budget to brainstorming wedding hashtags and generating a reception program flow.&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%2Fdn12d4db43ixq5r4z14x.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdn12d4db43ixq5r4z14x.png" alt="Passion Planner dashboard" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Core Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;💒 &lt;strong&gt;Wedding Details&lt;/strong&gt; — store your date, venue, ceremony time, motif colors, and theme&lt;/li&gt;
&lt;/ul&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%2Fgrwijc05k6uuf4a4g09u.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgrwijc05k6uuf4a4g09u.png" alt="Wedding Details page" width="799" height="633"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;💰 &lt;strong&gt;Budget Tracker&lt;/strong&gt; — categorize expenses, compare estimated vs. actual costs, and visualize spending with a pie chart&lt;/li&gt;
&lt;/ul&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%2F2nglf40kz9lj3fntello.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2nglf40kz9lj3fntello.png" alt="Budget Tracker page" width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🤖 &lt;strong&gt;AI Budget Estimator&lt;/strong&gt; — enter your wedding details, guest count, and preferences to receive an AI-generated budget breakdown that helps couples start planning with realistic estimates.&lt;/li&gt;
&lt;/ul&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%2Fopj1megya4qajrfgbzct.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fopj1megya4qajrfgbzct.png" alt="AI Budget Estimator" width="800" height="803"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;💳 &lt;strong&gt;Payments Tracker&lt;/strong&gt; — record down payments, succeeding payments, and final balances for each supplier&lt;/li&gt;
&lt;/ul&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%2Fav7vamlo3fhtfgmlmmhe.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fav7vamlo3fhtfgmlmmhe.png" alt="Payments Tracker page" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🏪 &lt;strong&gt;Suppliers&lt;/strong&gt; — manage vendors, contact information, booking status, and notes&lt;/li&gt;
&lt;/ul&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%2F7tav8wkytzetfbweghk0.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7tav8wkytzetfbweghk0.png" alt="Suppliers page" width="800" height="225"&gt;&lt;/a&gt;&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%2Fnp7dos7q0r3vor6j5ror.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnp7dos7q0r3vor6j5ror.png" alt="Edit supplier" width="800" height="1184"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;👥 &lt;strong&gt;Guest List &amp;amp; RSVP&lt;/strong&gt; — add guests, assign invitation slots, send personalized RSVP emails through EmailJS, and track responses&lt;/li&gt;
&lt;/ul&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%2F2x223g81u31h8gor9op4.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2x223g81u31h8gor9op4.png" alt="Guest List page" width="799" height="235"&gt;&lt;/a&gt;&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%2Fg12x7a8b168umio4sm6f.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg12x7a8b168umio4sm6f.png" alt="Sample RSVP" width="800" height="953"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎟️ &lt;strong&gt;QR Code RSVP&lt;/strong&gt; — generate and download unique QR codes for every guest that link directly to their RSVP page&lt;/li&gt;
&lt;/ul&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%2Fb2km8cizaj61dfr4bt2b.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb2km8cizaj61dfr4bt2b.png" alt="QR Code RSVP" width="800" height="859"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🪑 &lt;strong&gt;Seating Arrangement&lt;/strong&gt; — organize guests into tables and manage seating layouts&lt;/li&gt;
&lt;/ul&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%2Ftp0e4deyvc4gu14s0km3.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftp0e4deyvc4gu14s0km3.png" alt="Seating Arrangement page" width="800" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎵 &lt;strong&gt;Processional Order&lt;/strong&gt; — drag-and-drop processional lineup with a printable view&lt;/li&gt;
&lt;/ul&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%2F3kw1dyq3mn24p6ubrvos.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3kw1dyq3mn24p6ubrvos.png" alt="Processional Order page" width="799" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎤 &lt;strong&gt;AI Program Flow Generator&lt;/strong&gt; — instantly generate a customizable wedding reception timeline and program flow that can be edited to fit your celebration.&lt;/li&gt;
&lt;/ul&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%2Fjlx75yudili5g1qynffq.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjlx75yudili5g1qynffq.png" alt="AI Program Flow Generator" width="800" height="767"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🏷️ &lt;strong&gt;AI Wedding Hashtag Generator&lt;/strong&gt; — generate creative and personalized hashtag ideas based on the couple's names.&lt;/li&gt;
&lt;/ul&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%2Fsit95omvfdecwruz7vhm.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsit95omvfdecwruz7vhm.png" alt="AI Wedding Hashtag Generator" width="800" height="121"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Checklist&lt;/strong&gt; — categorized tasks with due dates, overdue reminders, and progress tracking&lt;/li&gt;
&lt;/ul&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%2Favpj2ogjws9xmgecjfro.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Favpj2ogjws9xmgecjfro.png" alt="Checklist page" width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎨 &lt;strong&gt;Themes &amp;amp; Dark Mode&lt;/strong&gt; — choose from seven preset themes or automatically use your wedding motif colors throughout the app&lt;/li&gt;
&lt;/ul&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%2Fwfh2obq2mnb5xezx4hm2.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwfh2obq2mnb5xezx4hm2.png" alt="Themes &amp;amp; Dark Mode" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌍 &lt;strong&gt;Currency &amp;amp; Location Settings&lt;/strong&gt; — budgets and payments automatically adapt to your selected currency (16 supported)&lt;/li&gt;
&lt;/ul&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%2Fn020fgd9u9u2yw5wjqbq.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn020fgd9u9u2yw5wjqbq.png" alt="Currency &amp;amp; Location Settings page" width="799" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📸 &lt;strong&gt;Media &amp;amp; Branding&lt;/strong&gt; &lt;em&gt;(coming soon)&lt;/em&gt; — wedding logo, gallery, digital invitations, QR menus, and gift registry&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This started as a personal solution for my own wedding, but as I kept adding features I realized it could help other couples too. My goal is to replace the collection of spreadsheets, templates, and planning apps with one beautiful, practical dashboard that makes wedding planning a little less stressful.&lt;/p&gt;




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

&lt;p&gt;🔗 &lt;strong&gt;Live App:&lt;/strong&gt; &lt;a href="https://passion-planner-fawn.vercel.app/" rel="noopener noreferrer"&gt;https://passion-planner-fawn.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Register a free account to explore all features. No credit card required.&lt;/p&gt;
&lt;/blockquote&gt;




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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/amaimasque" rel="noopener noreferrer"&gt;
        amaimasque
      &lt;/a&gt; / &lt;a href="https://github.com/amaimasque/passion-planner" rel="noopener noreferrer"&gt;
        passion-planner
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Getting Started with Create React App&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;This project was bootstrapped with &lt;a href="https://github.com/facebook/create-react-app" rel="noopener noreferrer"&gt;Create React App&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Available Scripts&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;In the project directory, you can run:&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;&lt;code&gt;npm start&lt;/code&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Runs the app in the development mode.&lt;br&gt;
Open &lt;a href="http://localhost:3000" rel="nofollow noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt; to view it in your browser.&lt;/p&gt;
&lt;p&gt;The page will reload when you make changes.&lt;br&gt;
You may also see any lint errors in the console.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;&lt;code&gt;npm test&lt;/code&gt;&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;Launches the test runner in the interactive watch mode.&lt;br&gt;
See the section about &lt;a href="https://facebook.github.io/create-react-app/docs/running-tests" rel="nofollow noopener noreferrer"&gt;running tests&lt;/a&gt; for more information.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;&lt;code&gt;npm run build&lt;/code&gt;&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;Builds the app for production to the &lt;code&gt;build&lt;/code&gt; folder.&lt;br&gt;
It correctly bundles React in production mode and optimizes the build for the best performance.&lt;/p&gt;
&lt;p&gt;The build is minified and the filenames include the hashes.&lt;br&gt;
Your app is ready to be deployed!&lt;/p&gt;
&lt;p&gt;See the section about &lt;a href="https://facebook.github.io/create-react-app/docs/deployment" rel="nofollow noopener noreferrer"&gt;deployment&lt;/a&gt; for more information.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;&lt;code&gt;npm run eject&lt;/code&gt;&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Note: this is a one-way operation. Once you &lt;code&gt;eject&lt;/code&gt;, you can't go back!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/amaimasque/passion-planner" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;





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

&lt;h3&gt;
  
  
  Tech Stack
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;React 19 + TypeScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Styling&lt;/td&gt;
&lt;td&gt;Tailwind CSS v3 with CSS custom properties&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;Firebase Firestore (real-time sync)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth&lt;/td&gt;
&lt;td&gt;Firebase Authentication&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Email&lt;/td&gt;
&lt;td&gt;EmailJS (client-side, no backend needed)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hosting&lt;/td&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Architecture Decisions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Single Firestore document per user&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Rather than complex collections, most data (budget, guests, checklist, etc.) is stored as a single JSON document per user per feature—simple, fast reads, and easy to reason about.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Client-side RSVP tokens&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To avoid needing the Firebase Blaze plan (which requires billing for outbound HTTP), RSVP tokens are generated entirely client-side using &lt;code&gt;crypto.getRandomValues()&lt;/code&gt; and written to a public Firestore collection. EmailJS handles delivery, requiring no backend.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Runtime theming with CSS variables + Tailwind&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Colors are defined as CSS custom properties in &lt;code&gt;rgb(R G B)&lt;/code&gt; format so Tailwind's opacity utilities (&lt;code&gt;bg-brand-primary/10&lt;/code&gt;) continue working at runtime when users switch themes. The &lt;code&gt;.dark&lt;/code&gt; class on &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt; toggles a full palette override.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Currency-aware formatting everywhere&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A &lt;code&gt;useCurrency()&lt;/code&gt; hook reads the user's saved currency from Firestore and returns an &lt;code&gt;Intl.NumberFormat&lt;/code&gt;-backed &lt;code&gt;fmt()&lt;/code&gt; function used across the Budget, Payments, and Dashboard pages—so switching from ₱ to $ to € just works.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI-assisted planning&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Rather than only tracking wedding information, I wanted the app to actively help couples make planning decisions. AI is used to estimate wedding budgets, generate personalized hashtag ideas, and create reception program flows, reducing the time spent searching online for inspiration while keeping everything editable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Interesting Challenges
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;QR Code sharing&lt;/strong&gt; — used &lt;code&gt;qrcode.react&lt;/code&gt; with a canvas &lt;code&gt;ref&lt;/code&gt; to call &lt;code&gt;.toDataURL()&lt;/code&gt; for downloads, plus the Web Share API for native mobile sharing with clipboard fallback.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Printable pages&lt;/strong&gt; — Tailwind's &lt;code&gt;print:hidden&lt;/code&gt; and &lt;code&gt;print:block&lt;/code&gt; utilities made the Processional and Checklist pages print-friendly without maintaining a separate print stylesheet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Drag-to-reorder&lt;/strong&gt; — implemented native HTML5 drag-and-drop for Budget categories and Processional entries without any third-party libraries.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Prize Categories
&lt;/h3&gt;

&lt;p&gt;Best Use of Google AI&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>weddingplanner</category>
      <category>vibecoding</category>
    </item>
  </channel>
</rss>
