What I'm Building at Taaalk [Monologue]

I'm the founder of Taaalk ✌️
Follow this Taaalk

4 followers

3,455 views

Joshua Summers
21:15, 25 May 20 (edit: 21:43, 25 May 20)
Hi I'm the founder of Taaalk - as you can probably see as right now I'm the one doing most of the 'Taaalking' on the site!
(Taaalk is an online platform for public long-form written conversations. A bit like if someone made your WhatsApp public: the conversations are closed - you only Taaalk with the people you want to, but anyone can read them.)
This space is going to be where I talk through what's on my product roadmap and why. I'm going to talk about long term ideas for Taaalk as well as recently released features.

Latest feature: Tweet when publish

The most recent thing added to Taaalk was designed to slowly help its growth.
Right now a few people are using the platform, and I have been getting some visits from the occasional post on Hacker News, but the people who are doing the Taaalking are only infrequently sharing their conversations to Twitter.
I want this to change, and I think it makes sense that it should; whoever is following a Taaalk user on Twitter is probably interested to see what they have to say in a conversation.
So the latest feature released is a 'Tweet when publish' feature. This is how it looks:

image.png 184 KB

The changes start from the 'Publish Your Message' button and flow down from that. This is how the area looked before:

image.png 71.5 KB


Changing the primary CTA button colour

My desire was to let the user's eye naturally flow from the main 'Publish' call to action to the idea that 'Tweet when publish' was turned on, and that they could easily control it if they wanted to (so they didn't feel pressured into Tweeting).
The choice of colours here was important, and led to a change in the overall colour scheme of the site. Previously the 'Publish Your Message' button was green, and so where all of the primary call to actions on the site. However green is the natural colour of 'on', so I wanted to use it to communicate to the user - something was on, and it could be turned off should they want to.
When I played around with the design and saw how the darker 'Publish' button had a feeling of greater presence than the green one, meant the 'Tweet when publish' seemed secondary, and allowed the bright green 'on' switch to catch the user's eye, bringing their attention to the feature - I realised it was a goer. I then changed all the primary call to action buttons on the site to the darker colour, and the secondary buttons to the bright green colour.

image.png 24.8 KB


The 'Tweet when publish' details box


image.png 84.1 KB

When it comes to web design, I'm a big fan of using the principles of good copywriting set out in Ogilvy on Advertising - details are good. As long as I don't ruin a page with clutter, I would rather have something well explained than to keep things minimal.
I did not want the user wondering what would happen if they pressed 'Publish' with Tweet when publish set to on. I wanted them to know all the details so they could feel comfortable making a decision. The details box exists with this purpose in mind.
First, I wanted reading the box to happen naturally after reading 'Tweet when publish is on'. I encouraged this flow by replicating the first words of 'Tweet when publish is on', matching the use of the blue font and the using the Twitter logo at the start of the line.

image.png 26.8 KB

I combined the same start of the sentence with the value proposition of the feature - Tweet when publish increases your Taaalk readership.
I hope this killed two birds with one stone: it connected the details box with with the on/off line and explained the value in having it on.
The rest of the details box explains precisely what will happen when publish is pressed, "Twitter will open when you publish your message", displays the suggested tweet and lets the user know they can "edit the Tweet in the Twitter client before sending it".

The auto-generated Tweet


image.png 38.7 KB

Generated from this Taaalk if you are interested.
When I started building the feature I didn't think about the complexities of the Tweet itself. A Taaalk can have any number of participants, who may or may not have a Twitter handle associated with their account. Their names can be any length - and so can the title of the Taaalk itself. But a tweet needs to have 140 characters or less. So my tweet needed to dynamically generate to take all of this into account with the one rule that it must include the url. Twitter shortens urls to 23 characters in length, and I always wanted a blank space before the url, so all the info in the tweet had to be 116 characters or less.
I built a function in my tlks_controller (this is a Rails application) which generated my Tweet, taking all the above into account:
def tweet
    tweet = "I wrote a new message in my Taaalk \"#{@tlk.title}\""
    spkrs_tweet_section = ""
    if non_hidden_non_current_user_spkrs.present?
      spkrs_tweet_section << " with "
      non_hidden_non_current_user_spkrs.each_with_index do |spkr, i| # needs to be other spkrs vs current user, so cannot be in model
        spkr_name_and_twitter = spkr.twitter_handle.present? ? "#{spkr.name} (@#{spkr.twitter_handle})" : spkr.name
        if non_hidden_non_current_user_spkrs.length == 1
          spkrs_tweet_section << "#{spkr_name_and_twitter}"
        elsif i + 2 == non_hidden_non_current_user_spkrs.length
          spkrs_tweet_section << "#{spkr_name_and_twitter} "
        elsif i + 1 == non_hidden_non_current_user_spkrs.length
          spkrs_tweet_section << "& #{spkr_name_and_twitter}"
        else
          spkrs_tweet_section << "#{spkr_name_and_twitter}, "
        end
      end
    end
    if (tweet + spkrs_tweet_section).length <= 116
      tweet << spkrs_tweet_section + " #{show_tlk_url}"
    elsif tweet.length <= 116
      tweet << " #{show_tlk_url}"
    else
      tweet = "I wrote a new message in my Taaalk #{show_tlk_url}"
    end
  end
