Full Time Indie Hacking: First 3 Months in Review

Photo by Paul Bulai

At the end of 2022 I stopped contracting at Help Scout to focus full time on Preceden, a SaaS timeline maker tool that I had been running mostly as a side project since 2010. It’s April now so I figured I’d share an update on how things are going. My periodic Friday updates cover a lot of this too, but it seemed like it’d be useful for me and as well as anyone following along to zoom out and share a high level overview of what I’ve been up to.

Emergent Mind

My intent when I stopped contracting was to focus full time on growing Preceden. However, ChatGPT’s launch at the end of November and my subsequent launch of LearnGPT (a ChatGPT examples site) at the beginning of December wound up complicating things, to say the least.

I first announced in January that I was going to shut down LearnGPT to focus on Preceden. Then I got some offers to buy it, so put it up for sale. Then, I decided not to sell it and to shift directions. Instead of it being a ChatGPT examples site called LearnGPT, it would be a social news community focused on AI and be called Emergent Mind. But no, actually not a social news community, but an AI news aggregator/AI education site powered by GPT-4.

LearnGPT at the beginning of the year:

Emergent Mind today:

A chaotic start, for sure, and a savvier entrepreneur likely would have avoided a lot of these missteps. But, for me, it’s how I like to work: ship, learn, and iterate quickly. I wind up heading down a lot of wrong paths with this approach, but usually wind up learning from those mistakes and adjusting course. And for me, this approach usually works better than lots of careful planning, especially for experimental products like Emergent Mind.

And so how is Emergent Mind doing?

It’s doing okay. Traffic is up, sign ups for its upcoming newsletter are up, Discord participation is up, feedback from readers is flowing, and generally it feels like there’s a growing amount of excitement and interest in the site. It hasn’t taken off by any means, but it’s very early still, and I’m optimistic (as always) about its potential. Q2 should see a ton of product improvements, the launch of its GPT4-generated AI newsletter, and hopefully an up-and-to-the-right trend for its traffic.

Preceden

Poor Preceden, never quite getting my full attention, even after supposedly going full time on it.

In January I launched an AI Suggestions feature to help users automatically add content to their timelines instead of having to manually build it entirely from scratch. Milan (the part-time designer I work with for both Preceden and Emergent Mind) and I iterated on it a ton in January and February and I’m quite happy with where it wound up.

The next big piece – and what we’re working on now – is building a stand-alone version that logged out users can use to generate timelines (and optionally sign up and pay to edit). It’s quite good IMHO and I’m excited to launch it in a few weeks. Which brings me to challenges.

Challenges

Needless to say, juggling two products with just two people can be challenging. Every hour we spend working on Emergent Mind is a hour that we don’t spend working on Preceden.

And remember too that Preceden actually makes money, whereas Emergent Mind for the moment is just burning money. It’s still not obvious to me that deciding to continue working on LearnGPT/Emergent Mind was the right decision. That said, I love having a new, speculative side project, especially one that’s at the cutting edge of what’s possible (an AI-first product powered by GPT-4), has a ton of potential, and one that doesn’t require sifting through a decade of messy, legacy code to update.

As I’ve mentioned in other recent updates too, I haven’t quite figured out how to balance all of these things well. My natural inclination is to jump into VS Code each day and code for 8+ hours straight, jumping between Preceden and Emergent Mind throughout the day. I ship a lot this way, but it takes it toll over time, and I need to do a better job of pacing myself to avoid burnout long term.

What’s next

Q1 definitely felt like I was finding my footing: what products would I be working on going forward and what direction did I want to take those things. Thankfully, I’m mostly on the other side of that. If Emergent Mind does wind up taking off, I’ll have a whole new set of tough decisions to make, but I’ll be lucky if it plays out like that. We will see.

If you find yourself saying to yourself “Matt you really should ______” while reading any of this, I’d love that feedback: @mhmazur on Twitter or matthew.h.mazur@gmail.com.

Thanks for following along πŸ‘‹.

