Completed2025

Wedinote

A platform designed to simplify the process of sending and sharing multiple wedding invitations seamlessly through WhatsApp.

Next.jsTailwindcssDrizzleNeon (PostgreSQL)
Wedinote

Overview

Wedinote is a customizable wedding invitation sharing platform that streamlines the process of sending personalized invitation messages to wedding guests. The platform allows users to create custom message templates with dynamic variables and manage their guest lists efficiently.

The Problem

Existing wedding invitation platforms often frustrate couples with limitations that make guest management unnecessarily difficult:

  • No option to add multiple guests at once (batch import).
  • Duplicate guest entries are not automatically detected or prevented.
  • No status indicator showing whether an invitation has been sent to each guest.
  • No guest search function, making it hard to locate individual guests manually.
  • Limited template variables, typically restricted to the couple’s names, event address, venue, and date. Adding additional variables requires manually editing the template, which is inefficient and error-prone.

As a result, users spend unnecessary time switching between spreadsheets, WhatsApp chats, and template editors just to send and monitor invitations.

The Solution

Wedinote addresses these challenges by providing:

  • Batch guest import via CSV upload or manual entry (newline-separated).
  • Guest filtering based on invitation status (sent or unsent).
  • Duplicate prevention for cleaner guest lists.
  • Search and copy/share functionality, enabling users to send invitations directly through WhatsApp.
  • Custom message templates with variable placeholders that dynamically generate personalized messages for each guest.

Technical Implementation

The platform uses a Markdown-based text editor to allow users to compose WhatsApp-style invitation messages. One of the core challenges was handling variable placeholders like {{variable_twoWords}}, which WhatsApp Markdown automatically converts to italic text due to underscores.

To overcome this, Wedinote’s text processing pipeline temporarily replaces these variables with unique placeholder symbols that are immune to Markdown conversion. After the Markdown rendering process, these placeholders are replaced again with the correct variable values

Key Technologies

  • Next.js – Frontend and server-side rendering framework.
  • Drizzle ORM – Type-safe database management.
  • Tailwind CSS – For responsive and modern UI styling.
  • Neon (PostgreSQL) – Cloud-based relational database.
  • Lexical Editor – Custom text editor supporting WhatsApp-style Markdown formatting.

Lesson Learned

Since my experience was mostly on the frontend, developing Wedinote became a turning point in understanding backend logic, especially on how to build authentication systems, design relational databases, and implement text parsing effectively in a real application. From this, I learned that:

  • Even simple Markdown rules can cause unexpected formatting issues when combined with user-defined variables, which taught me the importance of careful text parsing and transformation.
  • Implementing user authentication provided deeper insight into how sessions, tokens, and protected routes actually work behind the interface layer.
  • Designing a relational database schema for users, guests, and templates helped me strengthen my knowledge of data modeling, relationships, and query optimization.

Future Improvements

While Wedinote successfully delivers its core functionality, there are several enhancements planned for the future:

  • Variable auto-suggestions: Implement a smart autocomplete feature that detects when users are typing a variable inside a template and suggests available placeholders automatically. This will help reduce typos and improve the overall template creation experience.
  • Template categorization: Allow users to group their templates into categories such as family, friends, or colleagues, making it easier to manage different message tones and invitation types.