Back when I was still super pregnant I attended a fun, informal working meetup with some old colleagues of mine. Despite having made no progress on any particular project and feeling as if I had nothing to contribute, everybody was super supportive of my needs and feelings, and asked me a lot of kind questions. Yeah, they’re that kind of awesome folks.

While I did hear some of the classic “you just gotta make time” input, they also struck down a mental block I’d been having: the idea that if you’re going to create something, it must be creative, new, and unique. This idea had been weighing on me; it’d been preventing me from getting much of anything done or even started for that matter. My friends pointed out that if I wanted to create, I should just create - I don’t need to break new ground just to keep my hand in and make something fun.

They also pointed out I should work on something close to home - what was going on in my current life that I thought could benefit from technology (again, regarless of whether that software or app already existed)? Being pregnant at the time I had a few vague ideas, but nothing that I had time to get much past some initial brainstorming.

Now, though? A new opportunity has presented itself!

A gif of a surprised Pikachu
a wild idea appears

For Christmas my family has decided to do gifting by drawing your giftee’s name from a hat (as opposed to everyone buying gifts for everyone else). But we don’t all live in the same state - how were we going to do this remotely?

TECHNOLOGY TO THE RESCUE!

Thus my little Gift Exchange web app began. Man, it feels good to have a project.

MVP Featureset

To test my ability to actually finish something, I want the initial app to be as stripped down as possible:

  • Create your party (give it a name)
  • Enter participants
  • Anonymously match participants
  • Create a link for each participant to see their matched person

There’s obviously a lot of room here for additional or more complex functionality. In a perfect world I’d have a minimal featureset that didn’t even require a database, but I want a way for the host/creator to be hands-off after the initial setup. IE, the matching information needs to persist.

Plus, even though I just said I wanted to keep the fuctionality stripped down and simple, having a DB seems a basic enough technical feature for future iterations.

Visual Design

Always a sucker for a simple “slide” flow, that’s what I’m opting for here: a single modal with set of steps or “slides” for each piece of input. Of course, I also want to avoid importing any big component libraries, so I’ll be building this slide flow myself.

Technical Design

Some initial technical decisions I’ve made:

Frontend

  • React. I know this, man.
  • No TypeScript, because ugh so much work, especially for something so small
  • Tailwind CSS; again, for such a small project using a whole component library is overkill

Database

Cloud Firestore, maybe? As I’ve always skewed towards frontend development, DB selection isn’t exactly my forte; I’m looking for something simple to set up and use. Given the size of the project, I don’t really see a need for a relational DB either. So let’s just throw some data in a pile and see what happens!

Additionally, I’m already using Firebase to host this blog, so exploring some of its additional functionality doesn’t seem like a big stretch for me. Am I wrong? WE’LL SEE!

Next Steps

I’m going to move on this as fast as I can. I’ve talked a lot about time being a strong limiting factor as a parent (now of 2), and I’m hyper-aware of what that means for any project I take on, be it technical work or straight-up housework. This project will be a test of my ability to cut scope and not get lost in the weeds…as well as getting it done before my mother-in-law just uses a spreadsheet to complete the gift exchange without me. 😂