Friday Updates: Smart Icons, Automatic Suggestions, Dealing with Spammers, Better Icon Colors

Preceden

Lots of updates to Preceden this week:

Improving the UX for the AI Suggestions

When we rolled out the AI Suggestions feature last week, the typical experience for the user would go something like this:

  1. Maybe notice the new “AI Suggestions” button above your timeline
  2. Click it, hit Generate
  3. Watch spinner for a minute and eventually see the suggestions

Lots of UX issues there though:

  • No real incentive to click on the AI Suggestions button besides curiosity
  • Waiting a minute for suggestions sucks and I’m guessing a lot of users bailed before then (I didn’t set up tracking for it yet so can’t say for sure)

To remedy this, I updated Preceden to automatically kick off a suggestion request when the user loads their timeline and display the suggestion count directly in the AI Suggestions button:

That way when they click the AI Suggestions button, the suggestions are visible immediately and they hopefully get that “aha!” moment and see the value in it.

Also, one reason the suggestions took so long to generate is that it was also figuring out what icons to use for each suggestion before displaying them to the user. And at 1.2 seconds per event to figure out the icon, that winds up adding a lot of extra time. My short-term solution to this was to not figure out the icons before displaying the suggestions to the user, and instead figure out the icons behind the scenes while the user is browsing the suggestions. If the user eventually decides to add the events to their timeline, Preceden will see if it has figured out an icon for it by that point and if so, use it, otherwise just use a default circle. Still plenty of room for improvement there, but not a bad solution for now.

Smart Icons

The logic that enabled the automatic icons for the AI suggestions also made it possible to automatically suggest icons for events that users manually add to their timeline:

Some of the automatic icon suggestions are questionable though, so I’m likely going to start tracking what icon is suggested and what icon the user winds up using, and possibly using that to adjust the suggested icons in the future. For example, if Preceden suggests an astronaut for an event, but a lot of users in the past changed the astronaut icon to a spaceship, then maybe Preceden can suggest a spaceship to future users instead of an astronaut.

OpenAI costs

I did worry before all this that the API costs would be excessive, but thankfully they haven’t been:

Spammers

While watching user sessions on FullStory (to see how users are interacting with the AI Suggestions tool), I saw a number of spammers sign up and create link-filled events. Here’s an example:

I wound up building an admin tool to help me identify and ban those users:

And later built a script to automatically block them.

All in all, I banned 715 spam accounts yesterday. Banning here means making their timelines private and locking them out of their accounts unless they contact support. Didn’t want to automatically delete anything (timelines or accounts) because this script could misidentify real users as spammers and wanted to make it easy to let them regain access to their accounts if that happens.

Thankfully, these spammers were easy to identify. They almost always created 1 timeline with 1 event and in the event description they added a bunch of backlinks and Vietnamese descriptions (which I used the DetectLanguage Ruby gem to figure out).

Suggestions Dashboard

I also took some time this week to set up an internal dashboard (in Hex via dbt and Stitch) so monitor usage of the AI Suggestions tool. Here, for example, are the # of suggestions it came up with by day:

The increase is due to the automatic suggestions rolling out.

Icon colors

We’ve made a lot of updates over the last few months to the timeline colors, and some of them wound up conflicting resulting in less-than-ideal icon colors:

Notice how the icons for the darker events are barely noticeable.

Wasn’t too hard to fix though:

EmergentMind

No major updates this week.

Milan (Preceden’s front-end engineer and designer) is busy finalizing the redesign. Should ship next week, and then I’ve got a bunch of updates planned for the next phase of its journey.

Thanks as always for reading πŸ‘‹

Friday Updates: Shipping AI Suggestions in Preceden, EmergentMind Growth and Brainstorming

Preceden

On Tuesday I shipped the v1 of Preceden’s new AI suggestions feature to 10% of new users:

I had planned on slowly rolling it out to 100% of users over the course of a week or two, but my OpenAI costs were minimal on Tuesday so on Wednesday I said screw it and just made it available for everyone.

