Eddie Hinkle

development-log

Indigenous v1.0 is in the App Store! (Indigenous Development Log #3)

So I achieved my goal of release version 1.0 of Indigenous in the iOS App Store before the end of June!

The catch? It didn't have all the features I wanted to get in and it still has some random weird bugs I need to work through. But I set a pre-order date in the App Store and just kept working and creating new versions and uploading them. The current version that the App Store release yesterday (June 30th) was v1.0.1, but v1.0.2 is currently in review and should be released in the next couple of days.

So what has changed between 0.3 and 1.0.2? A lot.

I would say the four primary changes are: Theme Support (Yes, Indigenous has embraced the Dark Side), Full Post view, Timeline Response Bar, and an Onboarding Screens for New Users.

Theme Support

Light Theme Dark Theme

Themes are almost always appreciated in iOS apps, but ESPECIALLY in reading apps. I’ve started off by building support in Indigenous for a Light theme and a Dark Theme (called Cardinal and Zombie, respectively).

The base color of the light theme is white and the base color of the dark theme is black. The text color should invert and the tint color throughout the app should change from the light red to teal color. There are some bugs and It’s just first steps as far as these themes go. I want to add support for changing the theme based on screen brightness and find other ways to optimize. Eventually maybe we can even add some new themes… maybe some Easter egg themes even!

Timeline Response Bar

Timeline Response Bar

One thing I’ve always loved about using Tweetbot has been the ability to just tap on a tweet and instantly respond to it. I wanted to make sure Indigenous had that ease of use. So I’ve added a Timeline Response Bar. When you tap on a post in the Timeline view, it shows a response bar. Currently the response bar presents 5 options: Like, Repost, Reply, Share, and More.

Like and Repost instantly send a Micropub request with those actions taken on the URL of the post in the Timeline.

Reply opens a reply window, so you can type out a reply to the post.

Share opens the URL of the Timeline post in the native iOS share sheet so you can do anything you feel like you want to do with the post. (Until I officially build in IndiePaper support, I use the Share action to send posts I want to read later to my Saved channel using the IndiePaper Workflow.

More lets you do other, less common actions. Right now this makes available the ability to: “Mark post as read/unread”, “Mark posts below as read” and “delete post”. Marking post as read/unread is a toggle that changes the read status of the post. Mark posts below as read, marks all the posts that come before that on as read, which is helpful when trying to quickly mark a bunch of stuff read. Finally, delete post is great for when you get a post in your timeline that you just never want to see again.

Full Post View

Full Post View

This was something I have been wanting to get into Indigenous for awhile. When you swipe left on a Timeline post, instead of opening the post’s original URL in an in-app browser, it actually loads the post into a Full Post View, allowing you to read an entire article with HTML displays and everything.

I’ve been really enjoying this, especially with IndiePaper . My goal is for Indigenous to one day completely replace my use of Instapaper and with the public release of Indigenous I am getting pretty close.

When you scroll in Full Post View, the top and bottom bars disappear, allowing you to just focus on reading the article.

Speaking of the bottom bar, the bottom bar allows you to do everything that the Timeline Response Bar does, with the addition of one thing: opening the post in Safari. Sometimes you might get to the Full Post View and realize you just really need to visit the page that this post is from, and that’s what the Safari icon does!

On-boarding Screens

Onboarding Screen about Indigenous Onboarding Screen about Micropub Onboarding Screen about Microsub Indigenous Login Screen

With Micropub and Microsub being a relatively new protocol and not many people outside the IndieWeb community having support for these technologies, I knew I needed to find a bit more of a user friendly way to introduce these concepts. My solution was a couple on-boarding screens with links to help pages on the Indigenous for iOS website.

The on-boarding screens essentially introduce the concept of Indigenous, the use of Micropub, the use of Microsub and then has the user login via IndieAuth.

The Writing page links to the Micropub Help Page which highlights the most popular services and software that support Micropub as well as some links for more technically inclined folks.

The Reading page links to the Microsub Help Page which explains what Microsub is and highlights what services and software support Microsub (spoiler: currently, Only Aperture, although I’ll continue to expand this page as new Microsub services and software come available).

The Login page links to the IndieAuth Help Page which explains what IndieAuth is and highlights the most popular services and software that support IndieAuth as well as some links for more technically inclined folks.

The goal with all of these help pages is to make it as easy as possible to use popular software and services that people know of in order to get up and running as easily as possible. So I link to help pages or tutorials when available and plugins when needed.

So what’s next?

I’m quickly working on the next version of Indigenous. Here are some highlights of the top priority things that I’m working on:

  • Ability to manage Channels and Feeds

  • iPad layout improvements

  • Changing font/margin settings in Full Post view

  • Working on known bugs

The Nitty Gritty

If you want all the nitty gritty on the features and bug fixes in this release, it’s all listed below for you.

Features

  • Added Theme Support (Currently 1 light and 1 dark theme)

  • Added Full Post view that supports showing an entire article in an immersive reading mode along with a response bar at the bottom.

  • Added a response bar to the Timeline when a post is tapped.

  • New On-boarding Screens when the app is launched without any users being logged in.

  • Channel List filters now persist between launches

  • Improvements to when posts are marked as read

  • Added the ability to delete a post from the Timeline

  • Added a summary fallback attribute to "like" and "bookmark" Micropub posts that are published to servers that don't support like or bookmark posts.

  • Added simple summary text to the Timeline to improve when a post is a "like" or a "bookmark" post.

  • Added a Microsub help screen in place of the Channels list if the user has logged in with Micropub only.

Bugs

  • Fixed some iPad related crashes

  • Fixed some sizing issues with smaller iPhones

  • Wordpress Emoji images are no longer treated as "Post Photos"

Indigenous Development Log #2

I’m working on kicking out Indigenous version 0.3, which has been sitting on the shelf for a bit. I think the last build I sent out was March 15, which means it’s been almost 2 months. Thankfully I just finished up my Spring online classes and don’t have any more classes until this fall.

There are a couple significant Reader features this version includes. First the Channels List is now locally cached which means interacting with the Channels List should be smoother and more enjoyable. That also allows me to do some nice things like do some different filtering and sorting. I’m currently finishing up a filter/sort options window that allows you to either display all channels or only the unread channels. You can also sort your channels manually (which is the default), alphabetically or by the unread count.

Having all the channels in the local app’s database also enabled another feature which I’m excited about. Now I can start adding local settings that Microsub itself might not support for a channel, because I have somewhere to store the settings. The first one of these settings is the ability to turn on “auto-read” support on a per channel basis. When turned on, this will mark a post as read when it goes from being visible on the screen to being scrolled off the screen. It was important for me when implementing this that it could be enabled-disabled a per channel basis because I have certain Microsub channels that I only want marked as read if I actually read it.

Another big obstacle was the timeline has a nice thumbnail display of the first image on a post, however that only worked for posts that are part of an h-feed. JSON and RSS feeds wouldn’t have post images to display. In this version I’ve fixed this by grabbing all the html image tags in the post content and adding those as post images. This is important if you follow a lot of feeds that don’t have h-feed support. For me, this was important because my micro.blog feed that I follow is a JSON feed with images embedded in the post content, so previously I couldn’t see images from micro.blog posts. Now I can and it’s been a breath of fresh air testing out this new version! In addition, it used to be if you had a post with a title, it would display the title as the body text and you wouldn’t see any body text. Now, if there is a title it is a bold text at the top of the post and you get the first couple hundred characters of the body text underneath the title as a preview. This has really helped me in deciding if I want to read an article or not before swiping.

Previously, a post that was considered as read was faded out. While I liked the idea initially, in practice it just didn’t work as nicely as I had hoped. So now instead of fading read posts, I highlight new posts. They are highlighted with a red line on the left side. I do feel like it might need some tweaking before I’m fully satisfied with it, but there is something about it that I really enjoy.

Finally, I do like to post GitHub issues on my site first and then syndicate them to GitHub. I added better support for this in the new version. Normally when writing a post or reply you only get the title field if you have more than 280 characters. Now, if you are replying to a GitHub repo, the title will always be there and some of the language on the reply interface changes to languages around creating an Issue rather than a Reply.

I received some great feedback from beta testers on some bugs that were really getting in there way such as Indigenous considering a 202 response code as an error, as well as that I was using the iOS Twitter keyboard layout (which replaces the return key with the at sign and hashtag buttons). The keyboard is now the standard iOS keyboard, so use the “return” key to your hearts content. I had originally used the Twitter keyboard layout because micro.blog did that with their app. But ultimately I think the right move for Indigenous is to use the standard layout.

Here is a full list of the features and bugs that I’ve completed and/or are currently finishing up. All of these should be in the v 0.3 release I’m hoping to send out to beta testers later this week.

Features

  • Added Channel Settings for Auto-Read
  • Parse post content for img tags if the post doesn’t already have images from mf2 parsing
  • Changed “unread posts” to be displayed as a red border on the left rather than “read” posts being displayed as grayed out
  • Added local caching of Channels List data for a smoother experience
  • Added Search bar for Channels
  • Filtering Channels List by unread or all
  • Sorting Channels List by name, unread count or manually (default)
  • Improve Reply interface when replying to a GitHub repo (aka making a new issue)
  • Improved the display of posts with titles to have a bold title and normal text for the first couple hundred letters
  • Improved display of Dates/Times

Bugs

  • The Share Sheet was crashing on GitHub repos
  • Lots of code cleanup in regards to Swift version changes and different code directions.
  • Now accepting 202 as a valid response code to Micropub requests
  • Change keyboard back to standard layout rather than the Twitter one
  • Send post title correctly
  • Send custom user agent
  • Use state OAuth correctly

Indigenous Development Log #1

I was inspired by reading Chris Hannah’s Slate Development Log that I should track the progress on my own iOS app, Indigenous.

I apologize for the length of this first post, but as this is the first log I want to cover what Indigenous is and what it can currently do. In future development logs I will focus more on specific thoughts as I’m working through the actual development of the app.

What is Indigenous?

Since this is the first development log (even though I’ve been working on Indigenous periodically throughout the last year), I thought I would explain the general goal of the app.

Over the last year I’ve begun to get more involved in the IndieWeb, but the more I started using my website as the hub for everything I post, I realized if I was going to continue posting to it was going to have to get more and more convenient. As easy as posting to Facebook or Twitter. Half of this was already taken care of by the existence of Micropub, a technical specification that allows any client app and any server app to communicate with each other to publish posts as long as they both speak the same language: “Micropub”. The issue is that a year ago most Micropub apps were different web apps, and being an iPhone user since the original iPhone came out, I enjoy the use of native apps for a large majority of my tasks. So I decided to build a native iOS app that could publish content to any server that supported Micropub.

As the year progressed in 2017, Aaron Parecki (the editor of the Micropub specification) began work on a prototype of a new communication agreement between clients and servers, but this time it went the opposite direction. This new specification was called Microsub and it focused on allowing clients to retrieve posts from a server to generate a timeline (Like Facebook or Twitter) where you can keep up with all the posts that your friends and favorite websites publish. I knew this was the missing piece to me really moving away from traditional social media. So I jumped in head first and decided that Indigenous would support BOTH Micropub (for posting) and Microsub (for reading).

So what can it do?

I use Indigenous every day. I scroll through my timeline within the app to keep up to speed on the people and things that interest me across the internet, as well as to post new information to my blog (microblog posts, articles, photos, etc). I use it just like one would use Facebook. The benefit is that there are other Microsub and Micropub apps that I can log into to post or read content and there is no additional configuration. My Microsub server will work with any Microsub-compatible client.

That said, Indigenous still has a long way to go. I’ll detail the main features that are working in the beta right now.

Reading Timeline

When you open Indigenous, if you are logged in to a Microsub server, you get a list of Channels. You can think of these as lists or folders. You can follow many different people and websites within a single channel. It allows for topical grouping of content, and it allows me to know what content I want to prioritize when I am short on time.

When you select a channel, you see a timeline of the top 20 most recent posts in that channel. I’ve styled it similarly to tweets in Tweetbot (my favorite Twitter client). You can pull to refresh and get any newer posts that have appeared and when you reach the bottom of the list you can tap a button to load the next 20 older posts. You can see attached images and listen to audio files on posts. You can swipe right to reply or left to open the post in a web browser.

Indigenous supports multiple accounts so if you have multiple Micropub or Microsub accounts you can switch between them and the app’s settings are set on a per account basis, so the app can behave differently for your different accounts.

Channels can track your reading progress. In the currently published beta, the read type of a channel can be set up on the Microsub server to either display no read status, display an unread indicator or to display an unread count. Indigenous respects those settings and displays a red dot as an unread indicator and a red number for an unread count. When you interact with a post (by swiping to either reply or view the full post) it is marked as read. Also, you can mark the entire channel as read by clicking the “read” button at the top of each channel.

Writing posts

You can write posts inside of the Indigenous app. When you click the post button in the top right corner, it opens up the compose window. There is a textbox that allows you to write your post. When you write more than 280 characters a title field will appear so that you can optionally add a title to your post.

You can attach images by selecting the camera icon in the bottom left, and it will upload the images to a Micropub server’s Media Endpoint. You can attach as many photos as you want (hypothetically, I haven’t done robust testing on that).

You can add Micropub categories (think tags) by clicking on the tag icon. Right now, it displays a couple of testing categories by default, but you can add new categories by typing it in the top box and clicking the plus button. Whatever categories have a checkmark will be sent with the post to your server.

Finally, Micropub has an idea of syndication. That you can write a post for your website but also syndicate it out to other locations (Micro.blog, Twitter, Facebook, etc). When you select the Syndication icon, it will show you all the syndication targets your Micropub server knows about and allows you to select which ones you want to syndicate to.

Interacting with the Internet

One of the primary reasons I started building Indigenous was to build a Micropub focused Share Sheet. In iOS a share sheet allows you to interact with different pages on the internet, typically this is just sharing a URL to Twitter, Facebook or Instapaper to read later. With Indigenous, it displays a list of default actions you can take on a given url such as “Like”, “Reply” and “Bookmark”. Like and Bookmark send those post types to your Micropub server. Reply will open the same compose window that the app has but it will have an additional field a “Reply” field that has the URL you were on. This allows you to read and reply to posts across the internet.

Even better, if the website has Microformats support, Indigenous will actually customize the list of actions based on the information presented through microformats. For example, if the page you are on is an h-card representing a person or a company, it provides the ability to Bookmark the page. If the page you are on is an h-entry it will have the usual options as well as the option to “Repost” it (similar to Twitter’s Retweet functionality). If the page is an h-event, it will add the a button to RSVP (although that button will inform you that feature is still in development).

This means if I want to bookmark, like or reply to something on my website I don’t have to leave the website that I am on to do it!

What's next?

There is a lot more I'm working on and a lot more to come! But alas, that's enough for today. We'll hold that for the next log!

Please note: This site is in an active redesign. Some things might be a little off 🧐