We all have our tastes. I love following blogs on entrepreneurship and business. Sometime back, I came across sites like Gaps.com and AffiliateInsights.com and loved the content they put up. I am sure there are other sites that provide similarly insightful stuff, but I haven’t come across many.
Perhaps one of my readers here has similar tastes and could recommend sites to me? This is the idea that went into building my first ‘social network’ site, Feedrer. It was a smart play on ‘Federer’ – did you catch that? 😉
[[Now, I looked up and noticed that the Feedrer.com domain name was available. I have hence bought it. If you are working on something interesting and would like to buy this domain from me, do get in touch!]]
I built this site back in 2007-08 when social networks (and RSS feeds too) were a big thing. I hired someone named ‘Miguel Macias’ from USA (or so he claimed) and got this done for just a few hundred dollars or so. I still can’t believe how I managed to get all of this done for so cheap back then.
The idea for Feedrer was simple: it’s a social RSS reader where your timeline is the latest from all the blogs you follow – you can also follow other users and view their feed timeline. Like a blog from their timeline? You can quickly add that to your own feed too.
In other words,
- You sign up and upload your list of RSS feeds to the website.
- Once this is done, your ‘timeline’ will show a chronologically ordered list of updates from all your RSS feeds combined.
- This timeline of yours is public and can be viewed by other users
- You could add your friends to the network and then be able to follow blogs they follow as well
- Find a website from a friends’ list you like? You can simply ‘add’ it from their timeline and the feed will start showing up on your timeline as well
Here’s what the site looked like when it first launched
[[Thank you Archive.org – please consider donating to this amazing service here)]]
Then, over the next few months, I added new ‘viral’ elements to the site to make it look more like a social network.
Pretty neat, right? I never marketed the website well and only had a handful of users before I shuttered it. But looking back at it over a decade later, this concept still has legs and one of you people reading this article can launch your own social feed network.
It’s even better if you could repurpose it into a mobile app. That’s better suited to how users consume news today.
Here is a basic PRD of sorts for your app’s first version. I’m sure you can add a lot more elements to it if you have the budget and time.
Launch Screen
In my version of the app, the user needs to be able to sign up or login before they can access the features of the app. But just like it is with Instagram or Pinterest, the individual timelines can be accessed on the web without you having to log in.So once you install the app and launch it for the first time, you should see something like this:
I’m including one form for both Sign up and Login. I don’t know why more people don’t do this – you can always check the credentials in the database to see if the email address exists. If not, create an account.
You can also spruce this up further by letting users sign up using their Google or Facebook credentials. But I am not going to do that here in this basic version.
When setting up a PRD for this app, it is important to tell the developer the various use-case scenarios that they should look out for.
- User doesn’t enter a field and taps ‘Submit’ – display a message like “Please enter all the fields before tapping ‘Submit’
- User enters an email that exists in the DB but password is wrong – display a message that says ‘One or more details that you have entered is incorrect’
- User enters an email that exists in the DB with the right password – log them into their app
- User enters an email that does not exist with password that does not meet relevant security criteria – display a message that says ‘Please ensure that your password is at least 8 characters long with one capital and one special character’ (provided this is the security criterion you are going for)
- User enters an email that does not exist with an appropriate password – take them to the next page of the onboarding process
A number of modern apps do not wait for the user to verify their email address before onboarding them. This is a good way to ensure a smooth user experience. And this is what you could do too.
For our app, we will have two main pages – a personal timeline and another timeline for your network.
- Your personal timeline shall be a chronologically ordered list of blog posts from feeds that you follow
- Your network timeline is similar – except that it lists all blog posts from feeds followed by everyone in your ‘friends list’
There are two ways to onboard – let the user check which of their friends from Facebook or Twitter is on Feedrer and ‘follow’ them here on this app. Or, you could ask them to add sites that they want to follow first and talk about adding friends.
Here’s the thing – when you are first building this app, it is very unlikely that there is anybody from your network who is on the app already. Should you then hide this feature till you grow your app?
Not necessarily. Letting users connect through their Facebook or Twitter, you also give them an opportunity to ‘invite’ their friends to your network. It’s free advertising for your app and that is what you should take the user to first.
This is however a little spammy and you may want to avoid it. This step however still makes sense. Logging through a user’s Facebook or Twitter profile gives you access to an established friends’ network. So the next time someone from the network signs up, you could smartly suggest ‘People to follow’.
For this basic app though, we will only be checking if there are any users on the app.
The post-signup screen could thus look something like this
The user can choose to skip this window. But in case they log in with one of these social network accounts, you can extract email addresses of all friends from the network and verify against your database.
Once the user adds friends to follow and taps to proceed, you take them to the next step where they add news feeds.
Again, here is a challenge – RSS feeds are not as popular as they used to be. Also, it is not easy to type in the XML feed address for websites you want to follow, least on a mobile phone. A nice way to do this is in the onboarding process is by recommending websites and letting the user pick sites they want to follow.
For this, we need to have a table in the database with an aggregated list of all RSS feeds along with other information like the website name, a possible thumbnail and their category.
We may also need an additional column for popularity. This could be a measure of the number of users following this particular blog post. I will explain later why this is useful.
With this information, we could display a screen like this to the user
Again, the user is free to skip this step and go directly to following specific websites. When a user taps a few topics and taps Proceed, you show them a list of websites from all these chosen topics in order of popularity. Remember how we have this information available with us already in the database?
This is basically it. Once the user clicks Proceed, you take them to their timeline with the list of latest articles from their followed blogs already showing up.
But this is just a basic RSS feed reader. This is a social network, remember. So we need to add these social elements to the app. Here are some elements we can have
Followed – the list of users who have chosen to your account.
Following – the list of users who you follow
Network timeline – an aggregated list of latest blog posts from all feeds from all users you follow
Explore – the app could recommend new users based on how well their interests match with yours.
When a user taps the ‘+’ button above, they will be able to add new blog pages to follow.
You may avoid ‘Network timeline’ in the basic version of this app. This is because this section can be quite resource intensive. To have to create an aggregated list of users, pull in all their feeds dynamically can need a lot of resources. I will however describe a basic way to get this done in the first iteration.
Similarly, the ‘Explore’ function is going to need quite a bit of smartness. But you won’t need that unless you already have the network effect going with lots of users. We can have a basic version of the Explore function that I will describe below.
In terms of layout, Followed, Following and Explore are going to look a bit similar. They are just a list of users with a tag against them that notes whether or not you follow them already.
Tapping on any user takes you to their feed timeline. This looks very much like your own except for one feature – the ability to add a feed directly to your own.
The Network timeline is going to look very similar too
I promised to discuss about the algorithm behind ‘Network timeline’ and ‘Explore’ functions. But before we do that, it is important to go into detail about the various tables you will have in your database.
(I must point out that most projects I have done till today have been in LAMP. I am not a programmer and do not know how other technologies work.)
User Table
This contains all the basic profile information of the user including their password, name, location, etc. Most importantly, this will contain a User_ID that is unique to a user.
Blog table
This contains a list of blogs along with their URL, blog title, RSS feed URL, category, and most importantly, the blog_ID
It’s unfair to expect a smartphone user to be able to key in a RSS feed URL for a blog. For this purpose, you may make use of a third party service like FetchRSS. This way, you can automatically generate the RSS feed for any URL that a user inputs.
Category is another data that users do not input. It is a good idea to populate this field manually into the table.You do not need this information anywhere else other than during the onboarding process.
Feed table
This table will contain fields like ‘latest news title’ and blog post URL and associated blog_ID. You can run a CRON that periodically checks the latest updates for each of the blogs in the blog table and then update the feed table.
Since this table can grow big real fast, you can perhaps cap the number of rows at a million or so and discard the older stories as new ones get added. You may need to raise the cap to something more as soon as you start getting traction. One million fills up real fast.
User-feed table
This table will contain the list of blogs followed by any user. Essentially, you map a user_ID with blog_ID. Any time a user adds or removes a blog from their feed, you add or remove the corresponding row from this table.
User-following table
This table maps every user with those they are following. This table can be used to generate both the list of users an account follows and is being followed by.
Building the Network timeline
With the database structure in place here, building the network timeline can be a lot of steps.
- First fetch the list of users an account follows from the User-following table
- Now look up the User-feed table and build a non-duplicated list of blogs
- Next, fetch the list of feeds from the Feed table in reverse-chronological order
When you only have a few hundred or thousand users, you could run a CRON once or twice a day to map every user with all the blogs in their network. The structure is going to be very much like the User-feed table except this is much larger. This way, when a user taps on network, you pull data from the Feed-table that pertains to this larger list.
Building the Explore list
The Explore list (which shows users you may be interested in) is tricky since this requires a lot of data mining that will help your script understand which user account is closer to yours in terms of topical interest.
For the MVP though, you can follow these steps:
- Find the category that any particular user is most interested in. For example, if you follow a hundred websites and forty of them are related to Business, then this is the topic you are most interested in
- You may also identify the second most popular topic for every user account
- For every user account, run a script to find a list of users who have the same popular and second-popular category
- If no such combination exists, you can simply build a list of users with the same popular category
- Do not include users who the user account in question is already following
You can run this CRON once every few days and store it in a separate table (similar in structure to the User-following table)
This is pretty rudimentary way to find connections. You can make this smarter over time when you have more data to work with.
Foot note:
Any programmer reading this article may find a lot of my recommendations ‘sub-optimal’ or downright stupid; and rightly so. I am not a programmer and I work with a lot of cheap (or affordable) freelance developers who are not most proficient in advanced programming concepts themselves. The way I structure my algorithm allows my ideas to be built by even the most amateur freelance coder. This helps me keep costs low and test ideas without having to wipe my bank account clean.