OpenAI costs continue to be $0.50-$1 per day, so not bad at all.

I also set to work figuring out how to use OpenAI’s embeddings feature to automatically suggest meaningful icons for the suggested events. It wound up working amazingly well:

It works so well that after I’m done with this blog post I’m going to work on updating Preceden to automatically pick icons for manually-added events as well, though still give users a way to pick an icon if they’d like.

Also, Milan (Preceden’s designer) and I have been making lots of updates to the suggestions tool to improve the UX. It’s coming along well, though still lots of room for improvement, especially around the experience for users on free accounts (which are limited to 10 events per timeline):

Also starting to brainstorm what a stand-alone tool that logged-out users can use would look like and be called:

Funny that 6 people out of 14 voted for “Something else” but no one responded with alternative suggestions. Thanks y’all 🀣.

I think the stand-alone tool has a huge amount of potential, both in terms of building awareness for Preceden (hopefully the launch garners a lot of attention) and driving revenue (I’ll have a big CTA on the stand-alone tool to let people save their timeline to Preceden, hopefully converting a lot of them into customers in the process). Hopefully will launch it in 2-3 weeks.

EmergentMind

No significant progress on EmergentMind this week.

Milan created some fantastic mockups for a new site design in Figma and last week I was able to implement 90% of it, but it still needs some additional work before we can roll it out to everyone. Maybe by the end of next week.

The Emergent Mind Discord is up to 27 people, and we actually had some discussions this week about the future of prompt engineering:

Also quite happy with the growth of people signing up and posting their own ChatGPT examples to EmergentMind. From the homepage right now (notice the various user names of people posting):

Still figuring out what direction to take EmergentMind though.

Candidates include:

  • Focus on prompt engineering: build tools, write tutorials, list educational resources, etc
  • Focus on Large Language Model (LLM) examples (ChatGPT currently, plus eventually others)
  • Focus on building a community of people interested in LLMs or AI more generally

Re-design first, then I’ll make a decision about what direction to take it next. Suggestions welcome!

Thanks for reading πŸ‘‹

Indie Hacking Week 2 Recap – TimelineGPT Progress, LearnGPT Decision Time

For Martin Luther King weekend my family and I headed to Boone, North Carolina and stayed in a cabin for a few days. We went snow tubing at Beech Mountain while we were there, one of the many ski resorts in the area.

As is common on vacations, I spent way too much time thinking about work. But on the bright side, at least now I’m thinking solely about my own projects and not contract work as well πŸ˜….

TimelineGPT Progress

TimelineGPT – the name of the AI content generation feature I’m working on for Preceden – is coming along well:

My tasks this week included:

  • Moving the actual content generation to a delayed job because it can often take 20+ seconds and I don’t want to tie up Heroku dynos or have the request timeout while the user is waiting
  • Lots more work to parse the myriad of date formats that GPT returns
  • UI work with Milan, Preceden’s designer, including figuring out where the place the buttons, managing their states (like disabling them when appropriate), etc
  • Giving users a way to bulk delete all AI suggestions they’ve previously added to their timeline
  • Handling the UX for users on the free plan who are limited to 10 events per timeline

Lots more to to do though including:

  • Rate limits (per user, and overall) to avoid bad actors racking up excessive OpenAI fees for me
  • Better duplicate identification so if the user already has the same event on their timeline, this tool doesn’t recommend they add it again
  • Giving users a way to choose which layer they want the suggestions added to

Coming along well, but probably another week or two of work before it’s live.

LearnGPT Decision Time

Earlier this week I announced that LearnGPT was for sale. I’ve received 2 offers so far and the deadline to get an offer in is the end of today. At that point I’ll have some big decisions to make: sell it or keep it, and if I decide to keep it, what does its future look like? We will see.

I would not recommend entrepreneurship to anyone who doesn’t want to face a never-ending series of hard decisions.

Adios for now πŸ‘‹.