If you missed it, the previous post, “Rules keep the promise,” is about the one thing this app refuses to do: spoil a surprise.
TLDR: The rewrite is done and has been running long enough to have a name: GiftWrapt. It’s an open-source, self-hostable wish list app for families. I built it for mine; as of today, you can run it for yours.
For three posts now, I’ve been calling the rewrite “HoffStuff 2.0.” That was never going to be its name. It was my placeholder for something I wasn’t sure I’d ever release.
It has one now. GiftWrapt.

What it is
At its core, GiftWrapt is a simple wish list app for families and small groups. It offers privacy, ownership of data, and flexible sharing, unlike typical wish list apps.
It’s open source and self-hostable, starting today. The code is public, and the docs will walk you through running it. Give it a try or contribute to improve it.
How it actually works…
This is a tour, not the documentation. The basics, as my family actually uses them.
Create as many lists as you like. You can have a single list for everything, or you can create a ton of them for every occasion you can think of. Do you like to stage and curate things? If so, create private lists for dumping ideas and curate them into your public lists when the time is right. You’re not limited to lists for just you. You can create private idea lists for others you shop for. You can even manage dependents’ lists for small kiddos and pets.

Paste a link; it does the rest. My mom is not going to fill out a form with a title, a photo, a price, and a description. Most people won’t. So you paste a link, and it will try its best to pull all of that for you. If a site doesn’t share that information, that’s their call (their site, their rules), and you get a clean form with the hard parts already guessed. For administrators, you can extend this functionality to fit your needs.

“I’ve got this.” When my brothers are eyeing the same item, one of them claims it quietly, and the other one sees it’s taken. Nobody texts around asking who’s getting what. Nobody buys the same dishwasher twice. Hopefully this limits coordination with different sets of grandparents, or even the need to create different lists for different people, to prevent this from happening.

The surprise stays a surprise. The gifters can see claims and coordinate all they want. The recipient sees nothing until after the big day. This is the rule everything else bends around, and if you read the last post, you know it isn’t left up to my memory anymore. You can even see historical gifts, making it easier to write those thank-you cards when things settle down. Once again, admins can customize things like reveal windows, delays, etc.
It knows your household. Madison and I share credit for gifts either of us claims, because nobody is actually keeping score separately. Grown-ups manage the lists for the smaller kids and the pets, because babies or the dog can’t type. There’s more here, but the docs cover it better than a blog post should.

The wish list, paid off
Back in “The Breaking Point,” I listed the features my family kept asking for that the old app was never going to survive. That list wasn’t hypothetical. It was the spec.
“One of these three.” Items can be grouped with real logic. “Pick one of these, not all of them,” so once somebody claims the air fryer, the other two air fryers lock. Or “in this order, please,” for the starter set that has to come before the upgrade.

Co-gifting and partial claims. Big gifts can be split. A few people go in on the console together, each covers a share, and the math is handled (an even split by default, custom splits when someone insists on paying more). Partners count as one unit, because that’s how couples actually shop. Yes, it’s smart enough to know when partners are shopping for each other.
Restricted viewing. Some people should be able to shop from a list without seeing what everyone else is up to. Now they can: they see the list, they can claim, and everyone else’s claims simply aren’t there. The rest of the family coordinates in full view. If this use case doesn’t make sense to you, I’m really happy for you.
Custom holidays. Birthdays and Christmas were baked in from the start. Now the calendar is yours: add the holidays your family actually celebrates, tie lists to them, and the reminders and the post-holiday reveal follow along automatically. I’ll keep making this more flexible while leaning into reasonable defaults.
A little intelligence. The opt-in AI layer nudges instead of deciding: this item has been sitting for a year, these two entries look like duplicates, these three might want to be a group. You can ignore all of it. My family mostly does.
AI/agent integration is completely optional. It is completely disabled by default and requires configuration with your own keys.

Five for five. It turns out a rewrite goes faster when your family spent two years writing the requirements for free.
But, that’s not all! There are a lot more cool features packed in. I won’t overwhelm you with the details. Personally, I think it’s better to get started and only enable the bells and whistles that make sense for you.
The part that matters to me
GiftWrapt isn’t another paid subscription. It runs on your server, with your database. Nothing leaves it unless you turn something on; email, image storage, and the AI extras are all opt-in pieces you add when you want them. There are no ads, no affiliate links, and no company behind it that needs your shopping history to make payroll. I didn’t even add usage analytics or anything that phones home to me. You’re in control. If you experience issues, you’ll let me know.

There’s also no hosted version. You run it, you own it. Unless, of course, one of you reaches out with a pile of money, then I’ll do it just for you.
Now it’s yours too
My family was the first customer, and the best one. They stress-tested the original with zero filter for two years, texting “hoffstuff is broken” with no further context. Every rule in this thing exists because someone found a gap. It was built and tested for them, top to bottom.
But it doesn’t have to be just theirs anymore.
I built it for my family. Now it can be your family’s too.

I don’t know exactly what happens when other households start running it. Configurations I haven’t thought of, patterns of use I can’t predict. I think I’m ready for that. Mostly.
Links for Nerds
- Documentation: https://www.giftwrapt.dev
- Repo: https://github.com/shawnphoffman/giftwrapt
- Storybook: https://storybook.hoffstuff.com

Leave a comment