The section at the end deals with the length of the Tweet, constantly shortening and checking the length by first excluding the names of the participants, and then the title of the Taaalk - with the minimum length Tweet reading: "I wrote a new message in my Taaalk #{show_tlk_url}"

Turning it off


image.png 175 KB

Turning off Tweet when publish changes the toggle from on to off and from green to red. It also changes the green 'on' to a red 'off'. Opacity (0.7) is added to the details box meaning it's presence is reduced, but it's visible enough to read should the user forget what 'Tweet when publish' after they have turned it off.
I didn't want the user to feel pushed into Tweeting. For this reason it was important that a user who didn't want to Tweet wouldn't have to turn this feature off every time they wrote a message. Taaalks have 'Speakers' in them, so I added an 'auto_tweet_on' boolean to the Speaker model, with a default of True. If 'Tweet when publish' is turned off while a message is published, then this new default is saved.

Pressing publish

This opens up Twitter in a new tab (and on mobile, opens up the Twitter app) with a pre-populated Tweet:

image.png 118 KB

And that's it!
To try it out you can start a conversation on Taaalk.
Joshua Summers
11:55, 28 May 20 (edit: 13:32, 28 May 20)
Excitingly the 'Tweet When Publish' feature has started to be used and taaalk.co is getting more coverage on Twitter.

image.png 343 KB

I now want to add meta data to the URLs to make them look more attractive/noticeable on Twitter. So that Taaalk takes up more space in your Twitter feed :).
On Taaalk you can also follow a user. You get notified every time they start a Taaalk.
I now have 3 followers. One of them I know, but one I don't. I noticed my feeling when I had my first real follower, it made me value Taaalk more as a platform. If I was going to start an interview anywhere, it may as well be Taaalk as at least one person will be notified!
That is the power of network effects. Something I think Taaalk benefits from. It made it clear to me that accelerating network effects is an important part of building a social network (which Taaalk sort of is). For that reason I'm thinking about how to make it more obvious to users that a network can be built.
To follow a user right now, you have to 1) discover that their username is clickable from a Taaalk, 2) click on it and go to their user page and 3) follow the user.

image.png 55 KB

Above: Hovering on the name of a user in a Taaalk let's you know it's clickable, otherwise it's hard to tell.
I'm thinking that getting rid of steps 1) and 2) by adding a follow user button to the Taaalk pages. This will make the network grow faster, which will be better for the long term future of Taaalk. 
Joshua Summers
16:14, 23 Jun 20
So I have been using Taaalk for a while now and have been getting annoyed about three things:
  1. I want to be able to quickly jump down the Taaalk page one answer at a time.
  2. I want to be able to quickly jump down to the bottom of the Taaalk.
  3. I want to be able to take notes if I am a participant. Right now I will save a draft containing some of the ideas in my head, but if I want to publish a message I need to remove my notes, then paste them in place again and resave the draft when the 'clean' reply has been posted. That is annoying me a lot.
So just three simple (sounding) things I will built tonight I think. But I'm happy with the process of using something before I decide to add features to it.
Some more thoughts on Taaalk:
The adoption by others has been much slower than I expected. I know how nice it is to run a Taaalk; it's amazing what you can learn from people and how the process of talking to someone in depth about a subject often allows a relationship to form which goes well beyond Taaalk. I feel like somehow I need to "shift" the consciousness of the people outside of Taaalk (everyone in the world who isn't me lol). I feel that if a community leader (e.g. Paul Graham in the tech community) were to start Taaalking with someone else, this would shift the perspective and open others up to Taaalking. It feels good but I know it is a habit people have not tried yet, and maybe they need some inspiration to do so.
I have been a bit lazy in promoting Taaalk, especially in terms of setting up Taaalks that don't involve me. That probably needs to change too. I think laziness is not the only driver of this problem, but also shyness. I don't like the idea of asking people to do something that might not come naturally to them, but because Taaalking is new, it doesn't come naturally to anyone right now.
I recently did my first Taaalk to do with a mental health subject. I have really enjoyed this Taaalk, and feel that I might take this direction further. 
Joshua Summers
23:42, 26 Jun 20
I also realise Taaalk needs notifications. As a (and the only) Taaalk power user I've started to lose track of the Taaalks I have going on. If I need it then maybe someone else will too one day.
Joshua Summers
14:29, 28 Jun 20
So I've added the note taking feature:

image.png 30.7 KB

It lives below the Tweet When Publish feature.
There were a few design considerations that I made. Firstly I wanted to give it a note pad feeling to it. For this reason I used one of the less primary colours of my site. It's a colour I use for alerts and other personal messages:

image.png 8.68 KB

I liked the use of this colour as it is happens to look a bit like a yellowy notepad, and also notes are personal things - so the use of the colour in other personal settings on the site means there is a subtle consistency.
I chose to use a "rich text area" (allowing the use of formatting, links, title, quotes, etc...) as this allows users to copy and paste fully functional notes into the reply text box and have them convert nicely to "bubbles".
Joshua Summers
12:24, 02 Jul 20 (edit: 12:38, 02 Jul 20)
So I have added a new feature, a 'Reply' page.

image.png 478 KB

The need for this page emerged in the right way, by dogfooding (using my own product). I am the biggest Taaalk power-user, and recently keeping track of all the replies became too much!
Even though Taaalk probably looks like a simple tool from the outside, there are many subtle potential 'Reply' situations which can take place for a user. These include:
  • Starting a Taaalk, but not writing any messages in it
  • A 'normal reply situation' (where you are in a Taaalk with n other people, and someone who isn't you has replied)
  • A Taaalk where you are the only member (like this one), so if you don't reply to yourself, then no one else will
  • A Taaalk that you are having with multiple versions of yourself (you can invite yourself to your own Taaalk), where you might want to reply to yourself
  • When you are probably waiting for someone else to reply
The design was pretty simple, and I used a feature of Rails that I wish I'd known about earlier; partials. I firstly have a function which fills up & sorts an array for each category above:
def set_replies_and_no_replies
    @has_no_messages_replies = []
    @normal_replies = []
    @only_spkr_replies = []
    @multiple_same_spkr_replies = []
    @no_replies = []

    current_user.spkrs.each do |spkr|
      if spkr.tlk.msgs.any?
        if spkr.tlk.spkrs.length == 1
          @only_spkr_replies << spkr.tlk
        elsif spkr.to_reply == true
          spkr.tlk.spkrs.each do |tlk_spkr|
            if tlk_spkr != spkr
              if tlk_spkr.user == spkr.user
                if @multiple_same_spkr_replies.exclude?(spkr.tlk)
                  @multiple_same_spkr_replies << spkr.tlk
                end
              else
                if @normal_replies.exclude?(spkr.tlk)
                  @normal_replies << spkr.tlk
                end
              end
            end
          end
        else
          @no_replies << spkr.tlk
        end
      elsif spkr.tlk.user == spkr.user
        @has_no_messages_replies << spkr.tlk
      else
        @no_replies << spkr.tlk
      end
    end

    @has_no_messages_replies.sort! { |a, b| b.updated_at <=> a.updated_at }
    @normal_replies.sort! { |a, b| b.updated_at <=> a.updated_at }
    @only_spkr_replies.sort! { |a, b| b.updated_at <=> a.updated_at }
    @multiple_same_spkr_replies.sort! { |a, b| b.updated_at <=> a.updated_at }
    @no_replies.sort! { |a, b| b.updated_at <=> a.updated_at }
  end
I then use each array and feed it to it's own partial:
<%= render partial: 'components/reply_block', locals: {
  rb_title: @has_no_messages_replies.length > 1 ?
    "You've started these Taaalks, but haven't written anything in them" :
    "You've started this Taaalk, but haven't written anything in it",
  rb_spkrs_array: @has_no_messages_replies
}  %>

<%= render partial: 'components/reply_block', locals: {
  rb_title: "It could be your turn to reply",
  rb_spkrs_array: @normal_replies
}  %>

... (for the rest of the arrays below)
It was great to use partials, they felt very intuitive. I felt so frustrated not using them when building other parts of the application (repeating almost the same code because I didn't realise I could feed one template different objects), so it was satisfying to keep my codebase neat and cut down on the code I write.
The Reply button in the navbar is only visible if you have a Taaalk attached to your user account, and only has a notification dot if you user#has_replies? .

image.png 1.51 KB

I also took the opportunity to change the code generating the visible Taaalks for the index page. Now that users would be reminded that they had a Taaalk they had started but had not written anything in:

image.png 139 KB

I could remove empty Taaalks from the index page, as they would be obviously accessible from the Reply page. 
I learnt something else new, when building a feature when you have existing users you have to add a function to correctly transition the state of existing users into the new function. I added a boolean 'to_reply' column to the 'Spkrs' table, with a default of 'false'. I did not write a function which went through existing Spkrs and made sure they had the right settings, so every current Spkr just had their 'to_reply' set to 'false'. This meant that not everyone had the correct #has_replies? status when the feature launched. I'm not going to change that now as the problem is not a big one and the Taaalking user base is small, however it taught me something for the future.
If you have any suggestions for code optimisation, you can always join the feedback Taaalk and let me know.
Follow this Taaalk

4 followers

3,455 views

Start your own Taaalk, leave your details or meet someone to Taaalk with.